ex) Dooray의 font-family
body {
font-family: "Nanum Gothic", "Noto Sans JP", sans-serif, Lucida Sans Unicode, arial;
}
(크롬 개발자 도구 -> Element -> computed 확인 )
@font-face {
font-family: 'Nanum Gothic';
font-style: normal;
font-weight: 400;
src: url(/static_fonts/NanumGothic-Regular.eot),
url(/static_fonts/NanumGothic-Regular.woff2) format("woff2"),
url(/static_fonts/NanumGothic-Regular.woff) format("woff"),
url(/static_fonts/NanumGothic-Regular.ttf) format("truetype");
}
format()
은 반드시 써야한다. src: url(/static_fonts/NanumGothic-Regular.eot),
url(/static_fonts/NanumGothic-Regular.woff2) format("woff2"),
url(/static_fonts/NanumGothic-Regular.woff) format("woff"),
url(/static_fonts/NanumGothic-Regular.ttf) format("truetype");
src: local('Nanum-Gothic'),
url(/static_fonts/NanumGothic-Regular.woff2) format("woff2"),
url(/static_fonts/NanumGothic-Regular.woff) format("woff");
@font-face {
font-family: 'Nanum Gothic';
font-style: normal;
font-weight: 400;
src: url(/static_fonts/NanumGothic-Regular.woff2) format("woff2"),
url(/static_fonts/NanumGothic-Regular.woff) format("woff"),
url(/static_fonts/NanumGothic-Regular.ttf) format("truetype");
}
@font-face {
font-family: 'Nanum Gothic'; /* Nanum Gothic Bold x */
font-style: normal;
font-weight: 700;
src: url(/static_fonts/NanumGothic-Bold.woff2) format("woff2"),
url(/static_fonts/NanumGothic-Bold.woff) format("woff"),
url(/static_fonts/NanumGothic-Bold.ttf) format("truetype");
}
@font-face {
font-family: 'Nanum Gothic'; /* Nanum Gothic ExtraBold x */
font-style: normal;
font-weight: 800;
src: url(/static_fonts/NanumGothic-ExtraBold.woff2) format("woff2"),
url(/static_fonts/NanumGothic-ExtraBold.woff) format("woff"),
url(/static_fonts/NanumGothic-ExtraBold.ttf) format("truetype");
}
@font-face {
font-family: 'Nanum Gothic'; /* Nanum Gothic italic x */
font-style: italic;
font-weight: 400;
src: url(/static_fonts/NanumGothic-Regular-italic.woff2) format("woff2"),
url(/static_fonts/NanumGothic-Regular-italic.woff) format("woff"),
url(/static_fonts/NanumGothic-Regular-italic.ttf) format("truetype");
}
@font-face {
font-family: 'Nanum Gothic';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('NanumGothic'), url(https://fonts.gstatic.com/s/nanumgothic/v17/PN_3Rfi-oW3hYwmKDpxS7F_z-7rJxHVIsPV5MbNO2rV2_va-Nv6p.10.woff2) format('woff2');
unicode-range: U+d1b4, U+d1b6-d1f3, U+d1f5-d22b, U+d22e-d22f, U+d231-d233, U+d235-d23b, U+d23d-d240, U+d242-d256;
}
/* [11] */
@font-face {
font-family: 'Nanum Gothic';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('NanumGothic'), url(https://fonts.gstatic.com/s/nanumgothic/v17/PN_3Rfi-oW3hYwmKDpxS7F_z-7rJxHVIsPV5MbNO2rV2_va-Nv6p.11.woff2) format('woff2');
unicode-range: U+d105-d12f, U+d132-d133, U+d135-d137, U+d139-d13f, U+d141-d142, U+d144, U+d146-d14b, U+d14e-d14f, U+d151-d153, U+d155-d15b, U+d15e-d187, U+d189-d19f, U+d1a2-d1a3, U+d1a5-d1a7, U+d1a9-d1af, U+d1b2-d1b3;
}
출처: 구글의 나눔고딕 cdn (https://fonts.googleapis.com/css?family=Nanum+Gothic&display=swap)
<link href="https://fonts.googleapis.com/css?family=Noto+Sans+KR&display=swap&subset=korean&text=담당업무" rel="stylesheet">
출처: https://www.malthemilthers.com/font-loading-strategy-acceptable-flash-of-invisible-text/
일단은 텍스트라도 먼저 보이는 게..
auto - 브라우저의 기본동작에 맡기는 방식이다.
block - FOIT 즉, 타임아웃까지 텍스트를 보여주지 않음
swap - 응답이 올 때까지 무한정 기다리고 그 전까진 바로 기본폰트를 보여준다. 꼭 적용해야만 하는 중요폰트일 경우에 쓸 수 있다.
fallback - 100ms 내외의 시간 동안만 block을 하고 기본폰트를 보여준다. 응답이 오면 해당 폰트로 swap 하지만 짧은 시간(3s)만 기다린다.
optional - 100ms 내외의 시간 동안만 block을 하고 기본폰트를 보여준다. 그 후에는 대체하지 않는다. => 폰트가 상관이 없을 때
fallback이 위에서 말한 FOIT를 방지하고 FOUT를 최소화하는 방법이다.
FOIT x
FOUT x
하지만,
FontFace object가 있지만 모든 브라우저 지원이 아님.
async function loadFonts() {
const font = new FontFace('myfont', 'url(myfont.woff)');
// wait for font to be loaded
await font.load();
// add font to document
document.fonts.add(font);
// enable font with CSS class
document.body.classList.add('fonts-loaded');
}
출처: https://developer.mozilla.org/en-US/docs/Web/API/FontFace/FontFace
font face observer | webfontloader | |
---|---|---|
크기 | 5.83 KB | 12.2 KB |
특징 | 가볍고 스크롤 이벤트를 탐지해서 로딩하기 때문에 빠름 | 구글과 typekit이 공동으로 만들어서 둘의 지원이 잘되어 있음 동기와 비동기 방식 제공, 상태에 따른 클래스를 html 태그에 직접 추가해줌 |
api | promise로 직접구현 | fontface가 있으면 우선 사용 |
event | load만 제공 | loading, active, inactive 등을 제공 |
body {
font-family: sans-serif, Lucida Sans Unicode, arial;
}
.fonts-loaded body {
font-family: 'Nanum Gothic', sans-serif, Lucida Sans Unicode, arial;
}
<script>
var font = new FontFaceObserver('Nanum Gothic');
font.load().then(function() {
document.documentElement.classList.add('fonts-loaded');
});
</script>
.fonts-loaded body {
font-family: 'Nanum Gothic', sans-serif, Lucida Sans Unicode, arial;
}
.blocking-time {
opacity: 0;
}
.fonts-loaded.blocking-time {
opacity: 1;
}
<script>
document.documentElement.classList.add('blocking-time');
setTimeout(function() {
document.documentElement.classList.remove('blocking-time');
}, 400)
var font = new FontFaceObserver('Nanum Gothic');
font.load(null, 3000).then(function() {
document.documentElement.classList.add('fonts-loaded');
});
</script>
<script>
if (sessionStorage.fontsLoaded) {
var html = document.documentElement;
html.classList.add("fonts-loaded")
)} else {
document.documentElement.classList.add('blocking-time');
setTimeout(function() {
document.documentElement.classList.remove('blocking-time');
}, 400)
var font = new FontFaceObserver('Nanum Gothic');
font.load(null, 3000).then(function() {
document.documentElement.classList.add('fonts-loaded');
sessionStorage.fontsLoaded = true;
});
}
</script>
<link rel="preload" href="/static_fonts/NanumGothic-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous">
감사합니다. 많은 도움이 되었습니다!