✊ 필오의 개발일지
Back to Posts
2019년 9월 8일

한글은 노토산스, 영문/숫자는 다른 폰트로 해주세요...👀 (feat. unicode)

한글은 노토산스, 영문/숫자는 다른 폰트로 해주세요...👀 (feat. unicode)

그밖에도 숫자에 볼륨감이 없어서 한글의 깔끔함에 비해서 영문과 숫자에 아쉬움들이 있곤했다. 글자간 커링도 작고, 카운터(속공간)도 작은 듯하고..

그래도 점점 노토산스를 자주 애용하고 보다보니, 그냥 저냥 적응하고 있었는데, 회사 프로젝트에서 요 노토산스에 대해서 디자인 요청이 왔다.

한글은 노토산스로, 영문과 숫자, 특수문자는 오픈산스로 적용해주세요! (여기서 특수문자는 키보드서 shift와 함께 사용가능한 특수문자들)

듣던 중에 반가운 소리였다.(😘) 노토산스에 대해 개인적인 취향?을 해소해주는 디자인 요청이었기 때문에. 그나저나 이걸 어떻게 적용할지는 고민이었다. 일일이 적용하는건 절대 말이 안된다고 생각했고, 다른 방법이 있을거라고 생각해보며 이리저리 서칭을 해보았다. 이 포스팅에서는 어떤 원리로 font가 분리되어서 적용되는지에 대해서 설명하려고 한다.


  1. 글자 적용시 필요한 css의 @font-face에 대해서 알아보며, 크게는 @font-face를 포함하고 있는 at-rule의 개념과 css문의 개념을 가볍게 살펴본다. 바로 방법을 알고싶은 분들은 해당 단락은 넘어가도된다.
  2. @font-face에서 제공해주는 unicode range에 대해서 살펴본다.
  3. 실제 @font-face에서 적용하는 방법을 알아본다.

1. CSS문(CSS statement)과 @규칙 (At-rule), 그리고 @font-face

우리가 보통 사용하는 규칙집합(선택자-선언 블록 쌍)은 큰 규칙집합 목록만으로 구성된 스타일 시트의 주요 구성 블록이다.

p { font-size: 10px }

1.1 CSS문 (CSS statement)

statement(문)은 비공백 문자로 시작하여 첫 번째 닫는 중괄호 또는 세미콜론 (문자열 외에, 이스케이프되지 않고 다른 {}, ()[] 쌍에 포함되지 않는) 으로 끝나는 구성 블록이다.

다음과 같은 다른 종류의 문이 있다

1.1.1 규칙집합 Rulesets

1.1.2 At-Rule

@ (U+0040 COMMERCIAL AT)로 시작한 다음 statement의 마지막, 즉 블록 다음에는 세미콜론(;)이 오며, 또는 다음 블록의 끝까지 계속 식별자가 뒤따른다.

  1. 식별자에 의해 정의된 각 유형의 at-rule은, 자체 내부 구문 및 의미(semantics)가 있을 수 있다.
  1. 중첩 문(nested statements)

1.2 @font-face

2. @font-face의 속성중 unicode-range 사용하기

우리는 css에 정의된 글꼴정보가 글자에 적용될 시점에, 특정 문자는 필터하면서 적용되길 바라고 있다.

2.1 unicode-range 속성

@font-face의 속성 중에는 unicode-range라는 속성이 존재한다. 해당 속성은 글꼴에서 사용될 유니 코드 코드 포인트의 범위를 지정할 수 있다. 우리는 unicode-range를 사용하여 숫자와 영문, 특수문자의 범위를 알아내고, 해당 범위에 폰트를 지정할 것이다.

2.2 unicode와 범위

유니코드

문자별 범위

1. 특수문자 범위: U+0020-002F, U+003A-0040, U+005B-0060, U+007B-007E 2. 영문 범위: U+0041-005A(대문자), U+0061-007A(소문자) 3. 숫자 범위: U+0030-0039 전체 U+0020-007E

3. 실제 @font-face에서 적용하는 방법

@font-face { font-family: 'NotoSansKR'; src: url('../fonts/notoSansKR/NotoSans-Bold.woff') format('woff'); font-style: normal; } @font-face { font-family: 'NotoSansKR'; src: url('../fonts/openSans/OpenSans-SemiBold.woff') format('woff'); unicode-range: U+0020-007E; font-style: normal; }


참고자료

  1. at-rule mdn 
  2. font-face mdn 
  3. css statement mdn 
  4. 유니코드 목차 
Previous프록시
Next웹 서버

Related

© 2026 Felix