08. CSS 常用工具、布局
CSS 导航栏
下拉菜单
网页布局
一、CSS 导航栏
拥有易用的导航栏,对于任何网站都非常重要。通过 CSS 可以把枯燥的 HTML 菜单转换成漂亮的导航栏。
(1) 导航栏 - 链接列表
导航栏基本上是一个链接列表,所以使用 <ul> 和<li>元素非常适合,根据实际开发需求也可以使用自定义列表创建导航栏。
下面是创建导航栏链接列表的标准 HTML 结构:
<ul>
<li><a href="URL">HTML</a></li>
<li><a href="URL">CSS</a></li>
<li><a href="URL">JavaScript</a></li>
<li><a href="URL">jQuery</a></li>
</ul>
(2) 垂直导航栏
垂直导航栏通常都位于网站左侧,也可以叫左侧导航栏。
如果需要构建垂直导航栏,只需要给 a 元素定义样式就可以了。
因为 a 元素为内联元素,所以首先就需要把他转换为块元素,使用 CSS 定义 display:block ,即显示块元素的链接,让整体变为可点击链接区域,不只是链接文本。块元素默认情况下,是最大宽度,所以必需给导航栏指定宽度,再添加其他用于美化的样式。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左侧导航栏</title>
<style>
*{padding:0;margin:0;}
ul{
list-style:none outside;
}
a{
display:block;
background:#99CC33;
width:120px;
height:35px;
line-height:35px;
color:white;
font-weight:bold;
text-decoration:none;
text-align:center;
}
a:hover{
color:black;
background-color:#669933;
}
</style>
</head>
<body>
<ul>
<li><a href="URL">IT互联网</a></li>
<li><a href="URL">职业技能</a></li>
<li><a href="URL">语言学习</a></li>
<li><a href="URL">设计创作</a></li>
<li><a href="URL">兴趣爱好</a></li>
<li><a href="URL">职业规划</a></li>
</ul>
</body>
</html>

(3) 水平导航栏
有两种创建水平导航栏的方法,使用内联或浮动的列表项。这两种方法都很好,但如果需要每个菜单项都拥用有相同的大小,就必须使用浮动的方法。
① 内联列表项
创建一个水平导航栏的方法之一是就是把 li 元素转换为内联元素,默认 li 元素是块级元素,所以使用 CSS 设置 display:inline; 可以删除每个列表项之前和之后的换行符,以显示一行 。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>内联水平导航栏</title>
<style>
*{padding:0;margin:0;}
ul{
list-style:none outside;
padding:10px 0;
}
li{
display:inline;
}
a{
background:#0000CD;
color:white;
font-weight:bold;
text-decoration:none;
padding:10px;
}
a:hover{
background-color:#191970;
}
</style>
</head>
<body>
<ul>
<li><a href="URL">首页</a></li>
<li><a href="URL">公司简介</a></li>
<li><a href="URL">经营发展</a></li>
<li><a href="URL">产品展示</a></li>
<li><a href="URL">新闻中心</a></li>
<li><a href="URL">在线服务</a></li>
<li><a href="URL">企业文化</a></li>
</ul>
</body>
</html>

注意:如果只给 a 元素设置内边距,而不给列表设置,那么链接会出现在 ul 元素之外,所以必须给 ul 设置顶和底内边距。
② 浮动列表项
使用内联列表项,链接的宽度是不同的,为了让所有链接拥有相等的宽度,需要给 li 元素设置浮动,并把 a 元素转换为块元素再指定宽度。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>浮动水平导航栏</title>
<style>
*{padding:0;margin:0;}
ul{
list-style:none outside;
overflow:hidden;
}
li{
float:left;
}
a{
display:block;
background:#CCCCCC;
width:120px;
height:35px;
line-height:35px;
color:black;
font-weight:bold;
text-decoration:none;
text-align:center;
margin-right:2px;
}
a:hover{
color:white;
background-color:#000000;
}
</style>
</head>
<body>
<ul>
<li><a href="URL">首页</a></li>
<li><a href="URL">公司简介</a></li>
<li><a href="URL">经营发展</a></li>
<li><a href="URL">产品展示</a></li>
<li><a href="URL">新闻中心</a></li>
<li><a href="URL">在线服务</a></li>
<li><a href="URL">企业文化</a></li>
</ul>
</body>
</html>

二、下拉菜单
<div class="dropdown">
<button type="button" class="dropbtn">下拉菜单按钮</button>
<ul class="dropdown-content">
<li><a href="#">下拉菜单项 1</a></li>
<li><a href="#">下拉菜单项 2</a></li>
<li><a href="#">下拉菜单项 3</a></li>
</ul>
</div>

