Будь аккуратен с inline-стилями: почему это плохая практика?
Когда нужно быстро покрасить кнопку или отступ подвинуть, рука сама тянется к style={{ ... }}.
Но inline-стили — это как фастфуд: быстро, удобно, но вредно для здоровья проекта.
Inline-стили не поддерживают базовые возможности CSS:
:hover, :focus, :active)<button style={{ color: 'red' }}>Не будет работать :hover без CSS!</button>::before, ::after)@media)@keyframes)var(--color-primary))🙅♂️ Эти ограничения делают inline-стили бесполезными для адаптивного дизайна и сложных интерфейсов.
Inline-стили встраиваются в DOM напрямую. Это значит:
Стили — это визуальное оформление. Логика — это поведение.
Inline-стили мешают их разделить:
// плохо
<div style={{ padding: 10, backgroundColor: 'blue' }}>Контент</div>
// хорошо
<div className="box">Контент</div>CSS работает по каскадному принципу. Inline-стили имеют наивысший приоритет, их сложно переопределить:
.button {
color: green; /* не переопределит style={{ color: 'red' }} */
}🙃 Это усложняет работу с компонентами и делает их «неподатливыми». Потом часами смотрим, где летит верстка в проекте. Разбираемся в бесконечно ленте стилей и ищем, где переопределяется стиль итд.
Когда стили внутри компонента:
Например, стили на :hover или :focus не задаются inline — и приходится городить useState/useEffect и писать костыли:
const [hover, setHover] = useState(false);
<button
style={{ color: hover ? 'red' : 'black' }}
onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)}
>
Наведи мышку
</button>;👎 Вместо одной строки CSS — целый мини-хак.
Иногда всё же можно:
width: ${progress}%)Inline-стили — это не зло. Но:
📌 Используйте CSS-модули, Emotion, Styled Components — что угодно, но не пихайте всё в style={{…}}. «Inline-стили — как фастфуд: быстро, но не полезно для долгосрочного здоровья проекта» 🍔🚫.