Hack Frontend Community

Способы изоляции стилей в CSS

Что такое изоляция стилей?

Изоляция стилей — это подход к написанию CSS, при котором стили одного компонента не влияют на другие части приложения. Это важно для:

  • предотвращения конфликтов между стилями;
  • упрощения масштабирования кода;
  • переиспользования компонентов без побочных эффектов.

Способы изоляции стилей

БЭМ (BEM) — Block Element Modifier

Методология именования классов, обеспечивающая уникальность и предсказуемость стилей.

/* Стиль по БЭМ */
.button {}
.button__icon {}
.button--primary {}
  • Имена классов описывают иерархию компонента.
  • Работает в любом CSS, без инструментов.

CSS Modules

Файлы .module.css (или .module.scss) используются в React/Vue/etc. и обеспечивают автоматическую локализацию классов.

import styles from './Button.module.css';

function Button() {
  return <button className={styles.primary}>Click</button>;
}
  • Классы преобразуются в уникальные.
  • Нет пересечений между компонентами

Shadow DOM (Web Components)

Изоляция на уровне браузера — создаёт "теневую" область DOM, скрытую от внешних стилей.

const shadow = element.attachShadow({ mode: "open" });
shadow.innerHTML = `<style>p { color: red; }</style><p>Hello</p>`;
  • Полная изоляция.
  • Стили не протекают внутрь и наружу.
  • Требует поддержки Web Components.

CSS-in-JS

Стили пишутся прямо в JavaScript с помощью библиотек:

  • Styled-components
  • Emotion
  • Stitches
  • Vanilla Extract
import styled from 'styled-components';

const Button = styled.button`
  color: white;
  background: blue;
`;
  • Отличная изоляция, динамические стили.
  • Увеличение bundle size и зависимость от библиотеки.

Atomic CSS (Utility-first)

Использование классов с конкретным значением (Tailwind CSS).

<button class="bg-blue-500 text-white px-4 py-2">Click</button>
  • Нет "настоящих" компонентов, всё на уровне классов.
  • Стили предсказуемы, не конфликтуют.