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实现一个div设置多张背景图片及background-image属性实例演示
Aug 10 HTML / CSS
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
May 07 HTML / CSS
纯css3制作网站后台管理面板
Dec 30 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
Sep 25 HTML / CSS
css3通过scale()、rotate()实现放大、旋转
Mar 19 HTML / CSS
CSS3为背景图设置遮罩并解决遮罩样式继承问题
Jun 22 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
Nov 12 HTML / CSS
HTML5 Canvas的常用线条属性值总结
Mar 17 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
Aug 24 HTML / CSS
Canvas制作旋转的太极的示例
Mar 09 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
Jun 03 HTML / CSS
HTML5实现移动端点击翻牌功能
Oct 23 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
ftp类(myftp.php)
2006/10/09 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php实现购物车功能(上)
2020/07/23 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
brook javascript框架介绍
2011/10/10 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
koa-router源码学习小结
2018/09/07 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
用Python进行TCP网络编程的教程
2015/04/29 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
python学生管理系统
2019/01/30 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python线程threading模块用法详解
2020/02/26 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
如何基于python实现不邻接植花
2020/05/01 Python
keras.layer.input()用法说明
2020/06/16 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
学校政风行风评议心得体会
2014/10/21 职场文书
python创建字典及相关管理操作
2022/04/13 Python