zoukankan      html  css  js  c++  java
  • 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=========================================

  • 相关阅读:
    原码, 反码, 补码 详解
    二进制与十进制间的转换方法(图文教程)
    题目要求:将a,b两个数的值进行交换,并且不使用任何的中间变量。
    【转】面向对象的7个基本设计原则
    【转】UML类图符号 6种关系说明以及举例
    关于try catch
    关于异常
    java File类中的mkdir()和mkdirs()有什么区别
    反射中getMethods 与 getDeclaredMethods 的区别
    【转】Java利用反射机制访问私有化构造器
  • 原文地址:https://www.cnblogs.com/junsoo-jun/p/5890892.html
Copyright © 2011-2022 走看看