css
CSS 레이아웃.
Flexbox, Grid, positioning. 화면 구조를 잡는 CSS 레이아웃.
레이아웃은 요소를 가로, 세로로 어떻게 배치할지다. 요즘은 Flexbox와 Grid가 기본이고, 필요하면 positioning을 섞는다.
↔️ Flexbox
한 방향(행 또는 열) 정렬에 강하다. 네비, 카드 가로 나열, 가운데 정렬에 자주 쓴다.
.row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
주요 속성:
- flex-direction:
row/column - justify-content: 메인 축
- align-items: 교차 축
- gap: 아이템 간격 (margin 핵보다 단순)
- flex: 1: 남는 공간 나누기
- flex-wrap: wrap: 줄바꿈
🗂️ Grid
2차원(행+열) 배치에 강하다. 페이지 골격, 카드 그리드, 사이드바 레이아웃에 맞다.
.layout {
display: grid;
grid-template-columns: 24rem 1fr;
gap: 2rem;
}
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
gap: 1rem;
}
주요 속성:
grid-template-columns/rowsgrid-column: 1 / -1— 전체 열 병합auto-fill+minmax— 반응형 카드 나열에 유용
⚖️ Flex vs Grid
| Flex | Grid | |
|---|---|---|
| 축 | 1차원 | 2차원 |
| 아이템 크기 | 콘텐츠, flex 비율 | 트랙 정의 |
| 전형 | 툴바, 한 줄 정렬 | 페이지 그리드, 갤러리 |
둘을 중첩해서 쓰는 게 자연스럽다. (바깥 Grid, 안쪽 Flex)
📍 Positioning
| 값 | 기준 |
|---|---|
static | 기본 흐름 |
relative | 자기 자리 / absolute 기준점 |
absolute | 가까운 positioned 조상 |
fixed | 뷰포트 (고정 헤더 등) |
sticky | 스크롤 구간에 붙음 |
같이 알아둘 것:
z-index는 stacking context 안에서만 비교된다.transform,opacity등이 새 컨텍스트를 만들 수 있다.
📜 예전에 쓰던 방식
- float 기반 레이아웃은 레거시 코드에서 만날 수 있다. 신규는 Flex/Grid를 우선한다.
table레이아웃도 표 데이터가 아니면 비추다.
🔗 참고 자료
- MDN: Flexbox — 1차원 Flex 레이아웃을 설명한다.
- MDN: Grid — 2차원 Grid 레이아웃을 설명한다.
- MDN: position —
absolute,sticky등 위치 지정 방식을 정리한다. - W3C: CSS Flexible Box Layout — Flexbox 공식 명세다.
