<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Touch on Tarragon</title><link>https://tarrragon.github.io/blog/tags/touch/</link><description>Recent content in Touch on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/touch/index.xml" rel="self" type="application/rss+xml"/><item><title>Motor 可達性：hit target、間距、誤點防護</title><link>https://tarrragon.github.io/blog/report/motor-accessibility-hit-target/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/report/motor-accessibility-hit-target/</guid><description>&lt;h2 id="核心原則">核心原則&lt;/h2>
&lt;p>&lt;strong>Hit target ≥ 44×44px、相鄰互動元素之間有間距、避免「精準瞄準」需求。&lt;/strong> Motor accessibility 處理的不是視覺、是「手能否準確點擊」 — 行動裝置使用者、年長使用者、motor 障礙使用者都受益。設計時優先擴大 padding、不是縮小視覺。&lt;/p>
&lt;blockquote>
&lt;p>本篇焦點：&lt;strong>motor 可達性&lt;/strong>。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>視覺呈現面的 a11y&lt;/strong>由 &lt;a href="../visual-aids-contrast-zoom-responsive/">#40 視覺輔助&lt;/a> 處理&lt;/li>
&lt;li>&lt;strong>鍵盤使用者的 a11y&lt;/strong>由 &lt;a href="../keyboard-accessibility/">#52 鍵盤可達性&lt;/a> 處理&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;hr>
&lt;h2 id="為什麼-motor-可達性需要獨立盤點">為什麼 motor 可達性需要獨立盤點&lt;/h2>
&lt;h3 id="使用者類型">使用者類型&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>使用者&lt;/th>
 &lt;th>為什麼 hit target 重要&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>行動裝置使用者&lt;/td>
 &lt;td>手指比滑鼠粗、需要更大目標&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>年長使用者&lt;/td>
 &lt;td>手部精準度下降&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Motor 障礙使用者&lt;/td>
 &lt;td>Tremor / 手部協調困難&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>暫時受限使用者（拿東西單手操作、晃動環境）&lt;/td>
 &lt;td>短期內精準度下降&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>最後一類包含「正常使用者在某些情境」 — motor a11y 的設計對全體使用者都有價值。&lt;/p>
&lt;h3 id="失敗模式">失敗模式&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>失敗&lt;/th>
 &lt;th>表現&lt;/th>
 &lt;th>影響範圍&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Hit target &amp;lt; 24px&lt;/td>
 &lt;td>行動裝置上難點&lt;/td>
 &lt;td>多數行動使用者&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>相鄰互動元素間距不足&lt;/td>
 &lt;td>誤觸隔壁&lt;/td>
 &lt;td>手指粗 / motor 障礙者&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>需要精準 drag / pinch&lt;/td>
 &lt;td>部分 motor 障礙者無法&lt;/td>
 &lt;td>motor 障礙者&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>短時間內需多次精準操作&lt;/td>
 &lt;td>tremor 使用者無法&lt;/td>
 &lt;td>tremor 使用者&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="wcag-標準">WCAG 標準&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>標準&lt;/th>
 &lt;th>要求&lt;/th>
 &lt;th>等級&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>2.5.5 Target Size&lt;/td>
 &lt;td>互動元素 ≥ 44×44 CSS px&lt;/td>
 &lt;td>AAA&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2.5.8 Target Size (Minimum)&lt;/td>
 &lt;td>互動元素 ≥ 24×24 CSS px（除非有間距足夠的等價替代）&lt;/td>
 &lt;td>AA（WCAG 2.2 新增）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2.5.7 Dragging Movements&lt;/td>
 &lt;td>拖拽動作有單擊替代&lt;/td>
 &lt;td>AA（WCAG 2.2 新增）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>WCAG 2.2 把 motor a11y 從 AAA 拉到部分 AA — 顯示這類問題的重要性提升。&lt;/p>
