如何拉伸背景图像以覆盖整个HTML元素?


88

我正在尝试获取HTML元素(body,div等)的背景图像,以拉伸其整个宽度和高度。

运气不好。是否有可能,或者除了背景图片外,我还必须采取其他方法吗?

我当前的CSS是:

body {
    background-position: left top;
    background-image: url(_images/home.jpg);
    background-repeat: no-repeat;
}

提前致谢。

编辑:我不希望在Gabriel的建议中维护CSS,所以我改为更改页面的布局。但这似乎是最好的答案,因此我将其标记为这样。


当然,您可以使用JavaScript动态地执行此操作,但这可能比gabriel1836的链接建议的CSS hack更糟糕。
詹森·邦廷

要保留图像的长宽比,应使用“ background-size:cover;”。或“ background-size:包含;”。我建立了一个可在IE8中实现这些值的polyfill
-Rémi

Answers:


192
<style>
    { margin: 0; padding: 0; }

    html { 
        background: url('images/yourimage.jpg') no-repeat center center fixed; 
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
    }
</style>

这也可以用作html元素或CSS文件中的样式标签。
弥敦道

2
这是有史以来最好的解决方案。
AFD 2012年

1
Cover与100%100%有什么区别?
Pacerier

4
100%100%不能保持原始图像的纵横比。“覆盖”将图像缩放,同时保留其固有的宽高比(如果有),使其最小,以使其宽度和高度都可以完全覆盖背景定位区域。您还可以使用“包含”来缩放图像,同时保留其固有的宽高比(如果有)到最大尺寸,以使其宽度和高度都可以适合背景定位区域。
2012年

“ -webkit-background-size:封面;” 不是有效的CSS3属性。
VoidKing 2013年


8

简而言之,您可以尝试一下...。

<div data-role="page" style="background:url('backgrnd.png'); background-repeat: no-repeat; background-size: 100% 100%;" >

我曾经用过很少的CSS和JS ...

<link rel="stylesheet" href="css/jquery.mobile-1.0.1.min.css" />
<script src="js/jquery-1.7.1.min.js"></script>
<script src="js/jquery.mobile-1.0.1.min.js"></script>

它对我来说很好。


对于那些不想保持宽高比的人!
BillyNair '16

6

不确定是否可以拉伸背景图像。如果发现在所有目标浏览器中都是不可能的或不可靠的,则可以尝试使用拉伸的img标签,将z-index设置为较低,并将position设置为absolute,以便其他内容显示在其顶部。

让我们知道您最终会做什么。

编辑:我建议的基本上是gabriel链接中的内容。因此,尝试:)


1
我至少在十年前看到了这种技术的实际应用。我无法想象它现在仍然无法正常工作。
失眼

5

要扩展@PhiLho答案,您可以将超大图像(或任何尺寸的图像)居中放置在页面上,其中包括:

{ 
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

或者,您可以使用背景颜色与图像背景相匹配的较小图像(如果是纯色)。这可能适合或可能不适合您的目的。

{ 
background-color: green;
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

4

如果您需要在调整屏幕大小时拉伸背景图像,并且不需要与旧版浏览器兼容,则可以完成以下工作:

body {
    background-image: url('../images/image.jpg');
    background-repeat: no-repeat;
    background-size: cover;
}

3

如果您有较大的风景图像,则此示例在此处以纵向模式调整背景的大小,使其显示在顶部,底部留空白:

html, body {
    margin: 0;
    padding: 0;
    min-height: 100%;
}

body {
    background-image: url('myimage.jpg');
    background-position-x: center;
    background-position-y: bottom;
    background-repeat: no-repeat;
    background-attachment: scroll;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

@media screen and (orientation:portrait) {
    body {
        background-position-y: top;
        -webkit-background-size: contain;
        -moz-background-size: contain;
        -o-background-size: contain;
        background-size: contain;
    }
}

3

我主要使用以下代码来达到要求的效果:

body {
    background-image: url('../images/bg.jpg');
    background-repeat: no-repeat;
    background-size: 100%;
}

3
您需要background-size: 100% 100%;
Sablefoste 2015年

我不知道您使用的是哪种浏览器,但是我说的对我来说可以在Firefox和Chrome中使用。
Badar


0

您不能使用纯CSS。在所有其他组件后面都覆盖整个页面的图像可能是您最好的选择(看起来就是上面给出的解决方案)。无论如何,反正它看起来很可怕。我会尝试使用足够大的图像来覆盖大多数屏幕分辨率(例如,最大分辨率为1600x1200,但上面很少),以限制页面的宽度,或者仅使用平铺的图像。



0

只需使div成为body的直接子代(例如,类名称为bg),其中包含body中的所有其他元素,然后将其添加到CSS文件中即可:

.bg {
    background-image: url('_images/home.jpg');//Put your appropriate image URL here
    background-size: 100% 100%; //You need to put 100% twice here to stretch width and height
}

请参阅此链接:https: //www.w3schools.com/css/css_rwd_images.asp向下滚动到显示以下内容的部分:

  1. 如果background-size属性设置为“ 100%100%”,则背景图像将拉伸以覆盖整个内容区域

在此显示的“ img_flowers.jpg”会扩展到屏幕或浏览器的大小,而不管您如何调整其大小。


-1

这个对我有用

.page-bg {
  background: url("res://background");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.