логотип PurpleSchool
логотип PurpleSchool

Интеграция Tailwind CSS в Nuxt

Автор

Олег Марков

Введение

Tailwind CSS — это утилитарный CSS-фреймворк, который за последние годы стал невероятно популярным среди современных фронтенд-разработчиков. Благодаря возможностям быстрого прототипирования, высокой гибкости и минимальному количеству стилей по умолчанию Tailwind позволяет создавать выразительные пользовательские интерфейсы с минимальными усилиями.

Nuxt, в свою очередь, является фреймворком для создания универсальных Vue-приложений с поддержкой SSR (Server Side Rendering), статической генерации (SSG) и еще множеством мощных возможностей.

Интеграция Tailwind CSS в Nuxt позволяет объединить силу декларативного подхода Vue и дизайнерскую гибкость Tailwind. В этой статье вы узнаете, как правильно добавить Tailwind в проект на Nuxt, настроить производительность, организовать компоненты и улучшить процесс разработки.

Установка Tailwind CSS в проект Nuxt

Для начала давайте рассмотрим, как установить Tailwind CSS в Nuxt 3 — самой актуальной версии Nuxt. Инструкции аналогичны для Nuxt 2, но имеют несколько отличий, которые я тоже объясню.

Создание нового проекта Nuxt

Если у вас уже есть проект, этот шаг можно пропустить. Но на всякий случай приведу пример создания проекта на Nuxt 3:

# Создание нового проекта Nuxt 3 с помощью create-nuxt-app
npx nuxi init my-nuxt-app
cd my-nuxt-app
npm install

Здесь мы используем nuxi — CLI для Nuxt 3.

Установка Tailwind CSS и необходимых зависимостей

Nuxt 3 предлагает специальный модуль @nuxtjs/tailwindcss, который существенно облегчает интеграцию Tailwind:

# Установка Nuxt Tailwind CSS модуля
npm install -D @nuxtjs/tailwindcss

Этот модуль подключит Tailwind к вашему проекту, создаст необходимые конфиги и обеспечит корректную работу с autoprefixer и postcss.

Добавление модуля в nuxt.config.ts

Теперь подключим Tailwind к проекту. Для этого откройте файл nuxt.config.ts (или nuxt.config.js, если не используете TypeScript) и добавьте модуль:

export default defineNuxtConfig({
  modules: [
    '@nuxtjs/tailwindcss'
    // другие модули, если есть
  ]
})

Это все, что требуется для основного подключения Tailwind к Nuxt 3.

Генерация базовой конфигурации Tailwind

Если нужно кастомизировать Tailwind, создайте собственный конфиг. Для генерации файла конфигурации выполните:

npx tailwindcss init

В проекте появится файл tailwind.config.js, в котором вы сможете настраивать темы, расширять дизайн-систему и добавлять пользовательские плагины.

Пример базового конфига:

