HTML+CSS 三级导航栏

一、代码部分:

1、CSS部分:

<style type="text/css">
*{margin:0px;padding: 0px;}
#daohang{background:#00BFFF;height: 40px;}
#shouye{background: #1E90FF;margin-left: 0px}
#daohang ul{height: 100%;}
li{list-style-type: none;}
.submenu-general{
width: 100px;height: 100%;
line-height: 40px; /*垂直居中*/
text-align:center;
/*display: inline-block; */
float: left;
/* 使用inline-block会造成空隙*/
}
span{display: inline-block;}
.submenu-detail>span{width: 100px;}
.nav11>span,.submenu11 span{width: 150px;}
.nav11{position: relative;}
.nav11>span{background:#1E90FF }
.submenu11{position: absolute;left: 150px;top: 0px; }
.submenu11 span{background:#ADD8E6}
.submenu11,.nav11>span{display: none;}

.submenu-detail:hover{background:#1E90FF }
.submenu-detail:hover .nav11>span{display: block;}
/*a:hover b前提是a是b的父级元素*/
.nav11>span:hover{background:#ADD8E6 }
.nav11:hover .submenu11{display: block;}
.submenu11 span:hover{background:#1E90FF }
.submenu1 span{text-align: left;text-indent: 20px;}
</style>

2、HTML部分:

<body>
<header><img src="./logo.jpg"></header>
<nav id="daohang">
<ul>
<li class="submenu-general" id="shouye">首页</li>
<li class="submenu-general submenu-detail">
<span>需求</span>
<ul class="submenu1">
<li class="nav11">
<span>子菜单1</span>
<ul class="submenu11">
<li><span>子菜单1.1</span></li>
<li><span>子菜单1.2</span></li>
<li><span>子菜单1.3</span></li>
</ul>
</li>
<li class="nav11">
<span>子菜单2</span>
<ul class="submenu11">
<li><span>子菜单2.1</span></li>
<li><span>子菜单2.2</span></li>
<li><span>子菜单2.3</span></li>
</ul>
</li>
<li class="nav11">
<span>子菜单3</span>
<ul class="submenu11">
<li><span>子菜单3.1</span></li>
<li><span>子菜单3.2</span></li>
<li><span>子菜单3.3</span></li>
</ul>
</li>
</ul>
</li>

后面与前面代码重复,不再列举。

二、项目重点:

1、掌握子元素选择器、类选择器的用法;

知识点1:子元素选择器和后代选择器的区别。

第一种表示方式:a b{},第二种表示方式:a>b{}

第一种表示方式为后代选择器的表示方式,通过a和b之间的空格,设置a元素的所有后代b的样式,不管b是否是a的子元素,或者是a的孙子元素,所以后代选择器又叫做包含选择器,因为只要a包含了b的所有样式都将发生改变;

第二种表示方式为子元素选择器的表示方式,通过a和b之间的>,设置a元素的所有子元素b的样式,条件是b必须是a的子元素。

2、掌握hover的用法;

知识点1:a:hover b{}的用法。

表示当鼠标划过a元素所在区域时,将改变b元素的样式。这里有个前提条件,就是b必须为a的后代元素(可以是子元素、孙元素等等)。

3、了解定位与浮动的区别

知识点1:display inline block和float left都可以实现将块级元素并列横向排列,其区别在于float不占用文档流,而display inline block只是改变了块元素的排列方式,还是占用文档流,并且在显示过程中会出现空隙,所以本项目使用的是后者:float:left。

三、项目难点:

1、如何保证上下级菜单左对齐

2、如何通过鼠标滑动该子菜单所在块元素改变其本身背景颜色及其子菜单状态

3、掌握无序列表的嵌套方法

四、思路:

第一步,通过nav块元素搭出导航栏,通过设置inline-block或float设置一级菜单横向排列。各级菜单都通过无序列表来搭建,每一层li标签内再根据实际需要嵌套二级ul列表,再在二级菜单的li中嵌套三级菜单的ul,以此类推。

第二步,给二级菜单和三级菜单设置绝对定位,给其父元素ul设置相对定位,将二级菜单和三级菜单按照需求设置好定位,背景颜色,固定宽度等。

第三步,通过display none将二级菜单和三级菜单隐藏。

第四步,设置hover属性对需要解锁的菜单进行display block,自动弹出菜单选项,并改变本级菜单的背景颜色。

第五步,将设置好的三级菜单属性复制给其他导航栏上的元素,通过类选择器将设置好的样式全部同步到所有导航栏中的元素中。

注意事项:在设置background时,若分别对某一元素的父级和子级都设置了背景颜色,则设置了父级的背景色的优先级会更高。也就是,最终的颜色会取决于父级元素的背景色。所以在设置的时候要小心,不要重复对某一元素的父级和子级设置背景色。

 

转载于:https://www.cnblogs.com/Yaozhenpeng111/p/10164282.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用绝对定位来实现在内容区上方展开的三级导航栏。 首先,在 HTML 中创建一个包含三个导航级别的结构,如下所示: ```html <nav> <ul> <li><a href="#">Level 1</a> <ul> <li><a href="#">Level 2</a> <ul> <li><a href="#">Level 3</a></li> </ul> </li> </ul> </li> </ul> </nav> ``` 接下来,在 CSS 中设置导航栏的样式和位置: ```css nav { position: relative; z-index: 1; } nav ul { list-style: none; margin: 0; padding: 0; } nav li { position: relative; display: inline-block; } nav a { display: block; padding: 10px 20px; background-color: #333; color: #fff; text-decoration: none; } nav ul ul { position: absolute; top: 100%; left: 0; width: 200px; background-color: #555; opacity: 0; visibility: hidden; transition: opacity 0.3s ease, visibility 0.3s ease; } nav ul ul ul { top: 0; left: 100%; width: 200px; } nav li:hover > ul { opacity: 1; visibility: visible; } nav ul ul li { display: block; position: relative; } nav ul ul a { padding: 10px 25px; } nav ul ul ul a { padding: 10px 30px; } nav ul ul ul:hover > ul { opacity: 1; visibility: visible; } ``` 以上 CSS 代码会将所有导航栏项水平排列,并在鼠标悬停时展开子菜单。 最后,在内容区域上方创建一个 div 元素,并将其定位在导航栏下方: ```html <div class="content"> <!-- 内容区域 --> </div> ``` ```css .content { position: relative; top: -50px; /* 导航栏的高度 */ } ``` 这会将内容区域向上移动,使其位于导航栏下方。 完整的 HTMLCSS 代码如下所示: ```html <nav> <ul> <li><a href="#">Level 1</a> <ul> <li><a href="#">Level 2</a> <ul> <li><a href="#">Level 3</a></li> </ul> </li> </ul> </li> </ul> </nav> <div class="content"> <!-- 内容区域 --> </div> ``` ```css nav { position: relative; z-index: 1; } nav ul { list-style: none; margin: 0; padding: 0; } nav li { position: relative; display: inline-block; } nav a { display: block; padding: 10px 20px; background-color: #333; color: #fff; text-decoration: none; } nav ul ul { position: absolute; top: 100%; left: 0; width: 200px; background-color: #555; opacity: 0; visibility: hidden; transition: opacity 0.3s ease, visibility 0.3s ease; } nav ul ul ul { top: 0; left: 100%; width: 200px; } nav li:hover > ul { opacity: 1; visibility: visible; } nav ul ul li { display: block; position: relative; } nav ul ul a { padding: 10px 25px; } nav ul ul ul a { padding: 10px 30px; } nav ul ul ul:hover > ul { opacity: 1; visibility: visible; } .content { position: relative; top: -50px; /* 导航栏的高度 */ } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值