在视觉上我可以欣赏它的不同之处,但在哪种情况下我更喜欢一个?是否有任何意义上使用它们或者可以用百分比代替它们?
目前,在使用这些属性时,我似乎无法超越试错方法.
另外,我只能找到相当模糊的解释,特别是我发现W3C文档非常令人费解.
值具有以下含义:
'包含'
缩放图像,同时保持其固有的纵横比(如果有的话)到最大尺寸,使得其宽度和高度都可以适合背景定位区域.
'覆盖'
缩放图像,同时保持其固有的纵横比(如果有的话)到最小尺寸,使得其宽度和高度都可以完全覆盖背景定位区域.
我可能有点厚,但是有人能用相对的例子给我一个简单的英语解释吗?
请使用这个小提琴.谢谢.
CSS
body{
width:500px;
height:500px;
background:url(http://upload.wikimedia.org/wikipedia/commons/1/1a/Bachalpseeflowers.jpg);
background-size:contain;
background-repeat:no-repeat;
}
注意
接受的答案是我目前最简洁和完整的答案.谢谢大家的帮助.
1> The Pragmati..:
您可以考虑查看控制输出的伪代码.分配给图像大小的值直接取决于容器的纵横比和背景图像的纵横比.
注意: Aspect ratio = width / height
包含
if (aspect ratio of container > aspect ratio of image)
image-height = container-height
image-width = aspect-ratio-preserved width
else
image-width = container width
image-height = aspect-ratio-preserved height
覆盖
if (aspect ratio of container > aspect ratio of image)
image-width = container width
image-height = aspect-ratio-preserved height
else
image-height = container height
image-width = aspect-ratio-preserved width
你看到了这种关系?在这两个cover
和contain
,纵横比被保留.但if-else条件在两种情况下都是相反的.
这是cover
覆盖整页的原因,没有任何白色部分可见.当容器的纵横比较大时,缩放图像使其宽度等于容器宽度.现在,高度将更大,因为纵横比更小.因此它覆盖整个页面而没有任何白色部分.
问:他们可以用百分比代替吗?
不,不仅仅是百分比.你需要调理.
问:在哪种情况下我更喜欢一个?
在创建网站时,您不希望在固定背景中出现任何白色部分.所以使用cover
.
contain
在另一可当您使用重复的背景(例如,当你有非常高的纵横比WRT veiwport /容器可以使用的图案图像被用来contain
设定和background-repeat
到repeat-y
).但更合适的用途contain
是固定高度/宽度元素.
我调整了窗口大小,试图找到一个关系.这可能是浏览器呈现它们的方式.
2> BoltClock..:
虽然这个问题假设读者已经理解了工作的价值contain
和cover
价值background-size
,但这里有一个简单的英语解释,即规范所说的内容,它可以作为一个快速入门:
background-size: contain
确保整个背景图像适合背景区域,保持其原始宽高比.如果背景区域小于图像,则图像将缩小,以使其适合背景区域.如果背景区域比图像更高或更宽,则未被主图像占据的区域的任何部分将通过重复图像填充,或者如果设置为则填充信箱 /空白.background-repeat
no-repeat
background-size: cover
使背景图像尽可能大,使其填满整个背景区域,不留空隙.cover
和之间的差异在于100% 100%
保留了图像的纵横比,因此不会出现图像的不自然拉伸.
请注意,这两个关键字值都不能使用长度,百分比或auto
关键字的任意组合来表示.
那你什么时候用另一个呢?就个人而言,我认为cover
比实际用途更多contain
,所以我会先用它.1
背景大小:封面
一个常见的用例background-size: cover
是全屏布局,其中背景图像细节丰富,例如照片,并且您希望突出显示此图像,尽管是作为背景而不是主要内容.
无论视口的宽高比如何,或者图像或视口是纵向还是横向,您都希望图像能够完全覆盖浏览器视口或屏幕.只要图像填满整个背景区域并保持其原始宽高比,您就不会担心图像的任何部分是否因此而被裁剪掉.
这是一个布局示例,其中内容位于半透明的白色背景中,并悬停在全屏幕背景上.当您增加预览窗格的高度时,请注意图像会自动向上缩放以确保它仍然覆盖整个预览区域.
html {
height: 100%;
background-image: url(http://upload.wikimedia.org/wikipedia/commons/1/1a/Bachalpseeflowers.jpg);
background-position: center center;
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
}
body {
width: 80%;
min-height: 100%;
background-color: rgba(255, 255, 255, 0.5);
margin: 5em auto;
padding: 1em;
}
如果您background-size: contain
改为使用,那么背景图像会缩小,以使整个图像适合预览窗格.这会在图像周围留下难看的白色信箱,具体取决于预览窗格的宽高比,这会破坏效果.
background-size:包含
那么为什么background-size: contain
如果它在图像周围留下丑陋的空白呢?立即想到的一个用例是,如果设计师不关心空白区域,只要整个图像适合背景区域.
这可能听起来很人为,但考虑到并非每张图片看起来都很糟糕,周围有空的空间.这是使用徽标而不是照片的示例实际上最佳展示,即使您可能不会发现自己使用徽标作为背景图像.
徽标通常是不规则形状,位于空白或完全透明的背景上.这留下了可以用纯色或不同背景填充的画布.使用background-size: contain
将确保整个图像适合背景而不会裁剪掉任何部分,但图像仍然在画布上看起来就像在家一样.
但它不一定要适用于不规则形状的图像.它也适用于矩形图像.只要您要求不对背景图像进行裁剪,空格可以被视为合理的权衡,或者根本不是什么大问题.还记得固定宽度的布局吗?从background-size: contain
本质上考虑,但对于背景图像以及纵向和横向两种方式:如果您可以始终确保内容始终适合背景图像的边界,那么空白就完全不是问题.
虽然background-size: contain
无论图像是否设置为重复都可以工作,但我想不出任何涉及重复背景的好用例.
1 请注意,如果您使用的是渐变作为背景,都contain
和cover
没有任何效果,因为渐变没有任何内在的尺寸.在这两种情况下,渐变都会伸展以覆盖容器,就像您指定的那样100% 100%
.
3> Lee..:
background-size:cover
将用图像覆盖整个div.这对于显示主图像的缩略图图像非常有用,其中显示的整个图像并不重要,但您仍希望符合所有图像的尺寸.(例如,博客文章摘录)
background-size:contain
将在div中显示整个图像.如果您特别想要显示整个图像,但在设置的容器div大小内,这可能很有用.(例如,公司徽标的集合)
两者都保持图像的纵横比相同
http://cdn.onextrapixel.com/wp-content/uploads/2012/02/cover-contain.jpg