按钮

本机按钮元素周围的轻量封装,可为鼠标悬停和焦点等内容提供更多见解型状态。

要开始使用,请通过 npm 安装 Headless UI

npm install @headlessui/react

按钮使用 Button 组件构建

import { Button } from '@headlessui/react'

function Example() {
  return (
    <Button className="rounded bg-sky-600 py-2 px-4 text-sm text-white data-[hover]:bg-sky-500 data-[active]:bg-sky-700">
      Save changes
    </Button>
  )
}

可以将通常会传递给原生 button 元素的任何属性传递给 Button

Headless UI 跟踪每个组件大量状态,例如某个输入栏是否是焦点,某个弹出面板是否已打开或关闭,或某个菜单中的哪个项目当前为键盘焦点。

但是,由于这些组件是无头的,且开箱即用时完全无样式,因此在你为每个状态自己提供所需的样式之前,无法在 UI 中看到此信息。

设置 Headless UI 组件的不同状态最简单的方法就是使用每个组件公开的 data-* 属性。

例如,Button 组件公开了一个 data-hover 属性(用于指示鼠标当前是否悬停在该按钮上)和一个 data-active 属性(用于指示按钮当前是否处于按下状态)。

<!-- Rendered `Button` -->
<button type="button" data-hover data-active></button>

使用 CSS 属性选择器 根据这些数据属性的存在有条件地应用样式。如果你使用的是 Tailwind CSS,数据属性修改器 可轻松实现此目的。

import { Button } from '@headlessui/react'

function Example() {
  return (
<Button className="rounded bg-sky-600 py-2 px-4 text-sm text-white data-[hover]:bg-sky-500 data-[hover]:data-[active]:bg-sky-700">
Save changes </Button> ) }

有关所有可用数据属性的列表,请参阅 组件 API

每个组件还会通过 渲染属性 公开有关其当前状态的信息,你可以使用这些信息来有条件地应用不同样式或渲染不同内容。

例如,Button 组件公开了一个 hover 状态,用于指示鼠标当前是否悬停在该按钮上,以及一个 active 状态,用于指示按钮当前是否处于按下状态。

import { Button } from '@headlessui/react'
import clsx from 'clsx'
import { Fragment } from 'react'

function Example() {
  return (
    <Button as={Fragment}>
{({ hover, active }) => (
<button className={clsx( 'rounded py-2 px-4 text-sm text-white',
!hover && !active && 'bg-sky-600',
hover && !active && 'bg-sky-500',
active && 'bg-sky-700'
)}
>
Save changes </button>
)}
</Button> ) }

有关所有可用渲染属性的列表,请参阅 组件 API

Button 添加 disabled 属性可禁用它

import { Button } from '@headlessui/react'

function Example() {
  return (
    <Button
disabled
className="rounded bg-sky-600 py-2 px-4 text-sm text-white data-[hover]:bg-sky-500 data-[active]:bg-sky-700 data-[disabled]:bg-gray-500" >
Save changes </Button> ) }

原生 button 元素的薄包装器。

属性默认值说明
asbutton
字符串 | 组件

button应呈现为的元素或组件。

disabledfalse
布尔值

button是否已禁用.

autoFocusfalse
布尔值

button在首次呈现时

typebutton
字符串

按钮类型。

数据属性渲染属性说明
data-disableddisabled

布尔值

button已禁用。

data-focusfocus

布尔值

button已聚焦。

data-hoverhover

布尔值

button已悬停。

data-activeactive

布尔值

button处于活动状态或已按下。

data-autofocusautofocus

布尔值

autoFocus 属性是否已设置为 true

如果你有兴趣获取预先设计的 Tailwind CSS 按钮组件示例,请查看 Tailwind UI — 由我们构建的一系列设计精美且精工细作的组件。

这是支持我们为诸如此类的开源项目开展工作的好方法,并且它使我们能够改进这些项目并确保这些项目得到良好的维护。