Placeholder в Radix UI представляет собой
текст-заполнитель, который отображается внутри поля ввода до момента,
когда пользователь начнёт ввод. Он отличается от обычного HTML-атрибута
placeholder тем, что в Radix UI обеспечивается более гибкая
кастомизация и совместимость с анимациями и состояниями компонента.
Placeholder в TextFieldRadix UI предоставляет компонент TextField, который
включает в себя отдельный дочерний компонент
TextField.Placeholder. Пример базовой структуры:
import * as TextField from '@radix-ui/react-textfield';
function Example() {
return (
<TextField.Root>
<TextField.Input />
<TextField.Placeholder>Введите имя</TextField.Placeholder>
</TextField.Root>
);
}
Ключевые моменты:
TextField.Root — контейнер поля ввода.TextField.Input — собственно поле ввода текста.TextField.Placeholder — текст, отображаемый до
ввода.@stitches/react, используя классы или
styled-компоненты.Radix UI позволяет плавно управлять состояниями placeholder через
CSS-селекторы состояния :focus или атрибуты состояния:
.textfield-placeholder {
color: gray;
transition: transform 0.2s, opacity 0.2s;
}
.textfield-input:focus + .textfield-placeholder,
.textfield-input:not(:placeholder-shown) + .textfield-placeholder {
transform: translateY(-100%);
opacity: 0.5;
}
Такой подход позволяет создавать эффект “плавающего” placeholder, который перемещается при вводе текста.
Indicators)Индикаторы в Radix UI служат для визуальной сигнализации о состоянии компонента: активен, выбран, отключён, ошибка и т. д. Они особенно полезны в комплексных формах и интерактивных элементах.
Indicator
в Checkboximport * as Checkbox from '@radix-ui/react-checkbox';
function Example() {
return (
<Checkbox.Root>
<Checkbox.Indicator>
<svg width="16" height="16">
<path d="M2 8 L6 12 L14 4" stroke="currentColor" strokeWidth="2" fill="none"/>
</svg>
</Checkbox.Indicator>
Checkbox Label
</Checkbox.Root>
);
}
Особенности:
Checkbox.Indicator отображается только когда чекбокс
активен.currentColor, что упрощает
применение темы.Radix UI применяет концепцию индикаторов не только в чекбоксах, но и
в радиокнопках (RadioGroup), переключателях
(Switch) и вкладках (Tabs).
Пример для Switch:
import * as Switch from '@radix-ui/react-switch';
function Example() {
return (
<Switch.Root className="switch-root">
<Switch.Thumb className="switch-thumb" />
</Switch.Root>
);
}
Switch.Thumb играет роль индикатора: его положение и
состояние отражают текущее состояние переключателя.Radix UI строго соблюдает принципы доступности (a11y). Placeholder и индикаторы корректно работают с клавиатурой и экранными считывателями.
Placeholder:
aria-placeholder), если требуется кастомизация.Индикаторы:
Checkbox.Indicator и Radio.Indicator имеют
aria-checked и aria-selected для корректного
взаимодействия с ассистивными технологиями.aria-invalid и визуальные индикаторы цвета.Placeholder только внутри компонентов
Input, Textarea или TextField для
единообразия.Radix UI
с CSS-анимациями или Framer Motion.Tooltip) для информирования о состоянии без лишнего
текста.Radix UI позволяет объединять placeholder и индикаторы в один визуальный блок для сложных форм:
<TextField.Root className="custom-root">
<TextField.Input className="custom-input" />
<TextField.Placeholder className="custom-placeholder">Email</TextField.Placeholder>
<span className="status-indicator success" />
</TextField.Root>
status-indicator можно динамически менять в
зависимости от валидации.Placeholder и индикаторы в Radix UI создают гибкую систему визуальной обратной связи, обеспечивая одновременно анимацию, доступность и точный контроль состояния компонентов.