Python全栈开发学习--HTML--CSS导航栏练习--Day5

18 篇文章 0 订阅
16 篇文章 0 订阅

前言

回顾前面几天学习的内容,一共学了标签,css样式,盒模型,以及定位,下面将使用之前学习到的内容做几个小案例。从而巩固所学知识。

一、竖向导航栏

1.1 方法:用无序列表构建表单
<ul>
	<li><a href="#">主页</a></li>
	<li><a href="#">新闻</a></li>
	......
</ul>
1.2 步骤:
  1. 先将导航条的主体元素写完。
<!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>
  1. 为导航条添加样式
/*清除浏览器默认的 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来做,我们的下拉菜单由两部分组成,第一部分是标题部分,第二部分是该标题下对应的选项,使用列表构造。我们想要实现的功能是当用户鼠标悬停至学习编程的时候,显示其二级目录 HTMLpythonjava

<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样式设计有待加强。本文主要实现功能,美观另说。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值