92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

我的 Input框 不可能這么可愛

2019-11-19    seo達人

作者:陳大魚頭

github: KRISACHAN

<input /> 標簽是我們日常開發中非常常見的替換元素了,但是最近在刷 whattwg 跟 MDN 的時候發現 跟 <input /> 有很多相關的屬性,選擇器都沒怎么用過,所以就開篇文章來整理一下一些比較有趣或者實用的知識點。



本篇文章默認大家已經知道 <input /> 標簽的基本用法,不會做過多的基礎說明~







沒想到,這些選擇器居然跟 input …

到寫文章為止,根據的 drafts 指出,一共有3大類,16種跟 input 相關的選擇。其實都挺有用的,善用它們,會讓我們的用戶體驗更加美好。



下面我們來分享一下這3大類選擇器的作用:







第一類:控制系(Input Control States)

選擇器 作用

:enabled 選擇可使用狀態的 <input /> 元素

:disabled 選擇不可使用狀態的 <input /> 元素

:read-only 選擇不可編輯狀態的元素(不僅僅是 <input /> )

:read-write 選擇可編輯狀態的元素(不僅僅是 <input /> )

:placeholder-shown 選擇 placeholder text 顯示時的元素

:default 選擇在 <button>,<input type="checkbox" />, <input type="radio" />, 以及 <option> 上的默認狀態

第二類:輸出系(Input Value States)

選擇器 作用

:checked 選擇處于選中狀態的 <input type="radio" />

:indeterminate 選擇狀態不確定的表單元素與 <progress>

第三類:偵查系(Input Value-checking)

選擇器 作用

:blank 選擇處于空值時的 <input>,暫未被瀏覽器支持

:valid 選擇驗證通過的表單元素

:invalid 選擇驗證不通過的表單元素

:in-range 選擇處于指定范圍內的 <input />

:out-of-range 選擇不處于指定范圍內的 <input />

:required 選擇必填的表單元素

:optional 選擇選填的表單元素

:user-invalid 選擇用戶輸入但值非法時的 <input />,暫未被瀏覽器支持

可怕,除了選擇器,居然還跟這些屬性有關系

<input> 除了有很多相關的選擇器,結合不同的type還有不同的屬性可以供使用。他們的作用如下:



屬性 作用

maxlength 可輸入的最大長度

minlength 可輸入的最小長度

size 輸入框的長度

readonly 輸入框是否只讀

required 輸入框是否必填

multiple 輸入框是否可以多選

pattern 輸入框驗證規則

min 可輸入的最小值

max 可輸入的最大值

step 輸入框每次的增量

list 輸入框綁定的可選值數據

placeholder 輸入框預選文字

實戰

通過上面的三類說明,我們大致了解了 <input /> 標簽的相關信息,但是你們以為我是來列list的嗎?



當然不是,還有實操啊~







純CSS實現表單提交功能

首先我們來看個效果圖







上面的效果就是一個純CSS實現的表單提交功能,這是怎么實現的呢?下面我們直接看源碼,然后一步一步地來分拆(不想看的可以直接CV下面的源碼自己做測試~)



<style>

    :root {

      --error-color: red;

    }

    .form > input {

      margin-bottom: 10px;

    }

    .form > .f-tips {

      color: var(--error-color);

      display: none;

    }

    input[type="text"]:invalid ~ input[type="submit"],

    input[type="password"]:invalid ~ input[type="submit"] {

      display: none;

    }

    input[required]:focus:invalid + span {

      display: inline;

    }

    input[required]:empty + span {

      display: none;

    }

    input[required]:invalid:not(:placeholder-shown) + span {

      display: inline;

    }

</style>

<form class="form" id="form" method="get" action="/api/form">

    賬號:

    <input data-title="賬號" placeholder="請輸入正確的賬號" pattern="\w{6,10}" name="account" type="text" required />

    <span class="f-tips">請輸入正確的賬號</span>

    <br />

    密碼:

    <input data-title="密碼" placeholder="請輸入正確的密碼" pattern="\w{6,10}" name="password" type="password" required />

    <span class="f-tips">請輸入正確的密碼</span>

    <br />

    <input name="button" type="submit" value="提交" />

</form>



第一步:寫好基礎結構

首先我們來把基礎結構給寫好,代碼如下:



<style>

    :root {

      --error-color: red;

    }

    .form > input {

      margin-bottom: 10px;

    }

    .form > .f-tips {

      color: var(--error-color);

      display: none;

    }

</style>

<form class="form" id="form" method="get" action="/api/form">

    賬號:

    <input data-title="賬號" placeholder="請輸入正確的賬號" pattern="\w{6,10}" name="account" type="text" required />

    <span class="f-tips">請輸入正確的賬號</span>

    <br />

    密碼:

    <input data-title="密碼" placeholder="請輸入正確的密碼" pattern="\w{6,10}" name="password" type="password" required />

    <span class="f-tips">請輸入正確的密碼</span>

    <br />

    <input name="button" type="submit" value="提交" />

