Technote

테마 · 플러그인 입문

연재 한글 웹 타이포그래피 8부 중 2부

본문 16px이 기준선인 이유, 그리고 예외

16px은 누가 정한 유행이 아니라 브라우저와 사용자가 합의한 기본값입니다. 그 값을 기준으로 삼되, 한글 장문에서는 한 단계 올릴 이유가 분명히 있습니다.

본문 글자 크기를 정할 때 가장 흔한 접근은 “시안에서 예뻐 보이는 크기” 입니다. 그런데 시안은 큰 모니터에서 100% 배율로 보는 화면이고, 실제 독자는 작은 화면 · 먼 거리 · 흔들리는 지하철에서 같은 글을 읽습니다. 기준을 시안이 아니라 브라우저에서 가져오면 이 간극이 줄어듭니다.

16px은 우리가 정한 값이 아닙니다

거의 모든 데스크톱 브라우저의 기본 글자 크기가 16px입니다. 그리고 이 값은 사용자가 바꿀 수 있습니다 — 브라우저 설정에서 글자를 키운 사람, 운영체제 접근성 설정을 쓰는 사람이 실제로 있습니다. 이 사실이 크기 단위 선택을 결정합니다.

rem은 그 사용자 설정을 곱해서 계산되고, px은 무시합니다. 그래서 본문에는 1rem을 씁니다. 글자를 키워 둔 사람이 우리 사이트에서만 작게 보는 일이 없어집니다.

여기서 html { font-size: 62.5% } 기법은 권하지 않습니다. 1rem을 10px로 만들어 계산을 편하게 하려는 방법인데, 대가가 있습니다 — 서드파티 CSS나 플러그인이 출력하는 스타일은 1rem을 16px로 가정하고 작성돼 있어서, 그 값들이 전부 한꺼번에 작아집니다. 원인이 우리 코드 한 줄에 있는데 증상은 남의 컴포넌트에서 나타나므로 추적이 어렵습니다.

크기를 정할 때의 판단 — 위 세 줄이 지켜지면 대체로 안전하다

한글에서 16px이 하한선인 이유

앞 회차에서 다룬 획 밀도가 여기서도 작동합니다. 같은 16px이라도 한글은 글자 한 칸에 자모 두세 개가 들어가므로, 획 하나하나는 라틴 알파벳보다 가늘고 촘촘하게 렌더링됩니다. 그래서 같은 크기의 영문 본문보다 체감상 작게 읽히는 경우가 많습니다.

실무적인 결론은 이렇습니다. 16px을 하한으로 두고, 아티클처럼 길게 읽는 화면은 17~18px로 한 단계 올립니다. 반대로 12~13px은 본문에 쓰지 않습니다 — 메타 정보 · 각주 · 법적 고지처럼 읽지 않아도 되는 텍스트의 자리입니다.

모바일에서 특히 조심할 것이 하나 있습니다. iOS 사파리는 글자 크기가 16px 미만인 입력 필드에 포커스가 가면 페이지를 확대합니다. 폼이 있는 화면에서 갑자기 레이아웃이 확 커지는 현상의 정체가 대개 이것이고, 해결은 입력 요소의 글자 크기를 16px 이상으로 올리는 것입니다.

크기 계단을 한 벌로 만듭니다

화면마다 필요한 크기를 그때그때 정하면 곧 15px · 15.5px · 16px이 섞입니다. 크기는 토큰으로 미리 정해 둔 계단에서 고르는 편이 낫습니다. 계단 사이 간격은 위로 갈수록 벌어지는 것이 자연스럽습니다 — 작은 크기에서는 1px 차이가 보이지만 큰 크기에서는 안 보이기 때문입니다.

:root {
  --text-xs:   0.75rem;   /* 12px — 각주 · 법적 고지 */
  --text-sm:   0.875rem;  /* 14px — 메타 정보 */
  --text-base: 1rem;      /* 16px — 기준선 */
  --text-lg:   1.125rem;  /* 18px — 장문 본문 */
  --text-xl:   1.25rem;
  --text-3xl:  clamp(1.5rem, 1.2rem + 1.4vw, 2rem);   /* 제목은 유동 */
}

body            { font-size: var(--text-base); }
article p       { font-size: var(--text-lg); }
input, select,
textarea        { font-size: var(--text-base); }  /* iOS 확대 방지 */

제목처럼 화면 폭에 따라 크게 달라져야 하는 값에는 clamp()가 잘 맞습니다. 최소 · 유동 · 최대 세 값을 한 줄에 적으면 브레이크포인트마다 크기를 다시 쓰지 않아도 됩니다. 다만 본문에는 쓰지 않는 편이 낫습니다 — 창 크기를 바꿀 때마다 본문 크기가 미세하게 변하면 오히려 산만합니다.

토큰으로 값을 관리하는 방식은 테마 · 플러그인 아카이브에서 더 다루고, 실제 작업에서 이런 결정을 어떤 순서로 검증하는지는 작업 과정에 공개돼 있습니다.

다음 회차

크기와 행간이 정해지면 다음은 줄이 어디서 바뀌는가입니다. 다음 회차는 word-break: keep-all — 한글에 큰 도움이 되지만, 다른 언어에서는 정반대로 작동하는 속성입니다.

이 주제의 다른 글

노하우 목록으로

테마 · 플러그인 실무

편집 가능한 영역을 디자인 전에 정합니다

CMS 가 표현할 수 없는 디자인은 배포된 뒤에도 계속 협상 대상으로 남습니다. 어디까지 편집자가 바꿀 수 있는지를 먼저 정하면 그 협상 자체가 사라집니다.

디자이너 3분 읽기

테마 · 플러그인 입문

업데이트가 멈춘 플러그인을 판별하는 기준

마지막 업데이트 날짜 하나로는 방치를 판정할 수 없습니다. 판별 신호 다섯 개를 함께 보고, 대체 불가라면 격리 조건이라도 걸어야 합니다.

기획자 · 운영 · 관리자 2분 읽기

테마 · 플러그인 심화

JS 없이 만드는 상호작용과 그것을 안전하게 하는 규칙

details · :target · :focus-within · :has() · 스크롤 타임라인으로 상당수의 상호작용이 스타일시트 안에서 끝납니다. 안전하게 만드는 규칙은 하나입니다 — 기본값이 완성된 상태여야 합니다.

디자이너 6분 읽기

₩270,000 · 신청하기