第 013 期 優(yōu)化移動(dòng)端輸入框占位符的交互體驗(yàn) - CSS :placeholder-shown

在移動(dòng)端,如果標(biāo)簽和輸入框在一行中顯示,顯示的有點(diǎn)窄。


如果標(biāo)簽和輸入框各占一行顯示,又浪費(fèi)空間。有沒有兩全其美的方案呢?

Material Design 提供了一個(gè)兩全其美的方案。輸入框沒有值時(shí),標(biāo)簽在輸入框中顯示。在輸入框中有值或獲得焦點(diǎn)時(shí),標(biāo)簽在上方顯示。如下圖所示:

解決方案

可以用 CSS 的 :placeholder-shown 偽類可以實(shí)現(xiàn)上面的效果。:placeholder-shown 作用于顯示占位符時(shí)的元素。輸入框在有值或獲得焦點(diǎn)時(shí),不顯示占位符,可以用選擇器 :not(:placeholder-shown) 匹配。下面是具體是實(shí)現(xiàn):

HTML 結(jié)構(gòu):

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

第 1 步 隱藏瀏覽器默認(rèn)的 placeholder。

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

第 2 步 設(shè)置: 輸入框顯示占位符時(shí)的樣式。

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

第 3 步 設(shè)置: 輸入框不顯示占位符(即獲得焦點(diǎn)或有值)時(shí)的樣式。

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

完成~

:placeholder-shown 的兼容性很好。

Can I Use

在項(xiàng)目中用起來吧~

覺得本文對你有幫助。點(diǎn)個(gè)贊,分享給小伙伴們吧~

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容