HTML+CSS/CSS3实现滑动下拉导航栏

HTML+CSS/CSS3实现滑动下拉导航栏

纯css实现的滑动下拉导航栏,超详细代码,以及实现中遇到的小问题

  1. 首先创建一个列表以及一些标签的全局样式

html代码

		<div class="nav">
            <ul>
                <li><a href="">一级目录</a></li>
                <li><a href="">一级目录</a></li>
                <li><a href="">一级目录</a></li>
                <li><a href="">一级目录</a></li>
            </ul>
 		</div>

css代码

	* {
    	margin: 0;
    	padding: 0;
		}
	a {
    	text-decoration: none;
    	color: black;
		}
	a:hover {
    	text-decoration: none;
		}
	li {
    	list-style-type: none;
		}

初始效果图
在这里插入图片描述
2. 接下来给元素添加样式,让列表横向排列并且变得美观

	.nav{
    	height: 50px;
    	width: 400px;
    	background-color: #0173DD;
		}
	.nav ul {
    	width: 100%;
    	height: 100%;
		}
	.nav ul li {
    	float: left;
    	width: 80px;  
    	height: 100%;
    	text-align: center;
    	line-height: 50px;
    	margin-left: 10px;
		}
	.nav ul li a{
    	color: #fff;
		}

效果图如下
在这里插入图片描述

3.接下来在一级目录下添加二级目录
html代码

	<li>
        <a href="">一级目录</a>
        <div>
            <ul>
                <li><a href="">二级目录</a></li>
                <li><a href="">二级目录</a></li>
                <li><a href="">二级目录</a></li>
            </ul>
        </div>
    </li>

css代码

	.nav ul li div {
    	width: 80px;
    	height: 130px;
    	background-color: #fff;
    	border: 1px solid rgb(189, 189, 189);
    	border-radius: 10px;
		}
	.nav ul li div ul {
    	width: 100%;
   	 	height: 100%;
		}
	.nav ul li div ul li {
    	margin: 10px 3px 0 3px;
    	width: 74px;
    	height: 30px;
    	line-height: 30px;
		}
	.nav ul li div ul li a{
    	display: block;     /*填充li*/
    	color: #0173DD;
		}

实现的效果图为
在这里插入图片描述
4.现在要开始实现下拉的效果,有两种方式,第一种是通过display:none将二级目录隐藏后通过:hover去掉隐藏,来达到二级目录隐藏/出现的效果,但是这样会显的很突兀,用户体验不是很好,这里我们使用CSS3中的过渡效果transition来使二级目录达到隐藏/出现的效果,这样会显的交互效果很平滑。

css代码

.nav ul li div {
    overflow: hidden;/*元素溢出裁剪必须要用在li下的div中,后面会详细介绍原因*/
    width: 80px;
    height: 0;
    background-color: #fff;
    /*border: 1px solid rgb(189, 189, 189);*/
    border-radius: 10px;
    transition: height 0.2s ,border 0.2s linear;
    -moz-transition:height 0.2s ,border 0.2s linear;
    /* Safari and Chrome */
    -webkit-transition:height 0.2s ,border 0.2s linear;
    /* Opera */
    -o-transition:height 0.2s ,border 0.2s linear;
}
.nav ul li:hover div {
    height: 130px;
    border: 1px solid rgb(189, 189, 189);
}

这段代码中,我们需要把li下的div也就是包含着二级目录的div height设为0,从而使得div的height有一个0px~130px的变化,展现出一种下拉的效果,height必须为0,不能为空,如果为空,则div内部的元素会自动撑开div,使得div无法隐藏。同时,div的边框需要加在:hover中,否则div的边框无法隐藏,因为div的边框处于div外部,如果一个width为98px的div带有1px的边框,那么它实际上的width为100px,这样即使div的width为0px,它实际的宽度却是2px。

代码实现效果

在这里插入图片描述
5.以上下拉导航栏的效果就已经实现了,但是用在网页的制作上还会存在一些问题,一个网页不可能只有一个导航栏,导航栏的下方通常会有轮播图或者其它的内容,这个时候下拉导航栏就会出现以下问题。
在这里插入图片描述
会发现二级目录没有办法出现,因为二级目录被下方的图片覆盖,也就是说二级目录在图片的后面,存在但是没有办法看到,这时候就需要给li下的div加一个z-index属性,让二级目录出现在图片的前面,不被图片遮挡,而z-index属性只能用在被定位的元素上,也就是说需要有position:absolute或者position: relative,之前我将overflow: hidden加在了div里,如果加在了ul中,则会出现下面的效果。

在这里插入图片描述
正常来说,li下div为ul的子元素,当ul添加了overflow: hidden后,div溢出的的部分应该被裁减掉才对,可是这里却依然显示,原因是我们要使用z-index,而使用z-index的前提是需要position:absolute或者position: relative,拿absolute来说,是绝对定位,侧面来想添加了该属性的元素父元素变成了body,而ul是body的子元素,这个时候ul是没有权限去剪切li下div的溢出的,也就是孙子依赖了爷爷,父亲规定了要溢出剪切,不可行。因此overflow: hidden必须要加在li下的div中,这时我们在将z-index添加到:hover中,就可以了。

全部的html代码

<div class="nav">
  <ul>
    <li>
      <a href="">一级目录</a>
      <div>
        <ul>
        <li><a href="">二级目录</a></li>
        <li><a href="">二级目录</a></li>
        <li><a href="">二级目录</a></li>
        </ul>
      </div>
   </li>
     <li><a href="">一级目录</a></li>
     <li><a href="">一级目录</a></li>
     <li><a href="">一级目录</a></li>
  </ul>
 </div>
 <div>
   <img src="../img/1.jpg" alt="">
 </div>

