你是否曾經試著點擊或點擊一個元素(例如:按鈕、鏈接),并且注意到只有單擊該元素的特定區域,它才會響應?
必生這種情況是因為可點擊區域未應用于整個元素。為了更加清楚,請參見下圖,左圖可點擊區別(圈紅部分)明顯比右圖的小很多,所以右圖的實現用戶體驗會更好。
對于本文,會介紹一些事例,并通過事例演示如何增加可點擊區別,提高用戶體驗。
WCAG準則
WCAG全稱Web Content Accessibility Guidelines 網頁內容無障礙瀏覽準則,簡單的說就是為了方便殘障人士(包括低視患者,盲人,聾人,學習障礙,行動不便,認知障礙....)訪問Web內容而制定的相關標準,可以使網站更加人性化。
舉個例子,在WCAG準則2.3.2中規定:網頁不包含任何閃光超過3次/秒的內容。
用戶應該能夠使用臺式機/筆記本電腦上的鍵盤以及移動設備或平板電腦上的觸摸屏來操作輸入。不要在移動設備屏幕上將按鈕設置得太小,以免按下正確的按鈕。觸摸目標的最小尺寸最好至少為44 x 44像素。
費茲法則
**費茲法則(Fitts law)**是一個人機互動以及人體工程學中人類活動的模型;它預測了快速移動到目標區域所需的時間是目標區域的距離和目標區域大小的函數。
在下面的圖中,我模擬了兩個按鈕的不同情況。在左側,按鈕更小,更遠,用戶需要更多的時間與它互動。在右側,按鈕大小更大,更接近于它的同級輸入元素,這將使交互更容易、更快。
接著,我們再來看看一些更加真實例子。注意:記住WCAG準則 和費茲法則 的概念。
按鈕
在需要時使用實際真實<button>(包含可點擊區域)非常重要。下面的示例來自我使用的在線銀行系統:
<div class="navig next" onclick="validateLogin()">Next</div>
這是上面按鈕的html的GIF圖像。我把鼠標懸停在按鈕上,光標仍然是一個指針,這很好。不過,我也可以選擇文本和懸停時,有一個文本光標!如果使用了正確的元素,就不會發生這種情況。
當使用HTML<button>元素時,會獲得下面效果:
- 可通過鼠標,鍵盤或觸摸訪問
- 可以通過鍵盤選中
- 有對應的 JAVAScript 方法
有些元素,我們需要添加 padding,原因有二:
- 讓它更美觀
- 讓它變大,這樣更容易被注意到
鏈接
之前在做導航的時候,犯了一個錯誤,應該是給 a 標簽添加 padding 而不是 li:
<nav>
<ul>
<li class="nav-item"><a href="#">Home</a></li>
<li class="nav-item"><nav href="#">Products</nav></li>
<li class="nav-item"><a href="#">Store</a></li>
<li class="nav-item"><a href="#">Team</a></li>
</ul>
</nav>
// css
.nav-item {
padding: 12px 16px;
}
基于上面的HTML和CSS,可點擊的區域將只是文本,如下圖所示:
正確的方法是在a 標簽本身上添加padding。請注意,默認情況下,padding 需要塊元素才有效,而 a 標簽是行內元素,所以可以給 a 標簽設置block,inline-element或 flex。
.nav-item a {
display: block;
padding: 12px 16px;
}
添加了上面的樣式后,可點擊的效果如下:
面包屑導航
假設可點擊區域如下所示:
這種體驗不是很好,鼠標或手指指向屏幕上如此小的目標會比較難。在下圖中,它的可點擊區域更大并且更易于交互。
事例源碼:https://codepen.io/shadeed/pen/PMygee
復選框和單選按鈕
當存在復選框或單選按鈕元素時,我希望可以單擊它或關聯的標簽來激活/禁用它。
從用戶體驗的角度來看,這是難以訪問和糟糕的。在 HTML 中,可以使用for屬性將標簽與輸入框綁定在一起。
<input type="checkbox" id="option1">
<label for="option1">Option 1</label>
或者可以將輸入框放置在標簽內:
<label for="option1">
Option 1
<input type="checkbox" id="option1">
</label>
然后,在<label>元素上添加padding,以使可點擊區域變大。這樣,問題得以解決,整個復選框或單選按鈕都是可單擊的,如下圖所
側邊欄
對于帶有類別的頁面,有時我會注意到列表鏈接沒有擴展到其父頁面的整個寬度。也就是說,可點擊區域僅在文本上,如下圖所示:
解決方法:
- 刪除<li>元素的 padding,并將其移動到<a>元素
- 通過添加display: block使a標簽的寬度等于其父鏈接的寬度。
.nav-item a {
/*Other styles*/
padding: 12px 16px;
display: block;
}
添加后,如下所示:
真實案例
在最近的Twitter更新中,導航設計在可點擊區域大小方面存在問題。最初,它僅與文本相關,如下面的屏幕截圖所示,但他們在收到反饋后將其修復。
章節標題
在某些情況下,需要在章節標題的遠端添加“查看更多”按鈕或箭頭。在下面的示例中,我將箭頭放置在假圓中,以便可以正確地使箭頭居中。
通常情況下,箭頭周圍的間距可以使用padding或width和height。
使用偽元素來增加可點擊區域
僅通過改變元素的寬度和高度或使用padding,并不總是能夠使可點擊區域變大,這時候就需要偽元素救場了。
這個想法是,偽元素屬于其父元素,因此當我們創建具有特定寬度和高度的偽元素時,它將充當其父元素的單擊/觸摸/懸停區域。
在下圖中,我在菜單按鈕中添加了:after偽元素:
.menu-2:after {
content: "";
position: absolute;
left: 55px;
top: 0;
width: 50px;
height: 50px;
background: #e83474;
/*Other styles*/
}
事例源碼:https://codepen.io/shadeed/pen/BXXjEg?editors=0100
作者:Ahmad Shadded 譯者:前端小智 來源:css-tricks
原文:https://css-tricks.com/enhancing-the-clickable-area-size/