Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 걸음마 중

CSS - 아이템 배치(float,flex,grid) 본문

dev/HTML + CSS

CSS - 아이템 배치(float,flex,grid)

꼿모 2023. 3. 7. 18:38

 


 

CSS 아이템 배치 

 

 

 

 float 

- 물 위나 공중에 둥둥 뜨다

- 텍스트 및 인라인 요소가 그 주위를 감싸 해당 요소에 좌/우측에 배치되게 한다. 

- 해당 요소가 보통 흐름으로부터 빠진다

- display 속성과 함께 사용하면 display 속성이 무시된다.

- width, height 설정이 가능하다. 

  • left : 왼쪽
  • right : 오른쪽
  • none : 기본값 

※ 주의

- 자식 요소들이 모두 float 속성을 가지게 되면 컨테이너 요소 높이에 자식 요소들의 높이가 포함되지 않는다. 

- float으로 콘텐츠를 띄울 경우 다음 내용이 빈자리를 채우려 올라오게 된다. 

 

 * float 해제하기 

 

해결 방법 (clear-fix)

 

1. 부모 요소에 높이(height) 값을 지정한다.

- 자식들이 변화무쌍한 경우라면 적용이 어렵고 유지보수에 좋은 방법은 아니다. 

 

2. overflow:hidden 

- 일부러 박스를 벗어나게 포지션 한 요소가 숨겨지는 오류가 발생할 수도 있다. 

 

3. 부모 요소도 float을 적용한다. 

 

4. 가상요소(::after)를 사용한다. <= 권장!

- 가상 요소를 만들어 뒤(after)에 출력하면 float 값이 적용된 요소 뒤의 내용이 딸려 올라가지 않는다.

 clear 

  • left : 왼쪽
  • right : 오른쪽
  • both : 양 쪽
.clear-fix::after{
  content:'';
  display:block;
  clear:both;
}

 

 

 


 

 

 flex 

💭 flex로 구성하면 뭐가 좋을까 ? 

- 유연하다. 

- 세로 정렬이 가능하다. 

- 유동형 레이아웃 구현이 가능하다. 

- 디스플레이 크기에 따라 정렬하기 쉽다. 

- 반응형 작업에 용이하다. 

※ flex를 사용하려면 꼭 부모 개념이 있어야 한다. (div, section, article)

 

 

 flex-container : 부모 요소 

 flex-item : 자식 요소 

 

 

 flex-container에 사용하는 속성 

- display에 flex 값을 적용 ( display:flex )

- 자식 요소들이 컨테이너 안 공간을 맞추기 위해서 크기를 키우거나 줄이는 방법을 설정한다. 

- 1차원적 레이아웃 (x축 혹은 y축)을 위해 주로 사용합니다. 

※ 2차원적 레이아웃은 grid를 활용한다.

 

 

 

 * flex-direction 


- 컨테이너 내 아이템을 배치할 때 주축 및 방향을 지정한다. 

  • row : 기본값 / 왼쪽에서 오른쪽 (행 방향이 주축)
  • column : 위에서 아래 방향 (열 방향이 주축)
  • row-reverse : 오른쪽에서 왼쪽
  • column-reverse : 아래에서 위쪽

 

 

 

 * justify-content 

- 주축을 기준으로 배열의 위치를 조절하거나 아이템 간의 설정을 할 수 있다. 

  • flex-start : 기본값 / 아이템들을 시작점으로 정렬한다. row일 때는 왼쪽, column일 때는 위쪽이다. 
  • flex-end : 아이템들을 끝점으로 정렬한다. row일 때는 오른쪽, column일 때는 아래쪽이다. 
  • center : 가운데로 정렬한다. 
  • space-between : 아이템들 사이에 균일한 간격을 만든다.
  • space-around : 아이템들 둘레에 균일한 간격을 만든다. 
  • space-evenly : 아이템들의 사이와 양 끝에 균일한 간격을 만든다. 

justify-content: end
justify-content: around
justify-content: between
justify-content: evenly

 

 

 

 * align-items, align-content 

  • align-items : 교차 축을 기준으로 정렬한다.
  • align-content : 컨테이너 교차 축의 아이템들이 여러 줄일 때 사용한다. (flex-wrap:wrap 상태에서 사용해야 한다.)

 

 

 

 * flex-wrap 

한 줄에 배치할 것인지, 가능한 영역 내에서 여러 줄로 표현할 것인지 결정한다. 
- wrap 값을 적용하면 width가 무시된다. 

