CSS 21.03.15


  • wire frame : 단순하게, 레이아웃과 제품의 구조를 보여주는 용도. 큰 틀에서 영역을 나누고 각 영역을 태그와 셀렉터로 표현

  • Hard coidng : 원하는 HTML 출력을 하나하나 입력. 각 영역에서의 주요 태그들을 간단하게 메모하는 형식으로 설계. 여러 태그를 하나의 div 또는 semantic tag로 감싸줘야한다.

Atomic CSS 방법론 : 클래스 이름과 구현을 1:1로 일치시키는 CSS 작성 기법
  • ex code
<div id="container">
  <div class="col w10">
    <div class="icon">아이콘 1</div>
    <div class="icon">아이콘 2</div>
    <div class="icon">아이콘 3</div>
  </div>
  <div class="col w20">
    <div class="row h40">영역1</div>
    <div class="row h40">영역2</div>
    <div class="row h20">영역3</div>
  </div>
  <div class="col w70">
    <div class="row h80">영역4</div>
    <div class="row h20">영역5</div>
  </div>
</div>
.w70 { width: 70%; }
.h40 { height: 40%; }
CSS 작성 전 추가해야할 기본 사항
* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}
<body> tag는 약간의 여백을 가지고 있기 때문에

Flex

flex는 부모 박스에 display: flex를 적용해줌으로, 자식 박스의 방향과 크기를 결정하는 레이아웃. 기본적으로, flex가 적용된 부모 박스의 자식 박스는 왼쪽으로 차례대로 붙게 됩니다.

  • syntax
<section id='parents'>
    <article class='child'>article 1</article>
    <article class='child'>article 2</article>
    <article class='child'>article 3</article>
</section>
/* article 1,2,3의 레이아웃을 정하기 위해서는 부모 tag인 section에 display:flex 적용 필요 */
#parents {
    display: flex;
}

/* flex 태그를 각 자식들에게 적용하여 비율을 결정할 수 있다. */
.child {
    flex: 1 1 auto;
}
flex attribute
  • flex-direction : 레이아웃 방향을 결정
#parents {
    display: flex;
    /* flex-direction: row */
    /* row(가로 방향)는 기본 값이라 생략 가능 */
}

#parents {
    display: flex;
    flex-direction: column;
    /* column(세로 방향)으로 레이아웃 설정 */
}
justify-content vs align-items
  • justify-content : flex-direction의 방향을 기준으로 같은 방향 기준
/* flex-direction이 row(가로 레이아웃)인 경우  */
#parents {
    display: flex;

    /* 왼쪽 정렬(기본 값) */
    justify-content: flex-start; 

    /* 오른쪽 정렬 */
    justify-content: flex-end; 

    /* 가운데 정렬 */
    justify-content: center;

    /* 양쪽 간격을 균일하게 정렬 : 양끝에는 여백 안줌*/
    justify-content: space-between;

    /* 양쪽 간격을 균일하게 정렬 : 양끝에도 여백 줌*/
    justify-content: space-around;
}
  • align-items : flex-direction의 방향 기준을 가로지르는 방향 기준
/* flex-direction이 row(가로 레이아웃)인 경우  */
#parents {
    display: flex;

    /* 위쪽 정렬(기본 값) */
    align-items: flex-start; 

    /* 아래쪽 정렬 */
    align-items: flex-end; 

    /* 가운데 정렬 */
    align-items: center;

    /* 양쪽(위아래) 간격을 균일하게 정렬 : 양끝에는 여백 안줌*/
    align-items: stretch;
}

반드시 알아야할 flex의 개념 : grow(팽창 지수), shrink(수축 지수), basis(기본 크기)

자식 박스의 flex 속성 기본값은 다음과 같습니다. (flex 속성은 부모에 적용하는 것이 아닌, 자식 박스에 적용합니다.)

/* article 1,2,3의 레이아웃을 정하기 위해서는 부모 tag인 section에 display:flex 적용 필요 */
#parents {
    display: flex;
}

