CSS3 多重背景
在本章中,您将学习如何将多个背景图像添加到一个元素。
您还将学到以下属性:
background-size
background-origin
background-clip
CSS 多重背景
CSS 允许您通过 background-image
属性为一个元素添加多幅背景图像。不同的背景图像用逗号隔开,并且图像会彼此堆叠,其中的第一幅图像最靠近观看者。
下面的例子有两幅背景图像,第一幅图像是花朵(与底部和右侧对齐),第二幅图像是纸张背景(与左上角对齐):
<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
background-image: url(/images/img_flwr.gif), url(/images/paper.jpg);
background-position: right bottom, left top;
background-repeat: no-repeat, repeat;
padding: 15px;
}
</style>
</head>
<body>
<h2>多重背景</h2>
<p>下面的 div 元素有两副背景图像:</p>
<div id="example1">
<h2>欢迎来到成都</h2>
<p>成都,是四川省省会、副省级市、特大城市、成渝地区双城经济圈核心城市,国务院批复确定的中国西部地区重要的中心城市,国家重要的高新技术产业基地、商贸物流中心和综合交通枢纽。</p>
<p>成都地处中国西南地区、四川盆地西部、成都平原腹地,境内地势平坦、河网纵横、物产丰富、农业发达,属亚热带季风性湿润气候,自古有“天府之国”的美誉。</p>
</div>
</body>
</html>
多重背景图像可以使用单独的背景属性(如上所述)或 background
简写属性来指定。
下面的例子使用 background
简写属性(结果与上例相同):
<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
background: url(/images/img_flwr.gif) right bottom no-repeat, url(/images/paper.gif) left top repeat;
padding: 15px;
}
</style>
</head>
<body>
<div id="example1">
<h2>欢迎来到成都</h2>
<p>成都,是四川省省会、副省级市、特大城市、成渝地区双城经济圈核心城市,国务院批复确定的中国西部地区重要的中心城市,国家重要的高新技术产业基地、商贸物流中心和综合交通枢纽。</p>
<p>成都地处中国西南地区、四川盆地西部、成都平原腹地,境内地势平坦、河网纵横、物产丰富、农业发达,属亚热带季风性湿润气候,自古有“天府之国”的美誉。</p>
</div>
</body>
</html>
CSS 背景尺寸
CSS background-size
属性允许您指定背景图像的大小。
可以通过长度、百分比或使用以下两个关键字之一来指定背景图像的大小:contain
或 cover
。
下面的例子将背景图像的大小调整为比原始图像小得多(使用像素):
Lorem Ipsum Dolor
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
这是代码:
<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
border: 1px solid black;
background: url(/images/img_flwr.gif);
background-size: 100px 80px;
background-repeat: no-repeat;
padding: 15px;
}
#example2 {
border: 1px solid black;
background: url(/images/img_flwr.gif);
background-repeat: no-repeat;
padding: 15px;
}
</style>
</head>
<body>
<h2>background-size 属性</h2>
<p>被调整大小的 background-image:</p>
<div id="example1">
<h2>欢迎来到成都</h2>
<p>成都,是四川省省会、副省级市、特大城市、成渝地区双城经济圈核心城市,国务院批复确定的中国西部地区重要的中心城市,国家重要的高新技术产业基地、商贸物流中心和综合交通枢纽。</p>
<p>成都地处中国西南地区、四川盆地西部、成都平原腹地,境内地势平坦、河网纵横、物产丰富、农业发达,属亚热带季风性湿润气候,自古有“天府之国”的美誉。</p>
</div>
<p>background-image 的原始尺寸:</p>
<div id="example2">
<h2>欢迎来到武汉</h2>
<p>武汉,别称江城,是湖北省省会,中部六省唯一的副省级市,特大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽。</p>
<p>武汉地处江汉平原东部、长江中游,长江及其最大支流汉江在城中交汇,形成武汉三镇(武昌、汉口、汉阳)隔江鼎立的格局,市内江河纵横、湖港交织,水域面积占全市总面积四分之一。</p>
</div>
</body>
</html>
background-size
的其他两个可能的值是 contain
和 cover
。
contain
关键字将背景图像缩放为尽可能大的尺寸(但其宽度和高度都必须适合内容区域)。这样,取决于背景图像和背景定位区域的比例,可能存在一些未被背景图像覆盖的背景区域。
cover
关键字会缩放背景图像,以使内容区域完全被背景图像覆盖(其宽度和高度均等于或超过内容区域)。这样,背景图像的某些部分可能在背景定位区域中不可见。
下面的例子展示了 contain
和 cover
的用法:
<!DOCTYPE html>
<html>
<head>
<style>
.div1 {
border: 1px solid black;
height: 120px;
width: 150px;
background: url(/i/photo/img_flwr.gif);
background-repeat: no-repeat;
background-size: contain;
}
.div2 {
border: 1px solid black;
height: 120px;
width: 150px;
background: url(/images/img_flwr.gif);
background-repeat: no-repeat;
background-size: cover;
}
.div3 {
border: 1px solid black;
height: 120px;
width: 150px;
background: url(/images/img_flwr.gif);
background-repeat: no-repeat;
}
</style>
</head>
<body>
<h2>background-size 属性</h2>
<h2>background-size: contain:</h2>
<div class="div1">
<p>Lorem ipsum dolor sit amet.</p>
</div>
<h2>background-size: cover:</h2>
<div class="div2">
<p>Lorem ipsum dolor sit amet.</p>
</div>
<h2>background-size 未定义:</h2>
<div class="div3">
<p>Lorem ipsum dolor sit amet.</p>
</div>
<p>原始图像:</p>
<img src="/images/img_flwr.gif" alt="Flowers" width="224" height="162">
</body>
</html>
定义多个背景图像的尺寸
在处理多重背景时,background-size
属性还可以接受多个设置背景尺寸的值(使用逗号分隔的列表)。
下面的例子指定了三幅背景图像,每幅图像有不同的 background-size 值:
<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
background: url(/images/img_tree.gif) left top no-repeat, url(/images/img_flwr.gif) right bottom no-repeat, url(/images/paper.jpg) left top repeat;
padding: 15px;
background-size: 50px, 130px, auto;
}
</style>
</head>
<body>
<div id="example1">
<h2>欢迎来到成都</h2>
<p>成都,是四川省省会、副省级市、特大城市、成渝地区双城经济圈核心城市,国务院批复确定的中国西部地区重要的中心城市,国家重要的高新技术产业基地、商贸物流中心和综合交通枢纽。</p>
<p>成都地处中国西南地区、四川盆地西部、成都平原腹地,境内地势平坦、河网纵横、物产丰富、农业发达,属亚热带季风性湿润气候,自古有“天府之国”的美誉。</p>
</div>
</body>
</html>
全尺寸背景图像
现在,我们希望网站上的背景图像始终覆盖整个浏览器窗口。
具体要求如下:
- 用图像填充整个页面(无空白)
- 根据需要缩放图像
- 在页面上居中图像
- 不引发滚动条
下面的例子显示了如何实现它:使用 <html> 元素(<html> 元素始终至少是浏览器窗口的高度)。然后在其上设置固定且居中的背景。最后使用 background-size 属性调整其大小:
<!DOCTYPE html>
<html>
<head>
<style>
html {
background: url(/images/img_man.jpg) no-repeat center fixed;
background-size: cover;
}
body {
color: white;
}
</style>
</head>
<body>
<h2>完整页面的背景图像</h2>
<p>成都地处中国西南地区、四川盆地西部、成都平原腹地,境内地势平坦、河网纵横、物产丰富、农业发达,属亚热带季风性湿润气候,自古有“天府之国”的美誉。</p>
</body>
</html>
Hero Image
您还可以在 <div> 上使用不同的背景属性来创建 Hero Image(带有文本的大图像),并将其放置在您希望的位置上。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
}
.hero-image {
background: url(/images/img_man.jpg) no-repeat center;
background-size: cover;
height: 500px;
position: relative;
}
.hero-text {
text-align: center;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
}
</style>
</head>
<body>
<div class="hero-image">
<div class="hero-text">
<h2 style="font-size:50px">我是马斯克</h2>
<h3>我是一位摄影师</h3>
<button>聘请我吧</button>
</div>
</div>
<p>页面内容..</p>
<p>请注意,这项技术会将使图像响应:请调整浏览器窗口的大小来查看效果。</p>
</body>
</html>
CSS background-origin 属性
CSS background-origin
属性指定背景图像的位置。该属性接受三个不同的值:
- border-box - 背景图片从边框的左上角开始
- padding-box -背景图像从内边距边缘的左上角开始(默认)
- content-box - 背景图片从内容的左上角开始
下面的示例展示了 background-origin
属性:
<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
border: 10px solid black;
padding: 35px;
background: url(/images/img_flwr.gif);
background-repeat: no-repeat;
}
#example2 {
border: 10px solid black;
padding: 35px;
background: url(/images/img_flwr.gif);
background-repeat: no-repeat;
background-origin: border-box;
}
#example3 {
border: 10px solid black;
padding: 35px;
background: url(/images/img_flwr.gif);
background-repeat: no-repeat;
background-origin: content-box;
}
</style>
</head>
<body>
<h2>background-origin 属性</h2>
<p>未设置 background-origin (padding-box 为默认):</p>
<div id="example1">
<h2>欢迎来到上海</h2>
<p>上海,简称“沪”或“申”,是中华人民共和国省级行政区、直辖市、国家中心城市、超大城市、上海大都市圈核心城市,国务院批复确定的中国国际经济、金融、贸易、航运、科技创新中心。</p>
<p>上海地处中国东部、长江入海口、东临东中国海,北、西与江苏、浙江两省相接。</p>
</div>
<p>background-origin: border-box:</p>
<div id="example2">
<h2>欢迎来到成都</h2>
<p>成都,是四川省省会、副省级市、特大城市、成渝地区双城经济圈核心城市,国务院批复确定的中国西部地区重要的中心城市,国家重要的高新技术产业基地、商贸物流中心和综合交通枢纽。</p>
<p>成都地处中国西南地区、四川盆地西部、成都平原腹地,境内地势平坦、河网纵横、物产丰富、农业发达,属亚热带季风性湿润气候,自古有“天府之国”的美誉。</p>
</div>
<p>background-origin: content-box:</p>
<div id="example3">
<h2>欢迎来到武汉</h2>
<p>武汉,别称江城,是湖北省省会,中部六省唯一的副省级市,特大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽。</p>
<p>武汉地处江汉平原东部、长江中游,长江及其最大支流汉江在城中交汇,形成武汉三镇(武昌、汉口、汉阳)隔江鼎立的格局,市内江河纵横、湖港交织,水域面积占全市总面积四分之一。</p>
</div>
</body>
</html>
CSS background-clip 属性
CSS background-clip
属性指定背景的绘制区域。该属性接受三个不同的值:
- border-box - 背景绘制到边框的外部边缘(默认)
- padding-box - 背景绘制到内边距的外边缘
- content-box - 在内容框中绘制背景
下面的例子展示了 background-clip
属性:
<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
border: 10px dotted black;
padding: 35px;
background: yellow;
}
#example2 {
border: 10px dotted black;
padding: 35px;
background: yellow;
background-clip: padding-box;
}
#example3 {
border: 10px dotted black;
padding: 35px;
background: yellow;
background-clip: content-box;
}
</style>
</head>
<body>
<h2>background-clip 属性</h2>
<p>No background-clip (border-box is default):</p>
<div id="example1">
<h2>欢迎来到上海</h2>
<p>上海,简称“沪”或“申”,是中华人民共和国省级行政区、直辖市、国家中心城市、超大城市、上海大都市圈核心城市,国务院批复确定的中国国际经济、金融、贸易、航运、科技创新中心。</p>
</div>
<p>background-clip: padding-box:</p>
<div id="example2">
<h2>欢迎来到成都</h2>
<p>成都,是四川省省会、副省级市、特大城市、成渝地区双城经济圈核心城市,国务院批复确定的中国西部地区重要的中心城市,国家重要的高新技术产业基地、商贸物流中心和综合交通枢纽。</p>
</div>
<p>background-clip: content-box:</p>
<div id="example3">
<h2>欢迎来到武汉</h2>
<p>武汉,别称江城,是湖北省省会,中部六省唯一的副省级市,特大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽。</p>
</div>
</body>
</html>
CSS 高级背景属性
属性 | 描述 |
---|---|
background | 用于在一条声明中设置所有背景属性的简写属性。 |
background-clip | 规定背景的绘制区域。 |
background-image | 为一个元素指定一幅或多幅背景图像。 |
background-origin | 规定背景图像的放置位置。 |
background-size | 规定背景图像的大小。 |