@font-face
를 사용해서 웹 페이지의 텍스트에 온라인 폰트 (online fonts)를 적용할 수 있다. @font-face
를 사용해서 디자이너가 원하는 폰트를 사용할 수 있게 함으로써, 컴퓨터에 설치된 폰트로만 사용해야 했던 제약이 없어지게 되었다!
@font-face {
font-family: // 폰트명 으로 지정될 이름을 설정 ;
src: // 원격 폰트 파일의 위치를 나타내는 URL 값을 지정하거나, 사용자 컴퓨터에 설치된 폰트 명을 local('Font Name') 형식으로 지정 ;
[font-weight: <weight>]; // 폰트 굵기
[font-style: <style>]; // 폰트 스타일
}
아래 예제에서는 로컬에 설치된 “Helvetica Neue Bold” 폰트가 사용된다. 만약 해당 폰트가 설치되어 있지 않다면, 다운로드 가능한 "MgOpenModernaBold.ttf” 폰트가 대신 사용된다.
@font-face {
font-family: MyHelvetica;
src: local("Helvetica Neue Bold"),
local("HelveticaNeue-Bold"),
url(MgOpenModernaBold.ttf);
font-weight: bold;
}
font-family
속성은 선택된 요소에 우선순위가 지정된 font family
이름과 generic family
이름을 지정할 수 있게 해준다.
font-family: Georgia, serif;
font-family: "Gill Sans", sans-serif;
font-family: sans-serif;
값은 콤마(,)로 구분해서 대체가 될 수 있다.
내가 지정한 글꼴을 사용자가 사용할 수 있다는 보장이 없기 때문에 지정한 서체가 없는 경우, 사용할 대체 폰트까지 명시하는 것이 일반적이다. font-family
에 명시한 첫 번째 글꼴이 사용자의 컴퓨터에 없는경우, 브라우저는 사용 가능한 서체를 발견할 때까지 font-family
에 지정된 폰트 목록을 훑어 나간다.
body { font-family: 'Times New Roman', Times, Arial, Helvetica, sans-serif; }
웹 브라우저에 Times New Roman 폰트가 설치되어 있는지 살피고, 있는 경우 해당 폰트로 출력되지만 설치되어 있지 않다면 그 다음 폰트 - 그 다음 폰트를 훑어 나가게 된다.
font-family
목록에는 최소 한 개의 generic-family
를 추가해야 한다. 추가하는 이유는 시스템이나 @font-face
규칙을 이용해 다운로드 받은 폰트 중에 특정 폰트 있다는 것을 보장할 수 없기 때문이다. generic-family
는 브라우저가 대체할 수 있는 폰트가 필요한 경우 선택할 수 있게 해준다.
generic-family
글꼴은 사용자가 직접 지정한 글꼴을 사용할 수 없을 때 대체로 출력되는 글꼴이다. generic-family
는 font-family
목록의 마지막 항목이어야 한다.
serif
: 삐침이 있는 명조 계열의 글꼴sans-serif
: 삐침 없고 굵기가 일정한 고딕 계열의 글꼴monospace
: 글자 폭과 간격이 일정한 글꼴cursive
: 손으로 쓴 것 같은 필기 계열의 글꼴fantasy
: 화려한 글꼴system-ui
: 플랫폼에서 제공하는 기본 글꼴로딩 순서 - WOFF2 → WOFF → TTF → eot → svg
포맷과 종류 별 특징 (요약)
브라우저 별 포맷 지원 현황
TTF (True Type Font)
OTF (Open Type Font)
WOFF(Web Open Font Format)
SVG(Scaleable Vector Graphics)
EOT(Embedded Open Type)
@font-face
지시어를 사용해서 웹 브라우저에게 글꼴 이름과 그 글꼴을 다운받을 위치를 알려준다. font-family
속성을 사용해서 변경이 필요한 엘리먼트에 위에 명령한 폰트를 포함해 폰트 지정을 해준다.서체 파일의 순서는 .woff
, .ttf,
.svg
의 순으로 하는 것이 좋다.
IE8 이하를 지원해야 할 경우, .eot
를 가장 먼저 선언한다.
format()
은 반드시 사용해야 한다.
@font-face{
font-family:'NanumGothic';
src:url('fonts/NanumGothic.eot');
src:url('fonts/NanumGothic.eot?#iefix') format(‘embedded-opentype’),
url('fonts/NanumGothic.woff') format(‘woff’),
url('fonts/NanumGothic.ttf') format('truetype'),
url('fonts/NanumGothic.svg') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face{
font-family:'NanumGothic';
src:url('fonts/NanumGothic.eot');
src:url('fonts/NanumGothic.eot?#iefix') format(‘embedded-opentype’),
url('fonts/NanumGothic.woff') format(‘woff’),
url('fonts/NanumGothic.ttf') format('truetype'),
url('fonts/NanumGothic.svg') format('svg');
font-weight: bold;
font-style: normal;
}
@font-face{
font-family:'NanumGothic';
src:url('fonts/NanumGothic.eot');
src:url('fonts/NanumGothic.eot?#iefix') format(‘embedded-opentype’),
url('fonts/NanumGothic.woff') format(‘woff’),
url('fonts/NanumGothic.ttf') format('truetype'),
url('fonts/NanumGothic.svg') format('svg');
font-weight: normal;
font-style: italic;
}
body{
font-family:'NanumGothic', 'NanumGothic';
}
위와 같이, normal
, bold
, italic
스타일을 지원하려면 @font-face
를 세 번 사용해야 한다. 그리고 font-family에 적는 폰트 이름은 모두 같게 사용한다.
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-apple-system
- Safari for OS X and iOS (San Francisco)
BlinkMacSystemFont
- Chrome < 56 for OS X (San Francisco)
"Segoe UI"
- Windows
"Roboto"
- Android
"Helvetica Neue", Arial, sans-serif
- Basic web fallback
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"
- Emoji fonts
unicode-range
속성은 css 디스크립터(discriptor)로써, 글꼴에서 유니코드의 범위를 지정하면, 그 범위만 폰트를 바꿔주는 것이다.
예를 들어 한글은 NotoSansKR 로 지정하고, 숫자는 맑은 고딕체로 하고싶은 경우, unicode-range
로 따로 선언해서 각각의 폰트체를 지정해 주는 것이다.
전체 : U+0020-007E
한글 범위: U+AC00-D7A3
특수문자 : U+0020-002F, U+003A-0040, U+005B-0060, U+007B-007E
영문 : U+0041-005A(대문자), U+0061-007A(소문자)
숫자 : U+0030-0039
@font-face {
font-family: "NotoSansKR";
src: url("/openconcert/fonts/NotoSansKR-Regular-Hestia.woff") format("woff");
font-style: normal;
}
// unicode-range 속성은 나중에 쓴다.
@font-face {
font-family: "NotoSansKR";
src: url("/openconcert/fonts/dancingscript-webfont.woff") format("woff");
font-style: normal;
unicode-range: U+0041-005A, U+0061-007A;
}
body {
font-family: "NotoSansKR", sans-serif;
background: #f0e8e5;
overflow-x: hidden;
}
위 예에서 unicode-range를 사용해서 폰트 범위를 지정 - 영어가 들어가면 dancingscript 으로 변환한다.
위 예를 보면 같은 font-family 이름을 줬는데, 이 의도는 전체적으로 NotoSansKR 폰트를 사용하다가 영어를 만나면 dancingscript 폰트를 렌더링 하도록 하는게 목적이기 때문에 font-family 이름을 다르게 쓸 필요가 없다.