// tailwind.config.js
module.exports = {
  content: [
    './components/**/*.{vue,js}',
    './layouts/**/*.vue',
    './pages/**/*.vue',
    './app.vue',
    './plugins/**/*.{js,ts}',
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

Поле content важно для корректной работы purge — удаления неиспользуемых стилей на проде, что уменьшает размер итогового CSS.

Настройка и возможности Tailwind CSS в Nuxt

После интеграции можно использовать Tailwind CSS классы во всех ваших компонентах и страницах. Давайте рассмотрим самые частые задачи и особенности работы.

Организация стилей в Nuxt с Tailwind

Теперь вы сможете использовать Tailwind в любых Vue-файлах. Вот простой пример компонента:

<template>
  <button class="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition">
    Кнопка Tailwind
  </button>
</template>

Здесь мы используем классы Tailwind напрямую в шаблоне компонента.

Tailwind CSS — это популярный CSS-фреймворк, который позволяет быстро и удобно стилизовать веб-приложения. Интеграция Tailwind CSS в Nuxt позволяет использовать все преимущества этого фреймворка и создавать стильные и современные интерфейсы. Если вы хотите детальнее погрузиться в мир Nuxt, освоить все его тонкости и стать настоящим профессионалом — приходите на наш большой курс Nuxt - fullstack Vue фреймворк. На курсе 129 уроков и 13 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Использование Tailwind с глобальными стилями

Если вам нужно использовать какие-то глобальные правила (например, базовые импорты Tailwind), создайте файл assets/css/tailwind.css со следующим содержимым:

@tailwind base;
@tailwind components;
@tailwind utilities;

В Nuxt 3 не обязательно прописывать этот файл в конфиге — модуль сам найдет его по имени. Но если файл называется иначе, пропишите его явно в nuxt.config.ts:

export default defineNuxtConfig({
  css: [
    '~/assets/css/tailwind.css',
  ],
})

Это важно, если вы хотите расширять Tailwind кастомными стилями и перемешивать их с утилитами Tailwind.

Кастомизация и расширение Tailwind CSS

Темизация и кастомные цвета

Tailwind легко кастомизируется. В файле tailwind.config.js вы можете расширять тему:

module.exports = {
  theme: {
    extend: {
      colors: {
        brand: '#1B5CFE',
      }
    },
  },
}

Теперь можно использовать класс bg-brand, чтобы добавить ваш собственный цвет.

Использование своих классов и компонентов

Часто дизайнеры просят вас реализовать свой набор компонентов с фирменным стилем. Покажу, как создать базовый компонент, обертывающий Tailwind классы:

<!-- components/BaseButton.vue -->
<template>
  <button
    :class="[
      'px-4 py-2 rounded transition font-medium',
      color === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700' : '',
      color === 'secondary' ? 'bg-gray-200 text-black hover:bg-gray-400' : ''
    ]"
  >
    <slot />
  </button>
</template>

<script setup>
defineProps({
  color: {
    type: String,
    default: 'primary'
  }
})
</script>

Теперь используйте этот компонент во всем проекте:

<BaseButton color="primary">Главная кнопка</BaseButton>
<BaseButton color="secondary">Вторичная кнопка</BaseButton>

Это облегчает поддержку единого визуального стиля.

Использование Tailwind с Nuxt Layouts и Pages

Tailwind работает без ограничений во всех Nuxt-структурах — layouts, страницах, компонентах. Для глобального оформления добавьте базовые классы в разметку app.vue или default layout:

<!-- layouts/default.vue -->
<template>
  <div class="min-h-screen bg-gray-50">
    <NuxtPage />
  </div>
</template>

Такое оформление помогает унифицировать фон и внешний вид всего приложения.

Взаимодействие Tailwind CSS с SCSS/SASS/LESS

В Nuxt вы можете использовать Tailwind параллельно с препроцессорами. Например, если вы все еще используете SCSS для кастомных миксинов и переменных, просто импортируйте SCSS-файлы в nuxt.config.ts:

export default defineNuxtConfig({
  css: [
    '~/assets/css/tailwind.css',
    '~/assets/scss/main.scss',
  ],
})

Tailwind будет обрабатывать свои стили, а SCSS — свои.

Настройки оптимизации Tailwind в Nuxt

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

Purge CSS и настройки content-полей

В файле tailwind.config.js:

module.exports = {
  content: [
    './components/**/*.{vue,js}',
    // Добавляйте свои пути здесь
  ],
}

Если вы создаете шаблоны динамически (например, с помощью v-html), добавьте туда соответствующие классы, иначе Tailwind удалит стили при сборке.

Минификация и autoprefixer

Nuxt обрабатывает CSS с помощью PostCSS. Модуль @nuxtjs/tailwindcss уже включает autoprefixer и минификацию по умолчанию, ничего делать не нужно.

Tailwind CSS и SSR в Nuxt

Tailwind отлично работает с серверным рендерингом из коробки. Вам не нужно специально настраивать SSR для Tailwind — всё будет работать корректно.

Если же вы используете сторонние плагины, убедитесь, что они поддерживают SSR и корректно работают как на сервере, так и на клиенте.

Использование Tailwind CSS в Nuxt с кастомизацией breakpoints

Вы можете переопределять media-запросы прямо в конфиге Tailwind:

module.exports = {
  theme: {
    extend: {
      screens: {
        xs: '480px',
      },
    },
  },
}

Теперь xs: будет доступен как префикс. Например: xs:bg-red-500 — применяется начиная с 480px ширины.

Tailwind CSS и динамические классы во Vue

Если классы генерируются динамически, убедитесь, что Tailwind не удаляет их из финальной сборки. Например:

<template>
  <div :class="`bg-${color}-500`"></div>
</template>

В этом случае лучше явно указать соответствующие классы в safelist в конфиге:

module.exports = {
  safelist: [
    'bg-red-500', 'bg-blue-500', 'bg-green-500'
    // и другие используемые классы
  ],
}

Примеры расширенной интеграции и полезные техники

Использование Tailwind CSS plugins

Tailwind поддерживает множество плагинов, которые позволяют добавлять новые утилиты, эффекты и компоненты. Например, добавление форм и типографии:

npm install -D @tailwindcss/forms @tailwindcss/typography

Затем добавьте их в конфиг:

module.exports = {
  plugins: [
    require('@tailwindcss/forms'),
    require('@tailwindcss/typography'),
  ],
}

Теперь у вас есть набор утилит для форм и стилизованных markdown-контейнеров.

Theme Switching: смена темы «на лету»

Вы легко можете организовать переключение тем (light/dark) с Tailwind.

  1. Включите поддержку dark mode в конфиге:
module.exports = {
  darkMode: 'class', // или 'media'
}
  1. Используйте классы с префиксом dark::
<template>
  <div class="bg-white text-black dark:bg-gray-900 dark:text-white">
    Контент приложения
  </div>
</template>
  1. Для переключения темы используйте js:
// Добавьте или уберите класс 'dark' на <html>
document.documentElement.classList.toggle('dark');

В Nuxt можно сделать composable или плагин для более осмысленного управления темами.

Tailwind+Nuxt: Atomic CSS компоненты и переиспользование

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

/* assets/css/components.css */
.btn-primary {
  @apply px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition;
}

Подключите этот файл из основного Tailwind файла (tailwind.css):

@tailwind base;
@tailwind components;
@tailwind utilities;

@import './components.css';

Теперь используйте класс btn-primary в разметке:

<button class="btn-primary">Кнопка</button>

Такой подход облегчает сопровождение стилей и позволяет использовать компромисс между атомарными утилитами и классическим БЭМ-подходом.

Tailwind CSS IntelliSense и Dev Experience

Для более удобной работы советую поставить расширение Tailwind CSS IntelliSense в VSCode — оно подсвечивает классы, предлагает автодополнение и позволяет быстрее находить ошибки в написании классов.

Заключение

Интеграция Tailwind CSS в Nuxt — это простой способ ускорить разработку красивых и отзывчивых интерфейсов. Вы можете настраивать стили проекта быстро и гибко, создавать собственные темы и компоненты, использовать любые плюсы атомарного CSS и получать современный результат с минимальной настройкой. Tailwind и Nuxt отлично сочетаются, а благодаря готовым модулям интеграция проста и стабильна даже для новичков. Используя приведенные техники и советы, вы добьетесь лучшего качества кода и удобной поддержки стилистики в проекте.

Tailwind CSS — это лишь один из способов стилизации Nuxt-приложений. Чтобы создавать уникальные и запоминающиеся интерфейсы, необходимо также освоить другие техники стилизации, такие как CSS-in-JS, препроцессоры CSS и создание собственных компонентов стилей. На курсе Nuxt - fullstack Vue фреймворк вы получите комплексные знания и практический опыт, необходимые для создания профессиональных веб-приложений на Nuxt с использованием различных техник стилизации. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Nuxt прямо сегодня.

Частозадаваемые технические вопросы по интеграции Tailwind CSS в Nuxt

Как добавить поддержку JIT (Just-In-Time) режима в конфигурации Tailwind + Nuxt?

В последних версиях Tailwind JIT активирован по умолчанию. Если нужно принудительно его включить, в tailwind.config.js добавьте:

module.exports = {
  mode: 'jit',
  // остальная конфигурация...
}

Но лучше использовать стандартные настройки модуля Nuxt — он сам активирует необходимые режимы.

Почему кастомные классы не работают после сборки проекта?

Если вы используете динамические или редко встречающиеся классы, убедитесь, что они явно указаны в safelist массива в файле tailwind.config.js. Это не даст Tailwind удалить их во время purge-преобразований.

Как изменить базовый размер контейнера (container) в Tailwind для адаптивности?

В файле tailwind.config.js добавьте:

module.exports = {
  theme: {
    container: {
      center: true,
      padding: '2rem',
      screens: {
        sm: '100%',
        md: '728px',
        lg: '984px',
        xl: '1240px',
      },
    },
  },
};

Это обновит поведение класса container и выставит нужные максимальные ширины.

Можно ли переопределять Tailwind классы через SCSS/LESS?

Да, классы можно расширять или даже переопределять в других CSS/SCSS-файлах, главное — чтобы import происходил после Tailwind. Но рекомендуется использовать @apply и кастомизацию через tailwind.config.js — это чище и устойчевее.

Как подключить Tailwind, если проект Nuxt установлен через create-nuxt-app с другим CSS-фреймворком?

Удалите из nuxt.config.js старый фреймворк (например, Bootstrap или Vuetify), а затем выполните стандартную установку и настройку Tailwind CSS (см. выше). Если были глобальные CSS-файлы, проверьте, что не возникает конфликтов стилей; если стили мешают, удалите их или настройте порядок подключения через поле css в конфиге.

Гайд по созданию адаптивных интерфейсов с Nuxt UIСтрелочка вправо

Постройте личный план изучения Nuxt до уровня Middle — бесплатно!

Nuxt — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Nuxt

Генерация статического сайта с помощью NuxtКак использовать useAsyncData в NuxtКак использовать SVG в NuxtКоманды для запуска NuxtРабота с JSON-данными в NuxtКак настроить HTML-шаблон в NuxtГенерация статического сайта с помощью NuxtРуководство по получению данных с Fetch в NuxtКак отключить определенные функции в NuxtРабота с данными в Nuxt с помощью useNuxtDataНастройка и использование cookie в NuxtГайд по аутентификации (auth) в NuxtКак создавать API-маршруты в Nuxt
Использование Vite для ускорения разработки в NuxtРуководство по использованию TypeScript в NuxtКак запустить Nuxt-приложение в productionКак работает Server-Side Rendering SSR в NuxtНастройка и оптимизация серверной части Nuxt-приложенияРуководство по настройке маршрутизации в NuxtКакие проекты разумно реализовывать на NuxtИнструкция по управлению пакетами NPM в NuxtИнтеграция Node.js для Nuxt-приложенияНастройка мета-тегов для SEO в NuxtНастройка и использование HTTPS в NuxtКак отлавливать и обрабатывать ошибки в NuxtКак развернуть Nuxt приложение в DockerРуководство по развертыванию приложений в Nuxt CloudКак оптимизировать сборку на NuxtИнтеграция Laravel и Nuxt
Открыть базу знаний

Лучшие курсы по теме

Иконка ракетыСкоро!
изображение курса

Nuxt

Антон Ларичев
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий