我有一个有很多页面和不同背景图片的网站,我从CSS中显示它们:
body.page-8 {
background: url("../img/pic.jpg") no-repeat scroll center top #000;
background-size: cover;
}
但是,我想使用 <img>
元素在一个页面上显示不同的(全屏)图片,并且我希望它们具有与上述 background-image: cover;
属性相同的属性(图像无法从CSS显示,它们必须从HTML文档中显示) .
通常我使用:
div.mydiv img {
width: 100%;
}
要么:
div.mydiv img {
width: auto;
}
使图片充分和响应 . 然而,当屏幕变得太窄时,图片会缩小太多( width: 100%
),并在底部屏幕中显示正文的背景颜色 . 另一种方法 width: auto;
仅使图像成为完整大小而不响应屏幕大小 .
有没有办法以 background-size: cover
的方式显示图像?
14 回答
尝试使用
display:block
同时设置min-height
和min-width
:(fiddle)
如果您的图像包含元素是
position:relative
或position:absolute
,则图像将覆盖容器 . 但是,它不会居中 .如果您知道图像是水平溢出(设置
margin-left:-50%
)还是垂直放置(设置margin-top:-50%
),则可以轻松居中 . 有可能使用CSS媒体查询(和一些数学)来解决这个问题 .我需要模拟
background-size: contain
,但由于缺乏支持而无法使用object-fit
. 我的图片有定义尺寸的容器,最终为我工作:使用CSS,您可以模拟
object-fit: [cover|contain];
. 这是使用transform
和[max|min]-[width|height]
. It's not perfect. 在一种情况下不起作用:如果图像比容器更宽更短 .解决方案#1 - 对象适配属性(缺乏IE支持)
只需在img上设置
object-fit: cover;
即可 .见MDN - 关于
object-fit: cover
:另外,请参阅this Codepen demo,它将应用于图像的
object-fit: cover
与应用于背景图像的background-size: cover
进行比较解决方案#2 - 用css替换带有背景图像的img
我知道这是旧的,但我上面看到的许多解决方案都存在图像/视频对于容器来说太大的问题,因此实际上不像背景大小的覆盖 . 但是,我决定制作“实用程序类”,以便它可以用于图像和视频 . 您只需为容器提供类.media-cover-wrapper,将媒体项本身设为类.media-cover
然后你有以下jQuery:
调用它时一定要注意页面大小调整:
然后是以下CSS:
是的,它可能需要jQuery,但它响应很好,行为完全像背景大小:封面,你可以在图像和/或视频上使用它来获得额外的SEO值 .
对于IE,你还需要包括第二行 - 宽度:100%;
我们可以采取ZOOM方法 . 如果方位图像高度或宽度小于期望的高度或宽度,我们可以假设最大30%(或多达100%)可以是缩放效果 . 我们可以通过溢出隐藏其余不需要的区域:隐藏 .
这将调整具有不同宽度或高度的图像 .
我不允许“添加评论”所以这样做,但是Eru Penkman所做的事情是非常重要的,为了让它像背景一样,你需要做的就是改变
至
你可以做的是使用'style'属性将背景图像添加到元素,这样你仍然可以在HTML中调用图像,但你仍然可以使用background-size:cover css行为:
HTML:
CSS:
这就是我将background-size:cover行为添加到我需要动态加载到HTML中的元素的方法 . 然后,您可以使用像background-position:center这样的令人敬畏的CSS类 . 繁荣
遇到了同样精确的症状 . 上面为我工作 .
我发现了一个简单的解决方案来模拟封面和包含,它是纯CSS,适用于具有动态尺寸的容器,并且对图像比率没有任何限制 .
请注意,如果您不需要在16之前支持IE或Edge,那么最好使用object-fit .
background-size:封面
如果图像自然尺寸大于显示的尺寸,则使用1000% . 例如,如果图像是500x500,但容器只有200x200 . 使用此解决方案,图像将调整为2000x2000(由于最小宽度/最小高度),然后缩小到200x200(由于
transform: scale(0.1)
) .x10因子可以用x100或x1000代替,但在20x20 div上渲染2000x2000图像通常并不理想 . :)
background-size:包含
遵循相同的原则,您也可以使用它来模拟
background-size: contain
:实际上有一个非常简单的css solution甚至适用于IE8:
假设你可以安排一个你希望填充的容器元素,这似乎有效,但感觉有点hackish . 本质上,我只是在更大的区域使用
min/max-width/height
然后将该区域缩放回原始尺寸 .No ,你不能像
background-size:cover
but.. 那样得到它这种方法非常接近:它使用JavaScript来确定图像是横向还是纵向,并相应地应用样式 .
JS
CSS
http://jsfiddle.net/b3PbT/