
Стилизация форм через theme.json — новшество WordPress 6.9
17 ноября 2025
Первый шаг к системным стилям форм и дизайн системе, которая будет настраиваться через theme.json
TL;DR
- В WordPress 6.9 можно задавать глобальные стили форм напрямую в theme.json.
- Пока два элемента:
selectиtextInput(textarea + часть текстовых input). - Стили распространяются на весь фронтенд, включая формы плагинов.
- Псевдоклассы и некоторые тонкости (например, focus-стили, caret-color) пока добавляются через CSS.
- Рекомендуется использовать пресеты и токены вместо жёстких значений.
- Ожидается дальнейшее расширение набора элементов в будущих релизах.
Стилизация форм через theme.json
С выходом 6.9 в системе глобальных стилей появились элементы форм, которые можно настраивать через styles.elements в theme.json. Это важный шаг к консистентным, предсказуемым и поддерживаемым стилям форм на уровне темы и дизайн‑системы.
Доступны два новых элемента:
select— нацеливается на HTML-элементы<select>.textInput— нацеливается на<textarea>и<input>c типамиtext,search,email,url,tel,number,password.
Стили задаются в разделе styles.elements. Это глобальная точка управления: изменения применяются во всех блоках ядра и сторонних плагинах, если их CSS не переопределяет правила из темы.
Базовая структура в theme.json
Ниже — минимальный каркас, куда будут добавляться стили:
{
"version": 3,
"styles": {
"elements": {
"select": {},
"textInput": {}
}
}
}
Пример: стили для выпадающих списков
Выпадающий список — менее распространённый элемент в блоках, но его легко протестировать, включив опцию «Отображать как раскрывающийся список» у «Список рубрик» или «Архивы».

{
"styles": {
"elements": {
"select": {
"color": {
"text": "var:preset|color|contrast",
"background": "var:preset|color|base"
},
"border": {
"color": "var:preset|color|contrast-2",
"width": "1px",
"radius": "6px"
},
"spacing": {
"padding": {
"top": "0.625rem",
"right": "0.75rem",
"bottom": "0.625rem",
"left": "0.75rem"
}
},
"outline": {
"style": "solid",
"width": "2px",
"color": "transparent",
"offset": "2px"
},
"shadow": "var:preset|shadow|natural"
}
}
}
}
Здесь используются пресеты цветов и теней — такой подход упрощает поддержку тёмной темы, тематизацию и дальнейшие изменения дизайна.
Пример: стили для текстовых полей
Те же принципы работают для textInput. Проверять удобнее всего на блоке «Форма комментариев», также подойдут «Вход/Выход», «Поиск» и любые блоки сторонних плагинов.

{
"styles": {
"elements": {
"textInput": {
"color": {
"text": "var:preset|color|contrast",
"background": "var:preset|color|base"
},
"border": {
"color": "var:preset|color|contrast-2",
"width": "1px",
"radius": "6px"
},
"spacing": {
"padding": {
"top": "0.625rem",
"right": "0.75rem",
"bottom": "0.625rem",
"left": "0.75rem"
}
},
"outline": {
"style": "solid",
"width": "2px",
"color": "transparent",
"offset": "2px"
},
"shadow": "var:preset|shadow|natural"
}
}
}
}
На практике стили для select и textInput часто совпадают: это удобно для унификации визуального языка формы.
Что пока не сделано в theme.json и как это закрыть через CSS
Текущее ограничение — отсутствие поддержки состояний (например, :focus) и ряда CSS-свойств. Особенно важно обеспечить заметную фокус‑индикацию для доступности.

Цвет каретки в полях ввода
Для лучшей визуальной обратной связи можно настроить цвет каретки (мигающий курсор в текстовом поле):
textarea,
input:where([type=email],[type=number],[type=password],[type=search],[type=text],[type=tel],[type=url]) {
caret-color: #2770ce;
}
Фокус‑контур
В примерах выше outline-color в theme.json установлен как transparent, чтобы не мелькал вне фокуса. Настроим цвет при фокусе через CSS:
textarea:focus,
input:where([type=email],[type=number],[type=password],[type=search],[type=text],[type=tel],[type=url]):focus,
select:focus {
outline-color: #2770ce;
}
Подберите цвет и толщину контура из вашей дизайн‑системы, соблюдая контрастность и видимость на любых фонах.
Стилизация label
label пока не поддерживается в theme.json как элемент формы. Базовые стили и исключения для чекбоксов/радиокнопок можно задать так:
/* Базовые стили для label */
label {
color: #526277;
font-size: 1rem;
}
/* Сброс рядом с checkbox/radio */
input[type="checkbox"] + label,
input[type="radio"] + label,
label:has(input[type="checkbox"], input[type="radio"]) {
color: inherit;
font-size: inherit;
}
Отдельный паттерн для чекбоксов и радиокнопок нужен потому, что их лейблы часто требуют иных отступов, размеров и выравнивания.
Совместимость и приоритеты: что учесть темам и плагинам
- Каскад и специфичность. Глобальные стили из
theme.jsonприменяются ко всем формам, но CSS плагина с более высокой специфичностью может их переопределить. Поддерживайте умеренную специфичность в теме и избегайте!important, оставляя возможность переопределения. - Плагины. После перехода на 6.9 плагинам, которые агрессивно стилизуют формы, может потребоваться корректировка, чтобы не ломать дизайн темы.
- Дизайн‑токены. Используйте пресеты (
var:preset|color|...,var:preset|shadow|...) для цветов, теней и отступов. Это упростит поддержку нескольких цветовых схем и масштабирование дизайн‑системы.
Практики: доступность, тёмная тема, единый визуальный язык
- Доступность. Гарантируйте видимый
focus, достаточный контраст текста и рамок, понятные состояния ошибок. Не отключайте контур фокуса без альтернативы. - Согласованность. Выравнивайте радиусы, толщины границ и отступы между
select,inputиtextarea. Это уменьшает когнитивную нагрузку и делает формы аккуратнее. - Тёмные схемы. Проверяйте цвета контуров и теней в светлой/тёмной темах. Пресеты сильно упрощают эту задачу.
План дальнейшего развития
В 6.9 поддерживаются только селекты и текстовые поля. Впереди — расширение набора элементов (чекбоксы, радиокнопки, диапазоны, поля даты/файла и др.) и поддержка состояний прямо в theme.json. Это приблизит формы к полному соответствию дизайн‑системе без «прослоек» из кастомного CSS.
Вывод
Новый цикл стилизации форм через theme.json — важная эволюция WordPress‑тем. Уже можно вынести большую часть базовой типографики, цветов, границ, отступов и теней в глобальные стили и гарантировать единый внешний вид форм на всём сайте. Псевдоклассы и некоторые детали пока закрываются CSS, но направление задано: дальше — больше.
Оригинал: https://developer.wordpress.org/news/2025/11/how-wordpress-6-9-gives-forms-a-theme-json-makeover/