.container {
	flex-wrap:nowarp;
 }

 

 

 * flex-flow 

- 단축 속성이다. 

-  flex-direction  |  flex-wrap 

.container {
	flex-flow: row wrap;
 }

 

 

 * gap 

- 셀과 셀 사이의 간격을 설정할 때 사용할 수 있는 속성이다. 

- 복잡한 레이아웃 안에서 마진 대신 편리하게 간격을 설정할 수 있다. 

- 인터넷 익스플로러에서 지원되지 않는다

.container {
	gap : 32px 24px;
  }
  
 /* 상하 gap / 좌우 gap 순으로 작성 */

 

 

 

 flex-item에 사용하는 속성 

 * flex-basis 

- flex-item의 초기 크기를 설정한다. 
- width, height와 다른 점은 축의 방향에 따라 달라진다는 것과 내부 콘텐츠에 따라 유연한 크기를 가진다는 것이다. 
- auto : 기본값 
- flex-basis 값 적용 시

  • row일 경우 width 값이 무시된다.
  • column일 경우 height 값이 무시된다.
    ※ 기본적으로 px이나 em 등의 단위값을 사용하며, 0 외에 다른 상수값을 사용할 수 없다. 음수 사용 불가.  

 

 

 * flex-grow 

- 아이템이 컨테이너 내부에서 늘어나 할당할 수 있는 공간의 정도를 지정한다. 
- 형제 요소인 아이템들이 모두 같은 flex-grow 값을 가지면, 내부에서 동일한 공간을 할당받는다. 

※ flex-grow: 1 => 자식 요소들이 모두 동일한 크기의 공간을 할당 받는다.

flex-grow: 2이상의 수 => 특정한 하나의 자식에게만 줄 경우 다른 자식요소보다 배수로 여백 공간을 할당받는다. 만약 자식요소들의 컨텐츠 크기가 존재한다면 그 컨텐츠의 넓이에 따라 할당받는 값이 달라진다.  

- 값 0을 적용할 경우 늘어나지 않는다. ※ 보통 flex-shrink, flex-basis 속성을 함께 사용합니다

※ 이때 flex-basis:0을 주게 되면 여백 공간이 아니라 전체 공간을 분할한다. 비율로 조절하려면 flex-basis:0 적용하기.

 

 

 

 * flex-shrink 

- 아이템의 크기를 고정하거나 축소할 때 사용한다. 
값 0을 적용할 경우 줄어들지 않는다.

 

 

 

 * align-self 

- 부모의 align-items 속성을 덮고 flex-item에게 개별적인 align-items 속성을 부여한다. 
- 기본값은 stretch이다. 

 

 

 

 * order 

- flex-item들의 순서를 수의 크기로 결정한다. 수가 적을수록 더 우선한다. 
- 음수도 사용 가능하다. 
※ 논리적인 마크업 순서를 위해 사용할 수 있다.

 

 

 

 * flex 

- 단축 속성이다. 
-  flex-grow | flex-shrink | flex-basis 

.item {
	flex: 1 1 100px; 
 }

 

 

 


 

 grid 

※ Internet Explorer를 지원하지 않는 속성이 있다. 접근성 주의! 

 

 

 

 grid-container : 부모 요소

 grid-item : 자식 요소 

 

 

 * grid-container에 사용하는 속성 

- display에 grid 값을 적용 ( display:grid )

- 자식 요소들이 컨테이너 안 공간을 맞추기 위해서 크기를 키우거나 줄이는 방법을 설정한다. 

- 그리드 레이아웃은 웹 페이지를 위한 2차원 레이아웃(x축과 y축) 시스템이다. 

  • 그리드 컨테이너 : 그리드의 가장 바깥 영역
  • 그리드 아이템 : 그리드 컨테이너의 자식 요소들
  • 그리드 셀 : 그리드의 한 칸 (개념적인 정의)
  • 그리드 트랙 : 그리드의 행(row) 또는 열(column)
  • 그리드 라인 : 그리드 셀을 구분하는 선
  • 그리드 넘버 : 그리드 라인의 각 넘버
  • 그리드 갭 : 그리드 셀 사이의 간격(gutter)
  • 그리드 에어리어 : 그리드 셀의 집합

 

 

 * grid-template-columns 

열 방향 그리드 트랙의 사이즈를 설정한다.

 

 * grid-template-rows 

행방향 그리드 트랙의 사이즈를 설정한다.

 

※ s(복수형) 꼭 붙여야 한다! 

