select 下拉框樣式

原生的select下拉框其實挺方便的,直接把選項寫入option就能得到一個流暢的下拉框,但是原生的樣式也是讓人憂愁。
首先,在各大瀏覽器中渲染出來的樣式結果也是多樣化,ie下的樣式更是與眾不同,會根據(jù)選項位置進行滑動。


從左往右依次為:Firefox、ie、Edge、chrome、Safari

一般這種情況下,我們會選擇重置樣式。然后你會發(fā)現(xiàn),select超愛自己的,有些樣式你根本無法變動。舉例子(運行環(huán)境為chrome):

        <!--html-->
        <select >
            <option value="chrome">chrome</option>
            <option value="safari">safari</option>
            <option value="Edge">Edge</option>
            <option value="firefox">firefox</option>
            <option value="ie8">ie8</option>
        </select>

            /*css*/
            body{
                background: #FFBD1E;
            }
            select{
                font-family: "微軟雅黑";
                margin:100px;
                background: rgba(0,0,0,0);
                width: 249px;
                height: 40px;
                font-size: 18px;
                color: white;
                text-align: center;
                border: 1px #1a1a1a solid;
                border-radius: 5px;
            }
            option{
                color: black;
                background: #A6E1EC;
                line-height: 20px;
            }
            select:focus{
                border: 2px #ddd solid;
                box-shadow: 0 0 15px 1px #DDDDDD;
            }
            option:hover{
                background: #EBCCD1;
            }

出現(xiàn)的樣式如下

chrome渲染

經過多次測試,發(fā)現(xiàn)有幾部分的樣式是無法覆蓋的。

  • select的focus狀態(tài):雖然有呈現(xiàn)出來,但是明顯被原生樣式壓在下面了
  • option的hover狀態(tài):同上
  • option的背景顏色:無法實行透明度,一旦透明度變?yōu)?,會自動轉換成白色。
  • 字體位置:text-align:center無法實現(xiàn)

如果需求變化不大,倒是可以直接采用原生的select,但是我所做的頁面色彩比較豐富,select原生樣式很明顯無法滿足我。網上有一些說法是將select透明度為0,或是appearance為none,但是都不是我要的,最終決定用列表的方法,自己寫一個下拉框。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            /*css*/
            /*通用樣式*/
            body{
                background: #FFBD1E;
            }
            ul,li{
                list-style: none;
                padding: 0;
                margin: 0;
            }
            /*下拉框樣式*/
            #select{
                margin:100px;
                background: rgba(0,0,0,0);
                width: 249px;
                height: 40px;
                font-family: "微軟雅黑";
                font-size: 18px;
                color: white;
                border: 1px #1a1a1a solid;
                border-radius: 5px;
            }
            .select-head{
                overflow: hidden;
                width: 249px;
                height: 40px;
                box-sizing: border-box;
                padding: 0 10px;
                line-height: 40px;
            }
            .select-head .select-head-cont{
                float: left;
            }
            .select-head .select-icon{
                float: right;
            }
            .option{
                text-indent: 10px;
                margin-top: 1px;
                width: 249px;
                color: black;
                background: rgba(236,111,111,0.1);
                line-height: 25px;
                border: 1px #cfcfcf solid;
                display: none;
            }
            .option-item:hover{
                background: rgba(204,106,67,0.3);
            }
        </style>
    </head>
    <body>
        <!--html-->
        <ul id="select">
            <li>
                <div class="select-head">
                    <span class="select-head-cont"></span>
                    <span class="select-icon">▼</span>
                </div>
                <ul class="option">
                    <li class="option-item">chrome</li>
                    <li class="option-item">safari</li>
                    <li class="option-item">Edge</li>
                    <li class="option-item">firefox</li>
                    <li class="option-item">ie8</li>
                </ul>
                
            </li>
        </ul>
        <script type="text/javascript">
            //int
            var selectHead = document.getElementsByClassName('select-head')[0];
            var selectHeadCont = document.getElementsByClassName('select-head-cont');
            var Option = document.getElementsByClassName('option')[0];
            var optionItem = document.getElementsByClassName('option-item');
            
            /*默認是第一個選項*/
            selectHeadCont[0].innerHTML = optionItem[0].innerHTML;
            
            /*點擊后出現(xiàn)下拉框*/
            selectHead.addEventListener('click',function(){
                Option.style.display = 'block';
            },false);
            /*點擊選項后出現(xiàn)在下拉框*/
            var len = optionItem.length;
            for(var i=0;i<len;i++){
                optionItem[i].index = i;
                optionItem[i].addEventListener('click',function(){
                    selectHeadCont[0].innerHTML = optionItem[this.index].innerHTML;
                    Option.style.display = 'none';
                },false);
            }
            /*點擊其他地方時,select會收起來*/
            document.body.addEventListener('click',function(){
                Option.style.display = 'none';
            }.false);
        </script>
    </body>
</html>

貼出全部代碼后,展示的樣式如下

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容