font-family
필수적이며, 글꼴의 이름을 설정합니다.
CSS 중급 요약 설명
- CSS level 3의 선택자, 가상 요소, @규칙(At-Rule), @media 등의 중급 기술에 속하는 CSS 기술을 학습하는 과정입니다.
- CSS를 더 체계적이고 효과적으로 활용하며, 다양한 기기 환경에 대응하는 방법을 알아봅니다.
요약 설명웹이 발전함에 따라 사용자가 웹에서 정보를 얻는 과정의 경험(UX)을 개선하려는 노력이 행해지고 있습니다.
그런 노력 중 하나인 웹 폰트는 로컬의 폰트 설치 상황에 상관없이 웹에서 항상 원하는 타이포그래피를 사용할 수 있게 하는 기술입니다.
@font-face
규칙은 웹 폰트(web font)를 정의할 때 사용하는 규칙입니다.
웹 폰트는 사용자가 폰트를 설치하지 않아도 디자이너가 원하는 타이포그래피를 웹 페이지에 구현할 수 있게 하는 기술입니다.
우선 웹 폰트를 서버에 올려놓고, CSS 파일에 @font-face
규칙을 사용하여 웹 폰트를 정의하고 추가합니다.
그러면 해당 웹 페이지에 접속하는 모든 웹 브라우저는 자동으로 서버에서 웹 폰트를 내려받아 해당 글꼴을 표시하게 됩니다.
CSS3에서 @font-face
규칙을 사용하려면 다음과 같이 지정을 해야 합니다.
@font-face
규칙을 설정한 다음 웹 폰트가 필요한 선택자(selector)의 font-family 속성에서 사용할 웹 폰트의 이름을 호출해 사용합니다.
만약 웹 폰트 로딩이 실패하면 다음에 선언된 폰트가 렌더링됩니다. 이 폰트를 폴백 폰트(fallback font)라 합니다.
웹 글꼴의 형식에는 다양한 종류가 있으며, 현재 가장 많이 사용하는 웹 글꼴 형식은 다음과 같습니다.
TrueType은 1980 년대 후반 Apple과 Microsoft에서 개발 한 글꼴 표준입니다.
TrueType은 Mac OS 및 Microsoft Windows 운영 체제에서 가장 일반적인 글꼴 형식입니다.
이 글꼴은 맥(MAC)과 윈도우(Window) 운영체제에서 가장 오랫동안 사용되어 온 대표적인 글꼴입니다.
트루 타입 글꼴은 해당 글꼴이 다양한 글꼴 크기에서 어떻게 표현될지에 대한 수준 높은 제어를 할 수 있게 해줍니다.
OTF/TTF 형식은 쉽게 복제될 수 있어(불법으로) 대신 WOFF 형식이 만들어졌습니다.
IE에서 글꼴 형식은 "설치 가능"으로 설정된 경우에만 작동합니다.
OpenType은 확장 가능한 컴퓨터 글꼴 형식입니다. TrueType을 기반으로하며 Microsoft의 등록 상표입니다.
글꼴은 오늘날 주요 컴퓨터 플랫폼에서 일반적으로 사용됩니다.
오픈 타입 글꼴은 사용자가 자신의 컴퓨터에서 크기를 조절할 수 있는 글꼴 표준입니다.
이 글꼴은 트루 타입 글꼴의 뒤를 잇기 위해 Microsoft에서 개발하였으며, 현재는 거의 모든 컴퓨터에서 사용되고 있습니다.
오픈 타입 글꼴은 유니코드를 기반으로 다양한 스크립트를 지원하며, 한 번에 여러 스크립트를 함께 지원할 수 있다는 장점을 가지고 있습니다.
OTF/TTF 형식은 쉽게 복제될 수 있어(불법으로) 대신 WOFF 형식이 만들어졌습니다.
WOFF는 웹 페이지에서 사용하기위한 글꼴 형식입니다.
웹 오픈 글꼴은 웹 페이지에서 사용할 수 있는 글꼴 표준이며, 2009 년에 개발되었으며 현재 W3C에서 사용을 권장하고 있는 글꼴 표준입니다.
이 글꼴은 추가 메타데이터(metadata)를 넣어 압축한 트루 타입 또는 오픈 타입 글꼴입니다.
모질라와 다른 조직들이 결합하여 웹에서 사용할 목적으로 개발했습니다.
OTF/TTF 를 이용한 구조의 압축된 버전으로, 다른 글꼴 형식보다 빠르게 로드됩니다.
이 글꼴은 웹 오픈 글꼴 1.0 버전보다 더 나은 압축률을 제공하는 트루 타입 또는 오픈 타입 글꼴입니다.
SVG/SVGZ (Scalable Vector Graphics (Font)
SVGZ는 SVG의 압축된 버전.
SVG 글꼴을 사용하면 텍스트를 표시 할 때 SVG를 글리프로 사용할 수 있습니다. SVG 1.1 사양은 SVG 문서 내에서 글꼴을 만들 수있는 글꼴 모듈을 정의합니다.
SVG 문서에 CSS를 적용 할 수도 있고 @font-face 규칙을 SVG 문서의 텍스트에 적용 할 수도 있습니다.
SVG 글꼴은 SVG 요소로 텍스트를 그릴 때 그 표본으로 사용되는 글꼴 표준입니다.
이 글꼴은 SVG 문서에 CSS를 적용할 수 있도록 해줄 뿐만 아니라, @font-face 규칙도 적용할 수 있게 해줍니다.
SVG 글꼴은 거의 항상 @font-face소스 목록의 맨 아래에 와야 합니다. 다른 것을 사용할 수 없으면 브라우저가 SVG 글꼴을 사용하지 못하게합니다.
크롬 브라우저는 4-37 까지만 지원하고 38+ 부터는 지원 안 함.
오페라 브라우저는 10-24 까지만 지원하고 25+ 부터는 지원 안 함.
디바이스 iOS Safari는 현재 3.2+ 부터 지원하고 있습니다.
현재 svg font를 지원하는 브라우저는 Safari와 iOS Safari만 유일합니다.
임베디드 오픈 타입 글꼴은 Microsoft가 웹 페이지에서 사용하기 위해 개발한 내장형 글꼴로, 오픈 타입 글꼴입니다.
IE8 이하 버전은 @font-face를 사용할 때 .eot 파일만 인식합니다.
필수적이며, 글꼴의 이름을 설정합니다.
필수적이며, 글꼴 파일의 주소를 설정합니다.
권장은 항상 글꼴 URL에 소문자를 사용해야 하며. 대문자로 사용할 경우 IE에서 예기치 않은 결과를 줄 수 있습니다.
선택적이며, 글꼴의 굵기를 설정합니다. 기본값은 "normal"입니다.
선택적이며, 글꼴의 크기가 늘어나는 방법을 설정합니다. 기본값은 "normal"입니다.
선택적이며, 글꼴의 스타일을 설정합니다. 기본값은 "normal"입니다.
선택적이며, 글꼴이 지원하는 유니코드 문자의 범위를 설정합니다. 기본값은 U+0-10FFFF
입니다.
유니코드로 지정한 글자에만 웹 폰트를 적용하는 속성입니다.
예를 들어 영어, 그리스어 및 일본어에 대해 별도의 글꼴 리소스를 제공 할 수 있습니다.
영어 버전의 페이지를 보는 사용자의 경우 그리스어 및 일본어 글꼴의 글꼴 리소스를 다운로드할 필요가 없음으로 대역폭이 절약됩니다.
모든 유니코드 문자 코드 또는 범위는 허용 가능한 unicode-range 값입니다. 유니 코드 포인트 앞에는 U+문자 코드를 구성하는 최대 6개의 문자가 옵니다.
이 형식을 따르지 않는 점 또는 범위는 유효하지 않은 것으로 간주하며 속성이 무시됩니다.
수많은 유니 코드 옵션이 있는데 기본 라틴어 (0020—007F)는 영어 사이트에서 가장 일반적인 범위 일 수 있지만
unicode-table.com 에서 사용 가능한 유니코드를 참조햐여 사용할 수 있습니다.
요약 설명
Google은 머신 러닝에 기반을 둔 최적화 기술을 통해 한글 문서에서 주제에 따라 사용되는 글자의 패턴을 발견했습니다.
그 패턴에 따라 한글 폰트를 100여 가지의 그룹으로 나누고 unicode-range 속성을 사용합니다.
이렇게 하면 사용자가 웹 페이지를 로딩할 때 폰트 전체를 다운로드하지 않고 웹 페이지에서 사용할 문자에 필요한 폰트만 선택적으로 다운로드합니다.
크기가 큰 한글 폰트를 동적으로 분할 다운로드하는 방법으로 용량을 최적화할 수 있게 된 것입니다.
CSS의 font-display 속성을 사용하면 외부 라이브러리를 사용하지 않아도 웹 폰트의 로딩 상태에 따른 동작을 설정할 수 있습니다.
현재 IE는 지원하지 않습니다.
브라우저의 기본 동작
FOIT 방식(Flash Of Invisible Text)와 동일하게 작동하는 옵션입니다.
웹 폰트가 로딩되지 않았을 때는 텍스트를 렌더링하지 않습니다(최대 3초).
웹 폰트 로딩이 완료되면 웹 폰트를 적용합니다.
FOUT 방식(Flash Of Unstyled Text)와 동일하게 작동하는 옵션입니다.
우선 폴백 폰트로 글자를 렌더링하고, 웹 폰트 로딩이 완료되면 웹 폰트를 적용합니다.
웹 폰트 로딩 여부와 관계없이 항상 텍스트가 보입니다.
fallback 옵션을 사용하면 우선 100ms 동안 텍스트가 보이지 않고, 그 후 폴백 폰트로 렌더링합니다.
특이한 점은 약 2초의 전환(swap) 시간이 있다는 점입니다. 이 시간 안에 로딩이 완료되면 웹 폰트로 전환합니다.
하지만 이 시간이 지나면 웹 폰트 다운로드가 완료되어도 웹 폰트로 전환하지 않고 폴백 폰트를 유지합니다.
전환 시간 이후에 다운로드된 웹 폰트는 웹 페이지에 적용되지는 않지만 캐시에는 저장됩니다.
그래서 추후에 사용자가 다시 방문했을 때 바로 웹 폰트가 적용된다는 장점이 있습니다.
optional 옵션은 fallback 옵션과 비슷하지만 다르게 작동하는 옵션입다.
우선 100ms 동안 텍스트가 보이지 않고 그 후 폴백 폰트로 전환합니다.
웹 폰트를 다운로드하지만 브라우저가 네트워크 상태를 파악해 웹 폰트 전환 여부를 결정한다는 점이 이 옵션의 특이한 점입니다.
예를 들어 네트워크의 연결 상태가 안 좋으면 웹 폰트의 다운로드가 완료되어도 캐시에 저장만 하고 전환은 하지 않습니다.
렌더링 방식은 Internet Explorer 계열 브라우저의 처리 방식과 그 외 최근 브라우저의 처리 방식으로 나눌 수 있습니다.
Internet Explorer 계열 브라우저는 FOUT 방식(Flash Of Unstyled Text)으로 렌더링 차단을 처리하고, 그 외의 브라우저는 FOIT 방식(Flash Of Invisible Text)으로 렌더링 차단을 처리합니다.
웹 폰트가 적용될 때는 텍스트의 번쩍임(flash of text)이 일어납니다.
웹 폰트가 적용되지 않은 폴백 폰트 상태(unstyled)에서 폰트가 바뀌면서 텍스트 번쩍임이 일어나는 방식(FOUT 방식),
또는 웹 폰트가 적용되지 않은 텍스트가 보이지 않는 상태(invisible)에서 폰트가 바뀌면서 텍스트 번쩍임이 일어나는 방식(FOIT 방식)로 처리 방법을 나누었다고 생각하면 됩니다.
Internet Explorer는 웹 폰트가 로딩될 때까지 우선 폴백 폰트로 텍스트를 렌더링합니다.
웹 폰트 로딩이 완료되면 텍스트를 웹 폰트로 전환합니다. 이 방식은 웹 폰트 로딩 여부에 관계없이 텍스트가 항상 보이는 장점이 있습니다.
하지만 글꼴의 자간, 높이 등 서식이 달라 웹 폰트 적용 전과 후에 레이아웃이 변경될 수 있습니다.
Firefox와 Chrome 등의 브라우저는 웹 폰트가 로딩되기 전까지 해당 텍스트를 화면에 보여 주지 않습니다.
웹 폰트 로딩이 완료되면 텍스트를 웹 폰트로 전환합니다.
한 번에 웹 폰트를 보여줄 수 있다는 장점이 있지만, 웹 폰트의 로딩이 늦으면 Mitt Romney 기사의 사례처럼 빈 텍스트가 노출되는 문제점이 있습니다.
웹 폰트가 로딩되지 않은 상태로 3초가 지나면 폴백 폰트로 우선 렌더링해서 브라우저 자체적으로 웹 폰트의 로딩 시간이 과도하게 오래 걸리는 상황에 대비합니다.
FOIT 방식(Flash Of Invisible Text)은 Mitt Romney 사례와 같이 텍스트가 보이지 않는 문제가 있기 때문에 UX 관점에서 좋지 않습니다.
그러므로 모든 브라우저에서 FOIT 방식이 아닌 FOUT 방식으로 작동하게 한다면 텍스트가 보이지 않는 문제를 해결할 수 있습니다.
텍스트가 항상 보이게 하려면 FOUT와 동일하게 작동하는 swap 옵션을 사용합니다.
fallback 옵션과 optional 옵션을 사용하면 100ms 동안 텍스트가 보이지 않지만 매우 짧은 시간이어서 이 옵션들도 최적화에 사용할 수 있습니다.
font-display 속성은 Internet Explorer 계열 브라우저를 제외한 브라우저가 지원합니다.
텍스트가 보이지 않는 문제가 발생하는 브라우저에서는 문제없이 최적화에 font-display 속성을 사용할 수 있습니다.
크롬과 파이어폭스의 (+ 사파리) 경우는 FOIT 방식(Flash Of Invisible Text)입니다.
- 일단 3초동안 웹폰트가 로드되기를 기다립니다. - 그 동안은 빈 화면이 나타납니다. - 만약 3초동안 오지 않으면 시스템 기본폰트를 보여줍니다.
IE와 EDGE는 FOUT 방식(Flash Of Unstyled Text)입니다. 일단 시스템폰트를 보여주고 웹폰트가 오면 대체합니다.
구형 사파리의 경우는 시간제한 없이 FOIT로 웹폰트를 기다렸다가, 60초가 넘으면 응답자체가 취소 되기 때문에 콘텐츠 자체를 볼 수 없는 원인이 되기도 하였습니다.
다행이도 최근에는 timeout을 적용하였습니다.