是否可以使用基于 vw 单位的 CSS 缩放值?

Bru*_*ria 1 css

我正在制作响应式设计,我希望其显示1920p尺寸大于与视口宽度成比例的比例。1920p这对于上述任何分辨率(例如 4k、8k、16k 和其他分辨率)都很有用。

为了使该工作(部分)我必须为每个分辨率创建媒体查询,但是当用户没有使用浏览器窗口的完整显示宽度时,布局会在某些尺寸上中断。

我目前拥有的是:

@media (min-width: 2880px) {
  body {
    zoom: 1.5;
  }
}

@media (min-width: 3840px) {
  body {
    zoom: 2;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的:

@media (min-width: 1920px) {
  body {
    zoom: calc(100vw / 1920);
  }
}
Run Code Online (Sandbox Code Playgroud)

这将使布局对于上述任何分辨率保持静态1920p

不幸的是,该calc()函数将结果值解析为,px并且浏览器忽略该值,因为zoom属性只接受numberorpercentage其值。

例如,在3840p决议中,我期望有2但实际输出是2px

有没有办法以某种方式将此输出转换为number没有单位的原始输出?


我创建了一个小提琴来举例说明该问题: https ://jsfiddle.net/bfaria/41rqxbs0/

在此小提琴中,您可以调整输出视口的大小,以查看分辨率高于 625 像素时的缩放行为。请注意,如果您检查该body元素,您将看到声明zoom: calc(100% * calc(100vw / 625));有此警告:Invalid property value

Mar*_*tin 5

新答案:

根据 MDN 的说法,CSS Zoom 是:

非标准
此功能是非标准的,并且不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为将来可能会发生变化。

因此就会出现问题。Zoom 目前似乎不接受calc值作为选项(确切原因尚不清楚,可能有多个)。

然而,正如 MDN 上所述:

transform: scale()如果可能的话,应该使用它来代替此属性。但是,与 CSS 变换不同,缩放会影响元素的布局大小。

因此,您应该使用transform: scale();而不是zoom. 但变换比例只接受无单位的数字;1 = 100% 缩放级别。

您想要实现的目标无法通过您当前正在考虑的方法在 CSS3 中完成。

因此,您需要在 LESS CSS 中自动生成数字(请参阅下面的链接)或在 Javascript 中自动生成值。最后,最耗时的是将页面的所有内容设置为基于vw和进行缩放vh- 因此每个超过 1920px 的长度测量值都设置为视口宽度视口高度值。

选项:


原文(错误答案)

您应该指定 中使用的每个值的长度值,该calc值不是倍数或除数。因此,计算的结果将是,例如0.22vw

我理解calc为使用计算操作中变量提供的长度单位,因此只需将结果乘以 1 x 所需的长度单位即可将任何无单位或错误设置的长度单位转换为所需的值单位类型。

Zoom 接受百分比,因此您可以通过执行以下操作强制将结果vw值表示calc(100vw / 1920);为百分比:

zoom: calc(100% * calc(100vw / 1920)); 
Run Code Online (Sandbox Code Playgroud)

这将为您提供 2500px 的屏幕宽度:

100% * ( 2500px / 1920 ) = 130.2% Zoom value.
Run Code Online (Sandbox Code Playgroud)

以 2880px 为例。

zoom: calc(100% * calc(2880px / 1920)); = 100% * 1.5 = 150% = 1.5
Run Code Online (Sandbox Code Playgroud)

我不知道你是如何计算出这些数字的缩放应该为2的?