본문 바로가기
제로베이스 프론트엔드 스쿨 23기/[사전학습]

(기초) CSS 레이아웃 ( div 태그, float 속성, display 속성 - inline, flex, grid)

by 저여저 2023. 12. 18.

ㅡ 시멘틱태그의 기본 구성

Semantic Tag

 

ㅡ 레이아웃을 나누는 방법 4가지가 있다.

  1. display:inline-block
  2. float
  3. display:flex
  4. display:grid
  5.  

 

ㅡ 가장 먼저 div 태그로 나누자

    일단 div 태그로 나누자.
      div의 class , id 명으로 구분
      > 명사 + 명사
      > headerSearch
      >header-search  와 같이 직관적인 네이밍 필요함.

 

 

1. 레이아웃 만들기 ( display_inline) : 옛날 방식 ㅠㅠ

-한줄로 맞춰줄 요소에게 입력 해준다.

display: inline-block;  

-text가 있을 경우, 간격이 생길 경우 부모 태그에게 아래를 아래를 입력해준다.

font-size:0;

-정렬이 어긋날 때는 

vertical-align: top; 를 줘서 정렬을 다시 맞춰준다,

 

 

2. 레이아웃 만들기 float  : 부모기준으로 맞춰 준다.

(위치를 지정할 요소의 부모를 만들어주고 부모에게 float 을 입력함)

float : left ;

float : right ; 로 위치 값을 준 후 

다음에 새로 배치되어야 할 태그에는 

clear : both; 로 리셋 시켜준다.

 

3. 레이아웃 만들기 flex : 부모 크기 안에 자동 배열

display : flex; >> 로 기본 왼쪽 줄 정렬

flex-direction: column; >> 줄의 배치 기준을 바꿔줌 (왼쪽, 수직, 오른쪽, 아래)

flex-wrap : wrap  >> 한줄 초과일때 사용해서 요소를 다음 줄로 넘겨준다.

align-content >> 한줄 초과일때 2줄 이상일때 배치하는 옵션이다. 

align-items >> 한줄의 아이템을 배치하는 옵션다

justify-content: space-between; >> 부모안에 컨텐츠 간격 자동 배치 

 

 

4. 레이아웃 만들기- grid   (가장 많이 사용한다.  먼저 부모값에 grid 코딩 후 자식에게 area 를 배분한다.)

  1fr 부모 기준의 비율값으로 균등하게 공간을 배분함.
columns-가로 , rows-세로 / 수치는 1fr 또는 100px 또는 3fr 로도 입력 가능
  grid-gap : 10px; >> grid간의 간격 주기 
자식에게 >> width:auto; height:auto;값 주고 진행하면 편하다.
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  grid-template-areas:
    "top top"
    "left right"
    "bottom bottom"
 
>>부모에게 작성

ex)  

 HTML
 
 <body>
    <div class="container">
       <div class="top"></div>
       <div class="left"></div>
       <div class="right"></div>
       <div class="bottom"></div>
    </div>
  </body>
CSS
 
.container {
  width: 400px;
  height: 600px;
  border: 1px solid black;
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  grid-template-areas:
    "top top"
    "left right"
    "bottom bottom"; }
 
.top {
  background-color: red;
  width: 400px;
  height: 200px;
  font-size: 16px;
  grid-area: top;
}
.left {
  background-color: blue;
  width: 200px;
  height: 200px;
  display: inline-block;
  font-size: 16px;
  grid-area: left;
  /* float: left; */
  /* vertical-align: top; */
}
.right {
  background-color: aquamarine;
  width: 200px;
  height: 200px;
  grid-area: right;
  /* display: inline-block; */
  font-size: 16px;
  /* float: right; */
}
.bottom {
  /* clear: both; */
  background-color: pink;
  width: 400px;
  height: 200px;
  font-size: 16px;
  grid-area: bottom;
}