HTML/CSS 3.8 · 3부. 배치
실습 — 페이지 골격
Grid 로 골격을 잡고 Flexbox 로 머리말을 배치합니다. 3부를 한 번에 사용합니다.
개념 설명
3부를 한 번에 사용합니다
화면 하나의 골격을 처음부터 짭니다. 3부에서 배운 Grid 와 Flexbox 를 어디에 쓸지 고르는 것이 이 단원의 내용입니다.
| 자리 | 무엇으로 | 까닭 |
|---|---|---|
| 화면 골격 | Grid | 가로 세로를 함께 정해야 합니다. |
| 머리말 안쪽 | Flexbox | 한 줄에 로고와 차림표를 놓습니다. |
| 카드 목록 | Grid | 격자이고, 폭에 따라 열 수가 바뀌어야 합니다. |
| 배지·닫기 단추 | position | 흐름 위에 겹칩니다. |
최소 예제 · 편집 가능
골격 잡기
머리말 · 곁줄 · 본문 · 꼬리말 넷을 Grid 로 놓습니다. 3.5 에서 본 영역 이름을 사용합니다.
<div class="page"> <header> <strong>마야 도서관</strong> <nav> <a href="/">처음</a> <a href="/notice">공지</a> </nav> </header> <nav class="side"> <p>공지사항</p> <p>이용 안내</p> </nav> <main> <h3>오늘의 안내</h3> <p>본문이 들어가는 자리입니다.</p> </main> <footer>문의 홍길동</footer> </div>
* { box-sizing: border-box; }
/* ① 골격은 Grid */
.page {
display: grid;
grid-template-columns: 150px 1fr;
grid-template-areas:
"head head"
"side main"
"foot foot";
gap: 10px;
}
.page > header { grid-area: head; }
.side { grid-area: side; }
.page > main { grid-area: main; }
.page > footer { grid-area: foot; }
/* ② 머리말 안쪽은 Flexbox */
.page > header {
display: flex;
justify-content: space-between;
align-items: center;
}
.page > * { background: #ece7fb; padding: 12px; border-radius: 6px; }
nav a { margin-left: 10px; }
.page > header 처럼 바로 아래 자식으로 적은
것에 유의하십시오. 안쪽에도 nav 가 있어 그냥
nav 라고 적으면 둘 다 걸립니다.
최소 예제 · 편집 가능
본문에 카드 목록 넣기
본문 자리에 3.4 의 격자를 넣고, 카드 하나에 3.6 의 배지를 답니다. 세 가지 도구가 한 화면에서 함께 쓰입니다.
<div class="cards"> <article class="card"> <span class="badge">새 글</span> <h4>휴관 안내</h4> <p>월요일은 쉽니다.</p> </article> <article class="card"> <h4>대출 안내</h4> <p>다섯 권까지 가능합니다.</p> </article> <article class="card"> <h4>시설 안내</h4> <p>열람실은 3층입니다.</p> </article> </div>
* { box-sizing: border-box; }
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 10px;
}
.card {
position: relative; /* 배지의 기준 */
border: 1px solid #d9cff7;
border-radius: 8px;
padding: 14px;
}
.card h4 { margin: 0 0 6px; }
.card p { margin: 0; color: #5b6272; }
.badge {
position: absolute;
top: 10px; right: 10px;
background: #6e56cf; color: #fff;
font-size: 11px;
padding: 2px 8px;
border-radius: 10px;
}
상세 사용법
본문 폭을 제한하기
넓은 화면에서 글줄이 지나치게 길면 읽기 어렵습니다. 본문 폭을 정하고 가운데에 두는 것이 흔한 처리입니다.
style.css
.wrap {
max-width: 960px; /* 이보다 넓어지지 않습니다 */
margin: 0 auto; /* 좌우 auto 가 가운데로 보냅니다 */
padding: 0 16px; /* 좁은 화면에서 가장자리에 붙지 않게 */
}
width 가 아니라 max-width
입니다. 화면이 그보다 좁으면 화면에 맞춰 줄어들어야 합니다.
흔한 실수
세 가지
-
선택자가 안쪽까지 걸립니다. 골격에
nav가 있고 머리말 안에도 있으면 둘 다 걸립니다.>로 한 단계만 고르십시오. -
골격까지
position으로 만듭니다. 화면 폭이 바뀌면 겹칩니다. 골격은 Grid 입니다. -
본문 폭을
width로 고정합니다. 좁은 화면에서 가로로 밀립니다.max-width를 사용하십시오.
실습 문제
3부 마무리 — 골격 짜기
1. 곁줄 없는 화면 만들기
난이도 중
머리말 · 본문 · 꼬리말 세 줄짜리 화면을 만드십시오. 본문은 폭을
720px 까지만 넓어지고 가운데에 놓입니다. 머리말은
로고와 차림표를 양끝에 둡니다.
열이 하나뿐이면
grid-template-areas 를 쓸 것도 없습니다. 순서대로 놓이므로 골격에 Grid 를 쓸 까닭도 크지 않습니다.* { box-sizing: border-box; }
/* 한 열이라 저절로 위에서 아래로 놓입니다 */
header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 16px;
}
main {
max-width: 720px;
margin: 0 auto;
padding: 20px 16px;
}
footer { padding: 16px; text-align: center; }
요약
정리
- 화면 골격은 Grid, 한 줄 배치는 Flexbox, 겹치는 것은
position입니다. - 골격 선택자는
>로 한 단계만 고릅니다. - 본문 폭은
max-width+margin: 0 auto로 제한합니다. - 여기까지가 3부입니다. 4부에서 화면 폭에 따라 배치를 바꿉니다.