Краткое руководство по Tailwind
Это руководство поможет освоиться с Tailwind CSS, что позволит быстро создавать красивые, современные и анимированные веб-сайты. Мы создадим простое боковое навигационное меню, вдохновленное Discord.
Что такое Tailwind CSS?
Tailwind CSS – это набирающий популярность CSS-фреймворк, позволяющий вносить изменения в оформление веб-сайтов и приложений, не покидая HTML-разметку (причем как в соответствующих файлах, так и в компонентах типа React или Svelte) и не используя тег <style>.
Идея заключается в том, чтобы прописывать стили напрямую в директиву class, а не под селекторами в CSS-файле. Это выглядит так:
<div class="flex justify-center font-bold text-red-400">Tailwind</div><div class="flex justify-center font-bold text-red-400">Tailwind</div>Технически это похоже на применение inline-классов, когда вы описываете дизайн элемента внутри его тега. Например, так:
<div style="display: flex; justify-content: center; font-weight: 700; color: rgba(248, 113, 113, var(--tw-text-opacity));">Tailwind</div><div style="display: flex; justify-content: center; font-weight: 700; color: rgba(248, 113, 113, var(--tw-text-opacity));">Tailwind</div>Но, как видите, в случае с inline-стилями кода становится намного больше, его тяжелее читать и трудно конфигурировать. Tailwind решает эту и множество других проблем, упрощая стилизацию контента в ваших приложениях.
В основе Tailwind лежат все те же классы и селекторы, только в больших масштабах и с заранее подготовленными правилами взаимодействия. Да, любое свойство в Tailwind – это класс. Вот как это выглядит при конвертации в CSS.
html-код:
<div class="flex justify-center flex-col border text-blue-200">Tailwind</div><div class="flex justify-center flex-col border text-blue-200">Tailwind</div>css-код:
.flex \{ display: flex; }
.justify-center \{ justify-content: center; }
.flex-col \{ flex-direction: column; }
.border \{ border: 1px black solid; }
.text-blue-200 \{ --tw-text-opacity: 1; rgba(191, 219, 254, var(--tw-text-opacity)); }.flex \{ display: flex; }
.justify-center \{ justify-content: center; }
.flex-col \{ flex-direction: column; }
.border \{ border: 1px black solid; }
.text-blue-200 \{ --tw-text-opacity: 1; rgba(191, 219, 254, var(--tw-text-opacity)); }Установка
Для работы желательно установить расширение для VS Code - Tailwind CSS IntelliSense
Можете использовать любой JS-фреймворк по вашему выбору. В этом руководстве используется Create React App.
Создание навигационной панели а-ля Discord
Основной контейнер
Создайте строку flexbox, просто добавив класс flex к родительскому элементу.
function App() {
return (
<div className="flex">
</div>
);
}function App() {
return (
<div className="flex">
</div>
);
}Позиционирование боковой панели
Объедините служебные классы Tailwind для размещения боковой панели. При наведении курсора на каждый класс в VS Code он будет отображать свои истинные значения CSS.
const SideBar = () => {
return (
<div className="fixed top-0 left-0 h-screen w-16 m-0 flex flex-col bg-gray-900 text-white shadow-lg">
</div>
);
};const SideBar = () => {
return (
<div className="fixed top-0 left-0 h-screen w-16 m-0 flex flex-col bg-gray-900 text-white shadow-lg">
</div>
);
};Добавление кнопки со значками
Чтобы быстро добавить кнопку со значком на навигационную панель, установите react-icons.
$ npm install react-icons$ npm install react-iconsimport { BsPlus, BsFillLightningFill } from 'react-icons/bs';
import { FaFire, FaPoo } from 'react-icons/fa';
const SideBar = () => {
return (
<div className="...">
<SideBarIcon icon={<FaFire size="28" />} />
<SideBarIcon icon={<BsPlus size="32" />} />
<SideBarIcon icon={<BsFillLightningFill size="20" />} />
<SideBarIcon icon={<FaPoo size="20" />} />
</div>
);
};
const SideBarIcon = ({ icon }) => (
<div className="sidebar-icon group">
{icon}
</div>
);import { BsPlus, BsFillLightningFill } from 'react-icons/bs';
import { FaFire, FaPoo } from 'react-icons/fa';
const SideBar = () => {
return (
<div className="...">
<SideBarIcon icon={<FaFire size="28" />} />
<SideBarIcon icon={<BsPlus size="32" />} />
<SideBarIcon icon={<BsFillLightningFill size="20" />} />
<SideBarIcon icon={<FaPoo size="20" />} />
</div>
);
};
const SideBarIcon = ({ icon }) => (
<div className="sidebar-icon group">
{icon}
</div>
);Создание пользовательских классов
Директива @apply позволяет создавать пользовательские классы CSS путем объединения классов Tailwind.
@layer components {
.sidebar-icon {
@apply relative flex items-center justify-center
h-12 w-12 mt-2 mb-2 mx-auto shadow-lg
bg-gray-800 text-green-500
hover:bg-green-600 hover:text-white
rounded-3xl hover:rounded-xl
transition-all duration-300 ease-linear
cursor-pointer;
}
}@layer components {
.sidebar-icon {
@apply relative flex items-center justify-center
h-12 w-12 mt-2 mb-2 mx-auto shadow-lg
bg-gray-800 text-green-500
hover:bg-green-600 hover:text-white
rounded-3xl hover:rounded-xl
transition-all duration-300 ease-linear
cursor-pointer;
}
}Анимированные подсказки
Создание контейнера для всплывающих подсказок
Каждая кнопка со значком имеет дочерний класс для всплывающей подсказки.
const SideBarIcon = ({ icon, text = 'tooltip 💡' }) => (
<div className="sidebar-icon">
{icon}
<span class="sidebar-tooltip">{text}</span>
</div>
);const SideBarIcon = ({ icon, text = 'tooltip 💡' }) => (
<div className="sidebar-icon">
{icon}
<span class="sidebar-tooltip">{text}</span>
</div>
);.sidebar-tooltip {
@apply absolute w-auto p-2 m-2 min-w-max left-14
rounded-md shadow-md
text-white bg-gray-900
text-xs font-bold
transition-all duration-100 scale-0 origin-left;
}.sidebar-tooltip {
@apply absolute w-auto p-2 m-2 min-w-max left-14
rounded-md shadow-md
text-white bg-gray-900
text-xs font-bold
transition-all duration-100 scale-0 origin-left;
}Анимировние группы элементов
Создавайте группы для анимации дочернего элемента при изменении состояния родительского элемента.
Класс group не работает с @apply, поэтому его следует использовать явно.
const SideBarIcon = ({ icon, text = 'tooltip 💡' }) => (
<div className="sidebar-icon group">
{icon}
<span class="sidebar-tooltip group-hover:scale-100">{text}</span>
</div>
);const SideBarIcon = ({ icon, text = 'tooltip 💡' }) => (
<div className="sidebar-icon group">
{icon}
<span class="sidebar-tooltip group-hover:scale-100">{text}</span>
</div>
);Ссылки и дополнительная информация
Коментарии
Остались вопросы, появились идеи для обсуждения или просто хотите оставить отзыв? Буду рад любой обратной связи!
Вместо авторизации в приложении giscus , вы также можете оставлять комментарии непосредственно на GitHub, с которым связанна данная ветка комментариев.
Похожие записи
Доступ к Docker Hub
Обход блокировки досутпа к Docker Hub с помощью прокси-сервера
Комментарии в блоге с Giscus
Система комментариев на основе GitHub Discussions.