当前位置: 首页 > news >正文

js悬浮二级菜单代码_纯CSS实现简单二级导航下拉效果

在设计前端页面是,我们有一个原则:效果能用css实现的,绝对不用js来实现,因为这样可以加快页面渲染速度,js的解析速度要慢于css的解析速度!

5808216e6571cc8aeada6940aa2c23a3.png

css简单二级导航

小提示:完整源码和注释在最下方

使用纯css来实现二级导航的大致思路是:

规划一级导航

使用最简单的元素

,ul li a来实现,

规划二级导航,直接在一级导航的Li元素中使用ul li a

一级导航设计第一个要点:

li要设置为float:left,因为li元素默认的display属性是list-item,这个属性有点类似于block,默认是换行的,所以我们要指定float:left,让li元素水平顺序排列

#navBar ul li{ float: left;/**浮动向左就会自动排列**/ background-color: #ddd3d3; position: relative;/**用作2级导航的定位元素**/ }

一级导航的第二个要点:

a属性的display属性要设置为block,因为A元素的默认属性是inline,inline不会填充整个宽度,display:block可以做到

 #navBar ul li a{ display: block; margin: 0 10px; line-height: 50px;/**文字水平居中**/ }

一级导航的第三个要点:

a元素的line-height要和导航条的高度一致,这样可以做到文字垂直居中,同样,我们在加上text-algin:center属性,文字就变得水平居中了

一级导航的第四个要点:

一级导航的Li元素postion属性我们设置为relative,一会我们要用到

二级导航要点:

把li继承一级导航中的float:left属性去掉

 #navBar ul li ul li{ float: none; border-bottom: 1px solid #000; }

因为二级导航列表项我们要的排列效果是垂直排列

设置二级导航ul display:none;先把二级导航隐藏

 #navBar ul li ul{ display: none; /**没有发生hover事件的时候,先隐藏二级导航**/ }

设置二级导航postion属性为Postion:absolute,top:一级导航条的高度,left:0;

 position: absolute;/**位置是绝对定位,定位的父元素是一级导航的li**/ top:50px;/**一级导航条的高度,不设定会覆盖1级导航**/ left: 0;

核心:

我们使用li的伪类来实现二级导航菜单的显示

#navBar ul li:hover ul{Display:block;}

对,css的弱项在哪里?就是没有驱动事件,伪类有时候可以实现事件驱动效果

最后,为了二级导航的列表清晰一些,我们在二级导航中li元素添加一个1像素的黑色实体下边框

要点:

二级导航的代码要放在一级导航ul li的后面,具体就是:

  • 导航11
  • 导航12
导航1

为什么不把二级导航放在一级导航Li的下方?这样代码结构不是更加清晰明了吗

因为position:absolute要寻找一个postion:relative的父元素,如果找不到最近的relative父元素,那么就以body为父元素定位,如果二级导航代码在一级导航的li下方,那么一级导航li和二级导航这时间属于同级元素,不是父子关系,所有二级导航的绝对定位会定位到body

总结:我们使用了:hover伪类实现了css代替js事件,触发并实现了二级导航的样式改变,使用了相对定位和绝对定位来显现了二级导航正确显示在一级导航列表项的下方,能用css实现的事情,就不要使用js来做!

fd1f015297da4dea163eed11e7c74fd8.png

完整代码带注释:

 纯css导航条

相关文章:

  • microbit python扩展_【micro:bit扩展】如何用慧编程扩展设计器为 micro:bit 编写扩展...
  • boost原理与sklearn源码_从sklearn源码简析GBDT
  • 信息隐藏将txt文件合并到jpg文件中_GIS工作中让你事半功倍,在数据处理中常用的小技巧...
  • android欢迎界面引导页_uni-app: 引导页功能如何实现?
  • 六位小数的字符串怎么转化成double类型而不损失精度?_C# 一次数据类型强转失败的翻车原因分析...
  • 互动整合营销_企业做整合营销,有什么实际的意义
  • vue+bootstrap响应式布局_实现 Vue 的响应式系统
  • python扫雷代码源码_利兹联足球俱乐部 2018
  • java写入txt文件_Java面试题如何将字符串写入文件?
  • python支持面向过程_python之面向过程,函数式编程,面向对象浅析
  • 小组取什么名字好_寓意好的公司名字大全 公司名字取什么好
  • c语言计算日出日落时间_高中地理——每日讲1题(日出日落时间、昼夜长短、气压带风带)...
  • request对象_Struts(七)- 获取 request对象和 response对象
  • jre jdk jvm的区别_什么是JRE、JDK、JVM以及三者之间的关系?
  • 页面iframe url套jsp_shiro学习笔记—shiro拦截器与url匹配规则
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular 4.x 动态创建组件
  • Invalidate和postInvalidate的区别
  • JAVA_NIO系列——Channel和Buffer详解
  • Linux各目录及每个目录的详细介绍
  • mysql外键的使用
  • Python实现BT种子转化为磁力链接【实战】
  • 好的网址,关于.net 4.0 ,vs 2010
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 通过调用文摘列表API获取文摘
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​如何在iOS手机上查看应用日志
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)Nginx简介和安装教程
  • (2020)Java后端开发----(面试题和笔试题)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (接口自动化)Python3操作MySQL数据库
  • (转)iOS字体
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net framework profiles /.net framework 配置
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net Remoting常用部署结构
  • .Net Web窗口页属性
  • .net 按比例显示图片的缩略图
  • .NET 读取 JSON格式的数据
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net开发引用程序集提示没有强名称的解决办法
  • @GlobalLock注解作用与原理解析
  • [ C++ ] 继承
  • []T 还是 []*T, 这是一个问题