全部的css代码

* {
    margin: 0;
    padding: 0;
}

a {
    text-decoration: none;
    color: black;
}

a:hover {
    text-decoration: none;
}
li {
    list-style-type: none;
}
.nav{
    height: 50px;
    width: 400px;
    background-color: #0173DD;
}
.nav ul {
    width: 100%;
    height: 100%;
}
.nav ul li {
    float: left;
    width: 80px;  
    height: 100%;
    text-align: center;
    line-height: 50px;
    margin-left: 10px;
}
.nav ul li a{
    color: #fff;
}
.nav ul li div {
    overflow: hidden;
    position: absolute;
    width: 80px;
    height: 0;
    background-color: #fff;
    /*border: 1px solid rgb(189, 189, 189);*/
    border-radius: 10px;
    transition: height 0.2s ,border 0.2s linear;
    -moz-transition:height 0.2s ,border 0.2s linear;
    /* Safari and Chrome */
    -webkit-transition:height 0.2s ,border 0.2s linear;
    /* Opera */
    -o-transition:height 0.2s ,border 0.2s linear;
}
.nav ul li:hover div {
    height: 130px;
    border: 1px solid rgb(189, 189, 189);
    z-index: 10;
}
.nav ul li div ul {
    width: 100%;
    height: 200px;
}
.nav ul li div ul li {
    margin: 10px 3px 0 3px;
    width: 74px;
    height: 30px;
    line-height: 30px;
}
.nav ul li div ul li a{
    display: block;     /*填充li*/
    color: #0173DD;
}

最终效果图
在这里插入图片描述

如果还有什么不明白的,请大家留言,以上所诉,如有错误,也请大家指正。

  • 14
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
HTMLCSS是构建网页和网页样式的核心技术。下面是一些HTMLCSS的100个实际例子: 1. 创建一个简单的网页 2. 设置网页的标题 3. 插入图片 4. 创建一个链接 5. 设置文字的颜色 6. 调整文字的大小 7. 设置背景颜色 8. 创建一个列表 9. 设置列表的样式 10. 创建一个表格 11. 设置表格的边框 12. 调整表格的宽度和高度 13. 设置表格的背景颜色 14. 创建一个按钮 15. 设置按钮的样式 16. 创建一个导航栏 17. 设置导航栏的样式 18. 创建一个下拉菜单 19. 设置下拉菜单的样式 20. 创建一个表单 21. 设置表单元素的样式 22. 创建一个单行文本输入框 23. 创建一个多行文本输入框 24. 创建一个复选框 25. 创建一个单选按钮 26. 创建一个提交按钮 27. 创建一个重置按钮 28. 创建一个页面布局 29. 设置页面布局的样式 30. 创建一个响应式布局 31. 设置响应式布局的样式 32. 创建一个响应式导航栏 33. 设置响应式导航栏的样式 34. 创建一个响应式图片库 35. 设置响应式图片库的样式 36. 创建一个响应式表格 37. 设置响应式表格的样式 38. 创建一个响应式表单 39. 设置响应式表单的样式 40. 创建一个响应式按钮 41. 设置响应式按钮的样式 42. 创建一个响应式网页 43. 设置响应式网页的样式 44. 创建一个网页动画 45. 设置网页动画的样式 46. 创建一个瀑布流布局 47. 设置瀑布流布局的样式 48. 创建一个网页轮播图 49. 设置网页轮播图的样式 50. 创建一个网页图片画廊 51. 设置网页图片画廊的样式 52. 创建一个响应式图片画廊 53. 设置响应式图片画廊的样式 54. 创建一个网页背景视频 55. 设置网页背景视频的样式 56. 创建一个网页滚动效果 57. 设置网页滚动效果的样式 58. 创建一个网页登录界面 59. 设置网页登录界面的样式 60. 创建一个网页注册界面 61. 设置网页注册界面的样式 62. 创建一个网页404页面 63. 设置网页404页面的样式 64. 创建一个网页加载动画 65. 设置网页加载动画的样式 66. 创建一个网页弹出框 67. 设置网页弹出框的样式 68. 创建一个网页提示框 69. 设置网页提示框的样式 70. 创建一个网页警告框 71. 设置网页警告框的样式 72. 创建一个网页成功提示框 73. 设置网页成功提示框的样式 74. 创建一个网页错误提示框 75. 设置网页错误提示框的样式 76. 创建一个网页消息提示框 77. 设置网页消息提示框的样式 78. 创建一个网页确认提示框 79. 设置网页确认提示框的样式 80. 创建一个网页提醒框 81. 设置网页提醒框的样式 82. 创建一个响应式卡片布局 83. 设置响应式卡片布局的样式 84. 创建一个网页音频播放器 85. 设置网页音频播放器的样式 86. 创建一个网页视频播放器 87. 设置网页视频播放器的样式 88. 创建一个网页计数器 89. 设置网页计数器的样式 90. 创建一个网页进度条 91. 设置网页进度条的样式 92. 创建一个网页滑动条 93. 设置网页滑动条的样式 94. 创建一个网页评分器 95. 设置网页评分器的样式 96. 创建一个网页等比例图 97. 设置网页等比例图的样式 98. 创建一个网页图片标注 99. 设置网页图片标注的样式 100. 创建一个网页网格布局 101. 设置网页网格布局的样式 这些例子展示了HTMLCSS的实际应用,帮助开发人员更好地理解和掌握这两门技术。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值