tailwindcss 官网(四)核心概念:悬停、焦点和其它状态

tailwindcss 官网(四)核心概念:悬停、焦点和其它状态

官网:安装 - Tailwind CSS 中文文档

3. 悬停、焦点和其它状态

使用功能类为处于悬停、焦点和其它状态的元素设置样式。

概述

与 Tailwind 如何处理 响应式设计 类似,通过为功能类添加适当的状态变体前缀,可以对处于 hover 、focus 和其它状态的元素设置样式。

在这里插入图片描述

<form>
  <input class="border border-transparent focus:outline-none focus:ring-2 focus:ring-purple-600 focus:border-transparent ...">
  <button class="bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-600 focus:ring-opacity-50 ...">
    Sign up
  </button>
</form>

出于文件大小的考虑,默认情况下并非对所有的功能类都启用了状态变体,但我们尽力启用了最常用的组合。

查看默认启用了哪些变体的列表,查看本页末尾的 参考表

如果您需要启用一个 Tailwind 未支持的状态,可以通过 编写变体插件 来扩展支持的变体。


Hover

添加 hover: 前缀,以在 hover 状态时应用一个功能类。

在这里插入图片描述

<button class="bg-red-500 hover:bg-red-700 ...">  Hover me</button>

默认情况下, 以下核心插件启用了该 hover 变体:

  • backgroundColor
  • backgroundOpacity
  • borderColor
  • borderOpacity
  • boxShadow
  • gradientColorStops
  • opacity
  • rotate
  • scale
  • skew
  • textColor
  • textDecoration
  • textOpacity
  • translate

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 hover 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      padding: ['hover'],    }  },}

Focus

添加 focus: 前缀,以在 focus 状态时应用一个功能类。
在这里插入图片描述

<input class="focus:ring-2 focus:ring-blue-600 ...">

默认情况下, 以下核心插件启用了该 focus 变体:

  • accessibility
  • backgroundColor
  • backgroundOpacity
  • borderColor
  • borderOpacity
  • boxShadow
  • gradientColorStops
  • opacity
  • outline
  • placeholderColor
  • placeholderOpacity
  • ringColor
  • ringOffsetColor
  • ringOffsetWidth
  • ringOpacity
  • ringWidth
  • rotate
  • scale
  • skew
  • textColor
  • textDecoration
  • textOpacity
  • translate
  • zIndex

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 focus 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      maxHeight: ['focus'],    }  },}

Active

添加 active: 前缀,以在元素处于 active 状态时应用某个功能。

在这里插入图片描述

<button class="bg-green-500 active:bg-green-700 ...">  Click me</button>

默认情况下,所有核心插件都没有启用该 active 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 active 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      backgroundColor: ['active'],    }  },}

Group-hover

如果您需要当鼠标悬停在一个指定的父元素上时对其子元素设置样式,给父元素添加 group 类,并且为子元素的功能类添加 group-hover: 前缀。

在这里插入图片描述

<div class="group border-indigo-500 hover:bg-white hover:shadow-lg hover:border-transparent ...">  <p class="text-indigo-600 group-hover:text-gray-900 ...">New Project</p>  <p class="text-indigo-500 group-hover:text-gray-500 ...">Create a new project from a variety of starting templates.</p></div>

默认情况下, 以下核心插件启用了该 group-hover 变体:

  • backgroundColor
  • backgroundOpacity
  • borderColor
  • borderOpacity
  • boxShadow
  • opacity
  • textColor
  • textDecoration
  • textOpacity

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 group-hover 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      divideColor: ['group-hover'],    }  },}

Group-focus

除了 focus,group-focus 变体的工作方式与 group-hover 一样。

在这里插入图片描述

<button class="group bg-yellow-500 focus:bg-yellow-600 ...">  <svg class="text-white group-focus:text-yellow-300 ..."></svg>  Bookmark</button>

默认情况下,所有核心插件都没有启用该 group-focus 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 group-focus 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      backgroundColor: ['group-focus'],    }  },}

Focus-within

添加 focus-within: 前缀,以便仅在一个子元素获得焦点时才应用功能类。(输入的文字颜色和预先显示的颜色不一样)

在这里插入图片描述

<form>  <div class="text-gray-400 focus-within:text-gray-600 ...">    <div class="...">      <svg fill="currentColor"></svg>    </div>    <input class="focus:ring-2 focus:ring-gray-300 ...">  </div></form>

默认情况下, 以下核心插件启用了该 focus-within 变体:

  • accessibility
  • backgroundColor
  • backgroundOpacity
  • borderColor
  • borderOpacity
  • boxShadow
  • opacity
  • outline
  • ringColor
  • ringOffsetColor
  • ringOffsetWidth
  • ringOpacity
  • ringWidth
  • textColor
  • textDecoration
  • textOpacity
  • zIndex

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 focus-within 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      scale: ['focus-within'],    }  },}

