
ãŸããã
ãã®èšäºã¯ãæåééãæå€§é«ããªã©ãã¿ã€ãã°ã©ãã£ãŒãããã¹ãã«é¢é£ãããã¹ãŠã®å¯èœæ§ã«ã€ããŠã§ã¯ãããŸããã ããããããã¯ååãªå¥œå¥å¿ãšæéããããŠæ·±ãç ç©¶ã§ããé¢çœãæ©äŒã®ãªã¹ãã§ãã ã»ãšãã©ã®å Žåã圌ããè³ã®ç«¯ããç¥ããªãã£ããèãããããªãã£ãäœããããããšãé¡ã£ãŠããŸãã
ãšã³ããªãŒ
2016幎ã«ã¯ãéæšæºã®ãã©ã³ãã䜿çšããŠãããŠãŒã¶ãŒãé©ãããããšã¯ãããŸããã
93ïŒ
ã®ãã©ãŠã¶ãŒããµããŒãããŠãããçŽ
62ïŒ
ã®ãµã€ãããããã䜿çšããŠããŸãã 誰ããåã«@ font-faceãæžãããGoogle Fontsã§<link>ãåã蟌ã¿ãŸãã誰ããcssã§base64ã«ã¡ã¬ãã€ãã®ãã©ã³ããçŽæ¥åã蟌ã¿ãŸãã å€ãã®æ©äŒããããŸãã
èªã¿èŸŒã¿äž
èšäºã¯ããã©ã³ããããŠã³ããŒãããéã«ãã©ãŠã¶ãŒã®ããŸããŸãªåäœã瀺ãã¿ãã¬ãããªãã§ã¯äžå®å
šã«ãªããŸãããæ¿å
¥ããäœè£ã¯ãããŸãããéåžžã«äžè¬çã§ãããããç¥çµè³ªãªãããåŒãèµ·ããå¯èœæ§ããããŸãã
äžè¬çãªæŠå¿µïŒ
FOIT-ç®ã«èŠããªãããã¹ãã®ãã©ãã·ã¥ã æåã«ãããã¹ãã®ãªãããŒãžãæç»ãããããã«ç®çã®ãã©ã³ãã§æç»ãããŸãã
FOUT-ã¹ã¿ã€ã«ä»ããããŠããªãããã¹ãã®ãã©ãã·ã¥ã æåã«1ã€ã®ãã©ã³ãã䜿çšãããæ¬¡ã«ããŒãããããã©ã³ãã䜿çšãããŸãã
FOFT-ãã®ãµãã¿ã€ãã®åé¡ãåºå¥ãã人ãããŸãããããŸãäžè¬çã§ã¯ãããŸããã
Zach Leatherman ïŒ
ãã·ã¢èªç ïŒ
ã«ããæè¿ã®èšäºã§ã¯ãããŸããŸãªãã©ã³ãã®ããŒãæ¹æ³ãéåžžã«ãã説æãããŠãããããããã«ãã©ã¹ãšãã€ãã¹ããããŸãã ããŸããŸãªãªãã·ã§ã³ã®æŠèŠãç°¡åã«èª¬æããŸããå匷ããå¿
èŠãããå Žåã¯ãäžé£ã®ãªã³ã¯ãçšæãããŠããŸãã
远å ã®ããªãã¯ãªãã®@ font-face
ããã¯äžè¬çã§ããããªãã¯ãã©ãŠã¶ã®ãªãããŸãŸã«ãã¹ãŠãæ®ãããšãã§ããŸãã ãŸãããŠãŒã¶ãŒããã®åäœã«æ¢ã«æ
£ããŠããå¯èœæ§ãé«ããåé¡ã«æ°ä»ããªããšããå©ç¹ããããŸãã çæïŒãã©ãŠã¶ãŒããšã«ç°ãªãåäœãå Žåã«ãã£ãŠã¯ç©è°ãéžãåäœã ãµãã¡ãªããã³ãã®ä»ã®ãã©ãŠã¶ã§ã¯ããã©ã³ãã®èªã¿èŸŒã¿ã«åé¡ãããå Žåãé·æé
äœã衚瀺ãã
ãªãå ŽåããããŸã ã
é·æïŒ
- äœåãªåªåãªã
- ããããããŠãŒã¶ãŒã¯ãã®åäœã«æ
£ããŠããããã£ãã«ããã«éäžããªã
çæïŒ
- ç°ãªããã©ãŠã¶ãŒã§ã®ç°ãªãåäœ
- å Žåã«ãã£ãŠã¯ç©è°ãéžãæ¯ãèã
ãã©ã³ãèªã¿èŸŒã¿æ€åºã©ã€ãã©ãª
äžè¬çãªèãæ¹ïŒããŒãããåã«æšæºãã©ã³ãã䜿çšããããŒãåŸã«ã¯ã©ã¹ãbodyã«åãæ¿ããŠãæ°ãããã©ã³ããããŒãžå
šäœã«å«ãŸããŸãã ããã¯ãInternet Explorerããã³Edgeã®æšæºçãªåäœã«äŒŒãŠããŸãã
é·æïŒ
- ãã©ã³ãå¶åŸ¡
- å°ããã©ã€ãã©ãªãµã€ãº
- ãã 䜿ã
çæïŒ
- ãŠãŒã¶ãŒã«æ°ä»ããã©ã³ãã®åãæ¿ã
- ããã¹ããµã€ãºã®å€æŽã«ãããããŒãžäžã®èŠçŽ ãç§»åããå¯èœæ§ããããŸã
- åèµ·åæã«ãã©ã³ããåæç»ãããªãããã«ã¯ã远å ã®ããªãã¯ãå¿
èŠã§ããcookiesã®ãã©ã°ãsessionStorage
åç
§ïŒ
Base64ãã©ã³ããšã³ã³ãŒãã£ã³ã°
æã倿§ãªæ¹æ³ã ãã©ã³ããã¡ã€ã³ã¹ã¿ã€ã«ã·ãŒãã«çŽæ¥ã€ã³ã©ã€ã³ã§æ¿å
¥ããããéåæã§ããŒãããããlocalStorageã«è¿œå ãããã§ããŸãã 誰ãã«ãšã£ãŠãgzipã®åŸããµã€ãºããã€ããªãã¡ã€ã«ãšã¯ããªãç°ãªãããšã¯äºæ³å€ã§ãã
é·æïŒ
- äžè¬ã«ããã©ã³ãã®èªã¿èŸŒã¿ã決å®ããããã«è¿œå ã®ã©ã€ãã©ãªã¯å¿
èŠãããŸãã
- ã¡ã€ã³éšåãšäžç·ã«äœ¿çšãããšãcssã¯foitãšfoutã®ç¶æ³ãããŸãäžè¬çã«ããŸããã
- localStorageã«ä¿åããå Žåããã¹ãŠã®ãã©ã³ããã£ãã·ã³ã°ãæå
ã«ãããŸã
çæïŒ
- ããã€ãã®ã¿ã€ãã®ãã©ã³ãã®ãµããŒãã倱ãããŸããã ããããè€è£œããå¿
èŠããããŸãïŒãããã£ãŠãå
šäœã®ãµã€ãºã倧ããããŸãïŒããæãäžè¬çãªãã®ãéžæããŸãïŒããšãã°ãwoffãšwoff2ããã®ç¯çŽã倱ããŸãïŒ
- CSSããŠã³ããŒãã®çµäºã¯ããã©ã³ããããã«è¡šç€ºãããããšãä¿èšŒãããã®ã§ã¯ãããŸããïŒ ãã®cssãããŒãžã«çŽæ¥è²Œãä»ããããã«ã ãã©ãŠã¶ã¯ããã©ã³ãã䜿çšããåã«è§£æããæéãå¿
èŠã§ãã ãããã¯ãã¹ãŠãããã©ã«ãã®ãã©ã³ããfoitãç®çã®ãã©ã³ãã®3段éã®ã¬ã³ããªã³ã°ã«ãªããŸãã
- åã«cssã§è²Œãä»ãããšãããŒãžå
šäœã®æåã®ã¬ã³ããªã³ã°ãé
ããŸã
åç
§ïŒ
ãã©ã³ã衚瀺
ããŒãæã«ãã©ã³ãã®è¡šç€ºãå¶åŸ¡ã§ããæ°ãã
cssãããã㣠ã é·æãšçæã¯æããã§ãïŒäœ¿ãããããšè²§åŒ±ãªãµããŒãïŒãããããªãïŒã
<link rel = preload>
ããã¯æ£ç¢ºãªããŠã³ããŒãæ¹æ³ã§ã¯ãªããæé©åã§ãã ããªããŒãã䜿çšãããšãWebãã©ã³ãã®ããŠã³ããŒããçµäºãããŸã§ã®æéãççž®ã§ããŸãããŸããfoitã®å¯èœæ§ãäœæžã§ããŸãã ç¹æ»
ããŒã¹ã®ãã©ãŠã¶ã¯ã察å¿ãããã©ã³ããå«ãããŒãžäžã®ããã¹ããèŠã€ããåŸã«ã®ã¿ãã©ã³ãã®ããŠã³ããŒããéå§ããŸããããã«ãããããŒãžã®æçµè¡šç€ºã倧å¹
ã«é
ããŸããcssãããŠã³ããŒãããè§£æããããªãŒããŠã¹ã«é©çšããç®çã®èŠçŽ ãèŠã€ããå¿
èŠããããŸãã preloadã¯ãæå®ããããªãœãŒã¹ãä»ããããŒãããå¿
èŠãããããšããã©ãŠã¶ã«äŒããŸãã asãtypeãããã³crossorigin屿§ãå¿
èŠã§ãã
åç
§ïŒ
æ®ããã¹ãŠ
äžèšã®ãã¹ãŠã®ããªãšãŒã·ã§ã³ãããã€ããããJSãä»ãããªãã·ã§ã³ããããŸãïŒè©³çްã¯ä»¥äžãåç
§ïŒã ããšãã°ãããŠã³ããŒãã§ãããã©ã³ãã¹ã¿ã€ã«ã¯1ã€ã ãã§ãæ®ãã¯ç¹°ãè¿ãã¢ã¯ã»ã¹ããããã«äœ¿çšã§ããŸãã ãŸãã¯ã䜿çšãããã©ã³ãæåã®ã»ããã倧å¹
ã«æžããïŒæå€§5ã10 kbïŒããã¹ãŠãbase64ã«å
¥ããŸãã ãŸãã¯ãæåã®åŒã³åºãã§ãæåã®åŒã³åºãã§éæšæºã®ãã©ã³ãã䜿çšãããããããããŠã³ããŒãããã ãã§ããïŒ ãŸããããã¹ããã»ãšãã©ãªãå Žåã¯ãã©ã³ãã䜿çšã§ããŸãããSVGã¯ããŽã«éåžžã«é©ããŠããŸãã äœãéžæããŸããïŒ ãã¶ã€ã³ããã©ã³ãã察象è
ã«åºã¥ããŠã誰ããèªåã§æ±ºå®ããŸãã
æžäœ
æ°ãã
js-apiã䜿çšãããšã@ font-face宣èšããŸã£ãã䜿çšããã«ãã©ã³ããããŠã³ããŒãããŠäœ¿çšã§ããŸãã ãããäœã§ããããæç¢ºã«ããããã®ããã€ãã®äŸïŒ
var f = new FontFace("newfont", "url(newfont.woff)", {}); f.load().then(function (loadedFace) { document.fonts.add(loadedFace); document.body.style.fontFamily = "newfont, serif"; });
fetch('newfont.woff2').then( res => res.arrayBuffer() ).then( buf => new FontFace("newfont", buf) ).then(ff => { document.fonts.add(ff) });
çç¥èšå·ã¯ã³ãŒãã®äžéšã§ã¯ãããŸããã
new FontFace('t', 'url( "data:application/font-woff2;base64, <...>")').load();
åé¡ã¯ããµããŒããããŠãã圢åŒãçŽæ¥çè§£ã§ããªãããšã§ãã ãã©ãŠã¶ã®ãµããŒãã
å®å
šã§ã¯ãã
ãŸããããSafari 10ã远å ãããŸããFontFaceã¯ãããã¹ãã§é衚瀺ã®èŠçŽ ãäœæããå¿
èŠããªãããããã£ã³ãã¹ãä»ããŠããã¹ããã¬ã³ããªã³ã°ããå Žåã«åœ¹ç«ã¡ãŸãã
åç
§ïŒ
CSSããããã£
ãã©ã³ãã®å€ªããšãã©ã³ãã¹ã¿ã€ã«
font-weightã¯ãããç¥ãããŠããããããã£ã§ãã å€ãã®å Žåã倧èã§å°ãªãé »åºŠã§èŠãããšãã§ããŸã-æ°å€ã«å€ããããã®ã Webã倪å/æäœ/倪å-ã€ã¿ãªãã¯ãããŸããŸãéžæãããããã«ãªã£ãããšã¯æ³šç®ã«å€ããŸããçŸåšããã¹ãŠã®çš®é¡ã®èãã軜ããäžçšåºŠãèŠãããšãã§ããŸãïŒãã®ãããªããŒã¯ãŒãã¯ãããŸããããæ°å€ã䜿çšãããŠããŸãïŒã å¥ã®è峿·±ã質åã¯ãç®çã®ã¹ã¿ã€ã«ãå©çšã§ããªãå Žåããã©ãŠã¶ã¯äœãããŸããïŒ ããŒã«ã/ã€ã¿ãªãã¯ã®å Žåãéåžžã®ãã©ã³ãã®ããªãšãŒã·ã§ã³ã«åºã¥ããŠã°ãªããçæããããšããŸãã
åç
§ïŒ
ãŠãã³ãŒãç¯å²
ãã®ããããã£ã䜿çšãããšããã©ã³ãã§è¡šç€ºããæåã®ãªã¹ããæå®ã§ããŸãã ããã¯æé©åãšããŠåœ¹ç«ã¡ãŸã-ãã®ãªã¹ãã®æåãããŒãžã«å«ãŸããŠããªãå Žåããã©ã³ãã¯ãŸã£ããããŒããããŸããã unicode-rangeã䜿çšããŠãåŒçšç¬Šãªã©ã®åã
ã®æåã®ã¹ã¿ã€ã«ãèšå®ããããã«ãŒãã«èšå·ã衚瀺ãããããããšãã§ããŸãã åé¡ã¯ãã©ãŠã¶ã«ãããã®ããããã£ã®ãµããŒãã«ããå¯èœæ§ããããåŸã
ã«æ¶ãã€ã€ãããŸãããããŠãã³ãŒãç¯å²ããªãã£ããã©ããªããããèããå¿
èŠããããŸãã
åç
§ïŒ
ãã©ã³ãããªã¢ã³ãããã³ãã©ã³ãæ©èœèšå®
font-variant-font-feature-settingsã®ãããã«æŽæ°ãããããŒãžã§ã³ã ãããã®ããããã£ã䜿çšãããšããã©ã³ãã«å«ãŸããè¿œå æ©èœã䜿çšã§ããŸãã ããšãã°ãã«ãŒãã³ã°ã察è§åæ°ãååãããã³è±¡åœ¢æåã®ããŸããŸãªãªãã·ã§ã³ã
åç
§ïŒ
ããã¹ãã¬ã³ããªã³ã°
ãã®ããããã£ã¯ããã©ã³ãã®ã¬ã³ããªã³ã°é床ã®äžè¬çãªã¬ã®ã¥ã¬ãŒã¿ãšããŠèããããŠãããã«ãŒãã³ã°ãšååã«åæã«åœ±é¿ããŸãã ãã®åã«ãé¢ãããããã®ç©ä»¶ã¯å€§ããªåé
ãåãããããžããŒãšãã¬ãŒãã®å声ãåŸãŸããã çŸåšãfont-variantãšfont-kerningã䜿çšããã®ãçã«ããªã£ãŠããŸãããããã¯ããå€ãã®å¶åŸ¡ãæäŸããŸãïŒãã©ãŠã¶ã®ãµããŒããããã»ã©éèŠã§ãªãå Žåãããã§ãªãå Žåã¯font-feature-settingsïŒã å®éãããã¹ãã¬ã³ããªã³ã°ã¯SVGã®ããããã£ã§ãããCSS仿§ã«ã¯èšè¿°ãããŠããŸããã
åç
§ïŒ
ãã©ã³ãã«ãŒãã³ã°
font-kerningã¯ãã«ãŒãã³ã°ïŒåã
ã®æåã®çµã¿åããéã®ã€ã³ãã³ãïŒã®æäœãå¶åŸ¡ããŸãã å«ããã«ã¯ããã©ã³ãèªäœã«ã«ãŒãã³ã°æ
å ±ãå¿
èŠã§ãã ããã¯ãfont-feature-settingsã®æ©èœã®äžéšãããçŸä»£çã«çœ®ãæãããã®ã§ãã
åç
§ïŒ
ãã©ã³ãã¹ãã¬ãã
å°é£ãªéåœãæã€ãã£ãã«äœ¿çšãããªã
ãããã㣠ã CSS 2ã§å°å
¥ãããInternet Explorer 9ã®Firefox 9ã§ãµããŒããããŠããŸããããCSS 2.1ããåé€ãããCSS 3ã®åã«å¿ããããæè¿Chrome 48ã«è¿œå ãããŸããã
ã€ã³ã©ã€ã³ãã©ã³ãã®äœ¿çš
OS XãšiOSã¯ãã·ã¹ãã ãã©ã³ãã«é¢ããŠéåžžã«è峿·±ãç¶æ³ã«ãããŸãã æè¿ããµã³ãã©ã³ã·ã¹ã³ãã¡ã€ã³ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ãã©ã³ããšããŠç޹ä»ãããŸããã ãŸããHelvitica Neueããã©ã³ããã¡ããªã§çŽæ¥æå®ã§ããå ŽåïŒå°ãªããšãå°é£ãªããŒãžã§ã³ã§ã¯å°ãªããšãïŒããµã³ãã©ã³ã·ã¹ã³ã§ã¯ãã®æ¹æ³ã¯æå³çã«å°é£ã§ããã æ°ããããžãã¯ã«ããã°ãéçºè
ãç¹å®ã®ãã©ã³ããã·ã£ãŒãã«ããªãããããã®ãããªå Žåã¯ãiOS 7ã§ãµããŒããããŠããããŒã¯ãŒãã-apple-system- *ãã䜿çšããå¿
èŠããããŸãã
Androidã«ã¯Robotoãã©ã³ãããããŸãããããã¯ååã§ã¯äœ¿çšã§ããŸããã ãã ããåçŽãªsans-serifãsans-serif-lightãsans-serif-mediumãªã©ã䜿çšã§ããŸãã
ã©ã€ã»ã³ã¹ã®ãããäžè¬çã«ã¯ã誰ãã®ã·ã¹ãã ãã©ã³ããååŸããŠãµãŒããŒã«é
眮ããããšã¯ã§ããŸããã ã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠãããã©ã³ãã®ã©ã€ã»ã³ã¹ã«é¢ããå¿é
ããŠãŒã¶ãŒã®è©ã«ããããããcssã§ãããã瀺ãããšã®ã¿ãèš±å¯ãããŸãã
åç
§ïŒ
æé©å
æãç°¡åãªæ¹æ³ã¯ãæé©ãªåœ¢åŒã䜿çšããããšã§ãã å°ãåã«ç»å ŽããWoff2ã¯ãwoffã«æ¯ã¹ãŠãã¡ã€ã«ãµã€ãºãçŽ30ïŒ
åæžãããŠããããããã©ã³ãã®æé©ãªãªãã·ã§ã³ãšããŠè©äŸ¡ãããŠããŸãã
caniuseã«ãã倿 -woff2ã¯Edgeã§éããªããµããŒããããæ°ããSafari 10ã§ãµããŒããããäºå®ã§ãã
å¥ã®æ¹æ³ã¯ããã©ã³ãèªäœããæªäœ¿çšã®æ
å ±ãåé€ããããšã§ããããšãã°ãæªäœ¿çšã®èšèªã®ååãæåã»ããã§ãã ãŸãããã¯ãã«ãã£ã©ã¯ã¿ãŒã«ãŒãèªäœãåçŽåããããšãã§ããŸããå Žåã«ãã£ãŠã¯ããã€ã³ããå€ãããŠç°¡åã«èšå®ã§ããããšããããŸãã
åç
§ïŒ
èŠçŽ ã®çŸåšã®ãã©ã³ããæ±ºå®ãã
æã
ãã¿ã¹ã¯ã¯èŠçŽ ã®çŸåšã®ãã©ã³ããæ±ºå®ããããšã§ãã éçºã®å ŽåãChromium Developer ToolsãšFirefoxããæè¿è¿ããããã©ã³ãã圹ç«ã¡ãŸãã ããã§ãªããã°ãèŠçŽ ã®ãµã€ãºãèšç®ããfont-familyå€ã倿ŽããåŸã«æ¯èŒããããã ãã«æ®ããŸãã FontFaceOnloadãšFontFaceObserverã¯ãFontFace jsã€ã³ã¿ãŒãã§ãŒã¹ããã©ãŠã¶ãŒã§äœ¿çšã§ããªãå Žåããã®ãããªããšãè¡ããŸãã ãã©ãŠã¶ãŒããã®ããã®æç¢ºãªAPIãæäŸããªãã®ã¯ãªãã§ããïŒ å®éã«ã¯ã1ã€ã®èŠçŽ å
ã®åã
ã®æåãç°ãªããã©ã³ãã§æç»ã§ãããããã¯font-familyã«ãªã¹ããããŠããŸãã ããã¯ãäžèšã®unicode-rangeããã³ãã©ã³ãã°ãªãã»ããèªäœã®åœ±é¿ãåããå¯èœæ§ããããŸãã
ã«ã¹ã¿ã ãã©ã³ãã¯ã©ãã§å
¥æã§ããŸããïŒ
ãã®ä»