导航菜单

select下拉列表框美化jQuery插件

阿里云


这是一款效果超赞的 jQuery 和 css3 select 下拉列表框美化插件。这个 select 下拉列表框插件没有使用任何的图片,纯 css 制作,还使用了一点 jQuery 来完成动作交互。有两个地方需要做下说明:下面的代码中没有使用任何厂商的前缀

在插件中使用了 CSS 盒子模式(box-model): [width] = [element-width] + [padding] + [borders]。看下面代码:

也想出现在这里?联系我们
创客主机
  1. *,
  2. *:after,
  3. *:before {
  4.     box-sizing: border-box;
  5. }

HTML 结构

首先要了解我们的 select 下拉列表框的 html 结构是怎么样的。我们使用的结构是一个 div 做 wrapper,里面有一个 span 和一个无序列表。

  1. <div class="wrapper-dropdown">
  2.   <span>I'm kinda the label!</span>
  3.   <ul class="dropdown">
  4.     <li>I'm hidden!</li>
  5.     <li>Me too!</li>
  6.     <li>So do I.</li>
  7.   </ul>
  8. </div>

JAVASCRIPT

我们需要一些 js 代码来使 select 下拉列表框能正常工作,下面的 js 代码是所有的 demo 都使用的代码:

  1. //...
  2. obj.dd.on('click', function(event){
  3.     $(this).toggleClass('active');
  4.     return false;
  5. });
  6. //...
  7.  
  8. $(function() {
  9.     var dd = new DropDown( $('#dd') );
  10.     $(document).click(function() {
  11.         // all dropdowns
  12.         $('.wrapper-dropdown-1').removeClass('active');
  13.     });
  14. });

在上面的代码中,当你点击了 wrapper 时,它会切换 class 为.active。如果 wrapper 已经处于激活状态,它会移除 class .active。另外,如果你在下拉列表框外任何地方点击,都会关闭下拉列表框。下面来看一些第一个 demo 的代码:

HTML 部分

在第一个 demo 中,我们需要一个 wrapper div,一个隐藏的下拉列表,还有一个在 span 中的“label”。

  1. <div id="dd" class="wrapper-dropdown-1" tabindex="1">
  2.   <span>Gender</span>
  3.     <ul class="dropdown">
  4.         <li><a href="#">Male</a></li>
  5.         <li><a href="#">Female</a></li>
  6.     </ul>
  7. </div>

CSS 代码

首先从 wrapper 开始:

  1. .wrapper-dropdown {
  2.     /* Size and position */
  3.     position: relative; /* Enable absolute positioning for children and pseudo elements */
  4.     width: 200px;
  5.     padding: 10px;
  6.     margin: 0 auto;
  7.  
  8.     /* Styles */
  9.     background: #9bc7de;
  10.     color: #fff;
  11.     outline: none;
  12.     cursor: pointer;
  13.  
  14.     /* Font settings */
  15.     font-weight: bold;
  16. }

在"label"上通过伪元素来添加小箭头:

  1. .wrapper-dropdown:after {
  2.     content: "";
  3.     width: 0;
  4.     height: 0;
  5.     position: absolute;
  6.     right: 16px;
  7.     top: 50%;
  8.     margin-top: -6px;
  9.     border-width: 6px 0 6px 6px;
  10.     border-style: solid;
  11.     border-color: transparent #fff;    
  12. }

下面是下拉列表的样式

  1. .wrapper-dropdown-1 .dropdown {
  2.     /* Size & position */
  3.     position: absolute;
  4.     top: 100%;
  5.     left: 0; /* Size */
  6.     right: 0; /* Size */
  7.  
  8.     /* Styles */
  9.     background: #fff;
  10.     font-weight: normal; /* Overwrites previous font-weight: bold; */
  11.  
  12.     /* Hiding */
  13.     opacity: 0;
  14.     pointer-events: none;
  15. }

再来给下拉列表中的元素一些样式

  1. .wrapper-dropdown-1 .dropdown li a {
  2.     display: block;
  3.     text-decoration: none;
  4.     color: #9e9e9e;
  5.     padding: 10px 20px;
  6. }
  7.  
  8. /* Hover state */
  9. .wrapper-dropdown-1 .dropdown li:hover a {
  10.     background: #f3f8f8;
  11. }

