【发布时间】:2019-05-08 16:26:48
【问题描述】:
所以,我有一个艺术网站,每件作品都有自己的页面。这些作品大多是照片,这意味着它们的分辨率比大多数屏幕所能显示的要高——因此显然需要将它们缩小到比例。
为了让作品更易于浏览,我将它们显示为占据屏幕的大部分(在任一维度上减去 100 像素),并缩放以填充更受限制的维度:
- 作品 X 是方形的,在一般显示器上,它会调整大小,使其高度填满整个垂直空间,宽度也会相应缩放 - 保持纵横比
- 作品 Y 呈挂毯状,并调整大小以使其宽度填满整个水平空间,并调整其垂直空间的大小以匹配该纵横比。
我目前正在为此使用一个简单的 Javascript 脚本,在 img 标签的 onload 上调用一个函数(以及在调整窗口大小时)来计算所需的图像宽度/高度并应用它. 使用 Javascript 的问题是在图像开始加载和调整大小之间存在延迟,这使得页面在一段时间内看起来非常难看,尤其是在穷人浏览网站时互联网连接。
引出我的问题:有没有办法在纯 CSS 中将图像调整为屏幕大小的特定百分比,同时保持纵横比?
This answer 提供了另一种 Javascript 解决方案,但如果可能的话,我更愿意在纯 CSS 中找到一种方法。
我当前的脚本是这样的:
function setGoodHeight (element) {
if( on mobile ) {
...
}
else {
height_buffer = 100
width_buffer = 100
height_diff_pct = element.naturalHeight / window.innerHeight
width_diff_pct = element.naturalWidth / window.innerWidth
if(height_diff_pct > width_diff_pct) {
var h = element.naturalHeight;
var w = element.naturalWidth;
element.height = window.innerHeight - height_buffer;
element.width = w * element.height / h;
}
else {
var h = element.naturalHeight;
var w = element.naturalWidth;
element.width = window.innerWidth - width_buffer;
element.height = h * element.width / w;
}
if(element.width < 540) {
element.parentNode.setAttribute("style","width:" + 540 + "px");
}
else {
element.parentNode.setAttribute("style","width:" + (element.width + 40) + "px");
}
}
}
【问题讨论】:
-
您是否尝试获取屏幕尺寸,然后将照片设置为该尺寸?
-
是的,基本上我的脚本得到
window.innerWidth和window.innerHeight,计算图像宽度/高度与窗口宽度/高度之间的比率,并取较小的比率,然后调整整个图像。 -
您是否尝试过在 CSS 中使用
vw和vh单位?100vw = 100% of browser viewport width。使用height: auto;也可以保留纵横比。 -
贴出你目前拥有的HTML和代码。
-
我已经发布了 javascript 代码。在这种情况下,HTML 实际上只是一个
img标记。