WEB LAB
HTML/CSS 3.8 · 3부. 배치

실습 — 페이지 골격

Grid 로 골격을 잡고 Flexbox 로 머리말을 배치합니다. 3부를 한 번에 사용합니다.

예상 학습 시간 20분 예제를 고치면 화면이 그대로 다시 그려집니다 난이도 중급
개념 설명

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부에서 화면 폭에 따라 배치를 바꿉니다.