С момента появления веб-шрифтов в 2009 году веб-дизайнеры получили доступ к богатому набору типографских палитр. Эти шрифты в основном применялись через правило CS @fontface
, что позволяло дизайнерам отказаться от использования системных (веб-безопасных) шрифтов.
Крупные разработчики шрифтов предлагали (и предлагают) разнообразные форматы файлов шрифтов, в первую очередь Google Fonts.
В то время использование веб-шрифтов означало работу с отдельными файлами для каждого начертания и стиля. Например, такие имена файлов ясно показывали, как шрифт будет отображаться при использовании:
Roboto-Italic.woff2
Lato-BoldItalic.woff2
OpenSans-SemiBold.ttf
WorkSans-ExtraBold.ttf.
Каждый вариант приходилось загружать как отдельный файл. Это увеличивало размер страницы, требовало больше HTTP-запросов и усложняло выбор и применение шрифтов в дизайне.
Рост популярности вариативных шрифтов
В 2016 году произошел крупный прорыв в цифровой типографике: появились вариативные шрифты. Разработанные совместно Google, Apple, Adobe и Microsoft, они быстро стали популярными.
Отличительной особенностью вариативного шрифта является то, что он может содержать любой из следующих элементов, каждый из которых называется осью:
Ось | CSS-свойство |
толщина | font-weight |
стиль | font-style: italic |
наклонный | font-style: oblique |
растягивающийся | font-stretch |
Оптический размер оси (opsz) | font-variations-setting |
Наиболее распространённым форматом файла является .woff2
(Web Open Font Format) — формат с высокой степенью сжатия, получивший рекомендацию W3C в 2018 году. Хотя такие форматы, как .ttf
и .otf
можно использовать в качестве вариативных шрифтов, наиболее эффективным является формат .woff2
. Все современные браузеры поддерживают вариативные шрифты.
Для ясности мы проводим различие между «веб-шрифтами» и «вариативными шрифтами». Однако на практике вариативные шрифты часто объединяют с веб-шрифтами.
Зачем использовать переменные шрифты?
Есть три веские причины использовать вариативные шрифты в своих проектах:
- Повышенная производительность: вместо вызова нескольких отдельных файлов шрифтов (обычный, полужирный, курсив и т. д.) один файл переменного шрифта может охватывать все шрифты. Это означает меньше HTTP-запросов и более быструю загрузку.
- Гибкость дизайна: переменные шрифты обеспечивают точный контроль. Например, вместо того, чтобы ограничиваться значениями
font-weight: 500
или600
, можно задать пользовательское значение, например532
. - Адаптивная типографика: поскольку вариативные шрифты легко адаптируются, вы можете создавать типографику, которая будет реагировать на все устройства. Хороший пример:
font-weight: clamp()
масштабирование веса между областями просмотра без резких «скачков», характерных для статических файлов шрифтов.
Как WordPress использует переменные шрифты
С выпуском WordPress 6.1 в ноябре 2022 года в систему была добавлена поддержка переменных шрифтов theme.json
. Впервые это было продемонстрировано в Twenty Twenty-Three.
Настройка темы с помощью переменных шрифтов
При работе с дочерней темой TT5 мы начинаем с добавления в очередь стилей родительской и дочерней темы.
Чтобы гарантировать единообразное отображение наших пользовательских шрифтов как в редакторе, так и во внешнем интерфейсе, также добавляем в очередь fonts.css
файл, содержащий необходимые @font-face
объявления.
<?php // enqueue parent and child styles add_action('wp_enqueue_scripts', function() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_style( 'child-style', get_stylesheet_uri(), array('parent-style'), wp_get_theme()->get('Version') ); // enqueue custom fonts wp_enqueue_style( 'child-fonts', get_stylesheet_directory_uri() . '/fonts.css', array(), wp_get_theme()->get('Version') ); });
Как всегда, способ добавления скриптов в очередь зависит от самой темы. Единого стандартного метода не существует.Чтобы убедиться, что мы правильно настроили дочернюю тему, запускаем этот тест styles.css
:
body { background: #0000ff; }
Добавление шрифтов с помощью theme.json
В TT5 по умолчанию уже включены два вариативных шрифта: Manrope и Fira Code . В этом примере добавим Vollkorn и сделаем его шрифтом заголовков по умолчанию с толщиной 600.
Вот соответствующая часть theme.json:
{ "$schema": "https://schemas.wp.org/wp/6.7/theme.json", "version": 3, "settings": { "appearanceTools": true, "typography": { "fontFamilies": [ { "name": "Manrope", "slug": "manrope", "fontFamily": "Manrope, sans-serif", "fontFace": [ { "fontFamily": "Manrope", "src": ["file:../twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2"], "fontWeight": "200 800", "fontStyle": "normal" } ] }, { "name": "Fira Code", "slug": "fira-code", "fontFamily": "\"Fira Code\", monospace", "fontFace": [ { "fontFamily": "\"Fira Code\"", "src": ["file:../twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2"], "fontWeight": "300 700", "fontStyle": "normal" } ] }, { "name": "Vollkorn", "slug": "vollkorn", "fontFamily": "Vollkorn, serif", "fontFace": [ { "fontFamily": "Vollkorn", "src": ["file:../twentytwentyfive/assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2"], "fontWeight": "400 900", "fontStyle": "normal" }, { "fontFamily": "Vollkorn", "src": ["file:../twentytwentyfive/assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2"], "fontWeight": "400 900", "fontStyle": "italic" } ] } ], "customFontSize": true, "fluid": true } }, "styles": { "typography": { "fontFamily": "var:preset|font-family|manrope" }, "elements": { "heading": { "typography": { "fontFamily": "var:preset|font-family|vollkorn", "fontWeight": "600" } } } } }
Результатом стало появление шрифта Vollkorn на всем сайте.
Шрифт Vollkorn теперь доступен в библиотеке шрифтов WordPress.
Следует отметить несколько моментов:
- Возможно, вы захотите скопировать файлы Manrope и Fira Code своей дочерней теме в случае, если TT5 обновится и укажет новые пути к файлам.
- Может показаться, что код для этих шрифтов избыточен, поскольку они уже зарегистрированы в родительской теме. Однако важно объявить их в дочерней теме. Это гарантирует их корректное отображение в интерфейсе библиотеки шрифтов и их доступность даже при обновлении родительской темы с новыми путями к файлам или внесении изменений.
- Мы ссылаемся на два разных файла Vollkorn.
Обеспечение правильной загрузки шрифтов
Иногда шрифты не отображаются корректно на странице, пока вы не объявите их в CSS. Вот типичный пример styles.css
:
/* Theme Name: TT5 Child Template: twentytwentyfive Version: 1.0 */ /* Ensure fonts are loaded and applied */ body { font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif; } code, pre { font-family: 'Fira Code', 'Courier New', monospace; } h1, h2, h3, h4, h5, h6 { font-family: 'Vollkorn', 'Times New Roman', serif; }
А в fonts.css
мы объявляем файлы шрифтов с помощью @font-face
. Это гарантирует, что браузер знает, какие шрифты загружать и применять. Если вы хотите действительно предварительно загрузить критически важные шрифты (например, основной шрифт заголовка), то можете добавить <link rel="preload">
к сайту <head>
dir="auto"> через хуки WordPress. В большинстве случаев @font-face
правило с font-display: swap
обеспечивает хороший баланс между производительностью и пользовательским опытом.
/* Preload critical fonts for better performance */ @font-face { font-family: 'Manrope'; src: url('../twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2') format('woff2'); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: 'Fira Code'; src: url('../twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2') format('woff2'); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: 'Vollkorn'; src: url('../twentytwentyfive/assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2') format('woff2'); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: 'Vollkorn'; src: url('../twentytwentyfive/assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2') format('woff2'); font-weight: 100 900; font-style: italic; font-display: swap; }
В результате получается страница, на которой заголовки по умолчанию имеют шрифт Vollkorn с весом 600.
При желании можно включить @font-face
-правила в styles.css
. Это также избавит от необходимости добавлять fonts.css
файл в очередь.
Упрощаем для пользователей выбор начертания шрифта
Одно из главных преимуществ переменных шрифтов заключается в том, что их насыщенность не ограничена фиксированными значениями, такими как 400 или 600. Вы можете использовать любое значение от 100 до 900. Проблема в том, что WordPress не предоставляет встроенного пользовательского интерфейса для выбора этих значений насыщенности.
Чтобы решить эту проблему, мы создали минималистичный плагин под названием «Параметры начертания шрифта». Он добавляет страницу настроек в раздел «Внешний вид» > «Начертание шрифта», где можно задать собственные значения начертания для основного текста, заголовков и блоков кода.
Вот сокращенный взгляд на основную логику:
<?php /** * Plugin Name: Font Weight Options */ class Font_Weight_Options { public function __construct() { add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); add_action( 'wp_head', array( $this, 'apply_font_weights_frontend' ) ); } public function add_admin_menu() { add_theme_page( __( 'Font Weight Settings', 'font-weight-options' ), __( 'Font Weight', 'font-weight-options' ), 'manage_options', 'font-weight-settings', array( $this, 'render_admin_page' ) ); } public function apply_font_weights_frontend() { $weights = get_option( 'fwo_font_weights', array( 'body' => 400, 'headings' => 600, 'code' => 400, ) ); echo "<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cstyle%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20body%20%7B%20font-weight%3A%20%7B%24weights%5B'body'%5D%7D%20!important%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20h1%2C%20h2%2C%20h3%2C%20h4%2C%20h5%2C%20h6%20%7B%20font-weight%3A%20%7B%24weights%5B'headings'%5D%7D%20!important%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20code%2C%20pre%20%7B%20font-weight%3A%20%7B%24weights%5B'code'%5D%7D%20!important%3B%20%7D%0A%20%20%20%20%20%20%20%20%3C%2Fstyle%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<style>" title="<style>" />"; } } new Font_Weight_Options();
Фрагмент выше демонстрирует основную логику. Мы опубликовали полный исходный код на GitHub Gist, если вы хотите увидеть плагин целиком, включая форму настроек и валидацию.
Полная версия добавляет:
- Значения по умолчанию при активации плагина.
- Простая форма настроек администратора с числовыми полями (100–900).
- Проверка для поддержания значений в пределах диапазона.
- Вывод весов как в редакторе блоков, так и в интерфейсе.
В результате появилась новая страница в панели администратора WP, которая позволяет пользователям устанавливать значения насыщенности для трёх шрифтов. Мы выбрали три «нестандартных» значения.
Новая страница настроек насыщенности шрифтов на панели администратора WordPress.
Результатом является страница с соответствующими значениями начертания шрифтов, которые отображаются так, как и ожидалось, в редакторе страниц и на внешнем интерфейсе.
Страница в админке WordPress, отображающая три шрифта с назначенной им шириной.
Более простой и удобный способ добавить один переменный шрифт
Но что делать, если вы предпочитаете что-то другое, а не шрифт Google? Существует множество способов получить должным образом лицензированные шрифты с открытым исходным кодом для ваших проектов. Мы обратились к GitHub, чтобы получить SourceSans3VF-Upright — шрифт Adobe.
Наша цель — использовать его как дополнительный шрифт, который будет корректно отображаться в редакторе и на внешнем интерфейсе.
Файл шрифта находится в /assets/fonts
папке нашей дочерней темы. Там мы создали functions.php
.
<?php /** * Enqueue parent and child theme styles. */ function twentytwentyfive_kinstachild_enqueue_styles() { // Parent theme style. wp_enqueue_style( 'twentytwentyfive-style', get_parent_theme_file_uri( 'style.css' ), array(), wp_get_theme()-&amp;amp;gt;get( 'Version' ) ); // Child theme style. wp_enqueue_style( 'twentytwentyfive-child-style', get_stylesheet_uri(), array( 'twentytwentyfive-style' ), wp_get_theme()-&amp;amp;gt;get( 'Version' ) ); } add_action( 'wp_enqueue_scripts', 'twentytwentyfive_kinstachild_enqueue_styles' ); /** * Enqueue child theme styles in the editor. */ add_action( 'after_setup_theme', function() { add_editor_style( 'style.css' ); } );
Информация
Обратите внимание, что в этой более простой настройке мы не добавляем пользовательские шрифты в очередь вручную. Это связано с тем, что переменные шрифты, определенные в
theme.json
, автоматически обрабатываются WordPress, если они правильно объявлены. Это одно из преимуществ использования блочной системы тем.
Как и в предыдущем примере, theme.json
файл должен ссылаться на коды Manrope и Fira из родительского файла. Отсутствие этих ссылок приведет к их удалению из темы.
{ "$schema": "https://schemas.wp.org/wp/6.7/theme.json", "version": 3, "settings": { "typography": { "fontFamilies": [ { "name": "Manrope", "slug": "manrope", "fontFamily": "Manrope, sans-serif", "fontFace": [ { "src": [ "file:../twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2" ], "fontWeight": "100 900", "fontStyle": "normal", "fontFamily": "Manrope" } ] }, { "name": "Fira Code", "slug": "fira-code", "fontFamily": "\"Fira Code\", monospace", "fontFace": [ { "src": [ "file:../twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2" ], "fontWeight": "100 900", "fontStyle": "normal", "fontFamily": "\"Fira Code\"" } ] }, { "name": "Source Sans 3", "slug": "source-sans-3", "fontFamily": "\"Source Sans 3\", sans-serif", "fontFace": [ { "src": [ "file:./assets/fonts/SourceSans3VF-Upright.woff2" ], "fontWeight": "100 900", "fontStyle": "normal", "fontFamily": "Source Sans 3" } ] } ] } } }
Помните, что по-прежнему нужен базовый styles.css
файл, включающий необходимые метаданные, сообщающие WordPress, что вы работаете с дочерней темой.
Независимо от того, выбираете ли вы полностью индивидуальную настройку или быструю интеграцию, вариативные шрифты в WordPress — это мощный способ улучшить типографику вашего сайта. Они повышают производительность, упрощают дизайн и предоставляют адаптивные и гибкие возможности дизайна, которые просто невозможно реализовать с помощью традиционных статических шрифтов.
Чтобы раскрыть весь их потенциал, может потребоваться создать специальный пользовательский интерфейс, который отображает переменные оси (например, вес, наклон или оптический размер) и предоставляет владельцам сайтов больше контроля.
Источник: kinsta.com
Комментарии к записи: 0