第4章 CSS3背景

CSS3背景属性简介

背景主要包括5个属性:

❏background-color 背景颜色

❏background-image 背景图片

❏background-repeat 背景图片展示方式

❏background-attachment 背景图片是固定还是滚动

❏background-position 背景图片位置

可以单独写,也可以将这些属性串在一起使用:

background:[<background-color>][,<background-image>][,<background-repeat>][,<background-attachment>][,<background-position>]

1.background-color属性

background-color:transparent || <color>

默认是“transparent”,<color>颜色格式如下:

颜色名:如“red”
rgb色:如rgb(255,0,0)或rgb(100%,0%,0%)
hls值:如hsl(0,100%,50%)
十六进制值:如#ff0000
rgba色:如rgba(255,0,0,0.3)
hlsa值:如hsla(0,100%,50%,0.5)

2.background-image属性

background-image:none || <url>

默认值为“none”,<url>可以是相对或绝对地址。

3.background-repeat属性

background-repeat:repeat || repeat-x || repeat-y || no-repeat

用来设置元素背景图片在元素的盒子模型中的铺放格式。

默认值为repeat:背景图片沿元素的X轴和Y轴同时平铺。
repeat-x:元素背景图片沿X轴平铺,Y轴不进行任何铺放。
repeat-y:元素背景图片沿Y轴平铺,X轴不进行任何铺放。
no-repeat:背景图片不做任何铺放。

4.background-attachment属性

background-attachment:scroll || fixed

用来设置元素背景图片是否或者随着页面的其余部分滚动。

默认值scroll:背景图片会随着浏览器滚动条一起滚动。
fixed:背景图片固定不动。一般用在html或body标签上,在其他标签上不能达到固定效果!

5.background-position属性

background-position:<percentage>||<length>||[left|center|right] [,top|center|bottom]

用来设置元素背景图片的位置,其默认值为 (0,0) || (0%,0%) || (left top)。

下图是不同表述同一布局的几种方式:

与背景相关的新增属性:

❏background-origin:指定绘制背景图片的起点。

❏background-clip:指定背景图片的显示范围。

❏background-size:指定背景图片的尺寸大小。

❏background-break:指定内联元素的背景图片进行平铺的循环方式。

背景原点属性

background-origin:padding-box || border-box || content-box
padding-box(padding):默认值,决定background-position起始位置从padding的【外边缘】(border的内边缘)开始显示背景图片。
border-box(border):决定background-position起始位置从border的【外边缘】开始显示背景图片。
content-box(content):决定background-position起始位置从content的【外边缘】(padding的内边缘)开始显示背景图片。
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>background-origin使用方法</title>
    <style type="text/css">
        div {
            width: 300px;
            height: 200px;
            border: 20px dashed rgba(0,0,0,0.3);
            background: orange url(bg.png) no-repeat left top;
            padding: 20px;
            margin: 30px;
        }
        .padding-box {
            -webkit-background-origin: padding-box;
            -moz-background-origin: padding-box;
            -o-background-origin: padding-box;
            -ms-background-origin: padding-box;
            background-origin: padding-box;
        }
        .border-box {
            -webkit-background-origin: border-box;
            -moz-background-origin: border-box;
            -o-background-origin: border-box;
            -ms-background-origin: border-box;
            background-origin: border-box;
        }
        .content-box {
            -webkit-background-origin: content-box;
            -moz-background-origin: content-box;
            -o-background-origin: content-box;
            -ms-background-origin: content-box;
            background-origin: content-box;
        }
    </style>
</head>
<body>
<div class="padding-box"></div>
<div class="border-box"></div>
<div class="content-box"></div>
</body>
</html>

padding-box:从padding外边缘开始;border-box:从border外边缘开始;content-box:从content外边缘开始。

虽然现代浏览器都支持background-origin属性,但在不同浏览器下还是需要浏览器各自的前缀,如下表:

背景裁切属性

background-clip:border-box || padding-box || content-box
————————————————————————————————————————————————————————
border-box:默认值,元素背景图像从元素的border区域向外裁剪,即元素边框之外的背景图片都将被裁剪掉。
padding-box:元素背景图像从padding区域向外裁剪,即元素padding区域之外的背景图像都将被裁剪掉。
content-box:元素背景图像从content区域向外裁剪,即元素内容区域之外的背景图像将被裁剪掉。

