HTML的select控件美化

简介: 原文:HTML的select控件美化HTML的select控件美化 CSS: .div-select { border: solid 1px #999; height: 40px; line-height: 40px; cursor: default; } .
原文: HTML的select控件美化

HTML的select控件美化

CSS:

.div-select
{
    border: solid 1px #999;
    height: 40px;
    line-height: 40px;
    cursor: default;
}

.div-select-text
{
    float: left;
    background-color: #fff;
    height: 100%;
    word-break: keep-all;
    overflow: hidden;
    cursor: default;
}

    .div-select-text > div
    {
        padding: 3px;
        line-height: 34px;
    }

.div-select-arrow
{
    background-color: #fff;
    float: right;
    width: 40px;
    height: 100%;
    color: #999;
    cursor: default;
}

    .div-select-arrow > div
    {
        border: solid 1px #999;
        margin: 2px;
        height: 34px;
        background-color: #f2f2f2;
        text-align: center;
        line-height: 34px;
        font-size: 22px;
    }

.div-select-list
{
    position: absolute;
    float: left;
    top: 100px;
    left: 100px;
    border: solid 1px #999;
    max-height: 300px;
    overflow: auto;
    background-color: #9f9;
    display: none;
    z-index: 9100;
}

    .div-select-list .div-select-item:nth-child(2n+1)
    {
        background-color: #fff;
    }

.div-select-item
{
    height: 50px;
    line-height: 50px;
    padding-left: 3px;
    padding-right: 3px;
    background-color: #f2f2f2;
    word-break: keep-all;
    overflow: hidden;
    cursor: default;
}

.div-select-item-hover
{
    background-color: #3399ff!important;
}

.div-select-selected
{
    background-color: #3399ff !important;
}
View Code

JS:

//2015年2月8日
//select美化
var divSelectListIndex = 0;

$(function () {
    initDivSelect();
});

//初始化select美化插件
function initDivSelect() {
    $(".div-select-target").each(function () {
        divSelectListIndex++;
        var select = $(this);

        if (select.css("display") == "none") {
            return;
        }
        else {
            select.css("display", "none")
        }

        if (select.next("div").find(".div-select-list").length == 0) {
            select.after('<div><div class="div-select"><div class="div-select-text"><div></div></div><div class="div-select-arrow"><div>∨</div></div></div></div>');
            $("body").append('<div class="div-select-list div-select-list-' + divSelectListIndex + '"></div>');
        }

        var div = select.next("div");
        var divText = div.find(".div-select-text");
        var divSelect = div.find(".div-select");
        var divArrow = div.find(".div-select-arrow");
        var list = $(".div-select-list-" + divSelectListIndex);

        function updateText(item) {
            divText.find("div").html(item.html());
        }

        select.find("option").each(function () {
            var option = $(this);
            var text = option.html();
            var value = option.attr("value");
            list.append('<div class="div-select-item" value="' + value + '">' + text + '</div>');
            list.find(".div-select-item:last").click(function () {
                var item = $(this);
                var value = item.attr("value");
                select.val(value);
                select.change();
                list.find(".div-select-selected").removeClass("div-select-selected");
                item.addClass("div-select-selected");
                updateText(item);
                list.hide();
            });

            list.find(".div-select-item:last").mouseenter(function () {
                var item = $(this);
                var selectedMark = list.find(".div-select-selected");
                selectedMark.removeClass("div-select-selected");
                selectedMark.addClass("div-select-selected-mark");
                list.find(".div-select-item-hover").removeClass("div-select-item-hover");
                item.addClass("div-select-item-hover");
                updateText(item);
            });
        });

        list.mouseleave(function () {
            var selectedMark = list.find(".div-select-selected-mark");
            if (list.find(".div-select-selected").length == 0) {
                selectedMark.addClass("div-select-selected");
                updateText(selectedMark);
            }
            selectedMark.removeClass("div-select-selected-mark");
            list.find(".div-select-item-hover").removeClass("div-select-item-hover");
        });

        if (select.attr("width")) {
            divSelect.width(select.attr("width") - 2);
            divText.width(divSelect.width() - divArrow.width());
            if (select.attr("width") > list.width()) {
                list.width(divSelect.width());
            }
        }

        div.keydown(function (e) {
            list.find(".div-select-selected-mark").removeClass("div-select-selected-mark");
            list.find(".div-select-item-hover").addClass("div-select-selected");
            list.find(".div-select-item-hover").removeClass("div-select-item-hover");
            if (e.keyCode == 40) {
                var currentSelected = list.find(".div-select-selected");
                var nextSelected = currentSelected.next(".div-select-item");
                if (nextSelected.length == 0) {
                    nextSelected = list.find(".div-select-item:first");
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    list.scrollTop(0);
                } else {
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    var i = 0;
                    while (nextSelected.position().top < 0
                        || nextSelected.position().top > list.height() - nextSelected.height()) {
                        list.scrollTop(list.scrollTop() + nextSelected.height());
                        if (i++ > 100) break;
                    }
                }
                updateText(nextSelected);
                return false;
            }
            if (e.keyCode == 38) {
                var currentSelected = list.find(".div-select-selected");
                var nextSelected = currentSelected.prev(".div-select-item");
                if (nextSelected.length == 0) {
                    nextSelected = list.find(".div-select-item:last");
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    list.scrollTop(list.find(".div-select-item").length * nextSelected.height());
                }
                else {
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    var i = 0;
                    while (nextSelected.position().top < 0
                        || nextSelected.position().top > list.height() - nextSelected.height()) {
                        list.scrollTop(list.scrollTop() - nextSelected.height());
                        if (i++ > 100) break;
                    }
                }
                updateText(nextSelected);
                return false;
            }
            if (e.keyCode == 13) {
                var selectedItem = list.find(".div-select-selected");
                var value = selectedItem.attr("value");
                select.val(value);
                list.hide();
                select.change();
            }
        });

        divSelect.click(function () {
            $("a").bind("click", function () {
                $("a").unbind("click");
                list.hide();
            });

            if (list.css("display") == "none") {
                list.show();
            }
            else {
                list.hide();
            }

            list.css("top", divSelect.offset().top + divSelect.height() + 1);
            list.css("left", divSelect.offset().left);
            if ($(window).scrollTop() + $(window).height() < list.offset().top + list.height() + 2) {
                list.css("top", $(window).scrollTop() + $(window).height() - list.height() - 2);
            }
            if (list.width() < divSelect.width()) {
                list.width(divSelect.width());
            }

            var currentSelected = list.find(".div-select-selected");
            if (currentSelected.position().top > list.height() - currentSelected.height()) {
                list.scrollTop(currentSelected.position().top - currentSelected.height() * 2);
            }
            return false;
        });

        $("html,body").bind("click", function () {
            list.hide();
        });
        list.click(function () {
            return false;
        });

        function initSelect() {
            list.find(".div-select-selected").removeClass("div-select-selected");
            var matchItem = list.find(".div-select-item[value='" + select.val() + "']");
            if (matchItem.length > 0) {
                matchItem.addClass("div-select-selected");
                updateText(matchItem);
            }
        }
        initSelect();
        select.change(function () {
            initSelect();
        });
    }); // $(".div-select-target").each
}
View Code

如何使用:

 第1步、引用CSS和JS:

<link type="text/css" href="~/Scripts/DivSelect/divSelect.css" rel="stylesheet" />
<script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="~/Scripts/DivSelect/divSelect.js"></script>
View Code

第2步、给select控件加上class="div-select-target" width="200",其中class="div-select-target"是必须的,width="200"是可选的。完整HTML代码如下:

<link type="text/css" href="~/Scripts/DivSelect/divSelect.css" rel="stylesheet" />
<script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="~/Scripts/DivSelect/divSelect.js"></script>

<div style="border: solid 1px #f99; margin: 50px; padding: 50px;">
    <select name="sel" class="div-select-target" width="200" >
        <option value="1">中国</option>
        <option value="2">美国</option>
        <option value="3">法国</option>
        <option value="4">英国</option>
        <option value="5">俄罗斯</option>
        <option value="6">德国</option>
        <option value="7">韩国</option>
        <option value="8">日本</option>
        <option value="9">印度</option>
        <option value="10">巴西</option>
        <option value="11">意大利</option>
        <option value="12">这个国家的名称很长很长很长很长很长很长很长很长</option>
        <option value="13">瑞士</option>
        <option value="14">越南</option>
        <option value="15">缅甸</option>
        <option value="16">泰国</option>
        <option value="17">加拿大</option>
        <option value="18" selected="selected">南非</option>
        <option value="19">澳大利亚</option>
        <option value="20">新西兰</option>
        <option value="21">挪威</option>
        <option value="22">巴勒斯坦</option>
        <option value="23">以色列</option>
        <option value="24">新加坡</option>
        <option value="25">马来西亚</option>
        <option value="26">波兰</option>
        <option value="27">国家27</option>
        <option value="28">国家28</option>
        <option value="29">国家29</option>
        <option value="30">国家30</option>
        <option value="31">国家31</option>
        <option value="32">国家32</option>
        <option value="33">国家33</option>
        <option value="34">国家34</option>
        <option value="35">国家35</option>
        <option value="36">国家36</option>
        <option value="37">国家37</option>
        <option value="38">国家38</option>
    </select>
</div>
<div style="border: solid 1px #f99; margin: 50px; padding: 50px; margin-top: 700px; margin-bottom: 700px;">
    <select name="sel" class="div-select-target" width="200" >
        <option value="1">中国</option>
        <option value="2">美国</option>
        <option value="3">法国</option>
        <option value="4">英国</option>
        <option value="5">俄罗斯</option>
        <option value="6" selected="selected">德国</option>
        <option value="7">韩国</option>
        <option value="8">日本</option>
    </select>
</div>
View Code

效果图:

滚动条美化版:

CSS:

.div-select
{
    border: solid 1px #999;
    height: 40px;
    line-height: 40px;
    cursor: default;
}

.div-select-text
{
    float: left;
    background-color: #fff;
    height: 100%;
    word-break: keep-all;
    overflow: hidden;
    cursor: default;
    font-size: 16px;
    font-family: 微软雅黑,雅黑;
}

    .div-select-text > div
    {
        padding: 3px;
        line-height: 34px;
    }

.div-select-arrow
{
    background-color: #fff;
    float: right;
    width: 40px;
    height: 100%;
    color: #999;
    cursor: default;
}

    .div-select-arrow > div
    {
        border: solid 1px #999;
        margin: 2px;
        height: 34px;
        background-color: #f2f2f2;
        text-align: center;
        line-height: 34px;
        font-size: 22px;
    }

.div-select-list
{
    position: absolute;
    float: left;
    top: 100px;
    left: 100px;
    border: solid 1px #999;
    max-height: 300px;
    overflow: hidden;
    background-color: #9f9;
    display: none;
    z-index: 9100;
    font-size: 16px;
    font-family: 微软雅黑,雅黑;
}

    .div-select-list .div-select-item:nth-child(2n+1)
    {
        background-color: #fff;
    }

.div-select-item
{
    height: 50px;
    line-height: 50px;
    padding-left: 3px;
    padding-right: 3px;
    background-color: #f2f2f2;
    word-break: keep-all;
    overflow: hidden;
    cursor: default;
}

.div-select-item-hover
{
    background-color: #3399ff!important;
}

.div-select-selected
{
    background-color: #3399ff !important;
}

.div-select-list-scrollbar
{
    position: absolute;
    float: left;
    border: solid 1px #999;
    border-left: 0;
    background-color: #e8e8ec;
    width: 40px;
    height: 300px;
    display: none;
    cursor: default;
    z-index: 9101;
}

.div-select-scrollbar-up
{
    border-bottom: solid 1px #fff;
    height: 39px;
    font-size: 22px;
    line-height: 39px;
    color: #999;
    background-color: #cdcdcd;
    text-align: center;
}

.div-select-scrollbar-pos
{
    height: 220px;
}

    .div-select-scrollbar-pos > div:last-child
    {
        width: 40px;
        height: 20px;
        background-color: #cdcdcd;
    }

.div-select-scrollbar-down
{
    border-top: solid 1px #fff;
    height: 39px;
    font-size: 22px;
    line-height: 39px;
    color: #999;
    background-color: #cdcdcd;
    text-align: center;
}
View Code

JS:

//2015年2月8日
//select美化
var divSelectListIndex = 0;

$(function () {
    initDivSelect();
});

//初始化select美化插件
function initDivSelect() {
    $(".div-select-target").each(function () {
        divSelectListIndex++;
        var select = $(this);

        if (select.css("display") == "none") {
            return;
        }
        else {
            select.css("display", "none")
        }

        if (select.next("div").find(".div-select-list").length == 0) {
            select.after('<div><div class="div-select"><div class="div-select-text"><div></div></div><div class="div-select-arrow"><div>∨</div></div></div></div>');
            $("body").append('<div class="div-select-list div-select-list-' + divSelectListIndex + '"></div>');
        }

        var div = select.next("div");
        var divText = div.find(".div-select-text");
        var divSelect = div.find(".div-select");
        var divArrow = div.find(".div-select-arrow");
        var list = $(".div-select-list-" + divSelectListIndex);
        var scrollbar;
        var scrollbarPosTop;
        var scrollbarPos;
        var scrollbarScrollHeight;
        var scrollbarUp;
        var scrollbarDown;
        var itemHeight;
        var itemCount;
        var itemsHeight;
        var scrollFlag = false;

        function updateText(item) {
            divText.find("div").html(item.html());
        }

        select.find("option").each(function () {
            var option = $(this);
            var text = option.html();
            var value = option.attr("value");
            list.append('<div class="div-select-item" value="' + value + '">' + text + '</div>');
            list.find(".div-select-item:last").click(function () {
                var item = $(this);
                var value = item.attr("value");
                select.val(value);
                select.change();
                list.find(".div-select-selected").removeClass("div-select-selected");
                item.addClass("div-select-selected");
                updateText(item);
                list.hide();
                if (scrollbar) scrollbar.hide();
            });

            list.find(".div-select-item:last").mouseenter(function () {
                var item = $(this);
                var selectedMark = list.find(".div-select-selected");
                selectedMark.removeClass("div-select-selected");
                selectedMark.addClass("div-select-selected-mark");
                list.find(".div-select-item-hover").removeClass("div-select-item-hover");
                item.addClass("div-select-item-hover");
                updateText(item);
            });
        });

        list.mouseleave(function () {
            var selectedMark = list.find(".div-select-selected-mark");
            if (list.find(".div-select-selected").length == 0) {
                selectedMark.addClass("div-select-selected");
                updateText(selectedMark);
            }
            selectedMark.removeClass("div-select-selected-mark");
            list.find(".div-select-item-hover").removeClass("div-select-item-hover");
        });

        if (select.attr("width")) {
            divSelect.width(select.attr("width") - 2);
            divText.width(divSelect.width() - divArrow.width());
        }
        else {
            divText.width(list.width());
        }

        div.keydown(function (e) {
            list.find(".div-select-selected-mark").removeClass("div-select-selected-mark");
            list.find(".div-select-item-hover").addClass("div-select-selected");
            list.find(".div-select-item-hover").removeClass("div-select-item-hover");
            if (e.keyCode == 40) {
                var currentSelected = list.find(".div-select-selected");
                var nextSelected = currentSelected.next(".div-select-item");
                if (nextSelected.length == 0) {
                    nextSelected = list.find(".div-select-item:first");
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    list.scrollTop(0);
                } else {
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    var i = 0;
                    while (nextSelected.position().top < 0
                        || nextSelected.position().top > list.height() - nextSelected.height()) {
                        list.scrollTop(list.scrollTop() + nextSelected.height());
                        if (i++ > 100) break;
                    }
                }
                updateText(nextSelected);
                updateScrollbarPos();
                return false;
            }
            if (e.keyCode == 38) {
                var currentSelected = list.find(".div-select-selected");
                var nextSelected = currentSelected.prev(".div-select-item");
                if (nextSelected.length == 0) {
                    nextSelected = list.find(".div-select-item:last");
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    list.scrollTop(list.find(".div-select-item").length * nextSelected.height());
                }
                else {
                    nextSelected.addClass("div-select-selected");
                    currentSelected.removeClass("div-select-selected");
                    var i = 0;
                    while (nextSelected.position().top < 0
                        || nextSelected.position().top > list.height() - nextSelected.height()) {
                        list.scrollTop(list.scrollTop() - nextSelected.height());
                        if (i++ > 100) break;
                    }
                }
                updateText(nextSelected);
                updateScrollbarPos();
                return false;
            }
            if (e.keyCode == 13) {
                var selectedItem = list.find(".div-select-selected");
                var value = selectedItem.attr("value");
                select.val(value);
                list.hide();
                if (scrollbar) scrollbar.hide();
                select.change();
            }
        });

        itemHeight = list.find(".div-select-item:first").height();
        itemCount = list.find(".div-select-item").length;
        itemsHeight = itemHeight * itemCount;
        if (itemsHeight > list.height()) {
            $("body").append('<div class="div-select-list-scrollbar div-select-list-scrollbar-' + divSelectListIndex + '"><div class="div-select-scrollbar-up">∧</div><div class="div-select-scrollbar-pos"><div></div><div></div></div><div class="div-select-scrollbar-down">∨</div></div>');
        }
        scrollbar = $(".div-select-list-scrollbar-" + divSelectListIndex);
        scrollbarPosTop = scrollbar.find(".div-select-scrollbar-pos").find("div:first");
        scrollbarPos = scrollbar.find(".div-select-scrollbar-pos").find("div:last");
        scrollbarScrollHeight = scrollbarPos.parent().height() - scrollbarPos.height();
        scrollbarUp = scrollbar.find(".div-select-scrollbar-up");
        scrollbarDown = scrollbar.find(".div-select-scrollbar-down");
        scrollbar.click(function () {
            return false;
        });
        scrollbarUp.click(function () {
            list.scrollTop(list.scrollTop() - list.height());
            updateScrollbarPos();
        });
        scrollbarDown.click(function () {
            list.scrollTop(list.scrollTop() + list.height());
            updateScrollbarPos();
        });
        scrollbar.mousedown(function () {
            scrollFlag = true;
        });
        scrollbar.mouseup(function () {
            scrollFlag = false;
        });
        scrollbar.mousemove(function (e) {
            if (scrollFlag) {
                var pos = e.pageY - scrollbar.offset().top - 50;
                if (pos <= scrollbarScrollHeight) {
                    scrollbarPosTop.height(pos);
                    list.scrollTop(scrollbarPosTop.height() / scrollbarScrollHeight * (itemsHeight - list.height()));
                }
            }
        });

        function updateScrollbarPos() {
            scrollbarPosTop.height(scrollbarScrollHeight * list.scrollTop() * 1.0 / (itemsHeight - list.height()));
            if (list.scrollTop() + list.height() == itemsHeight) {
                scrollbarPosTop.height(scrollbarScrollHeight);
            }
        }

        divSelect.click(function () {
            $("a").bind("click", function () {
                $("a").unbind("click");
                list.hide();
                scrollbar.hide();
            });

            if (list.css("display") == "none") {
                list.show();
                scrollbar.show();
            }
            else {
                list.hide();
                scrollbar.hide();
            }

            list.css("top", divSelect.offset().top + divSelect.height() + 1);
            list.css("left", divSelect.offset().left);
            var listOffsetTop = list.offset().top;
            if ($(window).scrollTop() + $(window).height() < list.offset().top + list.height() + 2) {
                list.css("top", $(window).scrollTop() + $(window).height() - list.height() - 2);
            }
            if (list.width() < divSelect.width()) {
                if (!(itemsHeight > list.height())) {
                    list.width(divSelect.width());
                }
                else {
                    list.width(divSelect.width() - scrollbar.width());
                }
            }

            scrollbar.find(".div-select-scrollbar-pos").find("div:first").height(0);
            scrollbar.css("left", divSelect.offset().left + list.width() + 1);
            scrollbar.css("top", divSelect.offset().top + divSelect.height() + 1);
            if ($(window).scrollTop() + $(window).height() < listOffsetTop + list.height() + 2) {
                scrollbar.css("top", $(window).scrollTop() + $(window).height() - list.height() - 2);
            }

            var currentSelected = list.find(".div-select-selected");
            if (currentSelected.position().top > list.height() - currentSelected.height()) {
                list.scrollTop(currentSelected.position().top - currentSelected.height() * 2);
            }
            updateScrollbarPos();

            return false;
        });

        $("html,body").bind("click", function () {
            list.hide();
            scrollbar.hide();
        });
        list.click(function () {
            return false;
        });

        function initSelect() {
            list.find(".div-select-selected").removeClass("div-select-selected");
            var matchItem = list.find(".div-select-item[value='" + select.val() + "']");
            if (matchItem.length > 0) {
                matchItem.addClass("div-select-selected");
                updateText(matchItem);
            }
        }
        initSelect();
        select.change(function () {
            initSelect();
        });
    }); // $(".div-select-target").each
}
View Code

效果图:

目录
相关文章
|
6月前
|
Web App开发 移动开发 JavaScript
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
168 0
|
25天前
|
数据安全/隐私保护
HTML表单(Form)常用控件
HTML表单(Form)常用控件。
14 1
|
3月前
|
Web App开发 前端开发 JavaScript
新的 HTML 控件登陆 Safari
# html # 网络开发者
25 1
|
3月前
|
JSON 定位技术 数据格式
HTML新特性【账号和获取密钥、初始化、变更地图类型、添加控件、改变控件位置、添加覆盖物、自定义标注图标、添加文本标注】(四)-全面详解(学习总结---从入门到深化)(下)
HTML新特性【账号和获取密钥、初始化、变更地图类型、添加控件、改变控件位置、添加覆盖物、自定义标注图标、添加文本标注】(四)-全面详解(学习总结---从入门到深化)
29 0
|
3月前
|
JavaScript 前端开发 定位技术
HTML新特性【账号和获取密钥、初始化、变更地图类型、添加控件、改变控件位置、添加覆盖物、自定义标注图标、添加文本标注】(四)-全面详解(学习总结---从入门到深化)(上)
HTML新特性【账号和获取密钥、初始化、变更地图类型、添加控件、改变控件位置、添加覆盖物、自定义标注图标、添加文本标注】(四)-全面详解(学习总结---从入门到深化)
31 0
|
3月前
|
移动开发 监控 前端开发
HTML5与CSS3教学:美化员工行为监控软件前端页面的代码技巧
在当今信息时代,企业对员工行为的监控成为了一项必不可少的工作。而员工行为监控软件作为一种高效的管理工具,其前端页面的设计和美化显得尤为重要。本文将介绍如何利用HTML5和CSS3技术,优雅地美化员工行为监控软件前端页面的代码技巧。
211 0
|
9月前
|
前端开发
HTML与CSS实现网页的超链接及美化
HTML与CSS实现网页的超链接及美化
147 0
HTML与CSS实现网页的超链接及美化
|
10月前
|
前端开发
HTML|利用CSS美化一个html表格
HTML|利用CSS美化一个html表格
291 0
|
5月前
|
存储 JavaScript 前端开发
Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同
Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同
42 1
|
9月前
Echarts除了tooltip其它的标签暂时都不支持html情况下label标签加背景图片的美化方案
Echarts除了tooltip其它的标签暂时都不支持html情况下label标签加背景图片的美化方案
78 0