Skip to content

Пресет Wind3 ​

Компактный пресет Tailwind CSS / Windi CSS для UnoCSS.

Исходный код

ИНФОРМАЦИЯ

@unocss/preset-wind и @unocss/preset-uno устарели и были переименованы в @unocss/preset-wind3. Этот пресет наследует от @unocss/preset-mini.

Установка ​

bash
pnpm add -D @unocss/preset-wind3
bash
yarn add -D @unocss/preset-wind3
bash
npm install -D @unocss/preset-wind3
bash
bun add -D @unocss/preset-wind3
uno.config.ts
ts
import presetWind3 from '@unocss/preset-wind3'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    presetWind3(),
  ],
})

СОВЕТ

Этот пресет включен в пакет unocss, вы также можете импортировать его оттуда:

ts
import { presetWind3 } from 'unocss'

Правила ​

Основная цель этого пресета — обеспечить совместимость с Tailwind CSS и Windi CSS. Следует отметить, что полная совместимость не гарантируется. Подробную информацию об использовании см. в их документации.

Полный список правил и пресетов, включенных в этот пресет, можно найти в нашей интерактивной документации или непосредственно в исходном коде.

Возможности ​

Тёмный режим ​

По умолчанию этот пресет генерирует тёмный режим на основе классов с помощью варианта dark:.

html
<div class="dark:bg-red:10" />

сгенерируется:

css
.dark .dark\:bg-red\:10 {
  background-color: rgb(248 113 113 / 0.1);
}

Тёмный режим на основе медиа-запросов ​

Чтобы вместо этого использовать тёмный режим на основе медиа-запросов глобально, вы можете изменить конфигурацию для варианта dark::

ts
presetWind3({
  dark: 'media'
})

Теперь

html
<div class="dark:bg-red:10" />

сгенерирует:

css
@media (prefers-color-scheme: dark) {
  .dark\:bg-red\:10 {
    background-color: rgb(248 113 113 / 0.1);
  }
}

Опциональный тёмный режим на основе медиа-запросов ​

Чтобы использовать опциональный тёмный режим на основе медиа-запросов, воспользуйтесь вариантом @dark::

html
<div class="@dark:bg-red:10" />
css
@media (prefers-color-scheme: dark) {
  .\@dark\:bg-red\:10 {
    background-color: rgb(248 113 113 / 0.1);
  }
}

Отличия от Tailwind CSS ​

Кавычки ​

Использование кавычек в шаблоне (файлах, предназначенных для обработки) не поддерживается из-за особенностей работы экстрактора. Например, вы не сможете написать before:content-['']. В таких случаях предпочтительнее ввести новую утилиту, которую можно задать явно, например class="before:content-empty".

background-position с произвольными значениями ​

Tailwind позволяет использовать пользовательские значения для background-position, используя «голый» синтаксис:

html
<div class="bg-[center_top_1rem]"></div>

Пресет Wind вместо этого интерпретирует center_top_1rem как цвет. Используйте префикс position: для достижения того же результата:

html
<div class="bg-[position:center_top_1rem]"></div>

Анимации ​

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

Вы можете использовать префикс animate-, чтобы помочь IntelliSense быстрее найти нужную анимацию.

СОВЕТ

Мы не объединяем конфликтующие названия анимаций из Tailwind и Animate.css. Если вам нужно использовать название анимации из Animate.css, используйте animate-<название>-alt.

Например:

Tailwind CSSAnimate.css
animate-bounceanimate-bounce-alt

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

uno.config.ts
ts
export default defineConfig({
  theme: {
    animation: {
      keyframes: {
        custom: '{0%, 100% { transform: scale(0.5); } 50% { transform: scale(1); }}',
      },
      durations: {
        custom: '1s',
      },
      timingFns: {
        custom: 'cubic-bezier(0.4,0,.6,1)',
      },
      properties: {
        custom: { 'transform-origin': 'center' },
      },
      counts: {
        custom: 'infinite',
      },
    }
  }
})

Предварительный просмотр пользовательской анимации:

animate-custom

СОВЕТ

Вы также можете добавить category, чтобы сгруппировать анимации для более удобного управления. Это упростит использование эффектов анимации сторонними инструментами.

uno.config.ts
ts
export default defineConfig({
  theme: {
    animation: {
      keyframes: {
        custom: '{0%, 100% { transform: scale(0.5); } 50% { transform: scale(1); }}',
      },
      // ...
      category: {
        custom: 'Zooming',
      },
    }
  }
})

Отличия от Windi CSS ​

Контрольные точки ​

Windi CSSUnoCSS
<sm:p-1lt-sm:p-1
@lg:p-1at-lg:p-1
>xl:p-1xl:p-1

Пробелы в синтаксисе с квадратными скобками ​

Этот пресет использует _ вместо , для обозначения пробела в синтаксисе с квадратными скобками.

Windi CSSUnoCSS
grid-cols-[1fr,10px,max-content]grid-cols-[1fr_10px_max-content]

Поскольку некоторые правила CSS требуют использования , как части значения, например: grid-cols-[repeat(3,auto)]

Экспериментальные функции ​

ПРЕДУПРЕЖДЕНИЕ

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

Media Hover ​

Media hover решает проблему «залипающего» наведения, когда на мобильных устройствах при нажатии на элемент со стилем hover этот стиль сохраняется до тех пор, пока пользователь не нажмет в другом месте.

Поскольку обычный стиль :hover используется повсеместно, данный вариант использует синтаксис @hover, чтобы отличить его от стандартного псевдокласса hover.

Вариант @hover-text-red сгенерирует:

css
@media (hover: hover) and (pointer: fine) {
  .\@hover-text-red:hover {
    --un-text-opacity: 1;
    color: rgb(248 113 113 / var(--un-text-opacity));
  }
}

Параметры ​

ИНФОРМАЦИЯ

Параметры этого пресета наследуются от @unocss/preset-mini.

important ​

  • Тип: boolean | string
  • По умолчанию: false

Опция important позволяет управлять тем, должны ли утилиты UnoCSS помечаться как !important. Это может быть очень полезно при использовании UnoCSS вместе с существующим CSS, который имеет селекторы с высокой специфичностью.

ПРЕДУПРЕЖДЕНИЕ

Использование этой опции применит important ко всем утилитам, созданным UnoCSS. Если вы хотите применить его только к конкретным утилитам, используйте вместо этого вариант important:.

Однако установка important в значение true может привести к проблемам при интеграции сторонних JS-библиотек, которые добавляют инлайновые стили вашим элементам. В таких случаях утилиты UnoCSS с !important перекрывают инлайновые стили, что может нарушить задуманный дизайн.

Чтобы обойти это, вы можете установить important в значение ID-селектора, например #app:

uno.config.ts
ts
import presetWind3 from '@unocss/preset-wind'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    presetWind3({
      important: '#app',
    }),
  ],
})

Эта конфигурация добавит заданный селектор в качестве префикса ко всем вашим утилитам, фактически увеличивая их специфичность без реального использования !important.

Утилита dark:bg-blue выведет:

css
#app :is(.dark .dark\:bg-blue) {
  --un-bg-opacity: 1;
  background-color: rgb(96 165 250 / var(--un-bg-opacity));
}

Распространяется по лицензии MIT.