.container{
	display:grid;
	width:300px;
	height:300px;
	grid-template-columns: 100px 100px 100px;
	grid-template-rows: 200px 100px;
}

 

 

 * 새로운 단위 fr 

- fraction : 분수 
grid 부모 요소 안에서 트랙의 비율을 지정해 주는 유연한 길이 단위이다. 
- 1fr 1fr 1fr은 1:1:1의 비율을 의미한다.

 

 

 * grid-template-areas

- 지정된 그리드 영역 이름을 참조해 배치한다.

- 마침표none을 적용하면 빈 영역으로 표시할 수 있다. 

  grid-template-areas:{
    "header header header"
    "main main aside"
    "footer footer footer";
}


header { grid-area: header; }
main   { grid-area: main;   }
aside  { grid-area: aside;  }
footer { grid-area: footer; }

 

 

 

 * grid 함수 

 repeat() 

- row 혹은 column 방향으로 grid-track의 사이즈를 좀 더 간단한 형태로 표현하도록 도와준다.  
- 함수에 전달하는 첫 번째 인자는 반복 횟수, 두 번째 인자는 반복할 값입니다. 

    .container {
    	grid-template-columns: repeat(3, 1fr 2fr);
    }




 minmax() 

- 그리드에서 최소와 최대 사이의 범위를 설정하는 함수이다. 

- 최소와 최댓값을 의미하는 두 가지 인자를 가진다. 
- min보다 크거나 같고, max보다 작거나 같은 크기 범위를 정한다.

 

 


 auto-fill / auto-fit 

- 만약 repeat 함수를 사용할 경우 반복되는 카운트를 고정하지 않고 켄터이너의 넓이에 따라 가능한 많은 그리드 칼럼을 배치하고 싶을 때 사용한다. 

  • auto-fill : 가능한 많은 셀들을 만들어 낸다. 빈 공간이 생긴다. 
  • auto-fit : 그리드 컨테이너 내부에 공간이 남을 경우 그 공간을 각 셀들이 나눠 갖는다. 빈 공간이 없다.
.autofill{
  grid-template-columns: repeat(auto-fill, minmax(100px, auto));
}

.autofit{
   grid-template-columns: repeat(auto-fit, minmax(100px, auto));
}

auto-fill
auto-fit



 * gap 

- 셀과 셀 사이의 간격을 설정할 때 사용할 수 있는 속성이다. 

- 복잡한 레이아웃 안에서 마진 대신 편리하게 간격을 설정할 수 있다. 
- grid-gap은 gap으로 사용할 수 있다. 
- 인터넷 익스플로러에서 지원되지 않는다

 

 

 

 

 * align-content 

- 그리드 콘텐츠의 수직(열) 정렬을 설정한다.
※ 그리드 콘텐츠의 세로 높이가 그리드 컨테이너보다 작아야한다.

  • stretch :그리드 콘텐츠를 늘려서 열 축을 채운다.
  • start : 시작점(위쪽)으로 정렬한다.
  • end : 끝점(아래쪽)으로 정렬한다.
  • center : 수직 가운데로 정렬한다. 
  • space-between : 첫 행은 시작점에, 끝 행은 끝점에 정렬되고 나머지 여백으로 고르게 정렬된다.
  • space-around : 각 행 위아래에 여백을 고르게 정렬한다.
  • space-evenly : 모든 여백을 고르게 정렬한다.
  •  

 * justify-content 

- 그리드 콘텐츠의 수평(행) 정렬을 설정한다. 

- 그리드 콘텐츠의 가로 너비가 그리드 컨테이너보다 작아야한다.

  • stretch :그리드 콘텐츠를 늘려서 행 축을 채운다.
  • start : 시작점(왼쪽)으로 정렬한다.
  • end : 끝점(오른쪽)으로 정렬한다.
  • center : 수평 가운데로 정렬한다. 
  • space-between : 첫 열은 시작점에, 끝 열은 끝점에 정렬되고 나머지 여백으로 고르게 정렬된다.
  • space-around : 각 열 좌우에 여백을 고르게 정렬한다.
  • space-evenly : 모든 여백을 고르게 정렬한다.

 

 

 * place-content

- 단축 속성이다.

align-content | justify-content 

 

 

 

 * align-items 

- 직계 자식에 대한 수직(열) 정렬을 모두 동일하게 해준다. 

- 그리드 아이템의 세로 너비가 자신이 속한 행 크기보다 작아야 한다. 

  • stretch :그리드 아이템을 늘려서 열 축을 채운다.
  • start : 시작점(위쪽)으로 정렬한다.
  • end : 끝점(아래쪽)으로 정렬한다.
  • center : 수직 가운데로 정렬한다. 

 

 * justify-items 

- 직계 자식에 대한 수평(행) 정렬을 모두 동일하게 해준다. 

- 그리드 아이템의 가로 너비가 자신이 속한 열 크기보다 작아야한다.

  • stretch :그리드 아이템을 늘려서 행 축을 채운다.
  • start : 시작점(왼쪽)으로 정렬한다.
  • end : 끝점(오른쪽)으로 정렬한다.
  • center : 수평 가운데로 정렬한다. 

 

 

 

 

 grid-item에 사용하는 속성 

 * grid-area 

- 그리드 넘버로 시작점과 도착점을 지정한다. 

- 지정된 영역 이름도 사용 가능 하다. 

- 혹은 grid-template-areas가 참조할 영역 이름을 설정할 수도 있습니다.
※ 영역 이름을 설정할 경우 grid-row와 grid-column 값은 무시된다.

  • stretch :
  • grid-column-start : 열 시작점
  • grid-column-end : 열 도착점
  • grid-row-start : 행 시작점
  • grid-row-end : 행 도착점
  • grid-row : 1/2로 표기가능
  • grid-area :  row-start   column-start   row-start   row-end 

✏ end값이 start와 같거나 작은 경우에는 한 칸만 차지한다. start 값은 end 값보다 커야 정상 작동된다.

 

 

 * span 

- 행과 열을 병합할 때 span 키워드를 사용한다. (셀 병합) 
- span의 사전적 의미는 '한 뼘', '~을 채우다'이다. 

 

✏ z-index 속성을 grid 안에서도 사용할 수 있다. grid 안에서는 굳이 position 속성을 사용하지 않더라도 화면에 보이는 우선순위를 설정할 수 있다. 

 

 

 

 * grid 단축 속성 

- grid-template-rows | grid-template-columns | grid-template-areas | grid-auto-rows | grid-auto-columns | grid-auto-flow 

grid: auto-flow / 1fr 1fr 1fr;

grid: auto-flow dense / 40px 40px 1fr;

 

 

 * align-self 

- 아이템 개별로 수직(열) 정렬을 설정한다.

  • stretch :그리드 아이템을 늘려서 열 축을 채운다.
  • start : 시작점(위쪽)으로 정렬한다.
  • end : 끝점(아래쪽)으로 정렬한다.
  • center : 수직 가운데로 정렬한다. 

 

 * justify-self 

- 아이템 개별로 수평(행) 정렬을 설정한다.

  • stretch :그리드 아이템을 늘려서 행 축을 채운다.
  • start : 시작점(왼쪽)으로 정렬한다.
  • end : 끝점(오른쪽)으로 정렬한다.
  • center : 수평 가운데로 정렬한다. 

 

 

 

 * place-self 

- 단축 속성이다.

 align-self | justify-self 

 

 

 

✏ FLEXNGRID (https://flexngrid.com/)

스쿨 1 기분이 만드신 flex / gird 개념 이해에 도움이 되는 사이트! 진짜 최고다..

grid 정리를 너무 잘해주신 블로그! 공부하기.. (https://heropy.blog/2019/08/17/css-grid/)

✏ grid 개념 익히기 게임 (https://cssgridgarden.com/#ko)

 

💭 1차원적으로 한 줄 배치할 때는 flex, 2줄 이상 배치할 땐 grid...를,,, 

💭 flex는 번역기 사용이나 반응형 작업에 유연하게 늘어나고 줄어들기 때문에 자주 사용된다. float은 간단하게 적용할 수 있지만 페이지 변형 시에 레이아웃이 풀리는 문제가 발생할 수 있다. grid는 아직 IE 지원 이슈 때문에 실무에서 많이 사용되진 않고 있다고 한다. 다만!!! 반응형 페이지를 작업할 때는 grid가 flex보다 쉬운 거 같다... 

 


 

 

 

 

 

 

 

 

 

 

잘못된 정보에 대한 피드백은 언제든지 환영입니다! 

'dev > HTML + CSS' 카테고리의 다른 글

CSS - 버튼(button)  (0) 2023.03.13
CSS - 변수와 함수  (0) 2023.03.09
HTML - 레이아웃(Layout), 섹션(Sections)  (0) 2023.03.07
HTML / CSS - 크로스 브라우징 (Cross Browsing)  (0) 2023.03.06
CSS - Reset CSS  (0) 2023.03.06
Comments