紀錄工作經驗、相關知識,解決技術相關問題。

工作雜談, 新手 Jamp Holes, 未分類, 網站優化, 網站相關, 資訊相關

[前端新手] 前端 Input 常用設定與注意事項

在前端開發中,<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 的內建驗證屬性(如 requiredpattern 等)或者自定義 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 問題來提升用戶體驗。

發表迴響