第 013 期 優化移動端輸入框佔位符的交互體驗 - CSS :placeholder-shown

在移動端,如果標籤和輸入框在一行中顯示,顯示的有點窄。


如果標籤和輸入框各佔一行顯示,又浪費空間。有沒有兩全其美的方案呢?

Material Design 提供了一個兩全其美的方案。輸入框沒有值時,標籤在輸入框中顯示。在輸入框中有值或獲得焦點時,標籤在上方顯示。如下圖所示:

解決方案

可以用 CSS 的 :placeholder-shown 僞類可以實現上面的效果。:placeholder-shown 作用於顯示佔位符時的元素。輸入框在有值或獲得焦點時,不顯示佔位符,可以用選擇器 :not(:placeholder-shown) 匹配。下面是具體是實現:

HTML 結構:

<div class="input-fill-x">
    <input class="input-fill" placeholder="name">
    <label class="input-label">name</label>
</div>

第 1 步 隱藏瀏覽器默認的 placeholder

.input-fill:placeholder-shown::placeholder {
    color: transparent;
}

第 2 步 設置: 輸入框顯示佔位符時的樣式。

.input-fill-x {
    position: relative;
}
.input-label {
    position: absolute;
    left: 16px; top: 14px;
    pointer-events: none;
}

第 3 步 設置: 輸入框不顯示佔位符(即獲得焦點或有值)時的樣式。

.input-fill:not(:placeholder-shown) ~ .input-label,
.input-fill:focus ~ .input-label {
    transform: scale(0.75) translate(0, -32px);
}

完成~

:placeholder-shown 的兼容性很好。

在項目中用起來吧~

覺得本文對你有幫助。點個贊,分享給小夥伴們吧~

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章