css background-size与背景图片填满div

蚀刻
• 阅读 28315

background-size与背景图片填满div

在开发中,常有需要将一张图片作为一个div的背景图片充满div的需求

background-size的取值及解释

background-size共有三种属性,分别为

background-size: cover

MDN文档解释说明:缩放背景图片以完全覆盖背景区,可能背景图片部分看不见。A keyword that is the inverse of contain. Scales the image as large as possible and maintains image aspect ratio (image doesn't get squished). The image "covers" the entire width or height of the container. When the image and container have different dimensions, the image is clipped either left/right or top/bottom.

这里的关键说明在于标红的两个区域,分别是它会保持图片的宽高比当图像和容器具有不同的尺寸时,图像被左/右或顶部/底部裁剪。之后会结合例子说明

background-size: contain

MDN文档解释说明:缩放背景图片以完全装入背景区,可能背景区部分空白。A keyword that scales the image as large as possible and maintains image aspect ratio (image doesn't get squished). Image is letterboxed within the container. When the image and container have different dimensions, the empty areas (either top/bottom of left/right) are filled with the background-color.

这里的关键说明在于标红的两个区域,分别是它会保持图片的宽高比当图像和容器具有不同的尺寸时,空区域(左/右/上/右)填充背景色。之后会结合例子说明

background-size: width-value,height-value;

分为固定大小百分比auto,固定大小就是写死;auto就是以背景图片的比例缩放背景图片。。

百分比的的MDN文档解释说明<percentage> 值,指定背景图片相对背景区(background positioning area)的百分比。背景区由background-origin设置,默认为盒模型的内容区与内边距,也可设置为只有内容区,或者还包括边框。如果attachment 为fixed,背景区为浏览器可视区(即视口),不包括滚动条。不能为负值。

实验及声明

这次选用鲁殿作为背景图,这张图的尺寸是260*234,宽高比为260/234 ≈ 1.11
css background-size与背景图片填满div


假设一div的宽高为200*200,下面测试中左为表现图,右为原图

background-size: contain
css background-size与背景图片填满divcss background-size与背景图片填满div

background-size: cover
css background-size与背景图片填满divcss background-size与背景图片填满div

background-size: auto (auto)
css background-size与背景图片填满divcss background-size与背景图片填满div

background-size: 100% 100%
css background-size与背景图片填满divcss background-size与背景图片填满div

分析及解释:首先contain是不行的,原理在于contain要保持宽高比将图片完全放入div中,div为200×200。原图为260×234,所以为了放入div,宽260→200,那么高就得200/宽高比(1.11) = 180,所以会有下面的空白。
再其次,cover在这个时候也是不符合要求的,虽然看起来貌似符合要求,但是与原图是有差别的吗,原因在于cover与contain完全放入相反,它要求完全覆盖。所以要覆盖就要从更小的高计算。高234→200宽就等于200×1.11 = 222,图像就会被右部裁剪掉一部分。
再再其次,auto是原图大小也是不符合的。

所以,background-size: 100%, 100%;是符合需求的。按照div的大小进行计算

其他各种大小div与各种大小的图片搭配请参照上述说明自行分析。
个人建议这种需求都使用background-size: 100%, 100%;

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
菜园前端 菜园前端
2年前
什么是 CSS?
原文链接:什么是CSS?CSS指层叠样式表(CascadingStyleSheets),理解为CSS样式就可以了。CSS样式有什么作用呢?比如我们在页面中添加了一个div,我想给这个div设置宽度、高度、背景色、阴影、内容字体样式等等,就是通过CSS样式来
Chase620 Chase620
4年前
VUE3(七)vue项目抽离.vue文件中的js、css代码
平常再做开发的时候,一般情况下不会将html,js,css代码写到一个文件中。基本上都会写在各自对应的文件中,然后再引入即可。那么在VUE中我们如何抽离vue文件中的js,与css代码呢?1:抽离javascriptHome.vue<template<div<div:style"{padding:'24px',back
LinMeng LinMeng
5年前
Vue中为对象添加属性/this.$set()的使用方法&&Object.assign(target, sources)
this.$set(obj,key,value)应用场景:为data中的某一个对象添加属性<template<div<button@click"addProps"添加属性</button{{hun.name}}<inputtype"text"vmodel"hun.age"</div</
Stella981 Stella981
4年前
DIVcss背景图片固定居中,div阴影,背景半透明,div圆角,DIV渐变 【mark用】
<html\<head\<metahttpequiv\"ContentType"content\"text/html;charsetutf8"/<title\CSStest</title\<styletype\"text/css"\body{mar
Stella981 Stella981
4年前
Python自动化测试PO模式
页面元素定位信息页面元素定位信息文件leadscloud_logininput_user_namexpath//@id'main'/div/div2/div2/div2/div/form/div1/div/div/inputinput_user_passwordx
Wesley13 Wesley13
4年前
CSS背景颜色、背景图片、平铺、定位、固定
CSS背景颜色设置backgroundcolor:red;如设置背景颜色为红色;背景颜色设置支持3种写法:颜色名16进制rgbCSS背景图片颜色设置backgroundimage:url(图片地址);如设置背景图片路径不在说明了!CSS背景图片平铺设置(如果不设置图片默认设置为x轴y轴同时平铺即值为repeat)b
Stella981 Stella981
4年前
CSS 布局 ,文档流,定位,中划线,表格属性,line
CSS知识汇总verticalalign:top|middle|bottom//用于图片时,(如文字)其他元素相对于图片的上,中,下对齐divlineheight:200px;//设置lineheight的高度和div的高度一样,则div里的文字10Px上下居中对齐divheight:200px;divfontsiz
Stella981 Stella981
4年前
GC roots
<divid"cnblogs\_post\_body"class"blogpostbody"<p1.虚拟机栈(本地变量表)引用的对象</p<div2.方法区静态属性引用的对象</div<div3.方法区常量引用的对象</div<div4.本地方法栈JNI(一般指naive方法)中引用的对象</div<div&nbsp;<
Wesley13 Wesley13
4年前
css为什么要清除浮动
DIV1宽度为100px,DIV2宽度为50px,如果上级DIV层的宽度大于DIV1DIV2的宽度,DIV2设置浮动属性float:left,DIV2会像流水一样,自动显示在DIV1的右侧,如果上级DIV层的宽度等于或者小于DIV1DIV2的宽度,那么,DIV2层就会被挤到DIV1的下方.如果DIV1设置了清除属性,DIV2就