&lt;hr>
&lt;h2 id="風險點-1hit-target-太小">風險點 1：Hit target 太小&lt;/h2>
&lt;p>&lt;strong>位置&lt;/strong>：scope UI 的 radio buttons、filter checkbox。&lt;/p>
&lt;p>&lt;strong>判讀&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>WCAG 2.5.5（AAA）建議互動元素 hit target ≥ 44×44px&lt;/li>
&lt;li>Native &lt;code>&amp;lt;input type=&amp;quot;radio&amp;quot;&amp;gt;&lt;/code> 在桌面 ~13×13px、行動裝置 24×24px&lt;/li>
&lt;li>label 包住 input + 文字、整個 label 可點 — 提升 hit target&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>症狀&lt;/strong>：行動裝置使用者點擊精準度不足、誤點旁邊選項。&lt;/p>
&lt;p>&lt;strong>第一個該查的&lt;/strong>：量 label 整體（含 padding）的高度與寬度。&lt;/p>
&lt;p>&lt;strong>修正方向&lt;/strong>：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c">/* 較差 — input 視覺很小、label 文字緊鄰 */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="nt">label&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">display&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">inline-block&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="nt">input&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;radio&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">width&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">height&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="c">/* 好 — label 整個區域可點、padding 撐到 44px */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="nt">label&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="k">display&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">inline-flex&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="k">align-items&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="k">padding&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.625&lt;/span>&lt;span class="kt">rem&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="kt">rem&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c">/* 約 44px 高 */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="k">cursor&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">pointer&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="nt">input&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;radio&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">margin-right&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.5&lt;/span>&lt;span class="kt">rem&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>關鍵不是把 input 視覺變大、是把可點區域擴大（padding）— 視覺保持精緻、可點區域達標。&lt;/p></description><content:encoded><![CDATA[<h2 id="核心原則">核心原則</h2>
<p><strong>Hit target ≥ 44×44px、相鄰互動元素之間有間距、避免「精準瞄準」需求。</strong> Motor accessibility 處理的不是視覺、是「手能否準確點擊」 — 行動裝置使用者、年長使用者、motor 障礙使用者都受益。設計時優先擴大 padding、不是縮小視覺。</p>
<blockquote>
<p>本篇焦點：<strong>motor 可達性</strong>。</p>
<ul>
<li><strong>視覺呈現面的 a11y</strong>由 <a href="../visual-aids-contrast-zoom-responsive/">#40 視覺輔助</a> 處理</li>
<li><strong>鍵盤使用者的 a11y</strong>由 <a href="../keyboard-accessibility/">#52 鍵盤可達性</a> 處理</li>
</ul></blockquote>
<hr>
<h2 id="為什麼-motor-可達性需要獨立盤點">為什麼 motor 可達性需要獨立盤點</h2>
<h3 id="使用者類型">使用者類型</h3>
<table>
  <thead>
      <tr>
          <th>使用者</th>
          <th>為什麼 hit target 重要</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>行動裝置使用者</td>
          <td>手指比滑鼠粗、需要更大目標</td>
      </tr>
      <tr>
          <td>年長使用者</td>
          <td>手部精準度下降</td>
      </tr>
      <tr>
          <td>Motor 障礙使用者</td>
          <td>Tremor / 手部協調困難</td>
      </tr>
      <tr>
          <td>暫時受限使用者（拿東西單手操作、晃動環境）</td>
          <td>短期內精準度下降</td>
      </tr>
  </tbody>
</table>
<p>最後一類包含「正常使用者在某些情境」 — motor a11y 的設計對全體使用者都有價值。</p>
<h3 id="失敗模式">失敗模式</h3>
<table>
  <thead>
      <tr>
          <th>失敗</th>
          <th>表現</th>
          <th>影響範圍</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Hit target &lt; 24px</td>
          <td>行動裝置上難點</td>
          <td>多數行動使用者</td>
      </tr>
      <tr>
          <td>相鄰互動元素間距不足</td>
          <td>誤觸隔壁</td>
          <td>手指粗 / motor 障礙者</td>
      </tr>
      <tr>
          <td>需要精準 drag / pinch</td>
          <td>部分 motor 障礙者無法</td>
          <td>motor 障礙者</td>
      </tr>
      <tr>
          <td>短時間內需多次精準操作</td>
          <td>tremor 使用者無法</td>
          <td>tremor 使用者</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="wcag-標準">WCAG 標準</h2>
<table>
  <thead>
      <tr>
          <th>標準</th>
          <th>要求</th>
          <th>等級</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>2.5.5 Target Size</td>
          <td>互動元素 ≥ 44×44 CSS px</td>
          <td>AAA</td>
      </tr>
      <tr>
          <td>2.5.8 Target Size (Minimum)</td>
          <td>互動元素 ≥ 24×24 CSS px（除非有間距足夠的等價替代）</td>
          <td>AA（WCAG 2.2 新增）</td>
      </tr>
      <tr>
          <td>2.5.7 Dragging Movements</td>
          <td>拖拽動作有單擊替代</td>
          <td>AA（WCAG 2.2 新增）</td>
      </tr>
  </tbody>
