Готовим идеальный CSS

Готовим идеальный CSS
  • Page 1 of 1
  • 1
Готовим идеальный CSS
  • Dimaantz
    Dimaantz
    1
    Не так давно я понял, что работа с CSS во всех моих приложениях — это боль для разработчика и пользователя.

    Под катом лежат мои проблемы, куча странного кода и подводные камни на пути к правильной работе со стилями.

    Ты ищешь здесь счастье. А хочется — смысл.
    1. Dimaantz
      Dimaantz
      2
      Проблемный CSS
      В проектах на React и Vue, которые я делал, подход к стилям был примерно одинаковым. Проект собирается webpack'ом, из главной точки входа импортируется один CSS файл. Этот файл импортирует внутри себя остальные CSS файлы, которые используют БЭМ для наименования классов.

      Код
      styles/
        indes.css
        blocks/
          apps-banner.css
          smart-list.css
          ...


      Знакомо? Такую реализацию я использовал почти везде. И все было хорошо, пока один из сайтов не разросся до такого состояния, что проблемы со стилями начали сильно мозолить мне глаза.

      Проблема hot-reload’а
      Импортирование стилей друг из друга происходило через плагин postcss или stylus-loader.
      Загвоздка вот в чем:
      Когда мы решаем импорты через плагин postcss или stylus-loader, на выходе получается один большой CSS файл. Теперь даже при незначительном изменении одного из файлов стилей все CSS файлы будут обработаны заново.

      Это здорово убивает скорость hot-reload’a: обработка ~950 Кбайт stylus-файлов занимает у меня около 4 секунд.

      Заметка про css-loader

      2. Проблема code-splitting’а

      Когда стили подгружаются из отдельной папки, мы не знаем контекст использования каждого из них. С таким подходом никак не получится разбить CSS на несколько частей и подгружать их по мере необходимости.

      3. Большие названия CSS классов

      Каждое имя БЭМ класса выглядит вот так: block-name__element-name. Такое длинное имя сильно влияет на финальный размер CSS файла: на сайте Хабра, например, названия CSS классов занимают 36% от размера файла стилей.

      Google знает об этой проблеме и во всех своих проектах давно использует минификацию имен:

      Кусочек сайта google.com

      Меня порядком достали все эти проблемы, я наконец решил покончить с ними и добиться идеального результата.

      Ты ищешь здесь счастье. А хочется — смысл.
  • Dimaantz
    Dimaantz
    3
    Выбор решения
    Для избавления от всех вышеперечисленных проблем я нашел два варианта решения: CSS In JS (styled-components) и CSS modules.

    Критичных недостатков у этих решений я не увидел, но в конце концов мой выбор пал на CSS Modules из-за нескольких причин:

    Можно вынести CSS в отдельный файл для раздельного кэширования JS и CSS.
    Больше возможностей для линтеринга стилей.
    Более привычно работать с CSS файлами.
    Выбор сделан, пора начинать готовить!

    Ты ищешь здесь счастье. А хочется — смысл.
    • Page 1 of 1
    • 1
    Search:
    Готовим идеальный CSS
    2024
    Запрещено использование материалов сайта без прямой ссылки на источник. Все права защищены.