【问题标题】:Responsive Image for mobile手机响应式图片
【发布时间】:2020-01-16 09:24:55
【问题描述】:

我可以对这样的图像进行媒体查询吗?我的意思是它有效,但我想知道它是否看起来很荒谬。 因为我的图像在移动设备中看起来很小。 vh 也不起作用。

 .banner {
    max-width: 100%;
    min-height: 185px;
    max-height: 270px;
  }

【问题讨论】:

  • 你能更精确一点吗? Also vh didnt work 什么没用?你对结果有什么期望?
  • 他的意思是视口高度 (vh) 不起作用。仍然没有足够的信息。
  • 我的意思是我打开了设备工具栏,然后将它扩大到更高的宽度,vh 导致了问题。图片和最大宽度之间有空间prnt.sc/qoa5gu 我知道最大宽度:100% 适合图像,但我应该如何使用高度?我也可以为他们使用媒体查询吗?

标签: css sass bootstrap-4


【解决方案1】:

如果图像不是横幅的正确尺寸,我个人出于偏好,我会将其设置为background-image<div>。这样,您可以将其设置为覆盖该区域并将其居中,您将丢失图像的区域,但同时,它将始终覆盖该区域并响应式工作。

.banner {
    width: 100%;
    /* can also set to 100vw if you wish */
    /* specify height - this is a personal favourite of mine at times */
    height: calc(100vh - 185px);
    /* if you wish to keep max-height */
    max-height: 270px;

    background-image: url('[insert route to image file]');
    background-size: cover;
    background-position: center center;
}

如果您需要,更改标记

<div class="banner">
  <!-- insert any child elements if needed -->
</div>

如果您希望设置更多媒体查询,并且您正在使用移动优先设计 &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt; 设置在您的 &lt;head&gt; 中,然后像这样使用它们

平板媒体查询

@media screen and (min-width: 768px) {
/* Set new styles here */
}

桌面媒体查询

@media screen and (min-width: 1024px) {
 /* Set new styles here */
}

【讨论】:

  • 感谢您的回答。我想在移动设备中创建从 180px 高度开始并增长到 1280px 的横幅,然后它将是 445px 高度,我使用了 min-width: 100% 和 height: auto。它适用于 1280+(正好 445px 高度,因为我的图像是 450px 高度)但是当我看移动设备时它是 150 px。比我预期的要小。我很困惑是否应该使用媒体查询。
  • 附带说明,您可以使用封面并包含在具有“object-fit”属性 (developer.mozilla.org/en-US/docs/Web/CSS/object-fit) 的图像上。
  • 这是真的,但任何版本的 IE 都不支持对象匹配。 caniuse.com/#search=object-fit
  • 这只是停止支持 IE 的另一个原因。
  • 哈哈,别让我开始,过去一两天我一直在做 IE 修复和 poly-filling ?
【解决方案2】:

并不荒谬,但如果你没有得到想要的效果,那就错了。有很多方法可以实现你的横幅,最简单的(我认为)是:

.banner {
    width: 100%;
    height: 185px; {/* or whatever */}
    object-fit: cover;
}

或者将其添加为背景图片并使用 Oliver 提出的“background-size:cover”。

另一种可能性是将它们添加为背景图像并使用媒体查询来加载不同的图像。这将允许您加载更好的图像fit the screen sizepixel density(艺术指导),并且您将获得更好的质量以换取额外的工作。例如:

@media (min-width: 35rem) and (min-resolution: 192dpi) {
    .banner {
        background-image: url('foo.bar');
    }
}

就我个人而言,我认为媒体查询非常棒当你需要它们时。如果您可以使用相对单位来完成这项工作,您就可以避免散布在 CSS 中更易于维护的部分。

现在我必须说酷孩子使用了另一个技巧:响应式图像。以下示例来自the MDN article. 在您的 html 中,您可以通过“scrset”和“sizes”属性为图像添加不同的来源:

<img srcset="elva-fairy-480w.jpg 480w,
             elva-fairy-800w.jpg 800w"
     sizes="(max-width: 600px) 480px,
            800px"
     src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">

在这种情况下,sizes 属性的作用类似于媒体查询,以帮助浏览器检测并请求最合适的图像。

或者,您可以将&lt;picture&gt; 标记用于不同的来源,从而允许您使用最适合用户设备的媒体。例如:

<picture>
  <source media="(max-width: 799px)" srcset="elva-480w-close-portrait.jpg">
  <source media="(min-width: 800px)" srcset="elva-800w.jpg">
  <img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva">
</picture>

之所以存在这些响应式图像技术,是因为 html 中的图像是在您的 css、媒体查询和背景图像 url 可以启动之前预加载的,因此它们基本上加载得更快。不过,由于性能问题而将责任从 CSS 转移到 HTML 是有道理的,这违背了关注点分离,但我会让你来判断这一点。

最后,关于“vh”不起作用……它肯定会起作用。但是如果没有更好地描述问题,我们将无法提供帮助。

【讨论】:

  • 非常感谢。我不知道我可以使用对象拟合。顺便说一句,我考虑过使用背景图像,但我没有做多少研究,但我并没有清楚地理解。我只想要一张图像填充所有宽度及其最大高度(270 像素)。不确定哪个更好,但无论如何我用图像和媒体查询 ^^。现在可以了。它可以满足我的需求,但我的媒体查询越来越大。
  • 我担心的是,如果您在移动设备和桌面设备上使用相同的图像,它可能在大屏幕上像素化过大,或者在移动屏幕上不必要地大。除此之外,您可以通过设置 height: calc( 185px + 5vh ); 来避免媒体查询(如果您愿意,它们真的没问题);最大高度:270px;例如。
猜你喜欢
  • 2012-08-01
  • 2016-07-06
  • 2016-07-18
  • 2020-03-20
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多