Ошибки при работе с tailwindcss

ae0e453798e354c6cd67ab49e29a68ac.png

Использование модификатора ! important чтобы перебить другие классы (стили).

Использование! important в 99% не нужен. Только в крайних ситуациях, когда работаете со сторонними библиотеками и привычными способами не получается повысить силу селектора.

Плохой код:

className={cn(
    'bg-slate-100',{
    '!bg-slate-200': isActive,
})}

Хороший:

className={cn('bg-slate-100', 'active:bg-slate-200')}

На крайний случай, условное добавление классов:

  className={cn({
    'bg-slate-100': !isActive,
    '!bg-slate-200': isActive
})}

Некорректная настройка или отсутствие корректных настроек в файле tailwind.config.js.

Полная замена tailwind цветов:

module.exports = {
  theme: {
    colors: {
      customColor: '#1DA1F2',
    },
  },
};

Расширение (добавление) новых цветов:

module.exports = {
  theme: {
    extend: {
      colors: {
        customBlue: '#1DA1F2',
        customGreen: '#10B981',
      },
    },
  },
};

Если заменяете стандартные шрифты, то заменяйте все:

theme: {
  fontFamily: {
    sans: ['Roboto', 'sans-serif'], // Заменяем стандартный sans шрифт
    serif: ['Merriweather', 'serif'], // Заменяем стандартный serif шрифт
    mono: ['Fira Code', 'monospace'], // Заменяем стандартный моноширинный шрифт
  },
}

Также сюда можно отнести неумение переопределять переменные tailwind.

Например, лучше в конфигурации заменить переменную для transition, время анимации, чем каждый раз дописывать класс duration-500.

transitionDuration: {
  DEFAULT: '500ms'
}

Распространенное использование класса transition-all для переходов.

Когда вы используете transition-all, браузер отслеживает и анимирует все изменяющиеся свойства, даже если они не требуют анимации. Это приводит к излишней нагрузке на рендеринг, так как браузеру приходится вычислять все возможные переходы, включая те, которые могут оказаться тяжёлыми для системы, например, изменения width, height, left, top и других свойств, влияющих на перерисовку и перерасчёт макета.

Либо указывайте конкретные свойства которые необходимо «анимировать», либо применяйте класс transition, в нем.

Одержимость произвольными значениями

Content
Content

Лучше выносить в tailwind.config.js, и иметь стабильную дизайн систему, лучше иметь ограниченные стили, чем много.

extend: {
  spacing: {
    '20': '20px',
  },
  colors: {
    // Добавление кастомного цвета для фона
    'customBlue': '#3498db',
  },
},

Content
Content

Но лучше давать адекватные название для цветов, а то customBlue плохое. Можно заменить стандартный.

extend: {
  colors: {
    blue: {
      500: '#3498db',  // Заменяем конкретный оттенок
      600: '#2980b9',
    },
  },
},

Некорректное использование breakpoints

Забывание базового стиля для мобильных устройств: Важно помнить, что в Tailwind CSS базовые стили применяются к мобильным устройствам по умолчанию (для экранов меньше sm). Если вы забыли указать базовый стиль, он может быть перезаписан на более крупных экранах.

Content

Проблема: Если экран устройства меньше sm, то не будет применяться никакого фона, так как для мобильных устройств (по умолчанию) не задано никакое значение для фона.

Content

Извлечение класса @apply на глобальном уровне (создание собственных стилей, взамен изолирования на уровне компонента)

Желательно применять напрямую к компоненту, благо у нас есть компоненты в react или vue.

@layer components {
  .btn-primary {
    @apply py-2 px-5 bg-violet-500 text-white font-semibold rounded-full shadow-md hover:bg-violet-700 focus:outline-none focus:ring focus:ring-violet-400 focus:ring-opacity-75;
  }
}

Разработчики tailwindcss также рекомендуют оставлять стили в самих элементах, а не создавать классы через @apply, это громоздко, но зато не нужно идти и править там.

Но также видел проекты, где на уровне компонентов использование @apply и ф-ции реализующие подход css in js.

Если обобщить, то проблема кроется в плохом знание css и документации tailwindcss. А как часто бывает, нанимают только начинающих разработчиков компании чтобы сэкономить денег. Вроде бы получают как по макету, но код получается грязным. В добавок к этому добавляются проблема с семантической версткой, доступностью и сломанной логикой компонентов.

Делитесь своими плохими практиками, как не стоит или как стоит. Возможно у вас были открытия, которые вам упростили жизнь.

© Habrahabr.ru