HTML/CSS 6.3 · 6부. 종합 프로젝트

글 읽는 화면

읽기 좋은 화면을 만듭니다. 줄 길이와 여백이 배치보다 먼저입니다.

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

오래 읽는 화면

마지막 프로젝트는 긴 글을 읽는 화면입니다. 앞의 둘과 달리 보기 좋은 것보다 읽기 좋은 것이 중요합니다.

읽기에 영향을 주는 것은 셋입니다 — 줄 길이 · 줄 간격 · 대비. 배치보다 이 셋이 먼저입니다.

최소 예제 · 편집 가능

완성본

<article class="prose">
  <header>
    <h1>도서관을 이용하는 방법</h1>
    <p class="meta">홍길동 · 2026년 9월 4일</p>
  </header>

  <p>도서관은 책을 빌리는 곳만이 아닙니다. 자리를 예약해 공부할 수도 있고,
  매달 열리는 독서 모임에 참여할 수도 있습니다.</p>

  <h2>회원 가입</h2>
  <p>신분증을 들고 1층 안내 창구로 가면 됩니다. 그 자리에서 회원증을
  받습니다. <strong>미성년자는 보호자 동의서</strong>가 필요합니다.</p>

  <blockquote>회원증은 다른 사람에게 빌려줄 수 없습니다.</blockquote>

  <h2>대출</h2>
  <p>한 번에 다섯 권까지, 2주 동안 빌릴 수 있습니다.</p>
  <ul>
    <li>연장은 한 번만 됩니다</li>
    <li>늦게 반납하면 그만큼 대출이 막힙니다</li>
  </ul>

  <p>자세한 것은 <a href="/guide">이용 안내</a>를 보십시오.</p>
</article>
* { box-sizing: border-box; }