Focus-visible

请注意,focus-visible 当前需要 JS 和 PostCSS polyfills 来提供足够的浏览器支持。

添加 focus-visible: 前缀,以便当一个元素具有焦点且仅在用户使用键盘时才应用功能类。

在这里插入图片描述

<button class="focus:ring-2 focus:ring-red-500 ...">  Ring on focus</button><button class="focus-visible:ring-2 focus-visible:ring-rose-500 ...">  Ring on focus-visible</button>

注意:目前仅 Chrome, Edge, and Firefox 原生支持 focus-visible,因此,为了获得足够的浏览器支持,您应该安装并配置 focus-visible JS polyfillfocus-visible PostCSS polyfill,并确保该插件在 PostCSS 插件列表中位于 Tailwind 之后。

// postcss.config.jsmodule.exports = {  plugins: {    tailwindcss: {},    'postcss-focus-visible': {},    autoprefixer: {}  }}

默认情况下,所有核心插件都没有启用该 focus-visible 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 focus-visible 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      textDecoration: ['focus-visible'],    }  },}

Motion-safe

添加 motion-safe: 前缀以便仅在 prefers-reduced-motion 匹配 no-preference 时应用功能类。

例如:如果用户未在系统中开启 “Reduce motion”,则此按钮仅在鼠标悬停时发生动画效果。

在这里插入图片描述

<button class="transform motion-safe:hover:scale-110 ...">  Hover me</button>

注意:不像其它大多数变体,motion-safe 在按以下顺序排列时可以与响应式变体和其它变体(如 hover)结合使用。

<div class="sm:motion-safe:hover:animate-spin">  <!-- ... --></div>

默认情况下,所有核心插件都没有启用该 motion-safe 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 motion-safe 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      translate: ['motion-safe'],    }  },}

Motion-reduce

添加 motion-reduce: 前缀以便仅在 prefers-reduced-motion 匹配 reduce 时应用功能类。

例如,默认情况下,此按钮将在鼠标悬停时产生动画,但是如果用户在系统中开启了 “Reduce motion”,则动画将被禁用。

在这里插入图片描述

<button class="transform hover:scale-110 motion-reduce:transform-none ...">  Hover me</button>

注意:不像其它大多数变体,motion-reduce 在按以下顺序排列时可以与响应式变体和其它变体(如 hover)结合使用。

<div class="sm:motion-reduce:hover:animate-none">  <!-- ... --></div>

默认情况下,所有核心插件都没有启用该 motion-reduce 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 motion-reduce 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      translate: ['motion-reduce'],    }  },}

Disabled

添加 disabled: 前缀,以便当一个元素被禁用时才应用功能类。

在这里插入图片描述

<button class="disabled:opacity-50 ...">  Submit</button><button class="disabled:opacity-50 ..." disabled>  Submit</button>

默认情况下,所有核心插件都没有启用该 disabled 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 disabled 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      opacity: ['disabled'],    }  },}

Visited

添加 visited: 前缀,以便当一个链接被访问后才应用功能类。

在这里插入图片描述

<a href="#" class="text-blue-600 visited:text-purple-600 ...">Link</a>

默认情况下,所有核心插件都没有启用该 visited 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 visited 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      textColor: ['visited'],    }  },}

Checked

添加 checked: 前缀,以便当一个单选或复选框被选中时才应用功能类。

在这里插入图片描述

<input type="checkbox" class="appearance-none checked:bg-blue-600 checked:border-transparent ...">

默认情况下,所有核心插件都没有启用该 checked 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 checked 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      backgroundColor: ['checked'],      borderColor: ['checked'],    }  },}

First-child

添加 first: 前缀,以仅当元素是父元素的第一个子元素时才应用功能类。当使用某种循环生成元素时,最为有用
在这里插入图片描述

<div class="...">  <div v-for="item in items" class="transform first:rotate-45 ...">    {{ item }}  </div></div>

需要特别注意的是,您应该将 first: 功能类添加到子元素上,而不是父元素。

默认情况下,所有核心插件都没有启用该 first-child 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 first 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      borderWidth: ['first'],    }  },}

Last-child

添加 last: 前缀,在仅当元素是父元素的最后一个子元素时才应用功能类。当使用某种循环生成元素时,最为有用
在这里插入图片描述

<div class="...">  <div v-for="item in items" class="transform last:rotate-45 ...">    {{ item }}  </div></div>

需要特别注意的是,您应该将 last: 功能类添加到子元素上,而不是父元素。