</form>



掃一眼,嗯,挺簡單的,都是常用的東西。咦,不對,這個 pattern 是什么東西?



在這里我們重點分享下 pattern 這個屬性,這是一個用來驗證 input[value] 是否合法的屬性,里面的內容就是匹配value的,語法便是正則的語法,例子如下:



<label>

    <!--

當前pattern的內容就是驗證input[name="part"]的value的,其規則如同里面的正則一樣,匹配input[name="part"]的value是否是一個數字+3個大寫字母

-->

    <input pattern="[0-9][A-Z]{3}" name="part" />

</label>



當然,不同的 input[type] 也會默認帶有相應的 pattern ,例如 input[type="email"] 就是默認匹配了以下規則:



/^[a-zA-Z0-9.!#$%&'+\/=?^_`{|}~-]+@a-zA-Z0-9?(?:.a-zA-Z0-9?)$/

1

第二步:重點功能

input[type="text"]:invalid ~ input[type="submit"],

input[type="password"]:invalid ~ input[type="submit"] {

    display: none;

}

input[required]:focus:invalid + span {

    display: inline;

}

input[required]:empty + span {

    display: none;

}

input[required]:invalid:not(:placeholder-shown) + span {

    display: inline;

}



上面便是核心交互的實現。



首先第一個class就是保證了在兩個輸入框不通過的時候隱藏,就是當輸入框值為空或者不符合驗證規則,則隱藏提交按鈕。



第二個,第三個class則是控制當用戶在輸入框輸入內容時,如果不符合驗證規則,則顯示錯誤信息,否則則隱藏。



第四個class則是用過 placeholder 是否存在來控制錯誤信息的顯隱,如果 placeholder 不顯示,則證明用戶正在輸入,錯誤信息則根據用戶輸入的值來判斷是否顯隱,否則則隱藏。



狀態切換

上面我們有提到一個選擇器 :indeterminate ,這個是用于選擇狀態不確定的表單元素與 <progress> ,玩過掃雷的人都知道,右擊除了可以選擇紅旗,還可以選擇問號,就是選中,但不確定;又跟 promise 的 pending 狀態類型,介于 resolve 與 reject 之間。



多了 :indeterminate 會給我們帶來很多很有趣的體驗。



首先我們來看看它的使用案例。



基礎使用法

先看效果







代碼如下:



<style>

    body {

        background: #333;

        color: #fff;

        padding: 20px;

        text-align: center;

    }

    input {

        margin-right: .25em;

        width: 30px;

        height: 30px;

    }

    label {

        position: relative;

        top: 1px;

        font-size: 30px;

    }

</style>

<form>

    <input type="checkbox" id="checkbox">

    <label for="option">點擊左邊</label>

</form>

<script>

      'use strict';

      checkbox.addEventListener('click', ev => {

        if (ev.target.readOnly) {

          ev.target.checked = ev.target.readOnly = false;

        } else if (!ev.target.checked) {

          ev.target.readOnly = ev.target.indeterminate = true;

        };

      });

</script>



這里面其實沒有什么復雜的實現,只是做了個中間態的判斷,就非常輕松的實現了radio的三種狀態切換。



秀到頭皮發麻法

先看效果







(此天秀效果來自于 Ben Szabo 的 codepen,有興趣的可以仔細研究下,我何時才能有大佬這么優秀,嚶嚶嚶~)



輸入框綁定的可選值

先看效果







其實代碼很簡單:



<input type="text" list="names" multiple />

<datalist id="names">

    <option value="kris">

    <option value="陳大魚頭">

    <option value="深圳金城武">

</datalist>



<input type="email" list="emails" multiple />

<datalist id="emails">

    <option value="chenjinwen77@foxmail.com" label="kris">

    <option value="chenjinwen77@gmail.com" label="kris">

</datalist>



<input type="date" list="dates" />

<datalist id="dates">

    <option value="2019-09-03">

</datalist>



這里原理就是通過 <input list="dates" /> 來綁定需要下拉顯示的數據列表 <datalist id="dates"> 。



那么當我們要實現輸入聯想的時候,也可以通過修改 <datalist id="dates"> 的子元素來實現,而不是再寫一大堆的操作函數來實現。



總結


日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
2025国产精品视频| 国产九色精品| 麻豆网站在线| 开心九九激情九九欧美日韩精美视频电影| 大伊香蕉精品在线品播放| 亚洲高清影视| 国产精品99久久久久久有的能看| 日本一区二区视频在线| 国产日韩中文字幕| 九九久久久久久久久激情| 日韩在线三区| 国产亚洲观看| 91丝袜在线| 亚洲色图激情小说| 欧美亚洲综合久久| 菠萝蜜视频国产在线播放| 日韩视频中午一区| 国产精品激情自拍| 国产精品一区专区欧美日韩| 日韩精品成人一区二区在线观看| 久久国产日韩| 欧美丝袜一区| 99精品国产一区二区三区不卡| 欧美中日韩一区二区三区| 亚洲经典视频| 在线观看av黄网站永久| 国产精品99精品久久免费| 亚洲第一二三四区| 欧美午夜精品一区二区三区电影| 国产欧美在线播放| 日韩在线观看免费高清完整版| 国产成人高潮免费观看精品| 久久精品成人欧美大片古装| www..com久久爱| 三级在线观看一区二区| av网址在线看| 亚洲成人xxx| 麻豆国产在线| 亚洲欧洲国产日韩| 亚洲精品国产精品乱码不99按摩| 亚洲国产91色在线| 欧美人牲a欧美精品| 国产成人一区二| 97成人超碰免| 国产精品成人一区二区艾草| 亚洲日本视频在线| 成人信息集中地欧美| 丁香花视频在线观看| yellow中文字幕久久| 久久精品视频一区二区三区| 国产精品日韩在线一区| 91精品久久久久久久久久久久久| 欧美日韩在线视频免费观看| 色婷婷亚洲mv天堂mv在影片| 99久久免费精品高清特色大片| 老司机免费视频一区二区三区| 91夜夜蜜桃臀一区二区三区| 日本黑人久久| 久久狠狠久久| 极品国产人妖chinesets亚洲人妖| 中文字幕av一区二区三区四区| 色诱视频网站一区| 51xtv成人影院| 在线精品国产| 国产精品嫩草影院com| 蜜桃传媒一区二区| 成人一区二区三区视频| 奇米四色…亚洲| 全国精品久久少妇| 国产亚洲高清一区| 欧美色欧美亚洲另类二区| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日本韩国国产| 91白丝在线| 精品国产一区二区三区四区在线观看| 欧美中文在线观看| 澳门成人av网| 欧美日韩人人澡狠狠躁视频| 5566成人精品视频免费| 一二三四区精品视频| 一区二区免费不卡在线| 久久精品99久久久香蕉| 国产98在线| 亚洲天堂网在线观看| 中文字幕av日韩| 日韩久久精品一区二区三区| 久久国产主播精品| 欧美激情一区二区三区全黄| 国产一区二区电影在线观看| 欧美亚洲国产一区| 91亚洲精华国产精华精华液| 国产精品久久毛片av大全日韩| 91在线看国产| 欧美一区 二区| 亚洲欧美日韩图片| zzjj国产精品一区二区| 2019中文字幕在线免费观看| 亚洲va久久久噜噜噜久久天堂| 青青草原成人| 蜜桃久久影院| 亚洲久久久久久久久久| 国产精品久久久久影视| 欧美国产日产韩国视频| 91成人在线免费观看| 精品亚洲一区二区三区在线播放| 波多野结衣在线观看一区二区| freexxx性亚洲精品| 久久性色av| 欧美岛国在线观看| 丝袜av一区| 日韩亚洲视频在线| 国产免费av一区二区三区| 美女999久久久精品视频| 一区二区三区毛片免费| 久久激情综合网| 一区二区三区国产好| 中文字幕第一区综合| 97久久中文字幕| 国产午夜精品美女视频明星a级| 亚洲成a人片在线不卡一二三区| 黄色的视频在线观看| 男人的天堂亚洲一区| 久久av免费一区| 狼狼综合久久久久综合网| 人人玩人人添人人澡欧美| 91精品国产综合久久久久久豆腐| 亚洲一区二区三区中文字幕| 亚洲区小说区图片区qvod按摩| 欧美主播福利视频| 欧美色视频在线| 精品国产免费一区二区三区香蕉| 一本一本久久a久久精品综合小说| 中文字幕欧美亚洲| 久久久免费在线观看| 日本欧美一区二区在线观看| 亚洲精品中文字幕女同| 一广人看www在线观看免费视频| 一区二区亚洲| 999色成人| 亚洲天堂网在线观看| 午夜精品久久久久久久99黑人| 99视频免费观看蜜桃视频| 成人免费在线视频观看| 视频一区二区中文字幕| 91成人国产在线观看| 国产精品日韩一区| 日本一区二区精品视频| 一区二区在线电影| 欧美精品一区二区三区蜜桃视频| 欧美精品情趣视频| 欧美aaa视频| 国产精品17p| 伊人影院在线视频| 国精产品一区一区三区四川| 亚洲国产精品123| 欧美日韩激情小视频| av在线综合网| 欧美高清视频在线播放| 91成人免费视频| 国产精品高潮久久久久无| 高潮白浆女日韩av免费看| 欧美欧美在线| 国产天堂在线播放视频| 亚洲视频免费一区|