/* 样式重置 */
ul{padding:0;margin:0;}
li{list-style: none;}
a{text-decoration:none;}
/* 容器 <div> - 需要定位下拉内容 */
.dropdown{
position:relative;
display:inline-block;
}
/* 下拉菜单内容,设置为隐藏 */
.dropdown-content{
min-width:100%;
background-color:#F5F5F5;
position:absolute;
display:none;
box-shadow:0px 8px 15px 0px rgba(0,0,0,0.2);
text-align: center;
line-height:40px;
}
/* 下拉按钮样式 */
.dropbtn{
color:white;
font-size:16px;
padding:15px;
border:none;
background-color:#00CD66;
cursor:pointer;
}
/* 下拉菜单链接的样式 */
.dropdown-content a{
color:black;
}
/* 鼠标移入后显示下拉菜单 */
.dropdown:hover .dropdown-content{
display:block;
}
/* 鼠标移入后修改链接的背景色 */
.dropdown-content li:hover{
background-color:#E8E8E8;
}
/* 下拉菜单显示后修改下拉按钮的背景色 */
.dropdown:hover .dropbtn{
background-color:#008B00;
}
HTML 部分:
-
菜单一般都用
<ul>元素来创建一个容器,用于包含下拉菜单的内容,并自定义它需要出现的位置。 -
因为菜单一般都是链接,使用
<a>标签,将它放入每个<li>中。 -
最后,再使用
<div>元素来包裹这些元素,并使用 CSS 来设置下拉内容的样式。
CSS 部分:
-
.dropdown 类使用 position:relative,这将设置下拉菜单的内容放置在下拉按钮(使用 position:absolute)的右下角位置。
-
.dropdown-content 类中是实际的下拉菜单。默认是隐藏的,在鼠标移入指定元素后显示。
-
如果希望下拉菜单与下拉按钮的宽度一致,可将宽度设置为 100%,overflow:auto 属性可以指定在小尺寸屏幕上滚动。
-
:hover 选择器用于在用户将鼠标移动到下拉按钮上时显示下拉菜单,将下拉菜单容器设置为 display:block;
下拉菜单的对齐方式:
-
如果下拉菜单设置了 float:left 样式,那么还需要在隐藏的下拉菜单中添加绝对定位 left:0,即从 left:0 处开始从左向右显示菜单内容,否则会超出浏览器左边窗口。
-
如果下拉菜单设置了 float:right 样式,默认都是从左向右显示,菜单内容则会超出浏览器右边窗口,所以还需要设置 绝对定位 right:0,让下拉菜单内容从右向左。
.dropdown-content{
min-width:150px;
background-color:#F5F5F5;
position:absolute;
right:0;
display:none;
box-shadow:0px 8px 15px 0px rgba(0,0,0,0.2);
}
导航栏下拉菜单:
<ul>
<li><a href="#shop" class="active">在线商城</a></li>
<li><a href="#news">产品展示</a></li>
<div class="dropdown">
<a href="#" class="dropbtn">下拉菜单</a>
<div class="dropdown-content">
<a href="#">子菜单 1</a>
<a href="#">子菜单 2</a>
<a href="#">子菜单 3</a>
</div>
</div>
</ul>

*{margin:0;padding:0;}
ul{
list-style-type:none;
background-color:#333;
overflow:hidden;
}
li{
float:left;
}
li a, .dropbtn{
display:inline-block;
color:white;
text-align:center;
padding:14px 16px;
text-decoration:none;
}
li a:hover, .dropdown:hover .dropbtn{
background-color:#111;
}
.dropdown{
display:inline-block;
}
.dropdown-content{
min-width:200px;
background-color:#F9F9F9;
position:absolute;
display:none;
box-shadow:0px 8px 15px 0px rgba(0,0,0,0.2);
}
.dropdown-content a{
color:black;
padding:12px 16px;
text-decoration:none;
display:block;
}
.dropdown-content a:hover{
background-color:#F1F1F1;
}
.dropdown:hover .dropdown-content{
display: block;
}
三、网页布局
(1) 一列布局
宽度自适应,只需要按照百分比来设置宽度,内容就可以根据浏览器窗口自动调节大小
-
宽度用百分比设置
-
一般中间的内容框不设置高度,会让它自适应。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>一列自适应布局</title>
<style>
*{margin:0;padding:0;}
#header{
height:50px;
background:blue;
}
#main{
width:80%;
height:800px; /* 在实际开发中不设置列的高度,让高度自适应。 */
background:green;
margin:0 auto;
}
#footer{
width:80%;
height:50px;
background:gray;
margin:0 auto;
}
</style>
</head>
<body>
<div id="header">页头</div>
<div id="main">主体内容</div>
<div id="footer">页脚</div>
</body>
</html>

