junsoo_jun

导航

chosen组件实现下拉框

chosen组件用于增强原生的select控件,使之有更好的用户体验。官方demo https://harvesthq.github.io/chosen/

目前项目中碰到的使用,比如一个页面中有两个不同样式的下拉框:

1、首先在js文件夹中建一个名为chosen的文件夹,放入这样几个文件:

2、在html页面中引入chosen的css和js文件:

3、在html中写这两个下拉框:

 1 <div class="myselect1 mt10 ml10">
 2     <select id="select1" class="myselect">
 3         <option value="1">中国</option>
 4         <option value="2">美国</option>
 5         <option value="3">韩国</option>
 6     </select>
 7     <span>下拉框1</span>
 8 </div>
 9 <div class="myselect2 mt10 ml10">
10     <select id="select2" class="myselect">
11         <option value="1">北京</option>
12         <option value="2">华盛顿</option>
13         <option value="3">首尔</option>
14     </select>
15     <span>下拉框2</span>
16 </div>

页面效果为普通的select样式:

4、在js中初始化这两个下拉框:

 1 (function(win, $) {
 2 
 3      // 初始化下拉框
 4     $("select").chosen({
 5         disable_search: true
 6     }).change(function(event, opt) {
 7         // 获取选中的值
 8         var val = $(this).find("option:selected").html();
 9         console.log(val);
10     });
11 }(this, jQuery));

效果就变成了官方预设的下拉效果(当文字过长时会自动显示部分省略号):

5、给这两个下拉框写样式:

/*两个框的宽度是通过这样直接指定的方式设定的*/
.myselect1 select {
    width: 100px;
}
.myselect2 select {
    width: 150px;
}

/*#region 重写下拉框 */
/*两个下拉框的相同样式直接重写*/

/*整个框外观上的样式*/
.chosen-container
{
    margin-right: 100px;
    float: left;
    text-align: center;
    *padding: 5px 0;
}

.chosen-container .chosen-results
{
    padding: 0;
    margin-right: 0;
}
/*下拉框的那个框的样式*/
.chosen-container-single .chosen-single
{
    background: #f9f9f9;
    border: 0;
    border-radius: 0;
    box-shadow: none;
  /*后来的测试中发现,这个height是包括边框的高度*/
  line-height: 36px; height: 36px; } .chosen-container-single .chosen-single span { margin-right: 26px; letter-spacing: 2px; margin-left: 4px; } /*下拉项*/ .chosen-container .chosen-results li { letter-spacing: 4px; } .chosen-container-single .chosen-single div { padding: 0; width: 21px; } /*图标*/ .chosen-container-single .chosen-single div b { background: url(../images/bg.png) no-repeat left 15px; } .chosen-container-active.chosen-with-drop .chosen-single div b { background: url(../images/bg.png) no-repeat left 15px; } /*当下拉项显示出来时下拉框的那个框的样式*/ .chosen-container-active.chosen-with-drop .chosen-single { background: #f9f9f9; box-shadow: none; border: 0; border-radius: 0; } .chosen-container-single .chosen-drop { border: 1px solid #f9f9f9; background-color: #f9f9f9; box-sizing: border-box; } .chosen-container .chosen-results li.highlighted { background-color: #397ddb; background-image: none; } /*给其中一个框分别指定个性的样式,另一个框的样式设定方式同理,使用父选择器进行限制*/ .myselect1 .chosen-container { text-align: left; } .myselect1 .chosen-container-single .chosen-single { background-color: #f00; color: #fff; font-size: 20px; } .myselect1 .chosen-container .chosen-results li { letter-spacing: 0; padding-left: 12px; } .myselect1 .chosen-container-active.chosen-with-drop .chosen-single { background: #0f0; border: 1px solid #f00; }

(当下拉框需要浮动时,所在的div层不能写overflow:hidden;这样点击框后框会消失得几乎不见,所以要在所在的div清除浮动):

效果图:

             

经测试,以上效果是在chrome,ff,IE8、9、10下的显示,在IE7中显示达不到效果:

至少整个外观样式不合格(下拉框和右边文字的距离没拉开),所以可以在css中直接针对IE7写hack样式:

 

 然后距离至少是拉开了的:

====================================分割线 2016.10.10=========================================

 

posted on 2016-09-20 22:48  junsoo_jun  阅读(510)  评论(0编辑  收藏  举报