16、CSS 水平导航栏
CSS 垂直导航栏
CSS 下拉菜单
水平导航栏
HomeNewsContactAbout
有两种创建水平导航栏的方法:使用行内或浮动列表项。
行内列表项
构建水平导航栏的一种方法是,除了上一章中的“标准”代码外,还要将
- 元素指定为 inline:
-
实例
li { display: inline; }
亲自试一试
例子解释:
display: inline; -默认情况下, - 元素是块元素。在这里,我们删除每个列表项之前和之后的换行符,这样它们才能显示在一行。
-
浮动列表项
创建水平导航栏的另一种方法是浮动 - 元素,并为导航链接规定布局:
-
实例
li { float: left; } a { display: block; padding: 8px; background-color: #dddddd; }
亲自试一试
例子解释:
float: left; - 使用 float 使块元素滑动为彼此相邻
display: block; - 将链接显示为块元素可以使整个链接区域都可单击(不仅是文本),而且允许我们指定填充(如果需要,还可以指定高度,宽度,边距等)
padding: 8px; - 使块元素更美观
background-color: #dddddd; - 为每个元素添加灰色背景色
提示:如需全宽的背景色,请将 background-color 添加到<ul>
而不是每个<a>
元素:实例
ul { background-color: #dddddd; }
亲自试一试
水平导航栏实例
创建具有深色背景色的基础水平导航栏,并在用户将鼠标移到链接上方时改变链接的背景色:HomeNewsContactAbout
实例ul { list-style-type: none; margin: 0; padding: 0; overflow: hidden; background-color: #333; } li { float: left; } li a { display: block; color: white; text-align: center; padding: 14px 16px; text-decoration: none; } /* 当鼠标悬停时把链接颜色更改为 #111(黑色) */ li a:hover { background-color: #111; }
亲自试一试
活动/当前导航链接
向当前链接添加 “active” 类,这样用户就知道他/她在哪个页面上:HomeNewsContactAbout
实例.active { background-color: #4CAF50; }
亲自试一试
右对齐链接
通过将列表项向右浮动来右对齐链接(float:right;):HomeNewsContactAbout
实例<ul> <li><a href="#home">Home</a></li> <li><a href="#news">News</a></li> <li><a href="#contact">Contact</a></li> <li style="float:right"><a class="active" href="#about">About</a></li> </ul>
亲自试一试
边框分隔栏
将 border-right 属性添加到<li>
,以创建链接分隔符:HomeNewsContactAbout
实例/* 为所有列表项添加灰色右边框,最后一项(last-child)除外 */ li { border-right: 1px solid #bbb; } li:last-child { border-right: none; }
亲自试一试
固定的导航栏
使导航栏保持在页面的顶部或底部,即使用户滚动页面也是如此:固定在顶部
ul { position: fixed; top: 0; width: 100%; }
亲自试一试
固定在底部ul { position: fixed; bottom: 0; width: 100%; }
亲自试一试
注意:固定定位在移动设备上可能无法正常工作。灰色水平导航栏
带有细灰色边框的灰色水平导航栏的实例Home
News
Contact
About
实例ul { border: 1px solid #e7e7e7; background-color: #f3f3f3; } li a { color: #666; }
亲自试一试
粘性导航栏
为<ul>
添加 position: sticky;,以创建粘性导航栏。粘性元素会根据滚动位置在相对和固定之间切换。它是相对定位的,直到在视口中遇到给定的偏移位置为止 - 然后将其“粘贴”在适当的位置(比如 position:fixed)。
实例
ul { position: -webkit-sticky; /* Safari */ position: sticky; top: 0; }
亲自试一试
注意:Internet Explorer、Edge 15 和更早版本不支持粘性定位。 Safari 需要 -webkit- 前缀(请参见上面的例子)。您还必须指定 top、right、bottom 或 left 至少之一,以使粘性定位起作用。
17、CSS 下拉菜单
CSS 水平导航栏
CSS 图片库
使用 CSS 创建可悬停的下拉列表。演示:下拉式案例
实例
请把鼠标指针移动到下面的例子上:下拉文本下拉菜单图片:coffee
基础的下拉菜单
创建当用户将鼠标移到元素上时出现的下拉框。实例
<style> .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); padding: 12px 16px; z-index: 1; } .dropdown:hover .dropdown-content { display: block; } </style> <div class="dropdown"> <span>Mouse over me</span> <div class="dropdown-content"> <p>Hello World!</p> </div> </div>
亲自试一试
例子解释:
HTML
使用任何元素打开下拉菜单内容,例如<span> 或 <button>
元素。使用容器元素(如
<div>
)创建下拉内容,并在其中添加任何内容。用
<div>
元素包围这些元素,使用 CSS 正确定位下拉内容。CSS
.dropdown 类使用 position:relative,当我们希望将下拉内容放置在下拉按钮的正下方(使用 position:absolute)时,需要使用该类。.dropdown-content 类保存实际的下拉菜单内容。默认情况下它是隐藏的,并将在悬停时显示(请看下文)。请注意,min-width 设置为 160px。可随时更改此设置。提示:如果您希望下拉内容的宽度与下拉按钮的宽度一样,请将宽度设置为 100%(设置 overflow:auto 可实现在小屏幕上滚动)。
我们用了 CSS box-shadow 属性,而不是边框,这样下拉菜单看起来像一张“卡片”。
当用户将鼠标移到下拉按钮上时,:hover 选择器用于显示下拉菜单。
下拉式菜单
创建一个下拉菜单,并允许用户从列表中选择一个选项:下拉菜单
本例与上例相似,除了我们在下拉框内添加链接并为其设置了样式,以此匹配下拉按钮的样式:实例
<style> /* 设置下拉按钮的样式 */ .dropbtn { background-color: #4CAF50; color: white; padding: 16px; font-size: 16px; border: none; cursor: pointer; } /* 容器 <div> - 需要放置下拉内容 */ .dropdown { position: relative; display: inline-block; } /* 下拉内容(默认隐藏) */ .dropdown-content { display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; } /* 下拉链接 */ .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; } /* 显示下拉内容时,更改下拉按钮的背景颜色 */ .dropdown:hover .dropbtn { background-color: #3e8e41; } </style> <div class="dropdown"> <button class="dropbtn">Dropdown</button> <div class="dropdown-content"> <a href="#">Link 1</a> <a href="#">Link 2</a> <a href="#">Link 3</a> </div> </div>
亲自试一试
右对齐的下拉菜单内容
LeftRight
如果希望下拉菜单从右到左而不是从左到右,请添加 right: 0;:实例
.dropdown-content { right: 0; }
18、CSS 图片库
图片库
下面这个图片库是使用 CSS 创建的:实例
<html> <head> <style> div.gallery { margin: 5px; border: 1px solid #ccc; float: left; width: 180px; } div.gallery:hover { border: 1px solid #777; } div.gallery img { width: 100%; height: auto; } div.desc { padding: 15px; text-align: center; } </style> </head> <body> <div class="gallery"> <a target="_blank" href="/i/photo/tulip-yellow.jpg"> <img src="/i/photo/tulip-yellow.jpg" alt="Cinque Terre" width="600" height="400"> </a> <div class="desc">在此处添加图像描述</div> </div> <div class="gallery"> <a target="_blank" href="img_forest.jpg"> <img src="img_forest.jpg" alt="Forest" width="600" height="400"> </a> <div class="desc">在此处添加图像描述</div> </div> <div class="gallery"> <a target="_blank" href="img_lights.jpg"> <img src="img_lights.jpg" alt="Northern Lights" width="600" height="400"> </a> <div class="desc">在此处添加图像描述</div> </div> <div class="gallery"> <a target="_blank" href="img_mountains.jpg"> <img src="img_mountains.jpg" alt="Mountains" width="600" height="400"> </a> <div class="desc">在此处添加图像描述</div> </div> </body> </html>
19、CSS 图像精灵
图像精灵
图像精灵是单个图像中包含的图像集合。包含许多图像的网页可能需要很长时间才能加载,同时会生成多个服务器请求。
使用图像精灵将减少服务器请求的数量并节约带宽。
图像精灵 - 简单的例子
我们使用以下单幅图像(“navsprites.gif”)而不是使用三幅单独的图像:
实例#home { width: 46px; height: 44px; background: url(navsprites.gif) 0 0; }
例子解释:
<img id="home" src="trans.gif">
- 仅定义小的透明图像,因为 src 属性不能为空。而实际显示的图像将是我们在 CSS 中指定的背景图像。
width: 46px; height: 44px; - 定义我们要使用的图像部分
background: url(navsprites.gif) 0 0; - 定义背景图片及其位置(left 0px, top 0px)
图像精灵 - 创建导航列表
我们希望使用精灵图片(“navsprites.gif”)来创建一个导航列表。我们将使用 HTML 列表,因为它可以是链接,同时还支持背景图片:
实例
#navlist { position: relative; } #navlist li { margin: 0; padding: 0; list-style: none; position: absolute; top: 0; } #navlist li, #navlist a { height: 44px; display: block; } #home { left: 0px; width: 46px; background: url('img_navsprites.gif') 0 0; } #prev { left: 63px; width: 43px; background: url('img_navsprites.gif') -47px 0; } #next { left: 129px; width: 43px; background: url('img_navsprites.gif') -91px 0; }
例子解释:
#navlist {position:relative;} - 位置设置为相对,以允许在其中进行绝对定位
#navlist li {margin:0;padding:0;list-style:none;position:absolute;top:0;} - 外边距和内边距设置为 0,删除 list-style,并且所有列表项都均为绝对定位
#navlist li, #navlist a {height:44px;display:block;} - 所有图片的高度均为 44px
现在开始为每个特定部分设置定位和样式:#home {left:0px;width:46px;} - 一直向左定位,图像宽度 46px
#home {background:url(navsprites.gif) 0 0;} - 定义背景图片及其位置(left 0px, top 0px)
#prev {left:63px;width:43px;} - 向右定位 63px(#home 宽度 46px + 项目之间的一些额外空间),宽度 43px。
#prev {background:url(‘navsprites.gif’) -47px 0;} - 定义背景图片向右 47px(#home 宽度 46px + 1px 分隔线)
#next {left:129px;width:43px;} - 向右定位 129px(#prev 开始是 63px + #prev 的宽度是 43px + 多余的空格),宽度 43px。
#next {background:url(‘navsprites.gif’) -91px 0;} - 定义背景图片向右 91px(#home 宽度 46px + 1px 分隔线+ #prev 宽度 43px + 1px 分隔线)
图像精灵 - 悬停效果
现在,我们要向导航列表中添加悬停效果。提示::hover 选择器可用于所有元素,而不仅限于链接。
我们的新图像(“navsprites_hover.gif”)包含三幅导航图像和三幅用于悬停效果的图像:
因为这是一幅图像,而不是六个单独的文件,所以当用户将鼠标悬停在图像上时,不会有加载延迟。我们仅添加三行代码来实现悬停效果:
实例
#home a:hover { background: url('navsprites_hover.gif') 0 -45px; } #prev a:hover { background: url('navsprites_hover.gif') -47px -45px; } #next a:hover { background: url('navsprites_hover.gif') -91px -45px; }
例子解释:
#home a:hover {background: transparent url(‘img_navsprites_hover.gif’) 0 -45px;} - 我们为所有三个悬停图像指定相同的背景位置,仅向下 45 像素20、CSS 属性选择器
为带有特定属性的 HTML 元素设置样式
我们可以设置带有特定属性或属性值的 HTML 元素的样式。CSS [attribute] 选择器
[attribute] 选择器用于选取带有指定属性的元素。下例选择所有带有 target 属性的
<a>
元素;
实例a[target] { background-color: yellow; }
CSS [attribute=“value”] 选择器
[attribute=“value”] 选择器用于选取带有指定属性和值的元素。下例选取所有带有 target="_blank" 属性的 元素:
实例
a[target="_blank"] { background-color: yellow; }
CSS [attribute~=“value”] 选择器
[attribute~=“value”] 选择器选取属性值包含指定词的元素。下例选取 title 属性包含 “flower” 单词的所有元素:
实例
[title~="flower"] { border: 5px solid yellow; }
亲自试一试
上面的例子会匹配以下属性的元素:title=“flower”、title=“summer flower” 以及 title=“flower new”,但不匹配:title=“my-flower” 或 title=“flowers”。CSS [attribute|=“value”] 选择器
[attribute|=“value”] 选择器用于选取指定属性以指定值开头的元素。下例选取 class 属性以 “top” 开头的所有元素:
注释:值必须是完整或单独的单词,比如 class=“top” 或者后跟连字符的,比如 class=“top-text”。
实例
[class|="top"] { background: yellow; }
亲自试一试
CSS [attribute^=“value”] 选择器
[attribute^=“value”] 选择器用于选取指定属性以指定值开头的元素。下例选取 class 属性以 “top” 开头的所有元素:
提示:值不必是完整单词!
实例
[class^="top"] { background: yellow; }
亲自试一试
CSS [attribute = " v a l u e " ] 选 择 器 [ a t t r i b u t e ="value"] 选择器 [attribute ="value"]选择器[attribute=“value”] 选择器用于选取指定属性以指定值结尾的元素。下例选取 class 属性以 “test” 结尾的所有元素:
提示:值不必是完整单词!
实例
[class$="test"] { background: yellow; }
亲自试一试
CSS [attribute*=“value”] 选择器
[attribute*=“value”] 选择器选取属性值包含指定词的元素。下例选取 class 属性包含 “te” 的所有元素:
提示:值不必是完整单词!
实例
[class*="te"] { background: yellow; }
亲自试一试
设置表单样式
若需为不带 class 或 id 的表单设置样式,属性选择器会很有用:实例
input[type="text"] { width: 150px; display: block; margin-bottom: 10px; background-color: yellow; } input[type="button"] { width: 120px; margin-left: 35px; display: block; }
亲自试一试
提示:请访问我们的 CSS 表单教程,学习如何用 CSS 设置表单样式的更多知识。