Веб-шрифты 2016. Подключаем, используем.
Привет, разработчик!
Раньше для того, чтобы подключить сторонний шрифт на сайт использовалась директива @font-face с ссылкой на шрифт в нескольких форматах(eot, svg, ttf, woff и т.д.). В 2015 году появилась возможность использовать кеширование шрифта в localstorage, а также отпала необходимость использовать много разных форматов. О том, как наименее трудозатратно и удобно использовать веб-шрифты в 2016 году и пойдет речь в этой заметке.
Итак, суть метода:
- Берем шрифты в формате woff или woff2
- Конвертируем шрифты в base64 в автоматическом режиме(gulp)
- Асинхронно загружаем шрифты на страницу через js-функцию.
- При первой загрузке страницы - шрифты загружаются в первый раз, что вызовет небольщое “моргание”
- При последующих загрузках шрифт будет приходить с localstorage, “морганий не будет”
Конвертация
Для конвертации мы будем использовать gulp-плагин gulp-cssfont64. Если вы не работали с gulp’ом рекомедую статью на нашем блоге Начинаем работать с gulp.js. Устанавливаем плагин, прописываем в gulpfile зависимость и таск:
gulpfile.js
В таске мы берем woff и woff2 шрифты, остальные не нужны. Т.е. для каждого шрифта мы берем один ИЛИ другой формат. Браузеры, которые не поддерживают woff отрисуют шрифты по умолчанию, о них позже.
Добавим watcher, чтобы шрифты конвертировались автоматически:
Убедитесь, что ваши шрифты сконвертированы. Например из файла ‘assets/fonts/roboto-blackitalic.woff’ получился ‘dist/styles/roboto-blackitalic.css’.
Асинхронная загрузка
Для загрузки шрифтов будем использовать отдельный js-файл. Его нужно будет подключить до загрузки стилей:
Содержимое файла font-loader.js
Сначала мы объявляем функцию для загрузки шрифта, а затем вызываем её с аргументами названия шрифта и пути до css-файла. Если вам нужно подключить еще один шрифт - вызывайте еще одну функцию loadFont.
Далее, вы можете в css применять свой шрифт. Если вы используете препроцессор, рекомендуется заносить названия шрифтов в переменные. В моем случае это может выгдядить так:
Как называть переменные для шрифтов - выбор за вами.
Тем временем в браузере
При первой загрузке страницы ваш текст немного моргнет. Сначала загрузится дефолтный шрифт, который вы указали в переменной(в нашем случае sans-serif), а затем основной шрифт. В Chrome в вкладке Network отобразится загрузка шрифта:
При перезагрузке страницы в вкладке Network запись о загрузке шрифта пропадет. С чем это связано? При первой загрузке шрифт был помещен в localStorage, и теперь браузер берет его оттуда, не делая лишний запрос.
На этом все.