:root { --brand: #6e56cf; --ink: #2e3440; --line: #e5e0f5; }

body { margin: 0; background: #fff; }

/* ch 는 글자 하나의 폭입니다. 65자 정도가 읽기 좋습니다. */
.prose {
  max-width: 65ch;
  margin: 0 auto;
  padding: 24px 16px;

  font-family: "Pretendard", "맑은 고딕", sans-serif;
  font-size: 1.05rem;
  line-height: 1.85;
  color: var(--ink);
}

.prose h1 { font-size: clamp(24px, 5vw, 32px); line-height: 1.3; margin: 0 0 6px; }
.prose .meta { color: #686c78; font-size: 0.9rem; margin: 0 0 24px; }

/* 소제목은 위를 넉넉히, 아래는 좁게 — 다음 문단과 묶여 보입니다 */
.prose h2 {
  font-size: 1.25rem;
  line-height: 1.4;
  margin: 32px 0 8px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--line);
}

/* 여백은 아래로만 줍니다 — 상쇄를 따질 일이 없습니다(2.9) */
.prose p, .prose ul { margin: 0 0 16px; }
.prose li { margin-bottom: 4px; }

.prose blockquote {
  margin: 20px 0;
  padding: 10px 16px;
  border-left: 4px solid var(--brand);
  background: #f8f7fd;
  color: #3b4252;
}

/* 링크는 밑줄을 남깁니다(5.1) */
.prose a { color: var(--brand); text-underline-offset: 3px; }
.prose a:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
상세 사용법

줄 길이 — ch 단위

한 줄이 너무 길면 다음 줄 첫머리를 찾기 어렵습니다. 너무 짧으면 눈이 자주 되돌아옵니다. 한 줄에 45~75자가 읽기 좋다고 알려져 있습니다.

ch글자 0 하나의 폭입니다. max-width: 65ch 라고 적으면 글꼴이나 글자 크기가 바뀌어도 줄 길이가 그대로 유지됩니다. px 로 적으면 글자를 키웠을 때 한 줄이 짧아집니다.

한글은 글자 폭이 영문보다 넓어 65ch 가 대략 40자 안팎이 됩니다. 실제로 보고 조절하십시오.

상세 사용법

여백으로 묶고 나누기

소제목의 위 여백을 넓게, 아래를 좁게 준 것이 이 화면의 중요한 부분입니다.

위아래가 같으면
.prose h2 {
  margin: 20px 0;
}
/* 제목이 앞 문단에도
   뒤 문단에도 속하지 않아
   떠 있어 보입니다 */
위를 넓게 하면
.prose h2 {
  margin: 32px 0 8px;
}
/* 제목과 뒤 문단이
   한 덩어리로 읽힙니다 */

가까이 있는 것은 관계가 있어 보입니다. 제목을 뒤 내용에 붙이면 어디까지가 한 이야기인지 눈으로 알 수 있습니다. 선을 긋지 않아도 구역이 나뉩니다.

상세 사용법

글 화면에서 챙길 것

항목
줄 길이45~75자. max-width: 65ch
줄 간격1.7~1.9. 긴 글일수록 넉넉하게(2.5)
글자 크기16px 이상. 작으면 오래 읽을 수 없습니다
대비4.5 대 1 이상. 옅은 회색 본문은 피합니다(5.1)
단락 여백줄 간격보다 넓게. 단락 구분이 보여야 합니다
링크밑줄을 남깁니다(5.1)
흔한 실수

세 가지

  • 본문 폭을 제한하지 않습니다. 넓은 화면에서 한 줄이 화면 끝까지 가면 읽기 어렵습니다. 6.1 · 6.2 와 달리 이 화면에서 특히 중요합니다.
  • 제목 위아래 여백을 같게 줍니다. 제목이 어느 쪽에 속하는지 알 수 없어 글의 짜임이 보이지 않습니다.
  • 본문을 옅게 만듭니다. 보기에는 부드럽지만 오래 읽으면 눈이 피로하고, 어떤 사람에게는 아예 읽히지 않습니다.
실습 문제

트랙 마무리

1. 목차 붙이기 난이도 중

글 위에 목차를 넣으십시오. 각 항목을 누르면 그 소제목으로 이동해야 합니다. 소제목에 id 를 주고 링크를 # 로 겁니다(1.5 · 1.8).

문서 안 이동은 href="#이름" 이고, 그 이름은 대상의 id 입니다. scroll-margin-top 을 주면 이동한 뒤 제목이 화면 맨 위에 붙지 않습니다.
<nav class="toc"> <h2>목차</h2> <ul> <li><a href="#join">회원 가입</a></li> <li><a href="#loan">대출</a></li> </ul> </nav> <h2 id="join">회원 가입</h2> <h2 id="loan">대출</h2> /* CSS */ .toc { background: #f8f7fd; border-radius: 8px; padding: 12px 16px; margin-bottom: 24px; } .toc h2 { margin: 0 0 6px; border: 0; font-size: 1rem; } .toc ul { margin: 0; } /* 이동한 뒤 제목이 화면 맨 위에 붙지 않게 */ .prose h2 { scroll-margin-top: 16px; }
2. 세 화면을 한 사이트로 난이도 상

6.1 · 6.2 · 6.3 을 파일 셋으로 만들고 서로 링크로 이으십시오. CSS 는 공용 파일 하나와 화면별 파일로 나누십시오(5.3). 이 트랙에서 배운 것을 모두 사용하는 마지막 실습입니다.

공용 파일에는 :root 의 이름 · 바탕 규칙 · .wrap · .btn 을 두십시오. 화면별 파일이 그것을 @import 합니다.
요약

정리

  • 글 화면은 줄 길이 · 줄 간격 · 대비가 배치보다 먼저입니다.
  • max-width: 65ch 는 글자 크기가 바뀌어도 줄 길이를 지킵니다.
  • 소제목은 위 여백을 넓게, 아래를 좁게 주어 뒤 내용과 묶습니다.
  • 여기까지가 이 트랙입니다. 다음은 JS 커리큘럼 입니다.