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 相关文章推荐
使用CSS3的rem属性制作响应式页面布局的要点解析
May 24 HTML / CSS
css3个性化字体_动力节点Java学院整理
Jul 12 HTML / CSS
CSS3圆角边框和边界图片效果实例
Jul 01 HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
Feb 08 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
Mar 17 HTML / CSS
HTML5文档结构标签
Apr 21 HTML / CSS
基于HTML5的WebSocket的实例代码
Aug 15 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
Jul 11 HTML / CSS
html5跨域通讯之postMessage的用法总结
Nov 07 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
Oct 11 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
Dec 10 HTML / CSS
AmazeUI 单选框和多选框的实现示例
Aug 18 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
php时间不正确的解决方法
2008/04/09 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
教大家使用Python SqlAlchemy
2016/02/12 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
python3排序的实例方法
2020/10/20 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
外国语学院毕业生自荐信
2013/10/28 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2014年民警工作总结
2014/11/25 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
学校党支部承诺书
2015/04/30 职场文书
信仰纪录片观后感
2015/06/08 职场文书
python小程序之飘落的银杏
2021/04/17 Python
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL
springboot读取resources下文件的方式详解
2022/06/21 Java/Android