默认情况下,所有核心插件都没有启用该 last-child 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 last 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      borderWidth: ['last'],    }  },}

Odd-child

添加 odd: 前缀使得仅在元素是父级奇数子元素的时候才应用功能类。当使用某种循环生成元素时,最为有用。
在这里插入图片描述

<div class="...">  <div v-for="item in items" class="transform odd:rotate-45 ...">    {{ item }}  </div></div>

需要特别注意的是,您应该将 odd: 功能类添加到子元素上,而不是父元素。

默认情况下,所有核心插件都没有启用该 odd-child 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 odd 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      backgroundColor: ['odd'],    }  },}

Even-child

添加 even: 前缀使得仅在元素是父级偶数子元素的时候才应用功能类。当使用某种循环生成元素时,最为有用。
在这里插入图片描述

<div class="...">  <div v-for="item in items" class="transform even:rotate-45 ...">    {{ item }}  </div></div>

需要特别注意的是,您应该将 even: 功能类添加到子元素上,而不是父元素。

默认情况下,所有核心插件都没有启用该 even-child 变体

您可以在 tailwind.config.js 文件中的 variants 部分控制是否为某个插件启用 even 变体:

// tailwind.config.jsmodule.exports = {  // ...  variants: {    extend: {      backgroundColor: ['even'],    }  },}

与响应式前缀结合使用

状态变体也是响应式的,意味着您可以执行诸如在不同断点处更改元素的悬停样式的操作。

要在指定断点应用一个状态变体,请在状态前缀之前添加响应式前缀:

<button class="... hover:bg-green-500 sm:hover:bg-blue-500">  <!-- ... --></button>

为自定义功能类生成变体

您可以通过使用 @variants 指令包裹住您自己的自定义 CSS 类来为他们生成状态变体:

/* Input: */@variants group-hover, hover, focus {  .banana {    color: yellow;  }}/* Output: */.banana {  color: yellow;}.group:hover .group-hover\:banana {  color: yellow;}.hover\:banana:hover {  color: yellow;}.focus\:banana:focus {  color: yellow;}

查看 @variants 指令文档 了解更多信息。


创建自定义变体

您可以通过编写自定义变体插件为 Tailwind 默认不支持的任何状态创建自己的变体。

例如,这个简单的插件增加了对 required 伪类变体的支持:

// tailwind.config.jsconst plugin = require('tailwindcss/plugin')module.exports = {  plugins: [    plugin(function({ addVariant, e }) {      addVariant('required', ({ modifySelectors, separator }) => {        modifySelectors(({ className }) => {          return `.${e(`required${separator}${className}`)}:required`        })      })    })  ]}

点击 变体插件文档 了解更多关于编写变体插件的信息。


默认变体参考

出于文件大小的考虑,默认情况下,Tailwind 没有包含所有功能类的所有变体。

要为您的项目配置启用哪些变体,参考 配置变体文档

