Стилизация
1. Инлайн CSS
const buttonStyles = {
display: 'inline-flex',
margin: '0 4px',
padding: '8px 24px',
border: 0,
borderRadius: 2,
fontSize: 14,
fontFamily: 'inherit',
};
const Button = ({ type = 'button', label, disabled }) => (
<button
type={type}
disabled={disabled}
style={{
...buttonStyles,
backgroundColor: disabled ? '#0000001f' : '#2196f3',
color: disabled ? '#00000042' : '#ffffff',
}}
>
{label}
</button>
);Плохая производительность
Не масштабируется
Ограниченные возможности (псевдоэлементы, медиа и т. п.)
Нет инструментов и сложно дебажить.
2. Ванильный CSS или SASS
Ванильный CSS не масштабируется
Глобальное пространство имен
Приходится использовать BEM-нотацию
Вложенность селекторов без BEM
Проблематичное удаление мертвого кода
3. CSS-модули
Согласно определению из репозитория, CSS-модули — это CSS-файлы, в которых все классы по умолчанию находятся в локальной области видимости. Этот подход был разработан, что бы решить проблему глобальной области видимости в CSS.
CSS-модули — это не официальная спецификация, они не имплементированы в браузеры. Это процесс, запускаемый на стадии сборки проекта (например, с помощью Webpack), в результате выполнения которого имена классов и селекторы изменяются так, чтобы образовалась своего рода локальная область видимости (что-то вроде пространства имен).
CSS-модули гарантируют, что все стили одного компонента:
Находятся в одном месте
Применяются только к этому компоненту и никакому другому
Create React App поддерживает CSS-модули из коробки, все что необходимо сделать это называть файлы стилей согласно конвенции [name].module.css.
Использование напоминает обычный CSS, за тем исключением, что все имена классов обфусцируются. В результирующем CSS получаем уникальное имя класса в формате [filename]\_[classname]\_\_[hash]. CSS-модули решают проблему глобального пространства имен с помощью маппинга классов из CSS-файла в объект с ключами по имени класса.
3.1. Композиция
В CSS-модулях можно делать композицию стилей прямо в CSS-файле с помощью свойства composes, как @extends в SASS.
3.2. Переменные
В CSS-модулях также есть возможность использовать переменные.
3.3. Глобальные стили
Для того чтобы сделать стиль глобальным, необходимо обернуть селектор в конструкцию :global(selector). Селекторы тегов по умолчанию будут в глобальной области видимости, CSS-модули обфусцируют только классы.
4. Styled Components
styled-components дает возможность написания CSS в JavaScript используя т.н. тегированные шаблонные строки. Библиотека удаляет сопоставление между компонентами и стилями — компонент превращается в конструкцию с низкоуровневой стилизацией.
5. Дополнительные материалы
Last updated
Was this helpful?