跳至內容
+

按鈕

按鈕讓使用者透過單次點擊執行動作和做出選擇。

簡介

Button 元件取代了原生的 HTML <button> 元素,並為樣式和可訪問性提供了更多選項。

元件

import { Button } from '@mui/base/Button';

Button 的行為與原生 HTML <button> 類似,因此它會包裹將在其表面上顯示的文字。

以下示範展示了如何建立和設定兩個基本按鈕的樣式。請注意,由於 disabled 屬性,第二個按鈕無法點擊

按下 Enter 開始編輯

剖析

Button 元件由一個根 <button> 插槽組成,沒有內部插槽

<button class="base-Button-root">
  <!-- button text goes here -->
</button>

自訂結構

使用 slots.root 屬性以自訂元素覆寫根插槽

<Button slots={{ root: 'div' }} />

如果您提供非互動式元素(例如 <span>),Button 元件將自動新增必要的輔助功能屬性。

比較此示範中 <span> 上的屬性與先前示範中的 Button — 嘗試使用瀏覽器的開發人員工具檢查它們

按鈕已停用
按下 Enter 開始編輯

搭配 TypeScript 使用

在 TypeScript 中,您可以將 slots.root 中使用的自訂元件類型指定為非樣式元件的泛型參數。這樣一來,您就可以安全地直接在元件上提供自訂根的屬性

<Button<typeof CustomComponent> slots={{ root: CustomComponent }} customProp />

相同的原則適用於自訂原始元素特定的屬性

<Button<'img'> slots={{ root: 'img' }} src="button.png" />

Hook

import { useButton } from '@mui/base/useButton';

useButton Hook 可讓您將 Button 的功能應用於完全自訂的元件。它會傳回要放置在自訂元件上的屬性,以及代表元件內部狀態的欄位。

Hook *不* 支援插槽屬性,但它們支援自訂屬性

以下示範展示了如何建構與上方元件章節中相同的按鈕,但使用 useButton Hook

按下 Enter 開始編輯

如果您使用 ref 來儲存按鈕的參考,請將其傳遞給 useButtonref 參數,如上方示範所示。它將與 Hook 內部使用的 ref 合併。

自訂

自訂元素

Button 接受超出 HTML 元素的各種自訂元素。您甚至可以使用 SVG,如下方示範所示

Button

以下示範說明如何將 Button 作為連結使用,無論是使用 MUI Base Button 本身作為 href,還是使用 Next.js Link 元件

按下 Enter 開始編輯

焦點在已停用的按鈕上

與原生 HTML <button> 元素類似,Button 元件在停用時無法接收焦點。這可能會降低其可訪問性,因為螢幕閱讀器將無法宣告按鈕的存在和狀態。

focusableWhenDisabled 屬性可讓您變更此行為。當設定此屬性時,底層的 Button 不會設定 disabled 屬性。而是使用 aria-disabled,這會使 Button 成為可聚焦的。

每當需要螢幕閱讀器讀取已停用的 Button 時,都應使用此屬性。

MUI Base 在選單項目中內部使用此屬性,使其能夠使用鍵盤導航至已停用的項目(符合ARIA 指南)。

以下示範展示了 focusableWhenDisabled 屬性的運作方式 — 使用 Tab 鍵在此文件中導航,以查看只有第二個 Button 接受焦點

按下 Enter 開始編輯

當根插槽自訂時,focusableWhenDisabled 屬性的運作方式相同,但 aria-disabled 屬性會被使用,無論屬性的狀態為何。接收焦點的能力由 tabindex 屬性在內部控制。

focusableWhenDisabled = falsefocusableWhenDisabled = true
按下 Enter 開始編輯