Адаптация типографики к предпочтениям пользователя с помощью CSS

Метод адаптации шрифта к предпочтениям ваших пользователей, чтобы им было максимально комфортно читать ваш контент.

Вовлечение пользователей в процесс дизайна стало захватывающим событием для пользователей, дизайнеров и разработчиков. Пользователи могут перейти на ваш сайт и легко начать использовать контент, а их предпочтения будут полностью учтены в результате дизайна.

В этой записи блога рассматривается использование медиазапросов CSS с вариативным шрифтом для ещё большей адаптации к условиям чтения. Начертание и насыщенность шрифта можно настроить с помощью font-variation-settings , что позволяет выполнять микронастройку с учётом различных предпочтений и контекста, например, выбора тёмного режима или высокой контрастности. Мы можем использовать эти настройки и адаптировать вариативный шрифт под определённый пользовательский опыт.

  • В темном режиме градация немного снижена.
  • Высокая контрастность достигается за счет более жирного шрифта.
  • Низкий контраст означает более тонкий шрифт.
https://codepen.io/argyleink/pen/mdQrqvj

Продолжайте читать, чтобы понять каждую часть CSS и вариативного шрифта, которые делают возможным этот значимый момент!

Начало настройки

Чтобы помочь нам сосредоточиться на значениях CSS и настроек вариантов шрифта, а также дать нам что-то для чтения и просмотра, вот разметка, которую вы можете использовать для предварительного просмотра работы:

<h1>Variable font weight based on contrast preference</h1>  <p>   Lorem ipsum dolor sit amet consectetur adipisicing elit.   Officia, quod? Quidem, nemo aliquam, magnam rerum distinctio   itaque nisi nam, cupiditate dolorum ad sint. Soluta nemo   labore aliquid ex, dicta corporis. </p> 

Размер шрифта уже адаптивен к предпочтениям пользователя без добавления CSS. Вот видео из другой демонстрации, показывающее, как установка font-size в пикселях сведет на нет любые пользовательские настройки, и почему следует устанавливать размер шрифта в единицах измерения (rem):

Наконец, для центрирования и поддержки демонстрации немного CSS:

@layer demo.support {   body {     display: grid;     place-content: center;     padding: var(--size-5);     gap: var(--size-5);   }    h1 {     text-wrap: balance;   } } 

Скриншот демо-версии на данный момент, в тёмной и светлой темах.

Эта демонстрационная настройка позволит вам начать тестирование и реализацию этой замечательной UX-функции типографики.

Загрузка вариативного шрифта Roboto Flex

Адаптивная стратегия основана на использовании вариативного шрифта с осевыми осями для настройки, в частности, GRAD и wght . В этой статье целевыми пользовательскими настройками адаптивного шрифта являются цветовая схема и контрастность, которые будут адаптировать эти оси в соответствии с предпочтениями пользователя.

Загрузите переменный шрифт с помощью API CSS @font-face :

@font-face {   font-family: "Roboto Flex";   src: url('https://assets.codepen.io/2585/RobotoFlex') format('truetype'); } 

Затем примените шрифт к некоторому контенту. Следующий CSS-код применяет его ко всему:

@layer demo.support {   body {     font-family: Roboto Flex;   } } 

Скриншот демо-версии на данный момент, шрифт Roboto Flex теперь доступен в тёмной и светлой темах.

Пользовательские свойства CSS и медиа-запросы для победы

После загрузки шрифта вы можете запросить пользовательские настройки и соответствующим образом адаптировать параметры переменного шрифта.

Настройки при отсутствии предпочтений (по умолчанию)

Следующие начальные стили будут стилями по умолчанию или, если можно так выразиться, стилями для пользователей без каких-либо предпочтений.

@layer demo {   body {     --base-weight: 400;     --base-grade: 0;      font-variation-settings:       "wght" var(--base-weight),       "GRAD" var(--base-grade)     ;   } } 

Настройки, когда предпочтение отдается высокой контрастности

Для пользователей, которые указали предпочтение высокой контрастности в настройках своей системы, увеличьте значение --base-weight с 400 до 700 :

@layer demo {   @media (prefers-contrast: more) {     body {       --base-weight: 700;     }   } } 

Теперь при чтении стало больше контраста.

Настройки, когда предпочтение отдается низкой контрастности

Для пользователей, которые указали предпочтение низкой контрастности в настройках своей системы, уменьшите значение --base-weight с 400 до 200 :

@layer demo {   @media (prefers-contrast: less) {     body {       --base-weight: 200;     }   } } 

Теперь контрастность при чтении меньше.

Настройки при выборе темного режима

@layer demo {   @media (prefers-color-scheme: dark) {     body {       --base-grade: -25;     }   } } 

Теперь учтены различия в восприятии света на темном фоне и темного на светлом фоне.

Теперь все вместе

@layer demo {   body {     --base-weight: 400;     --base-grade: 0;      font-variation-settings:       "wght" var(--base-weight),       "GRAD" var(--base-grade)     ;   }    @media (prefers-contrast: more) {     body {       --base-weight: 700;     }   }    @media (prefers-contrast: less) {     body {       --base-weight: 200;     }   }    @media (prefers-color-scheme: dark) {     body {       --base-grade: -25;     }   } } 

Или, ради развлечения, все вместе с CSS-вложенностью :

@layer demo {   body {     --base-weight: 400;     --base-grade: 0;      font-variation-settings:       "wght" var(--base-weight),       "GRAD" var(--base-grade)     ;      @media (prefers-contrast: more)     { --base-weight: 700 }     @media (prefers-contrast: less)     { --base-weight: 200 }     @media (prefers-color-scheme: dark) { --base-grade: -25 }   } } 

В результате получается интерфейс, который адаптирует шрифт к предпочтениям пользователя. Полный исходный код доступен ниже на Codepen.