CSS3制作Dropdown下拉菜单的方法


Posted in HTML / CSS onJuly 18, 2015

:target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如说当前页面URL下添加#comment就会定位到id=“comment”的位置,俗称锚)。CSS3 为这个动作赋予了更加多的功能——就如同:hover 一样你可以做一些样式定义。
先上效果图

正如标题所说,本文是教你如何巧用CSS3:target伪类制作Dropdown下拉菜单,原生HTML+CSS,无JavaScript。为了吸引各位往下看,先上实际例子,再进行剖析。

Duang~ 实际例子其实就是DeveMobile 主题的右上角那个按钮,你点一下就会有一个Dropdown下拉菜单出现,在其他区域点击返回原状。请用手机扫码查看:
CSS3制作Dropdown下拉菜单的方法

或者直接看这个gif 图片:
CSS3制作Dropdown下拉菜单的方法

实例剖析

从解释原理的角度我们将HTML 拉出来最小化代码如下:

CSS Code复制内容到剪贴板
  1. <a href="#dropdown-box" class="dropdown-switcher"></a>   
  2. <div id="dropdown-box">   
  3.     <a href="##" class="close"></a>   
  4.     <div class="dropdown">   
  5.     <ul>   
  6.         <li></li>   
  7.         <li></li>   
  8.     </ul>   
  9. </div>  

大体上上面的HTML代码可以分为两部分,一部分是一个出发下拉动作的入口(我习惯称为“开关”)——通常是一个button(实例是将a标签替换为一个button的功能);一部分就是触发动作的下拉菜单显示了。

可能你会问close 这个类修饰的a标签那段是做什么的?当你触发下拉菜单后,有时候需要做关闭(返回原状)的动作,而从具体情况(比如说如本实例触发菜单后菜单将原来的开关都掩盖了)或者用户体验上考虑,最好是除菜单区域外的整个屏幕都随便盲点就能关闭菜单。这个a标签就是实现在打开开关后产生一个透明的遮罩层覆盖到屏幕上。

有了上面的思路,那么再具体化为下面的代码(忽略个别无关紧要的样式,SASS代码):

CSS Code复制内容到剪贴板
  1. #dropdown-box {   
  2. .dropdown {   
  3.     opacity: 0;   
  4.     @include transform(scale(0, 0));   
  5.     @include transition(all 0.3s ease);   
  6.     overflowhidden;   
  7.     z-index: 100;   
  8.     transform-origin: 100% 0;   
  9.     -webkit-transform-origin: 100% 0;   
  10.     -ms-transform-origin: 100% 0;   
  11.     -moz-transform-origin: 100% 0;   
  12.     }   
  13. }   
  14. .close {   
  15.     displaynone;   
  16.     positionfixed;   
  17.     top: 0;   
  18.     rightright: 0;   
  19.     bottombottom: 0;   
  20.     left: 0;   
  21.     z-index: 999;   
  22.     width: 100%;   
  23.     height: 100%;   
  24.     backgroundtransparent;   
  25. }   
  26. &:target .dropdown {   
  27.     @include transform(scale(1, 1));   
  28.     opacity: 1;   
  29.     z-index: 9999;   
  30. }   
  31. &:target .close {   
  32.     displayblock;   
  33. }   
  34. }  

稍微解释下上面的SASS代码:默认的情况下是隐藏下拉菜单(采用透明属性opacity 与CSS3的transform的scale 缩小至0,遮罩层则默认隐藏);当开关触发后透明度变为1且放到至正常的一倍,同时遮罩层显示。为了让下拉菜单更显“下拉”的情况,采用CSS3的origin定位下转换原点。

注意下兼容性,所有主流浏览器均支持 :target,除了 IE8 及更早的版本,移动端的话直接用。稍微理解下你就可以运用到自己的项目中了,have fun!

HTML / CSS 相关文章推荐
让IE支持CSS3的不完全兼容方案
Sep 19 HTML / CSS
CSS3实现超酷的黑猫警长首页
Apr 26 HTML / CSS
CSS3中的常用选择器使用示例整理
Jun 13 HTML / CSS
css3 实现圆形旋转倒计时
Feb 24 HTML / CSS
css3利用transform变形结合事件完成扇形导航
Oct 26 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
Oct 17 HTML / CSS
深入探究HTML5的History API
Jul 09 HTML / CSS
详解HTML5中的元素与元素
Aug 17 HTML / CSS
HTML5 表单验证失败的提示语问题
Jul 13 HTML / CSS
html5视频常用API接口的实战示例
Mar 20 HTML / CSS
css animation配合SVG制作能量流动效果
Mar 24 HTML / CSS
使用canvas实现雪花飘动效果的示例代码
Mar 30 HTML / CSS
使用CSS3来绘制一个月食图案
Jul 18 #HTML / CSS
用CSS3绘制三角形的简单方法
Jul 17 #HTML / CSS
详解CSS3中Media Queries的相关使用
Jul 17 #HTML / CSS
CSS3中box-shadow的用法介绍
Jul 15 #HTML / CSS
举例详解CSS3中的Transition
Jul 15 #HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
Jul 15 #HTML / CSS
初探CSS3中的calc()功能
Jul 14 #HTML / CSS
You might like
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PHP session 会话处理函数
2016/06/06 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
python版百度语音识别功能
2019/07/09 Python
python实现的Iou与Giou代码
2020/01/18 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
python如何爬取动态网站
2020/09/09 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
家长给孩子的评语
2014/01/30 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
体育馆的标语
2014/06/24 职场文书
周末问候语大全
2015/11/10 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP