글 읽는 화면
읽기 좋은 화면을 만듭니다. 줄 길이와 여백이 배치보다 먼저입니다.
오래 읽는 화면
마지막 프로젝트는 긴 글을 읽는 화면입니다. 앞의 둘과 달리 보기 좋은 것보다 읽기 좋은 것이 중요합니다.
읽기에 영향을 주는 것은 셋입니다 — 줄 길이 · 줄 간격 · 대비. 배치보다 이 셋이 먼저입니다.
완성본
<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 와 달리 이 화면에서 특히 중요합니다.
- 제목 위아래 여백을 같게 줍니다. 제목이 어느 쪽에 속하는지 알 수 없어 글의 짜임이 보이지 않습니다.
- 본문을 옅게 만듭니다. 보기에는 부드럽지만 오래 읽으면 눈이 피로하고, 어떤 사람에게는 아예 읽히지 않습니다.
트랙 마무리
글 위에 목차를 넣으십시오. 각 항목을 누르면 그 소제목으로 이동해야 합니다.
소제목에 id 를 주고 링크를 #
로 겁니다(1.5 · 1.8).
href="#이름" 이고, 그 이름은 대상의 id 입니다. scroll-margin-top 을 주면 이동한 뒤 제목이 화면 맨 위에 붙지 않습니다.6.1 · 6.2 · 6.3 을 파일 셋으로 만들고 서로 링크로 이으십시오. CSS 는 공용 파일 하나와 화면별 파일로 나누십시오(5.3). 이 트랙에서 배운 것을 모두 사용하는 마지막 실습입니다.
:root 의 이름 · 바탕 규칙 · .wrap · .btn 을 두십시오. 화면별 파일이 그것을 @import 합니다.정리
- 글 화면은 줄 길이 · 줄 간격 · 대비가 배치보다 먼저입니다.
max-width: 65ch는 글자 크기가 바뀌어도 줄 길이를 지킵니다.- 소제목은 위 여백을 넓게, 아래를 좁게 주어 뒤 내용과 묶습니다.
- 여기까지가 이 트랙입니다. 다음은 JS 커리큘럼 입니다.