CSS background 元素背景图用法全解

笔记哥 / 04-10 / 35点赞 / 0评论 / 688阅读
background 可设置背景色、渐变、背景图等,本文主要讲解背景图片的用法。 背景顾名思义就是背后的景色,始终居于元素背后,元素永远站在背景的身前。 本文示例中所使用的图片: ![](https://cdn.res.knowhub.vip/c/2504/10/fd6666a9.png?G1UAAMR0rnGCHsdn3UYcqgkCCTQDFWkElXrW6z1n7Vvk%2b41g8s9ofdr%2b8IvWp0nWAq1CMCPBhQBoViKV4AKvSFZV9WsY) ## background 背景 background 此属性是一个简写,其包含的内容有点多: `background-clip` 设置裁剪显示区域 `background-color` 设置背景颜色 `background-image` 设置背景图片 `background-origin` 设置背景原点位置 `background-position` 设置背景图片初始位置 `background-repeat` 设置背景图片重复方式 `background-size` 设置背景图片尺寸 `background-attachment` 设置背景图片是否随页面滚动 可以在一次声明中定义一个或多个属性背景相关的值。 ### 设置背景色 `background-color: #ccc;` 等同于 `background: #ccc;` ![](https://cdn.res.knowhub.vip/c/2504/10/1c1df62b.png?G1UAAETn9LwUaEDHvtMdbIlTE20GKtIIKvWs13vO2jfR9wcYmp%2fR%2boz94RetzyDzwl4JDGNFCsLs5rgMNQmgbi4VeY0A) ### 设置背景图片 `background-image` ![](https://cdn.res.knowhub.vip/c/2504/10/b42b0db0.png?G1QAAMTW3Dgp9IhB22gDdWfqnTUDElUElXrW6%2fn%2ftS%2bi9wswSr5H6zP2hz%2b0PoPUK%2ftJYCgXJH8wu7qIoSaBQ9TM8hoB) 注意看边框之下还出现了一部分背景图,这便是背景重复与裁剪默认属性影响的。 ### 设置背景原点位置 `background-origin` 和 背景显示区域 `background-clip` 常用三个值: `padding-box` :背景摆放以 padding 区域为参考(默认值) `border-box` :背景摆放以 border 区域为参考 `content-box` :背景摆放以 content 区域为参考 以上值可能出现 0 次、1 次或 2 次。 如果出现 1 次,它同时设定 background-origin 和 background-clip。如下: ![](https://cdn.res.knowhub.vip/c/2504/10/78b7c970.png?G1QAAMTydJz4%2bwv0u406fJsoEpoBiSqCSj3r9Z6z9i3y%2fU4wxWe0Pn1%2f%2bEPr0yVbgVUhmJEQvAKWLWk1Br1QCisY13A%3d) 如果出现 2 次,第一次的出现设置 background-origin,第二次的出现设置 background-clip。如下: ![](https://cdn.res.knowhub.vip/c/2504/10/43289c0d.png?G1UAAMTW3DgpLwFG22gDdWfqnTUDFWkElXrW6%2fn%2ftS%2bi9wsGS75H6zP2h1%2b0PoPUDV6JwQpBCgVwdbF6WioHWxVzRV4jAA%3d%3d) 不同值的区别: ![](https://cdn.res.knowhub.vip/c/2504/10/5bc5246a.png?G1QAAMTsdJzIJ4Sm26hD2jvFHc2ARBVBpZ71es9Z%2byb6fhdIjs9offr%2b8IfWp5NagVUSiCIjeAZMTaVoDsxcJaWL4xoO) ### 设置背景图片初始位置 `background-position` 此属性可以使用关键字,也可以使用百分比,还可以是固定像素。 关键字 `center` = `50%` 、 `top` = `0%` 、 `left` = `0%` 、 `bottom` = `100%` 、 `right` = `100%` 注意:本例中使用了 `background-repeat: no-repeat;` 控制背景图片不重复,使用 `background-size: 60px;` 控制背景图片宽度为 60px。 **一个值用法** 关键字 `center`,用来居中背景图片。 ![](https://cdn.res.knowhub.vip/c/2504/10/90a321c3.png?G1QAAMTsdJzIS0Wk26hD2jvFHc2ARBVBpZ71es9Z%2byb6fmdwjs9offr%2b8IfWp5NYgSkxWJARfAJMTFSrhir5QinMcQ0H) 关键字 `top` 、 `left` 、 `bottom` 、 `right` 用来指定把这个背景图片放在哪一个边界,另一个维度被设置成 50% 也就是 center 。 ![](https://cdn.res.knowhub.vip/c/2504/10/5d729fd5.png?G1UAAETn9LyUgjDivtMdbIlTE20GKtIIKvWs13vO2jfR94dAND%2bj9Rn7wy9an0FWL1QngRgUKTAYAMStJIbCnAHOawQ%3d) **两个值用法** 一个定义水平方向 x 坐标,另一个定义垂直方向 y 坐标。 特别注意:使用关键字不分先后,浏览器会自动排序识别,比如 `top left` 和 `left top` 都是正确的。但使用百分比和固定像素时需注意,第一个值一定是 x 坐标,第二个值一定是 y 坐标。如果位置不对,浏览器会判断值无效,比如 `bottom 5%` 和 `5px left` 都是无效写法。 ![](https://cdn.res.knowhub.vip/c/2504/10/d8ee2390.png?G1UAAMTsdJzIJ4LoNuqQ9k5xp81ARRpBpZ71ev5%2fn4vo%2fVwgGu%2fZx%2fLz4Rd9LKfcClolgWQoQmAwgKSFa2CzpJYTLO7p) 使用固定像素: ![](https://cdn.res.knowhub.vip/c/2504/10/b7a97e59.png?G1UAAETn9LyUQgDnvtMdbIlTE20GKtIIKvWs13vO2jfR94dAND%2bj9Rn7wy9an0FWHbWQQAyKFBgMQB1sidkuL%2bZW8xoB) **三个值用法** 其中两个值是关键字值,第三个是前面值的偏移量。 比如 `left 10px bottom` 表示将背景图片放在左边 10px,距离底部 0px。 ![](https://cdn.res.knowhub.vip/c/2504/10/ad09d7a2.png?G1UAAMTydJz4%2b%2bsjuo06fJsoEpqBijSCSj3r9Z6z9i3y%2fU7Q4jNan74%2f%2fKL16ZJqRi1CMMEQgkIBJGQw6AVWssDiGg4%3d) 比如 `left bottom 10px` 表示将背景图片放在左边 0px,距离底部 10px。 ![](https://cdn.res.knowhub.vip/c/2504/10/af375c3e.png?G1UAAMTsdJzIJ5Wg26hD2jvFHc1ARRpBpZ71es9Z%2byb6fhdIis9offr%2b8IvWp5NWQ80kEEVCCAwGoGpWA5tqyRcKxzUc) **四个值用法** 第一个和第三个值是定义水平方向 x 和垂直方向 y 的关键字值,第二个和第四个值是前面 x 和 y 关键字值的偏移量。 比如 `right 10px bottom 20px` 表示将背景图片放在右边 10px,距离底部 20px。 ![](https://cdn.res.knowhub.vip/c/2504/10/5aaaa224.png?G1UAAMTW3DgpD0JF22gDdWfqnTYDFWkElXrW6917rpvo%2b0Mgmp9e24j14Re1jSDzA36SQAyKFBgMMFjdEktR08scefYA) ### 设置背景图片重复方式 `background-repeat` 其值可以是单值,也可以是双值,双值第一个值是水平方向 x 轴,第二个值是垂直方向 y 轴。 | 单值 | 等价于双值 | | --- | --- | | repeat-x 重复水平 x 轴 | repeat no-repeat | | repeat-y 重复垂直方向 y 轴 | no-repeat repeat | | repeat 水平和垂直方向都重复 | repeat repeat | | space 重复并且使用间距填充 | space space | | round 重复并且进行缩放 | round round | | no-repeat 不重复 | no-repeat no-repeat | **四种常见用法:** ![](https://cdn.res.knowhub.vip/c/2504/10/7d7597f7.png?G1UAAMTsdJzIJxKq26hD2jvFHc1ARRpBpZ71es9Z%2byb6fheIxme0Pn1%2f%2bEXr08lqRi0kEIMiBAYDjJKRAieFFNiFuIYD) **space** 背景也会重复显示,但会保证最后一个背景图完整显示,多出来的空间重复元素之间会留白,比如: ![](https://cdn.res.knowhub.vip/c/2504/10/c9a21f93.png?G1UAAER17rxgXWEqfice0wSBBJqBijSCSj3r9e491y3y%2fU4wx6fXNnx9%2bEVtw8XKgXIKQUNGCAoFVIlsgSAsXQrE2R0%3d) 如图蓝色区域便是重复元素之间的留白。 **round** 背景也会重复显示,也会保证最后一个背景图完整显示,如果有多出来的空间,则背景图进行缩放显示,比如: ![](https://cdn.res.knowhub.vip/c/2504/10/41a6cc07.png?G1QAAETn9LyUwkDivtMdbIlTE20GJKoIKvWs13vO2jfR94dAND%2bj9Rn7wx9an0FWC6qTQAyK5BkMMLtdmtxQBBDkNQI%3d) space 、 round 、 repeat 三种方式对比: ![](https://cdn.res.knowhub.vip/c/2504/10/8caad956.png?G1UAAER17rxgXd1U%2fE48pgkCCTYDFWkElXrW6%2fn%2fuS6R9wuClu9e24j14Re1jRAvO8ohBB2GFBQKKOmwpNzU%2fDQyzx4%3d) ### 设置背景图片尺寸 `background-size` 其值也可以一个值或两个值,只有一个值时,第二个值会默认为 `auto` ,比如 `background-size: 60px;` 等价于 `background-size: 60px auto;`。 ![](https://cdn.res.knowhub.vip/c/2504/10/4e6bf4e3.png?G1UAAMT0bJzotdDUNvqh%2f4lHQjNQkUZQqWe93nv3aUTf7wLJ8Zl9LD8fftHHcipWYUoCKcgIgcEAJ5jVwKKairKluKcD) `cover` 等比缩放背景图片以完全覆盖盒子,长宽至少有一面能完全展示,可能背景图片有部分看不见。如下便是宽度完全展示,高度被裁切了: ![](https://cdn.res.knowhub.vip/c/2504/10/c3879b88.png?G1QAAETn9LyUwkTCvtMdbIlTE20GJKoIKvWs13vO2jfR94dASn5G6zP2hz%2b0PoPUK9xIIIqC5BkM8KUsmsQcVh2c1wg%3d) `contain` 等比缩放背景图片让盒子完全能装下整个背景图,长宽都能完全展示,可能盒子背景会部分空白。如下宽高都完全显示,由于等比缩放,所以宽度出现了留白: ![](https://cdn.res.knowhub.vip/c/2504/10/8896af0b.png?G1QAAMTsdJzIJ02g26hD2jvFHc2ARBVBpZ71es9Z%2byb6fheIxme0Pn1%2f%2bEPr08lqQs0kEIMieAYDrIpkIZdLinK2uIYD) ### 设置背景图片是否随页面滚动 `background-attachment` `background-attachment: fixed;` 相对于浏览器窗口固定,不随内容滚动,如下: ![](https://cdn.res.knowhub.vip/c/2504/10/bb5dd9f3.gif?G1QAAMS25fNVnqZF%2fZ4N5oK2BtUMSFQRVOpZr%2becfzei8bpANF5fn8v3hz%2f0uZysZtRCAjEogmcwWFjNOHAqnJCrRh83) `background-attachment: local;` 会随着内容滚动,像是内容一部分一样,如下: ![](https://cdn.res.knowhub.vip/c/2504/10/0da28cf2.gif?G1QAAMTc2vOl205nrt%2fToCVYBtoMSFQRVOpZr2fvf51E%2fXUwcry%2bNqavD39oYzqpFbaDwFDOCF5YWAC2VENVhaEIovcb) `background-attachment: scroll;` 相对于元素本身固定,而不随着内容滚动,如下: ![](https://cdn.res.knowhub.vip/c/2504/10/ea1c7a8e.gif?G1QAAMTc2vOlO6dzrd%2fToCVYBtoMSFQRVOpZr2fvf51E%2fXUGl3h9bUxfH%2f7QxnQSqzAlBgsKgk9ISMwHRINJzQpjjd5v) ## 多个背景图片使用方法 在古老的过去,背景图是不允许使用多张图片的,如果使用多个背景图必须使用多个盒子元素,后来 CSS3 的引入了新的规范,允许一个盒子元素使用多张背景图片。使用方法如下: ```csharp .box { background: no-repeat center/80% url('./0.png'), no-repeat bottom/80% url('./1.png'); } ``` ## 总结 本文介绍了 CSS 背景图的基础用法,强大的 `background` 属性还可设置各种渐变,容后文介绍。 -参考资料:https://developer.mozilla.org/zh-CN/docs/Web/CSS/background