讓按鈕在移動設備上更大一些

程式技術

Tailwind CSS 的作者 Adam WathanBuild UIs that don't suck 系列中又分享了一個很實用的小技巧。

作者提到網頁中的一些按鈕設計,在桌面設備上可能會小一點以求美觀與符合頁面設計,對於可以精準點擊的滑鼠游標來說,小按鈕在使用體驗上不會有問題,但在移動設備上,過小的按鈕可能會讓用戶的手指在觸控時,難以精確的點擊。

2025_05_04_14_52_30_315563eeb21f.png
例如常見的關閉按鈕
<!-- 這個只有 size-6 的按鈕,在桌面設備上用滑鼠點擊可能相當容易,設計上也很好看 -->
<!-- 但在移動設備上,size-6 可能就有點過小了,對用戶的拇指不太友善 -->
<button
  type="button"
  class="flex size-6 items-center justify-center rounded-full bg-zinc-500/15 transition hover:bg-zinc-900/15"
>
  <!-- ... -->
</button>

在不改變按鈕外觀與設計的前提下,如果想要讓按鈕的點擊範圍在移動設備上大一點,可以怎麼做呢?Tailwind CSS 的作者提供了一個很酷的方式。

就是在 <button> 裡面直接加上一個大一點 <span> 標籤。

<button
  type="button"
  class="relative flex size-6 items-center justify-center rounded-md transition hover:bg-zinc-900/15"
  aria-label="Toggle navigation"
>
  <!-- 在 button 裡面加上一個大一點的 span 標籤,尺寸為 size-12 -->
  <!-- 透過 absolute 絕對定位,讓 span 不影響其他元素的排版 -->
  <!-- 使用 top-1/2 left-1/2 -translate-1/2 實現置中的效果  -->
  <!-- 這可以讓按鈕在不改變大小與設計的狀況下,讓點擊範圍大一點 -->
  <span class="absolute top-1/2 left-1/2 size-12 -translate-1/2"></span>
  <!-- ... -->
</button>

雖然這個方法很好的解決了按鈕在移動裝置上不夠大的問題,但是你會發現在桌面設備上,當滑鼠只是靠近但還沒移動到按鈕上時,就會觸發按鈕的 hover 樣式。這是因為只要進入 <span> 的範圍,就會觸發 <button>hover 效果。

2025_05_23_10_38_20_06c3e47f0d5d.gif

你當然可以用 md:hidden,讓螢幕在大於 48rem (768px) 時隱藏 <span>,但是作者請我們仔細思考一下,這樣的做法真的是對的嗎?

應該用螢幕大小來判斷要不要顯示 <span> 嗎?

實際上並不是,而是要根據用戶是否使用手指來觸控才對。CSS 本身提供了一個語法,可以判斷用戶是使用滑鼠游標還是使用手指觸控來瀏覽網頁。

/* 如果用戶是使用滑鼠游標,就顯示以下的樣式效果 */
@media (pointer: fine) {
  /* ... */
}

/* 如果用戶是使用手指觸控,就顯示以下的樣式效果 */
@media (pointer: coarse) {
  /* ... */
}

在 Tailwind CSS 中,雖然沒有提供 pointer 的 Variant Class Name,但我們可以使用 Tailwind CSS 的客製化 Variant 功能。

<!-- 使用 [@media(pointer:fine)]:hidden,當用戶使用滑鼠游標時,隱藏 span -->
<span
  class="absolute top-1/2 left-1/2 size-12 -translate-1/2 [@media(pointer:fine)]:hidden"
></span>

如此一來,當用戶使用手指觸控的設備時,<span> 就會出現並讓按鈕的點擊範圍變大,幫助用戶更方便的點擊按鈕。

Allen
written by
Allen

持續努力中的後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

則留言
顯示更多留言
新增留言
訪客 2026 年 02 月 07 日