再看 background
众里寻她千百度,蓦然回首,那人却在灯火阑珊处!
OverView
background 是CSS里其中一个使用频率极高的复合属性。除了简写与默认值,更重要的是它的一些巧妙用法,比如 CSS sprites 和 gradient的运用。来看看background 一般的简写模式为:
background: url("path/to/image.png") top left no-repeat fixed #000;
等价于:
background: url("path/to/image.png") top left / cover no-repeat fixed content-box content-box #000
格式就是:
<bg-image> || <position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box> || <'background-color'>
分别是以下属性的简写:
- background-image: none
- background-position: 0% 0%
- background-size: auto auto
- background-repeat: repeat
- background-attachment: scroll
- background-origin: padding-box
- background-clip: border-box
- background-color: transparent
注意:设置多张背景时, 除了background-color外的独立属性,其他都可以在属性列表里分别指定。background-color只能放在最后一个列表里,或者单独显示指定。
基础
background-attachment 决定背景是在视口中固定的还是跟随包含它的区块滚动的。值:
scroll | fixed | local
background-clip 设置元素的背景(背景图片或颜色)是否延伸到边框。 值:
border-box | padding-box | content-box
background-color 会设置元素的背景色。值:
`
background-origin 指定背景图片background-image属性的原点位置的背景相对区域。值:
border-box | padding-box | content-box
注意:当使用 background-attachment 为fixed时,该属性将被忽略不起作用。
background-position 指定背景图片的初始位置,参考起点是以background-origin而言的,它的值可以是百分比,像素值(包括负值),遵循缺省值的规则。
Note that the position can be set outside of the element’s box.
background-repeat 指定背景图片是否以平铺效果重复出现,以及重复的方式。可能值有: repeat-x | repeat-y | repeat | no-repeat
,遵循缺省值的规则。
background-size 设置背景图片大小
除了默认值auto和声明的大小值,还有两个关键字:
cover
:缩放背景图片以完全覆盖背景区,可能背景图片部分看不见。contain
:缩放背景图片以完全装入背景区,可能背景区部分空白。
background-image 指定一个或多个背景图,值none | url()
。 多个背景图片,即为背景图片的叠加,后面声明的将会别叠在后面。
background-image 上可以指定渐变:
-
CSS linear-gradient() 函数创建了一个呈现线性渐变颜色。
当颜色中间点的位置被隐式定义,它被放置在位于它之前的点和位于它之后的点之间的中间位置处。 利用
<length>
或者<percentage>
数据类型可以显示定义一个位置。语法:linear-gradient( [ <angle> | to <side-or-corner> ,]? <color-stop> [, <color-stop>]+ )
若要实现重复的线性渐变色,可以使用repeating-linear-gradient:
repeating-linear-gradient( [ <angle> | to <side-or-corner> ,]? <color-stop> [, <color-stop>]+ )
-
CSS radial-gradient() 方法用来展示由原点(渐变中心)辐射开的颜色渐变, 边缘形状只能为圆形或者椭圆形。语法:
radial-gradient( [ circle || <length> ] [ at <position> ]? , | [ ellipse || [<length> | <percentage> ]{2}] [ at <position> ]? , | [ [ circle | ellipse ] || <extent-keyword> ] [ at <position> ]? , | at <position> , <color-stop> [ , <color-stop> ]+ )
实现重复的径向渐变 repeating-radial-gradient
repeating-radial-gradient( [[ circle || <length> ] [at <position>]? , | [ ellipse || [<length> | <percentage> ]{2}] [at <position>]? , | [[ circle | ellipse ] || <extent-keyword> ] [at <position>]? , | at <position>, <color-stop> [ , <color-stop> ]+ )
技巧
sprites
雪碧图的使用方式有:
-
百分比
background-position 百分比计算方式:
- (容器的宽度 - 图片的宽度) * X轴百分数, 超出的部分隐藏
- (容器的高度 - 图片的高度) * Y轴百分数, 超出的部分隐藏
关注垂直方向,那么对于一个元素容器和一个垂直排列的sprites 图片,就可以设置元素
backgrond-size: 100% auto;
。 水平方向同理。对于
background-position: 100% 100%;
而言,就是表示这里的雪碧图底部边缘啦~ -
负向定位
由于可以通过
background-postion
定位到盒子元素的外面,即可以为负值,此时图片沿X轴或Y轴负方向移动相应的大小。 -
svg sprites
通过url上的hash值定位到SVG的
<symbol>
标签的id值,也可以显示相应的图片,比起iconfont更容易管理和制作。
gradient
然而,对于CSS3新秀gradient(线性和径向)来说,完全可以实现图片(png,base64等)的效果。
在background-image设置渐变gradient的同时,再结合 background-size, background-clip, background-repeat 改变一些特性实现。
当然可以设置多背景(前面的背景总是被叠在前面)的渐变 或 重复的渐变。叠加的结果总是会出现神奇的效果。
Other
CSS4 (目前[2016]依然处于起草阶段) 里的圆锥渐变Conical Gradients