[toc]
## background-image
### 生效前提
虽然说的是生效前提,但其实是生效了只是不可见
background的url并**不像**img的src一样,引入图片后,宿主元素大小会自动变为图片大小。
background的url引入图片后元素大小并不会发生改变。
这意味着,你要想在一个元素中看见背景图片,这个图片的高度不能为0
![](https://box.kancloud.cn/977268788329898700b7ff068b1a4bc0_692x308.png)
### 默认表现
1. 平铺,且是横竖都平铺
![](https://box.kancloud.cn/8a689360e0f23443573fb8df92a37a8c_473x347.png)
2. 页面滚动时,宿主元素随之滚动,其内的图片背景当然得也会和宿主元素**一起**滚动
## background-position
![](https://box.kancloud.cn/2226c5fa39392d5426dfcaa6acaa60d2_816x520.png)
### 基准
position都是按照元素的左上原点进行计算的
#### background-origin
默认基准是宿主元素的`padding-box`
还支持:`border-box`、`content-box`
![](https://box.kancloud.cn/779444c651b27d25eccda942de9c2e4f_689x364.png)
#### background-clip
So,background-clip刚好解决上面没有被裁剪的问题
它也有三个值:`padding-box`、`content-box`、`border-box`
![](https://box.kancloud.cn/2e429940e51591f31ba68648f1d0f890_665x322.png)
##### text
Chrome下还有个text值,就是按照文本进行背景图裁剪
配合Chrome的`text-fill-color:transparent`能制作背景图片填充文本的效果(`color:transparent`也行)
```
-webkit-background-clip:text;
color:transparent;
/* -webkit-text-fill-color:transparent; */
```
![](https://box.kancloud.cn/ebd58aba8cfcba1b593e910a54bfd045_605x205.png)
### 值
background-position值支持1~4个值,2个值是标准用法,多的两个值一般是在使用关键字值时对关键字值进行**修饰**
这1~4个值可以是具体数值,也可以是百分比值,还可以是left、top、right、center和bottom等关键字
>ie8ie8以下值支持2个值
```
background-position:left bottom; //支持关键字
background-position:bottom left; //可交换
background-position:0% 100%; //支持百分比
background-position:left 元素的高度px //支持px;可混用
```
以上情况就是2个值的使用方式,他们的效果是等价的
除此之外,我们也可以**只**使用一个值
```
background-position:left;
```
此时等价于
```
background-position:left center;
```
So,必须有2个值,省略的话就认为是center(50%)
除此之外也有用到3~4个值的情况,此时一般是对使用的关键字值进行修饰
```
background-position:left 100px top 100px;
```
![](https://box.kancloud.cn/72003ab7cbadfdc34770557ec3fed7f4_576x213.png)
#### 关于百分比值
```
background-position:left 100% top;
```
并不会让背景图片超出容器
![](https://box.kancloud.cn/8271822d898c37691dd53e08411ee4be_728x223.png)
这是因为背景图的位置是按照如下公式计算的
```
positionX = (容器的宽度-图片的宽度) * percentX;
positionY = (容器的高度-图片的高度) * percentY;
```
>[danger] 即使值是一个负值,也是按照上面的公式计算
![](https://box.kancloud.cn/2ec67fc921ea90234bbdaf460ce829ff_605x204.png)
(设置`center,center`会发现和我们预想的不一样,这是因为center也是按照百分比值进行计算的,也就是按照剩余空间进行计算)
## background-attachment
默认情况下, 页面滚动时,宿主元素随之滚动,其内的图片背景当然得也会和宿主元素**一起**滚动。
但如果将值置为`fixed`,那么背景图片的表现就会像position:fixed一样(不会随着页面滚动而滚动),
此时背景图片就相当于给视口设置,背景图片会在视口上横竖平铺,**且**只会平铺一个视口大小(不论原宿主元素的大小是多大或多小)
但背景图的可见范围只有宿主元素那么大(就像扣了一个洞)
![](https://box.kancloud.cn/754c47028f09784988c6401809ab48d0_708x395.png)
So,一般我们只会给html或则body元素这样设置
## background-repeat
默认为横竖平铺
支持的值有:`repeat`、`repeat-x`、`repeat-y`、`no-repeat`
## background-color
不存在background-image时,就会显示background-color的设置
![](https://box.kancloud.cn/4be4cc1ea46338965a69adf26b873d02_272x215.png)
## background-size
### 默认值auto
也就是图片原本的宽高
### 数值和百分比值
数值和百分比值默认需要两个值,但也可以只设置一个值,那么另外一个值就会为auto,也就是按照图片原本的宽高比等比例计算求出这个值。
![](https://box.kancloud.cn/f310ab1ba5fc4fe80348f5547c50bb7e_604x203.png)
除此之外百分比值是**相对**于**宿主元素**而不是图片本身
![](https://box.kancloud.cn/3d7ba8b098f9822fdb756e71d44d2857_603x201.png)
### cover
将背景图片**放大**(或缩小),以铺满整个容器。这种方法很大可能会导致图片失真。
手动测试以后,貌似发现不是失真(或则说失真的意思其实是模糊?),而是截取?
![](https://box.kancloud.cn/b633fe8acf815b297d5036d451a1f481_601x201.png)
#### cover和center
background-size:cover常用来配合background-position:center来制作满屏背景效果
### contain
保持图片本身比例,将背景图**缩放**(或放大)到宽度或高度正好适应所定义背景容器的区域。
![](https://box.kancloud.cn/79c6ea471a7e65f1ecac33f310b89f3c_606x206.png)
## background-break
仅firefox,详见手册
## 多背景
多个背景之间用`,`分隔,并且一个宿主元素background-color只能存在一个
```
backround:[background-image]|[background-position][/background-size]|[background-repeat]|[background-attachment]|[backgorund-clip]|[background-origin],*
```
- 空白目录
- 未处理
- webpack中的css模块化
- CSS预处理器
- 效果
- 元素装饰与美化
- 颜色
- checkbox
- img
- background
- clip-path
- 字体
- 文本控制
- text-indent
- letter-spacing
- word-spacing
- word-break和word-wrap
- white-space
- text-align
- text-decoration
- text-transform
- first-letter
- first-line
- 有关CSS百分单位的那些奇葩事儿
- 破坏性、包裹性、块状化
- 强大的absolute
- padding
- relative
- 继承性
- fixed
- float
- BFC
- z-index
- overflow
- clip
- 最佳可访问性隐藏
- 关于scrollHeight/Width
- 包含块
- margin
- 布局系统
- 杂
- Flex
- Grid
- 自定义布局系统
- gutter实现思路
- 选择器
- 伪元素和伪类
- css3
- appearance
- CSS2.1
- tmp
- 未定义行为
- 焦点元素
- outline轮廓
- 替换元素
- 盒子模型
- 块级元素/盒子
- 标记盒子
- 容器盒子(内在盒子)
- 内联元素/盒子
- 字母X
- line-height
- vertical-align
- font-size
- 内联元素盒子模型新解
- line-height定义
- line-height与行内框盒子模型
- line-height与内联元素的高度机制
- line-height值
- line-height与图片
- vertical-align支持的属性值及组成
- vertical-align起作用前提
- vertical-align与图片
- vertical-align与line-height
- vertical-align前后不一的行为表现
- vertical-align实际应用
- line-height与height
- width/height与auto
- 最小内容宽度
- 最大内容宽度
- min/max-width/height注意事项
- 流:外部尺寸与内部尺寸
- 流体布局下的宽度分离原则
- height:auto
- 浏览器渲染原理
- 移动端