Стилизация

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?