Tailwind - мегабуст для всех кому приходится верстать
Tailwind - замечательный, прорывной, качественный utility-first CSS-фреймворк.
При классическом подходе один СSS класс описывает стиль логической группы объектов (кнопки, группа кнопок, форма регистрации, ссылки обычные, ссылки в футере и т.д.)
При подходе utility-first один CSS класс описывает конкретное стиливое свойство объекта. Например, классborder-2будет добавлять сплошную границу дефолтного цвета шириной2px, а классborder-redсделает эту границу красной.
Почему это хорошо, ведь мы всю жизнь делали ровно наоборот? Лучше обьяснить на примерах.
Кейс №1. Блок который встречается один раз на главной странице сайта.
Это реальный кейс из моего проекта.
<div class="one-off-class-name"> </div>
.one-off-class-name {
margin-left: auto;
margin-right: auto;
display: flex;
flex-direction: row;
max-width: 80rem /* Приблизительно */
padding-left: 0.5rem; /* 8px */
padding-right: 0.5rem; /* 8px */
padding-left: 0.5rem; /* 8px */
padding-right: 0.5rem; /* 8px */
z-index: 10
}
@media (min-width: 640px) {
.one-off-class-name {
padding-top: 1.5rem; /* 24px */
padding-bottom: 1.5rem; /* 24px */
}
}
@media (min-width: 1024px) {
.one-off-class-name {
padding-left: 2rem; /* 32px */
padding-right: 2rem; /* 32px */
}
}<div class="z-10 flex flex-row max-w-7xl mx-auto px-2 py-6 sm:px-6 lg:px-8"> </div>
- Это очень короткий код и его реально быстро писать.
- Когда мне нужно что-то поправить в этом коде, я сразу вижу все свойства этого объекта и правлю их на месте.
- Мне нравится, что нет необходимости создавать отдельный класс под одноразовый обьект.
- Очень длинная портянка в которой можно запутаться и, например, сделать стили которые взаимоисключают друг друга.
Кейс №2. Переиспользуемый компонент.
Это тоже реальный кейс из моего проекта.
<template>
<input
:placeholder="placeholder"
:type="type"
type="text"
:value="modelValue"
@input="updateValue" />
</template>
<script>
// Опустим этот код
</script>
<style scoped>
input {
border: 1px solid #C2C2C2;
border-radius: 0.375rem;
padding: 1rem;
}
input:focus {
outline-width: 1px;
outline-color: #9CD5E1;
}
</style><template>
<input
class="border border-solid border-[#C2C2C2] focus:outline-[#9CD5E1] focus:outline-1 rounded-md p-4"
:placeholder="placeholder"
:type="type"
type="text"
:value="modelValue"
@input="updateValue" />
</template>
<script>
// Опустим этот код
</script>
<style scoped>
</style>- Как и в Кейсе №1 код с Tailwind явно компактнее.
- Как и в Кейсе №1 стиль компонента сразу видно глядя на темплейт.
- Отделный плюс при работе с Vue. Каждый раз скролить окно IDE до стилей или сплитить экран это отдельная боль, поэтому указание стилей прям в темплейтах очень сильно упрощает жизнь и ускоряет разработку.
В общем и целом.
Tailwind уже получил свои лавры, растет здоровый и крепкий, без существенных паталогий и довольно широко применяется в продакшне. Поэтому я вряд ли скажу что-то новое о его преимуществах и недостатках. Тем не менее.
Положительное
Для себя же я виделил несколько нюансов, благодаря которым Tailwind так замечательно заходит при разработке.
- Они реально запихали туда почти весь современный CSS. В Tailwind исчерпывающий функционал для полноценной верстки сайтов и гибридных приложений.
- Действительно хорошо запаковали мастхевные вещи. Вот, к примеру,
px-1это симметричныйpaddingслева и справа илиlg:px-1задает тоже самое, но только при большом разрешений. - Дали возможность что-то захардкодить если это необходимо (
lg:px-[100px]) - Есть общая тема и она программируема. В
tailwind.config.jsможно очень гибко все настраивать и вычислять. - Tailwind приучает к хорошим манерам. К примеру, верстать через относительные единицы (
rem,emи т.д.) и выносить общие стили в тему.
Отрицательное
- Если стилей много это реально выглядит как уродливая портянка. И здесь спасает только качество и навык использования IDE.
- Один бандл на весь проект. Да он легкий, но чаще всего следование такому паттерну заканчивается распиливанием бандла на чанки.
- Некоторые вещи все-таки имплементировать не смогли. Например работу с Shadow DOM.
- Применим только когда в проекте есть шаблонизация (pug, hbs, jinja2 и т.д.) или какая-либо система компонентов (Vue, React, Angular, Svelte и т.д.).
Итог
Tailwind и в целом подход utility-first CSS (как все и везде) оч хорошо работает, но только если четко понимать какие имеенно условия небоходимы для его успешного применения.
Я сам активно использую Tailwind и буду дальше пробовать его в своих проектах, что собсно и вам советую)
Больше контента в моем Telegram канале https://t.me/dakotovblog