CSS модули представляют собой современный подход к организации стилей в проектах на JavaScript, обеспечивая локальную область видимости CSS. В сочетании с компонентной архитектурой Inferno это позволяет избежать конфликтов стилей, упрощает поддержку и масштабирование приложений.
Для работы с CSS модулями необходимо настроить сборщик, например,
Webpack, с поддержкой css-loader и опцией
modules: true. После этого файлы стилей можно импортировать
прямо в компоненты:
import styles from './Button.module.css';
function Button({ label }) {
return <button className={styles.button}>{label}</button>;
}
Каждое имя класса в styles будет автоматически
преобразовано в уникальное значение, что исключает пересечения с
классами из других файлов. Например, button может стать
Button_button__3Xf7L.
CSS модули поддерживают стандартный синтаксис CSS с добавлением возможностей локальной области видимости:
/* Button.module.css */
.button {
background-color: #007bff;
color: #fff;
border: none;
padding: 10px 20px;
cursor: pointer;
}
.button:hover {
background-color: #0056b3;
}
Каждый класс автоматически локализуется, что позволяет безопасно использовать одинаковые имена в разных компонентах без конфликта.
CSS модули отлично интегрируются с динамическим формированием классов
в Inferno. Для условного применения стилей используют шаблонные строки
или библиотеки типа classnames:
import classNames from 'classnames';
import styles from './Button.module.css';
function Button({ primary }) {
const buttonClass = classNames(styles.button, {
[styles.primary]: primary
});
return <button className={buttonClass}>Click me</button>;
}
В этом примере к компоненту добавляется класс primary
только при условии, что проп primary равен
true.
Для крупных компонентов часто требуется объединять несколько модулей. Это делается через обычный импорт и комбинирование классов:
import baseStyles from './Base.module.css';
import themeStyles from './Theme.module.css';
function Card() {
return <div className={`${baseStyles.card} ${themeStyles.dark}`}>Content</div>;
}
Такой подход позволяет разделять базовые стили и тематические, сохраняя изоляцию и предотвращая глобальные конфликты.
Иногда необходимы глобальные CSS правила. Для этого в CSS модулях
используется ключевое слово :global:
:global(body) {
margin: 0;
font-family: Arial, sans-serif;
}
:global(.container) {
max-width: 1200px;
margin: auto;
}
Эти правила применяются ко всему документу, не будучи локализованными для компонента.
Inferno полностью поддерживает использование CSS модулей в JSX, что
позволяет комбинировать компонентную структуру с
изолированными стилями. Любой класс из модуля можно передать через
className, а также использовать в style как
объект для inline-стилей:
import styles from './Input.module.css';
function Input({ error }) {
return (
<input
className={`${styles.input} ${error ? styles.error : ''}`}
type="text"
/>
);
}
Использование CSS модулей в Inferno делает архитектуру компонентов более устойчивой, предсказуемой и удобной для масштабирования, особенно при работе над крупными проектами с множеством интерфейсных элементов.