</table>
<p>WCAG 2.2 把 motor a11y 從 AAA 拉到部分 AA — 顯示這類問題的重要性提升。</p>
<hr>
<h2 id="風險點-1hit-target-太小">風險點 1：Hit target 太小</h2>
<p><strong>位置</strong>：scope UI 的 radio buttons、filter checkbox。</p>
<p><strong>判讀</strong>：</p>
<ul>
<li>WCAG 2.5.5（AAA）建議互動元素 hit target ≥ 44×44px</li>
<li>Native <code>&lt;input type=&quot;radio&quot;&gt;</code> 在桌面 ~13×13px、行動裝置 24×24px</li>
<li>label 包住 input + 文字、整個 label 可點 — 提升 hit target</li>
</ul>
<p><strong>症狀</strong>：行動裝置使用者點擊精準度不足、誤點旁邊選項。</p>
<p><strong>第一個該查的</strong>：量 label 整體（含 padding）的高度與寬度。</p>
<p><strong>修正方向</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c">/* 較差 — input 視覺很小、label 文字緊鄰 */</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nt">label</span> <span class="p">{</span> <span class="k">display</span><span class="p">:</span> <span class="kc">inline-block</span><span class="p">;</span> <span class="p">}</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nt">input</span><span class="o">[</span><span class="nt">type</span><span class="o">=</span><span class="s2">&#34;radio&#34;</span><span class="o">]</span> <span class="p">{</span> <span class="k">width</span><span class="p">:</span> <span class="mi">13</span><span class="kt">px</span><span class="p">;</span> <span class="k">height</span><span class="p">:</span> <span class="mi">13</span><span class="kt">px</span><span class="p">;</span> <span class="p">}</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="c">/* 好 — label 整個區域可點、padding 撐到 44px */</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="nt">label</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="k">display</span><span class="p">:</span> <span class="kc">inline-flex</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="k">align-items</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mf">0.625</span><span class="kt">rem</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>  <span class="c">/* 約 44px 高 */</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="k">cursor</span><span class="p">:</span> <span class="kc">pointer</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="nt">input</span><span class="o">[</span><span class="nt">type</span><span class="o">=</span><span class="s2">&#34;radio&#34;</span><span class="o">]</span> <span class="p">{</span> <span class="k">margin-right</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">rem</span><span class="p">;</span> <span class="p">}</span></span></span></code></pre></div><p>關鍵不是把 input 視覺變大、是把可點區域擴大（padding）— 視覺保持精緻、可點區域達標。</p>
<hr>
<h2 id="風險點-2相鄰互動元素間距不足">風險點 2：相鄰互動元素間距不足</h2>
<p><strong>位置</strong>：filter checkbox 列、scope radio 列。</p>
<p><strong>判讀</strong>：</p>
<p>兩個 hit target 緊鄰、即使各自達 44px、相鄰時仍可能誤觸 — WCAG 2.5.8 要求「目標之間有足夠間距」。</p>
<p><strong>症狀</strong>：使用者想點 A 但點到旁邊的 B。</p>
<p><strong>修正方向</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c">/* 加 gap 確保相鄰元素間距 */</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">.</span><span class="nc">filter-list</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="k">flex-direction</span><span class="p">:</span> <span class="kc">column</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="k">gap</span><span class="p">:</span> <span class="mi">8</span><span class="kt">px</span><span class="p">;</span>  <span class="c">/* 至少 8px 間距 */</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="c">/* 或用 padding 撐開 */</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="p">.</span><span class="nc">filter-list</span> <span class="nt">label</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mf">0.625</span><span class="kt">rem</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">  <span class="k">margin-bottom</span><span class="p">:</span> <span class="mi">4</span><span class="kt">px</span><span class="p">;</span>  <span class="c">/* 加總間距達 8px+ */</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>預設 8px 間距 — 比視覺需求多一點、避免誤觸。</p>
<hr>
<h2 id="風險點-3需要精準-drag--pinch-的操作">風險點 3：需要精準 drag / pinch 的操作</h2>
<p><strong>位置</strong>：搜尋頁未實作 drag 互動、但若未來加（例如拖拽結果排序、pinch 縮放圖片）。</p>
<p><strong>判讀</strong>：</p>
<p>WCAG 2.5.7（AA）要求 drag 動作有單擊替代 — 例如「拖拽排序」要有「上移 / 下移」按鈕作為替代。</p>
<p><strong>症狀</strong>：motor 障礙使用者無法完成 drag 操作。</p>
<p><strong>修正方向</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="ln">1</span><span class="cl"><span class="c">&lt;!-- 主互動：drag --&gt;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">&lt;</span><span class="nt">li</span> <span class="na">draggable</span><span class="o">=</span><span class="s">&#34;true&#34;</span><span class="p">&gt;</span>項目 A<span class="p">&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c">&lt;!-- 必須提供：button 替代 --&gt;</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">  項目 A
</span></span><span class="line"><span class="ln">7</span><span class="cl">  <span class="p">&lt;</span><span class="nt">button</span> <span class="na">aria-label</span><span class="o">=</span><span class="s">&#34;上移&#34;</span><span class="p">&gt;</span>↑<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">  <span class="p">&lt;</span><span class="nt">button</span> <span class="na">aria-label</span><span class="o">=</span><span class="s">&#34;下移&#34;</span><span class="p">&gt;</span>↓<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="p">&lt;/</span><span class="nt">li</span><span class="p">&gt;</span></span></span></code></pre></div><p>對搜尋頁當前實作不適用、但未來加互動時的預警。</p>
<hr>
<h2 id="設計取捨擴大-hit-target-的策略">設計取捨：擴大 hit target 的策略</h2>
<p>當「視覺精緻度」與「hit target 大小」衝突、四種做法：</p>
<h3 id="a視覺保持小padding-擴大可點區這個專案的預設">A：視覺保持小、padding 擴大可點區（這個專案的預設）</h3>
<ul>
<li><strong>機制</strong>：input 視覺 13px、label padding 撐到 44px</li>
<li><strong>選 A 的理由</strong>：視覺精緻 + a11y 達標、兩全</li>
<li><strong>適合</strong>：絕大多數互動元素</li>
<li><strong>代價</strong>：UI 整體高度增加（每行 44px+）</li>
</ul>
<h3 id="b視覺直接放大到-44px">B：視覺直接放大到 44px</h3>
<ul>
<li><strong>機制</strong>：input width: 44px; height: 44px;</li>
<li><strong>跟 A 的取捨</strong>：B 視覺粗、A 視覺精緻；B 在「需要清楚看到」的情境（年長使用者）有價值</li>
<li><strong>B 比 A 好的情境</strong>：使用者主要是年長者、視覺辨識比精緻重要</li>
</ul>
<h3 id="c視覺小不擴-padding不滿足-a11y">C：視覺小、不擴 padding（不滿足 a11y）</h3>
<ul>
<li><strong>機制</strong>：input 13px、label 緊鄰文字、無 padding</li>
<li><strong>成本特別高的原因</strong>：行動使用者誤點、motor 障礙者無法用、違反 WCAG 2.5.8</li>
<li><strong>C 才合理的情境</strong>：純 desktop 應用 + 確認使用者群不含行動 / motor — 通常不該假設</li>
</ul>
<h3 id="d用-hover-area-擴大命中hover-才放大">D：用 hover area 擴大命中（hover 才放大）</h3>
<ul>
<li><strong>機制</strong>：預設視覺小、hover 時擴大可點區</li>
<li><strong>跟 A 的取捨</strong>：D 在 desktop 視覺精緻、hover 反饋也好；行動裝置沒有 hover、D 失敗</li>
<li><strong>D 比 A 好的情境</strong>：純 desktop 工具</li>
</ul>
<hr>
<h2 id="設計取捨誤點防護機制">設計取捨：誤點防護機制</h2>
<p>對「誤點代價高」的操作（刪除 / 提交 / 付款）、四種做法：</p>
<h3 id="a直接觸發--後續-undo這個專案的預設若有此類操作">A：直接觸發 + 後續 undo（這個專案的預設、若有此類操作）</h3>
<ul>
<li><strong>機制</strong>：點擊立刻執行、提供 undo 機制（例如 toast「已刪除、5 秒內可復原」）</li>
<li><strong>選 A 的理由</strong>：常見操作流暢、誤點有救</li>
<li><strong>適合</strong>：可逆操作（刪除、移動、隱藏）</li>
<li><strong>代價</strong>：實作 undo 機制需要儲狀態</li>
</ul>
<h3 id="b點擊--確認對話框">B：點擊 → 確認對話框</h3>
<ul>
<li><strong>機制</strong>：點擊出 confirm dialog「確定要 X 嗎？」</li>
<li><strong>跟 A 的取捨</strong>：B 防誤點更強、A 流程更順；B 的成本是「正常使用者也要多一步」</li>
<li><strong>B 比 A 好的情境</strong>：不可逆操作（永久刪除、付款）</li>
</ul>
<h3 id="c長按觸發">C：長按觸發</h3>
<ul>
<li><strong>機制</strong>：需要長按 1 秒才觸發、誤點不會</li>
<li><strong>跟 A/B 的取捨</strong>：C 對 motor 障礙不友善（需要持續按）、且不直觀</li>
<li><strong>C 是反模式</strong>：對 motor 障礙不友善（需要持續按 1 秒）— 不直觀、違反 a11y 預期互動</li>
</ul>
<h3 id="d拖到確認區">D：拖到「確認區」</h3>
<ul>
<li><strong>機制</strong>：滑動到特定區域才觸發（iOS 拖刪除）</li>
<li><strong>跟 A/B 的取捨</strong>：D 對非典型互動使用者不直觀、違反 WCAG 2.5.7（需 button 替代）</li>
<li><strong>D 才合理的情境</strong>：搭配 button 替代（drag + button 兩種途徑都行）</li>
</ul>
<hr>
<h2 id="開發階段檢查清單">開發階段檢查清單</h2>
<table>
  <thead>
      <tr>
          <th>檢查</th>
          <th>動作</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Hit target ≥ 44px</td>
          <td>DevTools Box Model 量 interactive 元素的 padding box</td>
      </tr>
      <tr>
          <td>相鄰元素間距 ≥ 8px</td>
          <td>DevTools 看 gap / margin</td>
      </tr>
      <tr>
          <td>行動裝置實測</td>
          <td>DevTools Device Mode + 實機測試</td>
      </tr>
      <tr>
          <td>不可逆操作有確認</td>
          <td>點擊「刪除」看是否有 confirm</td>
      </tr>
      <tr>
          <td>Drag 操作有 button 替代</td>
          <td>任何 drag 互動都有對應 button</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="跟其他原則的關係">跟其他原則的關係</h2>
<table>
  <thead>
      <tr>
          <th>篇</th>
          <th>關係</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="../visual-aids-contrast-zoom-responsive/">#40 視覺輔助</a></td>
          <td>互補 — 視覺面 vs 操作面、不同使用者群</td>
      </tr>
      <tr>
          <td><a href="../keyboard-accessibility/">#52 鍵盤可達性</a></td>
          <td>互補 — 鍵盤是 motor a11y 的一個面向（鍵盤精準度 &gt; 滑鼠 &gt; 觸控）、本篇處理觸控 / 點擊面</td>
      </tr>
      <tr>
          <td><a href="../native-html-over-aria-role/">#39 Native HTML 優先於 ARIA role</a></td>
          <td>用 native button / input 自動獲得合理 hit area、不需自行設計</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="判讀徵兆">判讀徵兆</h2>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>該檢查的位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>行動使用者反映誤點</td>
          <td>量 hit target、&lt; 44px 加 padding</td>
      </tr>
      <tr>
          <td>「我這個介面只給 desktop 用」</td>
          <td>行動使用者比例可能比想像高、量化驗證</td>
      </tr>
      <tr>
          <td>Drag 互動沒有 button 替代</td>
          <td>加 button、達 WCAG 2.5.7</td>
      </tr>
      <tr>
          <td>不可逆操作沒有 confirm</td>
          <td>加 confirm dialog</td>
      </tr>
      <tr>
          <td>Filter list 元素緊鄰、容易誤觸</td>
          <td>加 gap ≥ 8px</td>
      </tr>
  </tbody>
</table>
<p><strong>核心原則</strong>：Motor a11y 是「手能否準確點擊」 — 不只給 motor 障礙使用者、行動使用者 / 年長者 / 暫時受限使用者都受益。預設 padding 擴 44px、間距 8px、不可逆操作加 confirm — 這些是基礎、不是優化。</p>
]]></content:encoded></item></channel></rss>