/* flex 태그를 각 자식들에게 적용하여 비율을 결정할 수 있다. */
.child {
    flex: 0 1 auto; 
    /* flex: <grow> <shrink> <basis> */
    /* flex: 0 1 auto; (기본값) */
}
  • grow: 박스 늘리기 (주로 사용)

  • shrink: 박스 줄이기 (보통 기본값인 1. shrink는 width나 이후 설명할 basis에 따른 비율이므로 실제 크기를 예측하기 어렵기 때문에 실무에서는 grow를 자주쓰고 shrink는 거의 사용하지 않는다.)

  • grow, shrink는 단위가 없으며, 비례하는 값입니다. 박스를 여러개로 나누었을 때, 각 자식 박스가 갖는 grow값의 총 합이 n이라고 칩시다. 이 때의 1은 1/n의 크기를 의미합니다, 2는 2/n의 크기를 의미합니다.

  • basis: 박스의 기본 크기(박스가 grow나 shrink에 의해 늘어나거나 줄어들기 전 갖게 되는 기본 크기를 의미) : grow가 0일 때, basis 크기를 지정하면 그 크기는 보장. 비율을 균등하게 배치 할 때(1:1:1 등) basis가 auto면 실제 width가 차이난다. basis를 0%로 해야 균등하게 나눠진다. (width와 flex-basis를 동시에 적용하면, flex-basis가 우선)

  • 서로 다른 비율

.child1 {
    flex: 1 1 auto;
}
/* child1의 grow / child1 + child2 + child3 grow의 합  */
/* 즉, child1은 부모 width의 1/6 */
/* (flex direction이 row이기 때문에 width를 기준,flex direction이 column이면 height 기준 ) */

.child2 {
    flex: 2 1 auto;
}
/* child2의 grow / child1 + child2 + child3 grow의 합  */
/* 즉, child1은 부모 width의 1/6 */
/* (flex direction이 row이기 때문에 width를 기준,flex direction이 column이면 height 기준 ) */

.child3 {
    flex: 3 1 auto;
}
/* child2의 grow / child1 + child2 + child3 grow의 합  */
/* 즉, child1은 부모 width의 1/6 */
/* (flex direction이 row이기 때문에 width를 기준,flex direction이 column이면 height 기준 ) */
  • 비율을 균등하게
/*  비율을 균등하게 적용. */
/*  basis를 auto로 하면 실제 width가 차이 나므로 0%로 해야한다. */
.child1 {
    flex: 1 1 0%;
}

.child2 {
    flex: 1 1 0%;
}

.child3 {
    flex: 1 1 0%;
}
  • 고정 사이즈 + 나머지 비율 균등
/*  basis를 원하는 고정 px로 적용. grow는 0이어야한다. */
.child1 {
    flex: 0 1 100px;
}

/* 이 경우 basis를 auto로 작성해야 한다. */
.child2 {
    flex: 1 1 auto;
}

.child3 {
    flex: 1 1 auto;
}
  • 안쪽 박스의 콘텐츠가 넘칠 경우, width가 정확한 크기를 보장하지 않을 것입니다.
  • 안쪽 박스의 콘텐츠가 넘치는 경우를 대비해, width 대신 max-width를 쓸 수 있습니다. (flex-basis를 사용하지 않을 경우)

[코드 에디터 팁]

  • 중첩 나열 >
div>ul>li
<div>
    <ul>
        <li></li>
    </ul>
</div>
  • 병렬 나열 +
div+p+bq
<div></div>
<p></p>
<blockquote></blockquote>
  • 여러개 반복 *
ul>li*5
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
  • 셀렉터 넣기
ul#items>li.item*5
<ul id='items'>
    <li class="item"></li>
    <li class="item"></li>
    <li class="item"></li>
    <li class="item"></li>
    <li class="item"></li>
</ul>





© 2020.11. by creamer

Powered by CREAMer