前言
回顾前面几天学习的内容,一共学了标签,css样式,盒模型,以及定位,下面将使用之前学习到的内容做几个小案例。从而巩固所学知识。
一、竖向导航栏
1.1 方法:用无序列表构建表单
<ul>
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
......
</ul>
1.2 步骤:
- 先将导航条的主体元素写完。
<!DOCTYPE>
<html lang="ZH-cn">
<head>
<meta charset="utf-8" >
<title>竖向导航条</title>
</head>
<body>
<nav>
<ul>
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">学习</a></li>
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
</ul>
</nav>
</body>
</html>
- 为导航条添加样式
/*清除浏览器默认的 marging 与 padding*/
/*设置字体大小与颜色*/
*{
marging:0;
padding:0;
font-size:20px;
color:#000000;
}
发现a默认自带的下划线有点影响美观
/*清除超链接默认的自带的下划线*/
a {
text-decoration:none;
}
由于无序列表前面默认自带小圆点,不太好看,将其去掉
ul {
list-style:none; /*去掉小圆点*/
width:120px; /*为导航条整体设置宽度,高度我们采用默认文本高度*/
background-color:#ffcccc; /*背景颜色*/
text-align:center; /*设置文本居中对齐*/
}
li{
height:30px; /*设置导航条每个条目的高度*/
border-bottom: 1px dashed #ffffff; /*为了更好看,设置边框底部虚线条*/
}
到这里导航条已经制作差不多,看一下效果
最后可以通过设置伪类,方便提醒用户选中的条目
li:hover{
background-color:#ccffff; /*鼠标悬停时,设置背景颜色*/
}
<!DOCTYPE>
<html lang="ZH-cn">
<head>
<meta charset="utf-8" >
<title>竖向导航条</title>
<style>
*{
marging:0;
padding:0;
font-size:20px;
color:#000000;
}
a{
text-decoration:none;
}
ul {
list-style:none;
width:120px;
background-color:#ffcccc;
text-align:center;
}
li{
height:30px;
border-bottom: 1px dashed #ffffff;
}
li:hover{
background-color:#ccffff;
}
</style>
</head>
<body>
<nav class="nav">
<ul class="item">
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">学习</a></li>
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
</ul>
</nav>
</body>
</html>
到这里我发现有一个bug,这样写的话,a超链接可点击的范围小于整个条目框,用户必须要对a超链接的范围点击才能跳转。由于a标签是内联元素,无法对齐设置宽度。
解决办法:
可以通过display将a标签变成块级元素,然后对其进行设置宽高即可。
a{
text-decoration:none;
background-color:#ffcccc;
width:120px;
height:31px;
text-align:center;
display:block;
border-bottom: 1px dashed #ffffff;
}
<!DOCTYPE>
<html lang="ZH-cn">
<head>
<meta charset="utf-8" >
<title>竖向导航条</title>
<style>
*{
marging:0;
padding:0;
font-size:20px;
color:#000000;
}
a{
text-decoration:none;
background-color:#ffcccc;
width:120px;
height:31px;
text-align:center;
display:block;
border-bottom: 1px dashed #ffffff;
}
ul {
list-style:none;
}
a:hover{
background-color:#ccffff;
}
</style>
</head>
<body>
<nav class="nav">
<ul class="item">
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">学习</a></li>
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
</ul>
</nav>
</body>
</html>
一个最简单,最基础的竖直导航条就实现了。当然在实际开发中不会有这么简单的需求,那就在此基础上不断完善就行了,正所谓千里之行,始于足下。
二、横向导航栏
横向导航栏内容跟竖直导航栏一样,只需求修改部分的CSS属性即可实现,ul、li都是块级元素,我们知道块级元素都是独占一行,那么该通过什么样的方式让所有的块级元素占一行呢?
回顾之前学的内容,发现有两种做法可以解决:
(1)使用float
浮动定位
li{
float:left;
}
(2)使用display
修改元素类型
li{
display:inline-block
}
第二种做法中间会有空隙,不知道是为什么,还没解决。。。
<!DOCTYPE>
<html lang="ZH-cn">
<head>
<meta charset="utf-8" >
<title>竖向导航条</title>
<style>
*{
marging:0;
padding:0;
font-size:20px;
color:#000000;
}
a{
text-decoration:none;
background-color:#ffcccc;
width:120px;
height:31px;
text-align:center;
display:block;
}
ul {
list-style:none;
}
li{
display:inline-block
/*float: left*/
}
a:hover{
background-color:#ccffff;
}
</style>
</head>
<body>
<nav class="nav">
<ul class="item">
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">学习</a></li>
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
</ul>
</nav>
</body>
</html>
三、下拉菜单
下拉菜单是导航中常用的一种形式,当鼠标悬停在某一目录的时候,其二级目录会显示。
还是使用ul来做,我们的下拉菜单由两部分组成,第一部分是标题部分,第二部分是该标题下对应的选项,使用列表构造。我们想要实现的功能是当用户鼠标悬停至学习编程
的时候,显示其二级目录 HTML
、python
、java
。
<div class="nav">
<div class="title">学习编程</div>
<ul class="plat">
<li><a href="#">HTML</a></li>
<li><a href="#">python</a></li>
<li><a href="#">java</a></li>
</ul>
</div>
3.1 思路
(1)默认页面,使用display:none
属性将ul
列表下的所有条目隐藏。
(2)当鼠标悬停至title
处,使用伪类:hover
设置display:block
即可。
(3)使用:hover
控制其他元素的样式有三种方式
parent
控制子元素son
:
<div class="parent">
<div class="son"></div>
</div>
/*鼠标悬停在parent处时, 改变son的背景颜色为蓝色*/
.parent:hover .son {
background-color:blue;
}
son1
控制兄弟元素son2
:
<div class="parent">
<div class="son1"></div>
<div class="son2"></div>
</div>
/*鼠标悬停在son1处时, 改变son2的背景颜色为蓝色*/
.son1:hover + .son2 {
background-color:blue;
}
firend1
控制就近元素firend2
:
<div class="firend1"></div>
<div class="firend2"></div>
/*鼠标悬停在firend1处时, 改变firend2的背景颜色为蓝色*/
.firend1:hover ~ .firend2 {
background-color:blue;
}
(4)使用:hover
控制其他元素时,必须对需要隐藏的条目元素设置父级元素,否则当鼠标移开兄弟或者就近元素时,显示属性会失效,造成无法移开鼠标去点击条目的bug。
所以我们给标题和条目放在同一个div中,内容如下
<div class="nav">
<div class="title">学习编程</div>
<ul class="plat">
<li><a href="#">HTML</a></li>
<li><a href="#">python</a></li>
<li><a href="#">java</a></li>
</ul>
</div>
3.2 步骤
(1)元素内容如上所示
(2)设置CSS样式
(2.1)万能第一步
*{
padding: 0;
margin: 0;
}
(2.2)给标题和选项添加css样式
.title{
background-color:#ffcccc;
width:120px;
text-align:center;
}
a{
text-decoration:none;
background-color:#f1f1f1;
width:120px;
height:31px;
text-align:center;
display:block;
}
(2.3)设置鼠标悬停时选项的背景颜色
a:hover{
background-color:#ccffff;
}
(2.4)ul设置默认隐藏
.plat{
display: none;
}
(2.5)鼠标悬停显示
/*通过父元素改变子元素的属性*/
.nav:hover .plat{
display: block;
clear: both;
}
默认效果:
悬停时:
源代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
padding: 0;
margin: 0;
font-size: 20px;
color:#000000;
}
.title{
background-color:#ffcccc;
width:120px;
text-align:center;
}
a{
text-decoration:none;
background-color:#f1f1f1;
width:120px;
height:31px;
text-align:center;
display:block;
}
a:hover{
background-color:#ccffff;
}
.plat{
display: none;
}
.nav:hover .plat{
display: block;
}
</style>
</head>
<body>
<div class="nav">
<div class="title">学习编程</div>
<ul class="plat">
<li><a href="#">HTML</a></li>
<li><a href="#">python</a></li>
<li><a href="#">java</a></li>
</ul>
</div>
</body>
</html>
四、带下拉菜单的导航栏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*清除padding、margin*/
*{
padding: 0;
margin: 0;
font-size: 20px;
color:#000000;
}
/*清除列表前的小圆点*/
ul{
list-style:none;
}
/*全局a标签基本属性,设置为块元素*/
a{
text-decoration:none;
background-color:#ffcccc;
width:120px;
height:31px;
text-align:center;
display:block;
border-bottom: 1px dashed #ffffff;
}
/*设置标题样式,否则下拉选项会变成横向排列*/
.title{
background-color:#ffcccc;
width:120px;
text-align:center;
border-bottom: 1px dashed #ffffff;
}
/*下拉选项的背景颜色*/
.plat li a{
background-color:#f1f1f1;
}
/*鼠标悬停的背景颜色*/
a:hover, .plat li a:hover{
background-color:#ccffff;
}
/*隐藏内容*/
.plat{
display: none;
}
/*显示内容*/
.title:hover .plat{
display: block;
}
</style>
</head>
<body>
<nav>
<ul>
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
<li class="title">
<a href="#">学习编程</a>
<ul class="plat">
<li><a href="#">HTML</a></li>
<li><a href="#">python</a></li>
<li><a href="#">java</a></li>
</ul>
</li>
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
</ul>
</nav>
</body>
</html>
效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*清除padding、margin*/
*{
padding: 0;
margin: 0;
font-size: 20px;
color:#000000;
}
/*清除列表前的小圆点*/
ul{
list-style:none;
}
/*全局a标签基本属性,设置为块元素*/
a{
text-decoration:none;
background-color:#ffcccc;
width:120px;
height:30px;
text-align:center;
display:block;
}
.title{
background-color:#ffcccc;
width:120px;
height:30px;
text-align:center;
}
.plat li a{
background-color:#f1f1f1;
}
a:hover, .plat li a:hover{
background-color:#ccffff;
}
.plat{
display: none;
}
.title:hover .plat{
display: block;
}
li{
float:left;
}
</style>
</head>
<body>
<nav>
<ul>
<li><a href="#">主页</a></li>
<li><a href="#">新闻</a></li>
<li class="title">
<a href="#">学习编程</a>
<ul class="plat">
<li><a href="#">HTML</a></li>
<li><a href="#">python</a></li>
<li><a href="#">java</a></li>
</ul>
</li>
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
</ul>
</nav>
</body>
</html>
初步实现导航栏最基本的功能,具体CSS样式设计有待加强。本文主要实现功能,美观另说。