Стилизация компонентов в Preact может осуществляться различными методами, каждый из которых имеет свои преимущества и ограничения. Важно понимать, как взаимодействуют CSS, JavaScript и структура компонентов, чтобы создавать поддерживаемый и масштабируемый интерфейс.
Наиболее традиционный способ стилизации — использование отдельных CSS-файлов. Стили подключаются глобально и применяются ко всем компонентам. Этот подход прост и хорошо знаком большинству разработчиков.
Пример подключения:
import './App.css';
function App() {
return (
<div className="container">
<h1 className="title">Preact Styling</h1>
</div>
);
}
Ключевые моменты:
Preact поддерживает объектный синтаксис для атрибута
style. С помощью inline-стилей можно задавать стили
напрямую внутри компонента.
Пример использования:
function Button({ color }) {
return (
<button style={{ backgroundColor: color, padding: '10px 20px', border: 'none' }}>
Click me
</button>
);
}
Преимущества:
Ограничения:
:hover,
:focus) и медиазапросы.CSS Modules позволяют создавать локальные стили, которые автоматически изолируются для каждого компонента. При сборке классы преобразуются в уникальные имена.
Пример использования:
import styles from './Button.module.css';
function Button() {
return (
<button className={styles.button}>
Press
</button>
);
}
Преимущества:
Preact совместим с популярными библиотеками CSS-in-JS, такими как
styled-components или goober. Этот подход
позволяет определять стили прямо в JavaScript и связывать их с
конкретным компонентом.
Пример с goober:
import { styled } from 'goober';
const Button = styled('button')`
background-color: #3498db;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
&:hover {
background-color: #2980b9;
}
`;
function App() {
return <Button>Click me</Button>;
}
Особенности:
Tailwind CSS применяет утилитарный подход, при котором стили создаются с помощью классов в JSX. Вместо написания отдельного CSS, все правила задаются через классы.
Пример:
function Card() {
return (
<div className="bg-white shadow-lg rounded-lg p-6">
<h2 className="text-xl font-bold mb-2">Card Title</h2>
<p className="text-gray-700">Content goes here</p>
</div>
);
}
Преимущества:
Недостатки:
Preact Hooks, такие как useState или
useMemo, позволяют изменять стили компонентов динамически.
Это особенно полезно для реактивного интерфейса, где состояние
компонента напрямую влияет на внешний вид.
Пример:
import { useState } from 'preact/hooks';
function ToggleButton() {
const [active, setActive] = useState(false);
return (
<button
onCl ick={() => setActive(!active)}
style={{
backgroundColor: active ? 'green' : 'red',
color: 'white',
padding: '10px 20px',
}}
>
{active ? 'Active' : 'Inactive'}
</button>
);
}
Преимущества:
Разнообразие подходов к стилизации в Preact позволяет выбирать метод, оптимальный для конкретного проекта: от легковесных inline-стилей до мощных CSS-in-JS решений с полной изоляцией. Каждый подход можно комбинировать, создавая гибкую и поддерживаемую архитектуру интерфейса.