tailwindcss 官网(四)核心概念:悬停、焦点和其它状态
文章目录
- tailwindcss 官网(四)核心概念:悬停、焦点和其它状态
-
- 3. 悬停、焦点和其它状态
-
- 概述
- Hover
- Focus
- Active
- Group-hover
- Group-focus
- Focus-within
- Focus-visible
- Motion-safe
- Motion-reduce
- Disabled
- Visited
- Checked
- First-child
- Last-child
- Odd-child
- Even-child
- 与响应式前缀结合使用
- 为自定义功能类生成变体
- 创建自定义变体
- 默认变体参考
官网:安装 - Tailwind CSS 中文文档
3. 悬停、焦点和其它状态
使用功能类为处于悬停、焦点和其它状态的元素设置样式。
概述
与 Tailwind 如何处理 响应式设计 类似,通过为功能类添加适当的状态变体前缀,可以对处于 hover 、focus 和其它状态的元素设置样式。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2cs0TPn5EeZpXTR5EWhlHayEVQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0UDM2AzMlNWZmhTYzEzN4EDZ1QDOiZWN3cTZmBTYhN2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
<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 状态时应用一个功能类。
默认情况下, 以下核心插件启用了该
hover
变体:
-
backgroundColor
-
backgroundOpacity
-
borderColor
-
borderOpacity
-
boxShadow
-
gradientColorStops
-
opacity
-
rotate
-
scale
-
skew
-
textColor
-
textDecoration
-
textOpacity
-
translate
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
hover
变体:
Focus
添加
focus:
前缀,以在 focus 状态时应用一个功能类。
默认情况下, 以下核心插件启用了该
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
变体:
Active
添加
active:
前缀,以在元素处于 active 状态时应用某个功能。
默认情况下,所有核心插件都没有启用该
active
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
active
变体:
Group-hover
如果您需要当鼠标悬停在一个指定的父元素上时对其子元素设置样式,给父元素添加
group
类,并且为子元素的功能类添加
group-hover:
前缀。
默认情况下, 以下核心插件启用了该
group-hover
变体:
-
backgroundColor
-
backgroundOpacity
-
borderColor
-
borderOpacity
-
boxShadow
-
opacity
-
textColor
-
textDecoration
-
textOpacity
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
group-hover
变体:
Group-focus
除了 focus,
group-focus
变体的工作方式与
group-hover
一样。
默认情况下,所有核心插件都没有启用该
group-focus
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
group-focus
变体:
Focus-within
添加
focus-within:
前缀,以便仅在一个子元素获得焦点时才应用功能类。(输入的文字颜色和预先显示的颜色不一样)
默认情况下, 以下核心插件启用了该
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
变体:
Focus-visible
请注意,focus-visible 当前需要 JS 和 PostCSS polyfills 来提供足够的浏览器支持。
添加
focus-visible:
前缀,以便当一个元素具有焦点且仅在用户使用键盘时才应用功能类。
注意:目前仅 Chrome, Edge, and Firefox 原生支持
focus-visible
,因此,为了获得足够的浏览器支持,您应该安装并配置 focus-visible JS polyfill 和 focus-visible PostCSS polyfill,并确保该插件在 PostCSS 插件列表中位于 Tailwind 之后。
默认情况下,所有核心插件都没有启用该
focus-visible
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
focus-visible
变体:
Motion-safe
添加
motion-safe:
前缀以便仅在
prefers-reduced-motion
匹配
no-preference
时应用功能类。
例如:如果用户未在系统中开启 “Reduce motion”,则此按钮仅在鼠标悬停时发生动画效果。
注意:不像其它大多数变体,
motion-safe
在按以下顺序排列时可以与响应式变体和其它变体(如
hover
)结合使用。
默认情况下,所有核心插件都没有启用该
motion-safe
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
motion-safe
变体:
Motion-reduce
添加
motion-reduce:
前缀以便仅在
prefers-reduced-motion
匹配
reduce
时应用功能类。
例如,默认情况下,此按钮将在鼠标悬停时产生动画,但是如果用户在系统中开启了 “Reduce motion”,则动画将被禁用。
注意:不像其它大多数变体,
motion-reduce
在按以下顺序排列时可以与响应式变体和其它变体(如
hover
)结合使用。
默认情况下,所有核心插件都没有启用该
motion-reduce
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
motion-reduce
变体:
Disabled
添加
disabled:
前缀,以便当一个元素被禁用时才应用功能类。
默认情况下,所有核心插件都没有启用该
disabled
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
disabled
变体:
Visited
添加
visited:
前缀,以便当一个链接被访问后才应用功能类。
默认情况下,所有核心插件都没有启用该
visited
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
visited
变体:
Checked
添加
checked:
前缀,以便当一个单选或复选框被选中时才应用功能类。
默认情况下,所有核心插件都没有启用该
checked
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
checked
变体:
First-child
添加
first:
前缀,以仅当元素是父元素的第一个子元素时才应用功能类。当使用某种循环生成元素时,最为有用。
需要特别注意的是,您应该将
first:
功能类添加到子元素上,而不是父元素。
默认情况下,所有核心插件都没有启用该
first-child
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
first
变体:
Last-child
添加
last:
前缀,在仅当元素是父元素的最后一个子元素时才应用功能类。当使用某种循环生成元素时,最为有用。
需要特别注意的是,您应该将
last:
功能类添加到子元素上,而不是父元素。
默认情况下,所有核心插件都没有启用该
last-child
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
last
变体:
Odd-child
添加
odd:
前缀使得仅在元素是父级奇数子元素的时候才应用功能类。当使用某种循环生成元素时,最为有用。
需要特别注意的是,您应该将
odd:
功能类添加到子元素上,而不是父元素。
默认情况下,所有核心插件都没有启用该
odd-child
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
odd
变体:
Even-child
添加
even:
前缀使得仅在元素是父级偶数子元素的时候才应用功能类。当使用某种循环生成元素时,最为有用。
需要特别注意的是,您应该将
even:
功能类添加到子元素上,而不是父元素。
默认情况下,所有核心插件都没有启用该
even-child
变体。
您可以在
tailwind.config.js
文件中的
variants
部分控制是否为某个插件启用
even
变体:
与响应式前缀结合使用
状态变体也是响应式的,意味着您可以执行诸如在不同断点处更改元素的悬停样式的操作。
要在指定断点应用一个状态变体,请在状态前缀之前添加响应式前缀:
为自定义功能类生成变体
您可以通过使用
@variants
指令包裹住您自己的自定义 CSS 类来为他们生成状态变体:
查看 @variants 指令文档 了解更多信息。
创建自定义变体
您可以通过编写自定义变体插件为 Tailwind 默认不支持的任何状态创建自己的变体。
例如,这个简单的插件增加了对
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']
}
}