在前端開發中,<input>
元素是最常見的表單元素之一,用於讓用戶輸入數據。為了提供最佳的用戶體驗和提高可維護性,開發者需要注意一些實作方式和最佳實踐。以下是一些重要的考量點:
1. 正確選擇 Input 類型
使用正確的 input 類型來匹配用戶輸入的格式,如 email、number、date、password 等。這有助於觸發瀏覽器的內建驗證功能並提升用戶體驗。
範例:
<input type="email" placeholder="Enter your email">
<input type="number" min="0" max="100" placeholder="Enter a number">
2. 使用 Placeholder
使用 placeholder
來給用戶提供輸入提示,但要注意,它不應取代標籤(label),因為當 placeholder
消失後,用戶可能不再清楚要輸入什麼。
範例:
<label for="username">Username</label>
<input type="text" id="username" placeholder="Enter your username">
3. input 提供 Accessible 標籤
確保每個輸入框都有相應的 label
元素,這有助於增強可訪問性,特別是對使用屏幕閱讀器的用戶而言。
範例:
<label for="password">Password</label>
<input type="password" id="password">
4. input 設定 pattern 輸入驗證
在表單提交之前,對輸入進行驗證以確保數據的正確性和完整性。可以使用 HTML5 的內建驗證屬性(如 required
、pattern
等)或者自定義 JavaScript 驗證。
範例:
<input type="text" pattern="[A-Za-z]{3,}" required title="Must contain at least 3 letters">
5. 防範 XSS 攻擊
在處理用戶輸入時,務必清理和轉義來自輸入框的數據,以防止跨站腳本攻擊(XSS)。這特別適用於後端數據處理和前端渲染。
不要信任用戶輸入數據,將用戶輸入視為潛在不安全數據,並確保在輸出時進行轉義。
6. 控制輸入長度
使用屬性如 maxlength、minlength 和 pattern 來限制用戶的輸入格式,也可避免用戶輸入超過 DB、防火牆最大長度。例如,對於電話號碼,可以限制輸入為特定模式。
範例:
<input type="text" maxlength="10" placeholder="Enter 10-digit phone number">
7. 使用合適的 ARIA 屬性
ARIA(Accessible Rich Internet Applications)屬性可增強輸入框的可訪問性。這對於動態表單或複雜的表單元素尤為重要。
範例:
<input type="search" aria-label="Search through site content">
8. 適當的表單控件自動完成功能
為 input 使用 autocomplete 屬性來讓瀏覽器自動填充用戶的常用數據,這可以提高填表效率。例如,設置 autocomplete=”on” 來自動完成姓名、地址等。
範例:
<input type="text" name="name" autocomplete="name">
9. 防止非預期輸入
對於數字輸入,可以使用 inputmode 屬性指定適合的鍵盤佈局(如數字鍵盤)來減少輸入錯誤。
範例:
<input type="tel" inputmode="numeric" placeholder="Enter digits only">
10. 確保跨裝置字體調整
避免使用固定高度設置 input,在多裝置(如 PC、手機、平板)中,應確保字體大小可以動態調整,尤其對於視力較弱的用戶(如 40 歲以上群體),他們通常會增大字體尺寸。
避免直接使用 height 來設置 input 的高度,改用 padding 搭配 line-height,這樣可以避免當字體被放大時,輸入框中光標 or 文字出現破板問題。
範例:
input {
padding: 10px;
line-height: 1.4;
}
這裡細說一下,假設你的 UI input 高度是40px,字體size 14px,你可以如以下設置,透過 line-height 指定 px (比較好算),再透過 padding 將上下左右填滿至 UI 指定的 style,這樣設置可以有效避免裝置調整字體顯示比例時,字體破版問題。
.input {
font-size: 14px;
line-height: 20px;
padding: 8px 5px;
}
這只是一種建議方法,當然也可以用其他方式,只要製作時,注意字體切換後的狀況即可。
11. 避免第三方插件攔截
在命名 input 元素時,避免使用 ad 開頭的名稱(如 adInput),因為這類命名有可能被瀏覽器中的廣告攔截插件誤認為廣告元素,進而阻止其正常顯示或輸入功能。
範例:
<input type="text" name="promoText">
12. 輸入框的字體和行高
字體與行高設置:在為輸入框設置 line-height 時,應確保其至少等於或大於字體的大小,這樣可以避免某些英文字母(如 g、q)在輸入時被下方截斷,從而影響可讀性。
範例:
input {
font-size: 16px;
line-height: 1.5;
}
13. 避免在移動設備上使用 hover 效果
當 input 設置了 hover 效果時,請確保這些效果只應用在 PC 端,因為移動設備上不支持 hover。在手機或平板上,多次點擊才會觸發輸入光標,這會影響用戶體驗。因此應限制 hover 效果僅應用於桌面設備。
範例:
@media (hover: hover) and (pointer: fine) {
input:hover {
/* hover style */
}
}
結論
在實作 input 元素時,必須考慮跨設備、可訪問性、命名規則和安全性等多方面因素。特別是在與 UI 框架結合的開發過程中,應注意使用動態設置來適應不同裝置的需求,並且通過合理的命名、行高設置和避免 hover 問題來提升用戶體驗。
發表迴響