【问题标题】:Scaling a background image with css and html使用 css 和 html 缩放背景图像
【发布时间】:2015-05-06 00:00:00
【问题描述】:

我很难用 css 和 html 正确缩放我的图像。 CSS看起来像这样:

@media (max-width: 979px) {
.header-wrapper {
height: 388px;
background: url("../images/taikuri.jpg") no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;

}

那么html看起来是这样的:

<header id="header" class="header">
<div class="header-wrapper"> <img src="./imag/taikuri.jpg"  
 alt="taikureita" width="2050" height="812"/>

我想以某种方式缩放图像以获得更快的加载速度。 GTmetrix 页面测试给了我这个建议: 以下图像在 HTML 或 CSS 中调整大小。提供缩放图像可以节省 49.1KiB(减少 69%)。

我还没有找到正确的方法,所以我不得不寻求帮助。

【问题讨论】:

  • 使用 CSS 不会减小文件大小。下载文件后,它会缩小浏览器中显示的图像。对于“adaptive images”,您可能需要服务器端解决方案。
  • 我相信建议是不要使用 HTML/CSS 来调整它的大小,而是实际提供一个预先调整大小的图像。比如说 3 张图片,一张是 100x200,第二张是 200x400,第三张是 400x800。您应该提供较小的,而不是提供第三个并使用 CSS 将其调整为 100x200。
  • 我想我明白为什么这个问题被否决了。或许将问题改写为“我不明白在使用 CSS/HTML 的浏览器上下文中缩放图像大小与在其自然尺寸的上下文中缩放图像大小以实现更小的文件大小之间的区别“……除了我刚才的措辞表明我已经知道答案了。所以......我很想说这是一个有效的问题,因为它确实在问,““文件大小”和“显示大小”之间有什么区别。

标签: html css image scaling image-scaling


【解决方案1】:

您尝试做的是减小图像的文件大小,以便更快地加载。

您在问题中发布的解决方案试图做的是减少图像的显示宽度和高度,因此它在屏幕上显示为更小的宽度和高度。但是,仍然会加载同一张图片,但文件大小很大。浏览器只是为您缩小了它的外观。

查看您的代码,您将背景图像设置为与您写入 html 的图像相同的内容。这没关系,因为图像会缓存,但只是为了让您知道您基本上将图像嵌入两次。

这样想:我有 200 磅。如果我给自己拍照并缩小它,我在现实生活中仍然是 200 磅。这就是你想要做的。但是...如果我减轻了一些体重,那么我在现实生活中会更小,如果我坐在你身上也不会那么痛。这就是你要问的怎么做。有意义吗?

在这种情况下,请在 photoshop 中打开图像,制作副本,将其调整为更小的宽度(您可以从图像 > 图像大小执行此操作)并启用包含纵横比控制。上传该图片并改用它。

另一个更好的选择是

  1. 从您的 html 中删除您的 &lt;img&gt;,因为它重复且很大。您可以在 CSS 中重新创建缩放效果。
  2. 设置更多媒体查询以使用不同媒体宽度的不同图像。

我看到您已经在使用这个最大宽度为 979 像素的大图片了。如果是这种情况,请设置一个宽度为 979 像素的图像并在此媒体查询中使用它。如果您需要变大,请创建具有更高 jpg 压缩率的更大图像并创建更大的媒体查询来处理它,类似于以下代码(注意我将您的图像重命名为设置不同图像的示例):

@media (max-width: 979px) {
    .header-wrapper {
        height: 388px;
        background: url("../images/taikuri_979w.jpg") no-repeat;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
    }
}

这是第二个媒体查询,图片更大。请注意,我添加了一个 padding-top 作为具有最小高度的百分比,以便顶部区域将分别缩放到浏览器的宽度):

@media (min-width: 1000px) {
    .header-wrapper {
        height: auto;
        min-height:388px;
        background: url("../images/taikuri_really_big.jpg") no-repeat;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
        padding-top:35%;
    }
}

如果您没有 Photoshop,则可以使用以下服务调整图像大小:http://www.picresize.com/ 我从来没有使用过这个,但它看起来像你想要的。此外,如果您使用的是 Mac,预览应用程序会调整图像大小。不过,不知道 Windows 或 Linux 上可能有什么,抱歉!

【讨论】:

  • 请参阅下面的答案以了解其他几个图像压缩调整大小选项,因为它们可能很好。同样,我从未使用过它们。
【解决方案2】:

使用 CSS 缩放图像不会提高加载速度。 这是因为您的浏览器不会以您在 CSS 中指定的大小下载图像。浏览器会以全尺寸下载图像,然后以您在代码中指定的任何尺寸显示图像。

您应该查看tinypng.comcompressor.io 来压缩您的图像。这将帮助您提高加载速度。压缩图像,使其文件大小更小。它将占用更少的硬盘空间,并且服务器传输给用户的空间也更少。

【讨论】:

  • 虽然绝对正确,但这可能应该是对原始问题的评论,因为答案的实质是两个工具的链接,没有解释“使用 HTML 或 CSS 缩放图像将根本没有提供更好的加载速度。”
  • @JoshBurgess 感谢您的提醒,我在帮助 Stackoverflow 上的人方面还是个新手。为我的回答添加了一点解释:)
【解决方案3】:

您可以在页面加载后使用 javascript 加载图像,并在

猜你喜欢
  • 2011-10-14
  • 2014-05-09
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多