•当元素的background-repeat为no-repeat时,background-color是从元素的边框左上角到边框右下角止,而background-image却不一样,从内部补白(padding)边缘的左上角到元素边框(border)的右下角边缘止。

•当元素background-repeat的值为repeat时,background-color此时完全在background-image之下,而且background-image从元素边框左上角起到元素边框右下角止,但background-position的起始点却是从元素的内部补白(padding)外边缘开始!!!

z-index层次关系,从上到下:border、background-image、background-color

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>background的默认显示</title>
    <style type="text/css">
        div {
            width: 300px;
            height: 100px;
            border: 50px dashed rgba(0,0,0,0.8);
            background: rgba(0,25,25,0.8) url(border.jpg) no-repeat;
            padding: 30px;
            margin: 20px;
        }
        .no-repeat {
            background-repeat: no-repeat;
        }
        .repeat {
            background-repeat: repeat;
        }
    </style>
</head>
<body>
<div class="no-repeat"></div>
<div class="repeat"></div>
</body>
</html>

background默认显示,即background-clip:border-box

   去掉background:url属性值后:

从运行效果图也可印证上文逻辑:

上面一张,no-repeat:背景设置是从border内边缘左上角到border右下角。背景图片不做任何铺放。border之外背景图被裁剪。

下面一张,repeat:背景设置是从border外边缘左上角到border右下角。background-image覆盖在background-color之上。background-position是从border内边缘左上角开始的,然后背景图片沿元素的X轴和Y轴同时平铺。border之外背景图被裁剪。

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>background-clip使用方法</title>
    <style type="text/css">
        div {
            width: 200px;
            height: 100px;
            border: 30px dashed rgba(25,25,125,0.5);
            background: orange url(border.jpg) no-repeat;
            margin: 20px;
            padding: 30px;
        }
        .border-box {
            -webkit-background-clip: border-box;
            -moz-background-clip: border-box;
            -o-background-clip: border-box;
            -ms-background-clip: border-box;
            background-clip: border-box;
        }
        .padding-box {
            -webkit-background-clip: padding-box;
            -moz-background-clip: padding-box;
            -o-background-clip: padding-box;
            -ms-background-clip: padding-box;
            background-clip: padding-box;
        }
        .content-box {
            -webkit-background-clip: content-box;
            -moz-background-clip: content-box;
            -o-background-clip: content-box;
            -ms-background-clip: content-box;
            background-clip: content-box;
        }
    </style>
</head>
<body>
<div class="border-box"></div>
<div class="padding-box"></div>
<div class="content-box"></div>
</body>
</html>

border-box:no-repeat:图片从border内边缘左上角开始到border右下角,并且在background-color(orange)之上在border之下。超出border的全部裁剪掉。

padding-box:直接将padding外的全部裁剪掉。

content-box:直接将content外的全部裁剪掉。

background-clip的text属性:

它配合Webkit内核的私有属性text-fill-color:transparent可以制作背景图片填充文本的效果:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>背景图片填充文本效果</title>
    <style type="text/css">
        div {
            width: 350px;
            background: orange url(border.jpg);
            padding: 20px;
            color:#fff;
            font-size: 60px;
            font-weight: bold;
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
    </style>
</head>
<body>
<div>背景图片填充文本效果<br />BACKGROUND</div>
</body>
</html>

       border.jpg:

事实上background:orange与color:#fff去掉效果也是一样。首先填充的url(border.jpg)覆盖了background-color,同样url(border.jpg)也覆盖了文本color。

如果去掉url(border.jpg),则字体颜色为orange。

background-clip各浏览器私有属性前缀如下表:

background-origin与background-clip的属性取值范围相同,但它们区别如下:

❏background-origin:用来控制元素背景图片定位点(background-position)的起始位置。

❏background-clip:用来控制元素背景图片(background-image)的展示区域。

背景尺寸属性

background-size:auto || <length> || <percentage> || cover || contain
————————————————————————————————————————————————————————————————————
auto:默认值。将保持背景图片原始高度和宽度。
<length>:取具体的整数值,将改变背景图片的大小。
<percentage>:取值为百分值,同样改变背景图片的大小。但此值是相对于【元素的宽度】来进行计算,并不是根据背景图片的宽度来进行计算。
cover:将背景图片放大,以适合铺满整个容器。这种方法会致使背景图片失真。
contain:保持背景图片本身的宽高比例,将背景图像缩放到宽度或高度正好适应所定义背景容器的区域。

当background-size只取一个值时,指定了背景图片的宽度,第二个值相当于auto,也就是让背景图片高度自动地按比例缩放。

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>background-size的运用</title>
    <style type="text/css">
        div {
            width: 50px;
            height: 50px;
            border: 1px solid red;
            background: url(bg.jpg) no-repeat;
            background-size: contain;
        }
    </style>
</head>
<body>
<div></div>
</body>
</html>

  bg.jpg尺寸为100×50px

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>background-size的运用</title>
    <style type="text/css">
        div {
            width: 320px;
            height: 270px;
            border: 1px solid red;
            background: url(bg.jpg) no-repeat;
            background-size: cover;
        }
    </style>
</head>
<body>
<div></div>
</body>
</html>

内联元素背景图像平铺循环方式

任何不是块级元素的可见元素都是内联元素。其表现的特性是“行布局”形式(行布局:其表现形式始终以行进行显示)。

可惜2014.7为止background-break属性仅属于Firefox浏览器,而且其属性要写成“-moz-background-inline-policy”。

background-break三个属性值分别如下:

❏bounding-box:背景图像在整个内联元素中进行平铺。

❏each-box:背景图像在行内中进行平铺。

❏continuous:下一行的背景图像紧接着上一行中的图像继续平铺。

background-break属性受限于浏览器的支持力度,目前使用度极低,仅在Firefox下能实现,而且还需要修改属性写法,在此仅供大家参考。

多背景属性

background:[background-image]|[background-position][/background-size]|
           [background-repeat]|[background-attachment]|
           [background-clip]|[background-origin],*
————————————————————————————
可以把上面的缩写拆解成以下形式:
background-image: url1,url2,...,urlN;
background-repeat: repeat1,repeat2,...,repeatN;
background-position: position1,position2,...,positionN;
background-size: size1,size2,...,sizeN;
background-attachment: attachment1,attachment2,...,attachmentN;
background-clip: clip1,clip2,...,clipN;
background-origin: origin1,origin2,...,originN;
background-color: color;

background-image需要设置多个,面其他属性可以选择一个或多个,如果一个元素有多个背景图片,其他属性只有一个属性值时,表示所有背景图像应用了相同的属性值。background-color只能设置一个,否则语法错误。

实战体验:制作花边框

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>CSS3多背景制作花边框</title>
    <style type="text/css">
        .demo {
            width: 240px;
            border: 20px solid rgba(104, 104, 142,0.5);
            border-radius: 10px;
            padding: 80px 60px;
            color: #f36;
            font-size: 25px;
            line-height: 1.5;
            text-align:center;
        }
        .multipleBg {
            background: 
                    url("bg-tl.png") no-repeat left top,
                    url("bg-tr.png") no-repeat right top,
                    url("bg-bl.png") no-repeat left bottom,
                    url("bg-br.png") no-repeat right bottom,
                    url("bg-repeat.png") repeat left top;
            /*改变背景图片的position起始点,四朵花都是border边缘处起,而平铺背景是在paddin内边缘起*/
            -webkit-background-origin: border-box, border-box,border-box,border-box,padding-box;
            -moz-background-origin: border-box, border-box,border-box,border-box,padding-box;
            -o-background-origin: border-box, border-box,border-box,border-box,padding-box;
            background-origin: border-box, border-box,border-box,border-box,padding-box;
            /*控制背景图片的显示区域,所有背景图片超边border外边缘都将被剪切掉*/
            -moz-background-clip: border-box;
            -webkit-background-clip: border-box;
            -o-background-clip: border-box;
            background-clip: border-box;
        }
    </style>
</head>
<body>
<div class="demo multipleBg">我使用了五张背景图片。制作这样的效果</div>
</body>
</html>

使用的五张背景图片分别如下:

bg-tl.png:

bg-tr.png:

bg-bl.png:

bg-br.png:

bg-repeat.png:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值