(2) 二列布局
<div id="warp">
<div id="herder">页头</div>
<div id="nav">导航</div>
<div id="main">
<div class="main-left">左-上</div>
<div class="main-right">右-上</div>
</div>
<div id="content">
<div class="content-left">左-下</div>
<div class="content-right-sup">右-上</div>
<div class="content-right-sub">右-下</div>
</div>
<div id="footer">页脚</div>
</div>
*{margin:0;padding:0;}
#warp{
width:960px;
margin:0 auto;
margin-top:10px;
}
#herder{
height:50px;
background:blue;
}
#nav{
height:30px;
background:orange;
margin:10px 0;
}
#main{
width:100%;
margin-bottom:10px;
overflow:hidden;
}
#main .main-left{
width:640px;
height:200px;
background:yellow;
float:left;
}
#main .main-right{
width:300px;
height:200px;
background:pink;
float:right;
}
#content{
width:100%;
overflow:hidden;
}
#content .content-left{
width:640px;
height:800px;
background:lightgreen;
float:left;
}
#content .content-right-sup{
width:300px;
height:500px;
background:lightblue;
float:right;
}
#content .content-right-sub{
width:300px;
height:240px;
background:purple;
margin-top:20px;
float:right;
}
#footer{
height:50px;
background:gray;
margin-top:10px;
}
(3) 三列布局
① 宽度自适应三列布局
三列布局的原理和两列布局的原理是一样的,只不过多了一列,只需给宽度自适应两列布局中间再加一列,然后重新计算三列的宽度,就实现了宽度自适应的三列布局。
<div id="herder">页头</div>
<div id="main">
<div class="main-left">左列</div>
<div class="main-center">中间</div>
<div class="main-right">右列</div>
</div>
<div id="footer">页脚</div>
*{margin:0;padding:0;}
#herder{
height:50px;
background:blue;
}
#main{
width:100%;
overflow:hidden;
}
#main .main-left{
width:25%;
height:800px;
background:red;
float:left;
}
#main .main-center{
width:50%;
height:800px;
background:lightgreen;
float:left;
}
#main .main-right{
width:25%;
height:800px;
background:pink;
float:right;
}
#footer{
height:50px;
background:gray;
}
② 左右两列固定宽度,中间内容宽度自适应
要想实现左右两列固定宽度,中间宽度自适应的布局,那么使用浮动就做不到了,使用浮动之后页面就乱了,必须使用绝对定位来将三列固定在一行。
<div id="herder">页头</div>
<div id="main">
<div class="main-left">左列</div>
<div class="main-center">设计网页的第一步就是设计版面布局,搭建网站结构,网页排版的合理性,在一定程度上也影响着网站整体的布局以及后期的优化。一个好的网站形象能更容易地吸引用户、留住用户。因此,网站首页第一屏的排版非常重要,很多时候能决定用户的去与留。</div>
<div class="main-right">右列</div>
</div>
<div id="footer">页脚</div>
*{margin:0;padding:0;}
#herder{
height:50px;
background:blue;
}
#main{
width:100%;
position:relative;
}
#main .main-left{
width:200px;
height:800px;
background:red;
position:absolute;
left:0;
top:0;
}
#main .main-center{
height:800px;
background:lightgreen;
margin:0 310px 0 210px;
}
#main .main-right{
width:300px;
height:800px;
background:pink;
position:absolute;
right:0;
top:0;
}
#footer{
height:50px;
background:gray;
}
(4) 混合布局
<div id="header">头部</div>
<div id="nav">
<ul>
<li><a class="home" href="#">首页</a></li>
<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>
<li><a href="#">服务</a></li>
<li><a href="#">社区</a></li>
<li><a href="#">关于我们</a></li>
</ul>
</div>
<div id="main">
<div class="left">左边</div>
<div class="right">
<div class="sup">
<div class="sup-left">右-左</div>
<div class="sup-right">右-右</div>
</div>
<div class="middle">右-中</div>
<div class="sub">右-下</div>
</div>
</div>
<div id="footer">页脚</div>
*{margin:0;padding:0;}
#header{
height:30px;
background:blue;
margin-bottom:10px;
}
#nav{
width:960px;
margin:0 auto;
margin-bottom:10px;
}
#main{
width:960px;
height:800px;
margin:0 auto;
overflow:hidden;
}
#main .left{
width:200px;
height:800px;
background:lightgreen;
float:left;
}
#main .right{
width:750px;
height:800px;
float:right;
}
#main .right .sup{
height:200px;
margin-bottom:10px;
}
#main .right .sup-left{
width:370px;
height:200px;
background:pink;
float:left;
}
#main .right .sup-right{
width:370px;
height:200px;
background:orange;
float:right;
}
#main .right .middle{
height:300px;
background:yellow;
margin-bottom:10px;
}
#main .right .sub{
height:280px;
background:purple;
}
#footer{
width:960px;
height:50px;
background:gray;
margin:0 auto;
margin-top:10px;
}
#nav ul{
list-style:none;
background:lightgray;
overflow:hidden;
}
#nav li{
float:left;
}
#nav li a{
display:block;
color:black;
width:104px;
height:30px;
line-height:30px;
text-decoration:none;
text-align:center;
}
#nav .home{
width:128px;
}
#nav li a:hover{
color:white;
background:green;
}

浙公网安备 33010602011771号