Недавно Adam Wathan выпустил Tailwind UI — коллекцию адаптивных компонентов для Tailwind CSS.
Проект находится в стадии раннего доступа, поэтому не все компоненты еще доступны. Всё это не бесплатно (за исключением некоторых базовых компонентов), но я считаю, что стоит купить лицензию — это сэкономит массу времени, чем писать всё с нуля.
Почему Tailwind UI?
Я не фронтендер и трачу много сил на CSS. Например, я могу заниматься 2 часа центрированием кнопки на странице или делать форму, которую я посчитаю «удачной». Tailwind CSS, использует же подход «Utility-first», и я часто, во время его изучения, вскрикивал «Ага! Эврика!».
Когда Адам показал, как можно за 10 минут создать адаптивную страницу, просто копипастя компоненты TailwindUI, то я был поражен, насколько это быстро и эффективно.
Что ж, начнем! Посмотрим, как можно легко создать веб-приложение с помощью Tailwind UI.
Создание Приложения
Нам понадобится:
Установка Laravel 7
Для установки фреймворка запускаем следующую команду.
composer create-project --prefer-dist laravel/laravel laraveltailwindui
После завершения перейдите в каталог laraveltailwindui
.
Настройка Tailwindcss
Вы можете установить Tailwind CSS с помощью Laravel Frontend Preset через Composer:
composer require laravel-frontend-presets/tailwindcss --dev
После установки создадим шаблон Tailwind CSS
php artisan ui tailwindcss npm install && npm run dev
Посмотрите, теперь дефолтная страница оформлена с использованием Tailwind.
php artisan serve
Настройка Tailwind UI
Добавьте плагин Tailwind UI в проект, используя команду:
npm install @tailwindcss/ui
Затем добавьте @tailwindcss/ui
в список плагинов Tailwind.
// tailwind.config.js module.exports = { plugins: [ require('@tailwindcss/ui'), ] }
Tailwind UI использует семейство шрифтов Inter. Поэтому, для получения наилучшего результата, добавьте шрифт из CDN в основной макет (вы можете сделать это позже).
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">
Добавьте шрифт в конфиг Tailwind. Окончательный конфиг должен выглядеть как показано ниже.
// tailwind.config.jsmodule.exports = { theme: { extend: { fontFamily: { sans: ['Inter var'] }, } }, variants: {}, plugins: [ require('@tailwindcss/ui'), ] }
Не забудьте скомпилировать ресурсы
npm run dev
Установка Компонентов
В этой статье я сфокусируюсь на реализации компонентов Tailwind UI, без всякой бекэнд-интеграции, типа базы данных или crud функционала. Наша задача — построить красивое веб-приложение на основе бесплатных компонентов. Мы можем установить:
- Форма логина
- Сложный макет
- Широкая таблица для данных
- Пагинация
- Вывод описания отдельных сущностей
- Простое модальное окно
Создание Blade-шаблона
Для начала вам просто нужен базовый HTML-скелет. В него, в тег body, мы просто скопипастим код компонента Tailwind UI. Проводник Tailwind UI компонентов имеет удобную вкладку, позволяющую посмотреть код. Мы можем выделить весь этот код и скопировать его себе.
Вот так выглядит мой базовый макет:
<!DOCTYPE html> <html lang="{{ app()->getLocale() }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- CSRF Token --> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>{{ config('app.name', 'Laravel') }}</title> <!-- Styles --> <link href="{{ mix('css/app.css') }}" rel="stylesheet"> <link rel="stylesheet" href="https://rsms.me/inter/inter.css"> </head> <body> <div id="app"> <!-- Paste Tailwind UI Component in here section --> </div> <!-- Scripts --> <script src="{{ mix('js/app.js') }}"></script> <script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.0.1/dist/alpine.js" defer></script> </body>
Компонент требует Alpine.js
для обработки некоторых операций на стороне клиента, таких как модальное окно, поэтому необходимо подключить этот скрипт в конце страницы.
Возможно вам потребуется небольшая настройка ваших CSS, чтобы всё выглядело так, «как это должно у вас выглядеть». Не волнуйтесь, это не займет много времени, поскольку компонент хорошо вписывается в макет.
Вот некоторые мои реализации с небольшими изменениями:
Да, в основном это copy-paste, разве не круто? Если хотите увидеть остальные страницы, то демо здесь: http://fathomless-caverns-92546.herokuapp.com/login
Упрощение до Основного Макета
Компонент Stacked layout становится нашим основным макетом. Секция content
будет динамически меняться. Вы можете создать основной файл макета, который будет использовать каждая страница.
Измените содержимое <body>
следующим образом:
<!-- views/layouts/app.blade.php --> <div id="app"> @include('layouts.navigation') <main> @yield('content') </main> </div>
Вы можете выделить содержимое navigation
в отдельный файл, чтобы сохранить основной макет чистым.
Заключение
Определенно я углублюсь в изучение Tailwind, так как это очень интересно. В следующих своих изысканиях я попытаюсь превратить эти страницы в SPA с помощью Inertia.js + Vue или, возможно, поиграть с Blade-компонентами.
Исходный код находится здесь: https://github.com/didikz/laravel-tailwindui
Автор: Didik Tri Susanto
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.