通过上面的 CSS,我们有了一个很好看的按钮和一个隐藏的下拉菜单。下面要处理的是当点击了下拉列表主按钮时,下拉列表框展开出现的效果。

我们使用 javascript 来在点击按钮时切换 class.active。

  1. /* Active state */
  2. .wrapper-dropdown-1.active .dropdown {
  3.     opacity: 1;
  4.     pointer-events: auto;
  5. }
  6.  
  7. .wrapper-dropdown-1.active:after {
  8.     border-color: #9bc7de transparent;
  9.     border-width: 6px 6px 0 6px ;
  10.     margin-top: -3px;
  11. }
  12.  
  13. .wrapper-dropdown-1.active {
  14.   background: #9bc7de;
  15.   background: linear-gradient(to right, #9bc7de 0%, #9bc7de 78%, #ffffff 78%, #ffffff 100%);
  16. }

这里要注意三个地方:

1、我们使用将透明度设置为 1 是下拉列表框出现。这里不要忘记设置 pointer-event 为 auto

2、我们改变了小箭头的方向和颜色

3、我们使用一个渐变来修改了箭头羡慕的背景色

JAVASCRIPT

我们还需要 javascript 来显示下拉列表项的值

  1. function DropDown(el) {
  2.     this.dd = el;
  3.     this.placeholder = this.dd.children('span');
  4.     this.opts = this.dd.find('ul.dropdown > li');
  5.     this.val = '';
  6.     this.index = -1;
  7.     this.initEvents();
  8. }
  9. DropDown.prototype = {
  10.     initEvents : function() {
  11.         var obj = this;
  12.  
  13.         obj.dd.on('click', function(event){
  14.             $(this).toggleClass('active');
  15.             return false;
  16.         });
  17.  
  18.         obj.opts.on('click',function(){
  19.             var opt = $(this);
  20.             obj.val = opt.text();
  21.             obj.index = opt.index();
  22.             obj.placeholder.text('Gender: ' + obj.val);
  23.         });
  24.     },
  25.     getValue : function() {
  26.         return this.val;
  27.     },
  28.     getIndex : function() {
  29.         return this.index;
  30.     }
  31. }

第一个 demo 的代码就这么多,其余几个 demo 的代码请参考下载文件。

FALLBACKS

为了兼容所有的浏览器,这个插件中做了一些回退处理。我们使用的是 Modernizr 。Modernizr 是一个用于检测用户浏览器是否支持 html5 和 css3 的 javascript 库,他的基本思想是“如果浏览器不支持 XXX,那么我们就这样这样做。。。”。通过 Modernizr,我们能为 html 添加 class,例如:如果浏览器不支持 pointer-events ,就添加一个“no-pointerevents”的 class。下面的例子说明了我们在浏览器不支持某些属性时,如何管理我们的回退代码:

  1. /* No CSS3 support */
  2.  
  3. .no-opacity       .wrapper-dropdown-1 .dropdown,
  4. .no-pointerevents .wrapper-dropdown-1 .dropdown {
  5.     display: none;
  6.     opacity: 1; /* If opacity support but no pointer-events support */
  7.     pointer-events: auto; /* If pointer-events support but no pointer-events support */
  8. }
  9.  
  10. .no-opacity       .wrapper-dropdown-1.active .dropdown,
  11. .no-pointerevents .wrapper-dropdown-1.active .dropdown {
  12.     display: block;
  13. }

如果浏览器不支持透明度或 pointer-events,那么简单的将下拉列表框隐藏:display: none;。

如果浏览器支持透明度但是不支持 pointer-events,在用户点击菜单时,我们将他们设置为 auto,以使菜单展开。

另外,如果浏览器支持 pointer-events 但不支持透明度,我们设置透明度为 1 来使下拉列表在切换为.active 是立刻出现。

当.active 被切换时,我们使用 display: block;来显示下拉列表框。

select 下拉列表框美化 jQuery 插件

已有 484 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!