如何在更改屏幕宽度的同时保持响应式背景图像高度?

Posted

技术标签:

【中文标题】如何在更改屏幕宽度的同时保持响应式背景图像高度?【英文标题】:How to maintain responsive background image height while changing screen width? 【发布时间】:2021-10-06 11:13:18 【问题描述】:

我一直在努力定位背景图像,但只有在网页窗口调整到其最小宽度时才能正确定位图像。当我调整浏览器窗口的大小时,图像的所有边长都会被剪裁。照片的高度远大于其宽度(1391 x 2471)。我想我可能必须合并一个垂直滚动?该网站是为移动平台设计的,但我将主要在计算机显示器上查看和设计它。我如何保持 Min 的图像完整性。浏览器的最大宽度。浏览器的宽度?

*  margin: 0;
    padding: 0;


html 
background: url("image.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;

我的图像定位 CSS 代码是在 CSS-Tricks 上教给我的,尽管它提供了迄今为止最好的结果。我已经添加了一个链接到您想要查看的图像包。这是我自己拍的照片,所以我希望提供的链接是有用的。

【问题讨论】:

我真的不明白你想在这做什么 要不要换小屏的背景图 我想保持照片的长度,而不是根据浏览器大小缩放图像 在那种情况下@Shiratorizawa 的回答是正确的 因为这是一个背景图像,您是否希望它完全覆盖视口的整个宽度并保持(相关)全长,这样就不会被裁剪?如果是这样,您是否希望网站可以滚动,以便用户始终可以看到完整的图像并且网站的大小适合它? 【参考方案1】:

当 img 的全宽 (100vw) 为视口。

如果您知道图像的纵横比,则可以这样做。在这种情况下,您知道原始的自然宽度和高度,因此如果您将这些尺寸作为变量提供,则可以通过 CSS 计算纵横比。

这是一个使用 CSS 设置的示例(请参阅下面的警告):

* 
  margin: 0;
  padding: 0;


html 
  --imgw: 1391;
  --imgh: 2471;
  width: 100vw;
  min-height: calc(100vw * var(--imgh) / var(--imgw));
  /* make sure the whole height of the image is always shown */
  background-image: url(https://picsum.photos/id/1015/1391/2471);
  background-size: cover;
HELLO

警告:您的 CSS 中已固定背景。这有两个问题:它使元素不可滚动,并且无论如何它在 Safari 中都没有得到适当的支持,并且使背景在 ios 上看起来“模糊”。所以这个 sn-p 把它去掉了。

【讨论】:

【参考方案2】:
body
    background: url("");
    background-repeat: no-repeat;
    background-size: cover;
    background-position: center;
    background-attachment: fixed;
    

【讨论】:

【参考方案3】:

如果我正确理解了这一点,您希望图像以您想要的所有尺寸正确显示吗?

在这种情况下,您可以使用@media 查询。

@media(max-width: your max width in px) 
    /*And here change the height and width so that it doesn't look weird*/

【讨论】:

以上是关于如何在更改屏幕宽度的同时保持响应式背景图像高度?的主要内容,如果未能解决你的问题,请参考以下文章

响应网站;保持图像高度,同时减小宽度?

在 Flutter 中保持响应的同时制作持久的背景图像

如何使 <div> 与背景图像保持动态高度

如何使 SVG 宽度响应但保持 SVG 高度不变?

仅当宽度和高度都更改时才更改图像大小

文本旁边的图像(响应式)