目錄
名稱的重要性:下拉列表、菜單、導航
自定義的需求
構建“混合”選擇器
可用性測試
關於類似菜單的選擇器
結語
首頁 web前端 css教學 在本機和自定義選擇元素之間達到平衡

在本機和自定義選擇元素之間達到平衡

Apr 05, 2025 am 09:32 AM

Striking a Balance Between Native and Custom Select Elements

本文探討如何構建既美觀又易訪問的樣式化下拉選擇元素。我們將巧妙地結合原生<select></select>元素和自定義樣式,實現最佳用戶體驗。

名稱的重要性:下拉列表、菜單、導航

在研究過程中,我們發現“下拉列表”、“菜單”、“導航”等術語經常混用,導致歧義。本文將明確定義“下拉列表”:

下拉列表:一種交互式組件,包含一個按鈕,用於顯示和隱藏項目列表,通常通過鼠標懸停、點擊或輕觸觸發。列表默認隱藏,交互後顯示。列表通常以塊狀內容(即選項)的形式覆蓋其他內容。

許多界面元素看起來像下拉列表,但簡單地將其稱為“下拉列表”如同用“魚”來描述動物一樣籠統。我們需要區分菜單、導航和選擇元素這三種不同類型的下拉列表:

  • 菜單:頁面內容中用戶可執行的命令或操作列表。
  • 導航:用於網站導航的鏈接列表。
  • 選擇:表單控件(<select></select> ),用於在表單中顯示供用戶選擇的選項列表。

不同用戶對界面的感知和交互方式不同,因此對UI元素的命名和設計模式的定義存在主觀性。

<menu></menu>元素已棄用,不推薦使用。關於包含式菜單和菜單按鈕的詳細說明,以及為什麼不應將ARIA 菜單角色用於站點導航,請參考相關資源。

我們將專注於作為<select></select>元素的下拉列表類型。

<select></select>元素的樣式化挑戰

根據MDN 的說法,樣式化表單控件存在“好、壞、醜”三種情況。<select></select>元素無疑屬於“醜”的範疇,其樣式化支持不足,導致開發者常常尋求替代方案。

理想情況下,如果可以避免使用<select></select>,就應該避免。然而,在某些情況下,<select></select>仍然是最佳選擇,例如選項數量眾多、佈局空間有限或時間/預算不足等。

自定義<select></select>的需求

創建自定義<select></select>時,通常需要滿足以下需求:

  • 按鈕顯示當前選定的選項。
  • 點擊按鈕切換選項列表的可見性。
  • 點擊選項列表中的選項會更新所選值,按鈕文本隨之更改,選項列表關閉。
  • 點擊組件外部會關閉選項列表。
  • 觸發器包含一個指向下方的三角形圖標,指示存在選項。

然而,這僅僅滿足了部分需求。原生<select></select>元素還提供以下功能:

  • 無論用戶的視覺能力如何,選定的選項都清晰可見。
  • 組件能夠以可預測的方式與鍵盤交互(例如,使用箭頭鍵導航,Enter 鍵選擇,Esc 鍵取消等)。
  • 輔助技術(例如屏幕閱讀器)能夠清晰地向用戶宣布元素,包括其角色、名稱和狀態。
  • 選項列表位置調整(即不會被屏幕裁剪)。
  • 元素遵守用戶的操作系統偏好設置(例如高對比度、配色方案、動畫等)。

許多自定義<select></select>組件都無法完全滿足這些需求。

構建“混合”選擇器

構建簡單的自定義<select></select>會犧牲功能性以換取美觀性。更好的方法是默認提供原生<select></select>,並在可能的情況下將其替換為更美觀的自定義版本。這就是“混合”選擇器的理念。它包含兩個選擇器:

  • 原生<select></select>,默認可見且可訪問。
  • 自定義<select></select>,默認隱藏,僅在使用鼠標時顯示。

以下是HTML 結構示例:

 <label for="selectNative">Main job role</label>
<div>
  <select id="selectNative" class="selectNative">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
  </select>
  <div class="selectCustom">
    <!-- Custom select content -->
  </div>
</div>
登入後複製

CSS 代碼用於控制兩個選擇器的顯示和位置:

 .selectNative,
.selectCustom {
  position: relative;
  width: 22rem;
  height: 4rem;
}

.selectCustom {
  position: absolute;
  top: 0;
  left: 0;
  display: none;
}

@media (hover: hover) {
  .selectCustom {
    display: block;
  }
  .selectNative:focus .selectCustom {
    display: none;
  }
}
登入後複製

JavaScript 代碼用於處理點擊事件、同步兩個選擇器的值以及鍵盤導航。

可用性測試

我們進行了一次小型可用性測試,測試對象包括殘疾人士,使用不同的設備和輔助技術進行測試。測試結果表明該方法有效,但仍需進行更廣泛的測試。

該方法的優點在於:

  • 移動設備和平板電腦用戶獲得原生<select></select>,提供更好的用戶體驗和性能。
  • 鍵盤用戶能夠以預期的方式與原生<select></select>交互。
  • 輔助技術能夠像正常一樣與原生<select></select>交互。
  • 鼠標用戶能夠與增強的自定義<select></select>交互。

該方法為所有用戶提供必要的原生功能,無需額外的工作量來實現所有原生特性。

然而,這種方法並非萬能的,它適用於簡單的選擇器,對於復雜的交互可能無效。

關於類似菜單的選擇器

如果選擇器始終具有選定選項(例如排序內容),則可以使用原生<select></select>或自定義菜單。需要注意WCAG 3.2.2 輸入準則:

除非在用戶使用組件之前已告知其行為,否則更改任何用戶界面組件的設置不應自動導致上下文更改。

為了滿足此準則,需要在用戶交互之前警告用戶操作,或在選擇器後添加說明。

結語

構建真正易訪問的選擇器組件比看起來更難。 “混合”選擇器是嘗試在保持美觀的同時獲得盡可能多的原生功能的一種方法。如果資源允許,請確保在發布組件之前進行充分的測試。

記住在創建“下拉列表”組件時使用正確的名稱。 ?

以上是在本機和自定義選擇元素之間達到平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

當您看上去時,CSS梯度變得更好 當您看上去時,CSS梯度變得更好 Apr 11, 2025 am 09:16 AM

我關注的一件事是Lea Verou&#039; s conic-Gradient()Polyfill的功能列表是最後一項:

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

三種代碼 三種代碼 Apr 11, 2025 pm 12:02 PM

每次啟動一個新項目時,我都會將我正在查看的代碼分為三種類型,或者如果您願意的話。我認為這些類型可以應用於

See all articles