select 是HTML表單元素中很經常使用的一個,其中很重要的幾個屬性常被忽略,但這幾個屬性卻能幫助咱們完成不少的功能,固然,select下拉列表默認樣式很不友好,因此更多的時候能夠本身模擬實現一個一樣功能的下拉菜單。下文先介紹select標籤的一些屬性及使用,後面再模擬一個相同效果的下拉菜單。css
介紹以前先看下demo預覽圖:html
firefox下select的默認樣式:
git
chrome下select的默認樣式:
github
firefox下自定義select下拉列表的icon效果:
web
chrome下自定義select下拉列表的icon效果:
chrome
原生js模擬select下拉列表的實現效果(chrome及firefox效果一致):
數組
源代碼地址→傳送門服務器
預覽地址→傳送門app
提示
select 元素是一種表單控件,可用於在表單中接受用戶輸入url
注意:
HTML5 data-*自定義屬性:添加data-前綴使屬性變成自定義屬性,最大的好處是咱們能夠把全部自定義屬性在dataset對象中統一管理。
<div id="student" data-weight="98">點擊顯示</div> var student = document.getElementById("student"); student.dataset.cm = '168'; //設置自定義屬性 var stuWeight = studdent.dataset.weight; //獲取自定義屬性值 student.dataset.birthDate = '19980612'; //連字符的自定義屬性 (例如設置data-birth-date)
select默認樣式中的下拉按鈕不是很好看,咱們能夠本身用替張圖片替換掉。(效果看文章上面的連接,請忽略個人醜醜的圖標額)
none
(隱藏原有小三角),並作兼容select{ -webkit-appearance: none; /*隱藏默認樣式中的小三角*/ -moz-appearance: none; background: url('http://opif0c56u.bkt.clouddn.com/select.gif') no-repeat scroll right 8px center; }
:before
對option添加序號(此處插播一個css添加序號的方法)select{ counter-reset: item; //相似於聲明計數變量(聲明在父元素中) } select option:before { counter-increment: item; //要使用的計數名 content: counter(item) " . "; //追加前置序號,chrome對option的設置中不起做用 }
許多時候會以爲select表單特別的很差用,不能本身添加不少的樣式,小夥伴們仍是本身模擬一個吧!
<div id="sel-wrap"> <div id="sel-show">=請選擇=</div> <ul id="sel-option"> <li class="item">早上吃包子</li> <li class="item">中午吃米飯</li> <li class="item">晚上吃麪條</li> <li class="item">宵夜吃燒烤</li> <li class="item">睡前喝牛奶</li> </ul> </div>
下拉按鈕的圖標跟上面自定義的方式一致(這裏再也不說了)。
:before
追加一個對勾。#sel-option li:hover:before { content: '\2714' ' '; //此處爲對勾+空格 }
#sel-wrap{ position: relative; //設置父元素 } #sel-option{ position: absolute; //設置下拉列項的包裹層 }
點擊列表項時將選中值傳遞給下拉框並顯示,同時下拉項收起(此處的點擊事件綁定在父元素中)
當下拉項顯示並未選中任何下拉項時,點擊下拉框收起下拉項
當下拉項顯示並未選中任何下拉項時,點擊下拉項之外的任意位置,收起下拉框
最終實現(樣式什麼的均可以隨便改):