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

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

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

노토 산스 를 사용하다보면 영문과 숫자가 너무 날씬하다는 느낌을 받곤 했다. 개인적인 취향으로 1 숫자 아랫부분에 있는 serif를 별로 좋아하지 않는다.

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

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

한글은 노토산스로, 영문과 숫자, 특수문자는 오픈산스로 적용해주세요! (여기서 특수문자는 키보드서 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

© 2025 Felix