// Default configuration
module.exports = {
  // ...
  variants: {
    accessibility: ['responsive', 'focus-within', 'focus'],
    alignContent: ['responsive'],
    alignItems: ['responsive'],
    alignSelf: ['responsive'],
    animation: ['responsive'],
    appearance: ['responsive'],
    backgroundAttachment: ['responsive'],
    backgroundClip: ['responsive'],
    backgroundColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
    backgroundImage: ['responsive'],
    backgroundOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
    backgroundPosition: ['responsive'],
    backgroundRepeat: ['responsive'],
    backgroundSize: ['responsive'],
    borderCollapse: ['responsive'],
    borderColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
    borderOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
    borderRadius: ['responsive'],
    borderStyle: ['responsive'],
    borderWidth: ['responsive'],
    boxShadow: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
    boxSizing: ['responsive'],
    clear: ['responsive'],
    container: ['responsive'],
    cursor: ['responsive'],
    display: ['responsive'],
    divideColor: ['responsive', 'dark'],
    divideOpacity: ['responsive'],
    divideStyle: ['responsive'],
    divideWidth: ['responsive'],
    fill: ['responsive'],
    flex: ['responsive'],
    flexDirection: ['responsive'],
    flexGrow: ['responsive'],
    flexShrink: ['responsive'],
    flexWrap: ['responsive'],
    float: ['responsive'],
    fontFamily: ['responsive'],
    fontSize: ['responsive'],
    fontSmoothing: ['responsive'],
    fontStyle: ['responsive'],
    fontVariantNumeric: ['responsive'],
    fontWeight: ['responsive'],
    gap: ['responsive'],
    gradientColorStops: ['responsive', 'dark', 'hover', 'focus'],
    gridAutoColumns: ['responsive'],
    gridAutoFlow: ['responsive'],
    gridAutoRows: ['responsive'],
    gridColumn: ['responsive'],
    gridColumnEnd: ['responsive'],
    gridColumnStart: ['responsive'],
    gridRow: ['responsive'],
    gridRowEnd: ['responsive'],
    gridRowStart: ['responsive'],
    gridTemplateColumns: ['responsive'],
    gridTemplateRows: ['responsive'],
    height: ['responsive'],
    inset: ['responsive'],
    justifyContent: ['responsive'],
    justifyItems: ['responsive'],
    justifySelf: ['responsive'],
    letterSpacing: ['responsive'],
    lineHeight: ['responsive'],
    listStylePosition: ['responsive'],
    listStyleType: ['responsive'],
    margin: ['responsive'],
    maxHeight: ['responsive'],
    maxWidth: ['responsive'],
    minHeight: ['responsive'],
    minWidth: ['responsive'],
    objectFit: ['responsive'],
    objectPosition: ['responsive'],
    opacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
    order: ['responsive'],
    outline: ['responsive', 'focus-within', 'focus'],
    overflow: ['responsive'],
    overscrollBehavior: ['responsive'],
    padding: ['responsive'],
    placeContent: ['responsive'],
    placeItems: ['responsive'],
    placeSelf: ['responsive'],
    placeholderColor: ['responsive', 'dark', 'focus'],
    placeholderOpacity: ['responsive', 'focus'],
    pointerEvents: ['responsive'],
    position: ['responsive'],
    resize: ['responsive'],
    ringColor: ['responsive', 'dark', 'focus-within', 'focus'],
    ringOffsetColor: ['responsive', 'dark', 'focus-within', 'focus'],
    ringOffsetWidth: ['responsive', 'focus-within', 'focus'],
    ringOpacity: ['responsive', 'focus-within', 'focus'],
    ringWidth: ['responsive', 'focus-within', 'focus'],
    rotate: ['responsive', 'hover', 'focus'],
    scale: ['responsive', 'hover', 'focus'],
    skew: ['responsive', 'hover', 'focus'],
    space: ['responsive'],
    stroke: ['responsive'],
    strokeWidth: ['responsive'],
    tableLayout: ['responsive'],
    textAlign: ['responsive'],
    textColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
    textDecoration: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
    textOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
    textOverflow: ['responsive'],
    textTransform: ['responsive'],
    transform: ['responsive'],
    transformOrigin: ['responsive'],
    transitionDelay: ['responsive'],
    transitionDuration: ['responsive'],
    transitionProperty: ['responsive'],
    transitionTimingFunction: ['responsive'],
    translate: ['responsive', 'hover', 'focus'],
    userSelect: ['responsive'],
    verticalAlign: ['responsive'],
    visibility: ['responsive'],
    whitespace: ['responsive'],
    width: ['responsive'],
    wordBreak: ['responsive'],
    zIndex: ['responsive', 'focus-within', 'focus']
  }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Tailwind CSS 是一个高度可定制的 CSS 框架,它提供了大量的实用类,让开发者可以快速构建现代化的用户界面。下面是使用 Tailwind CSS 的一般步骤: 1. 安装 Tailwind CSS:可以通过 npm 或 yarn 来安装 Tailwind CSS。在命令行中运行以下命令来进行安装: ``` npm install tailwindcss ``` 或 ``` yarn add tailwindcss ``` 2. 创建配置文件:在项目的根目录中创建一个名为 `tailwind.config.js` 的文件。在该文件中,你可以自定义 Tailwind CSS 的配置选项,并添加你自己的样式。 3. 引入 Tailwind CSS:在你的 CSS 文件中引入 Tailwind CSS。你可以选择使用 `@import` 或 `@use` 来引入 Tailwind CSS。如果使用 Sass,可以在你的 `.scss` 文件中添加以下代码: ```scss @import 'tailwindcss/base'; @import 'tailwindcss/components'; @import 'tailwindcss/utilities'; ``` 4. 使用实用类:Tailwind CSS核心概念是使用实用类(Utility Classes)。你可以在 HTML 元素上直接添加这些类,以应用相应的样式。例如,要将一个按钮样式为蓝色和大号,可以添加以下类: ```html <button class="bg-blue-500 text-white text-lg">按钮</button> ``` 5. 自定义样式:如果你需要自定义样式,可以在配置文件中进行全局配置,或者在需要的地方使用行内样式。你可以根据自己的需求,修改颜色、字体、边距等样式。 这只是一个简单的使用方法,Tailwind CSS 还有更多功能和选项可以探索。你可以查阅官方文档来获取更详细的信息:https://tailwindcss.com/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChrisP3616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值