我使用 HTMLImageElement.sizes 来定义图像的宽度。
\nhttps://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/sizes
\nimg {\n background: orange;\n border: 2px solid black;\n aspect-ratio: 1/1;\n object-fit: contain;\n}Run Code Online (Sandbox Code Playgroud)\r\n<img srcset="https://www.dofactory.com/img/html/vangogh-sm.jpg 120w,\n https://www.dofactory.com/img/html/vangogh.jpg 193w,\n https://www.dofactory.com/img/html/vangogh-lg.jpg 278w"\n sizes="(max-width: 710px) 120px,\n (max-width: 991px) 193px,\n 278px">Run Code Online (Sandbox Code Playgroud)\r\n尽管尺寸根据视口宽度正确设置,但图像尺寸仅在图像完全加载后才起作用。
\n您可以在此视频中看到加载期间图像仅为 0x0px:
\n
\n我正在寻找一种干燥的方法,\xe2\x80\x99 不需要在 html 和 css 中定义和维护一次大小,因为这很难保持同步。sizes出于性能原因,该属性也是必需的: Why can\xe2\x80\x99t we just do this using css or javascript
有没有什么技巧可以在下载图像之前使用已经存在的尺寸?
\n为了解决这个问题,你需要:
纵横比仅在具有宽度或高度时才起作用(在本例中),没有这两个属性,纵横比不起作用。
img {
--initial-height: 360px;
height: var(--initial-height);
background: orange;
border: 2px solid black;
aspect-ratio: 278/360; /* original image size - width / height */
object-fit: contain;
}
@media screen and (max-width: 991px) {
img {
--initial-height: 193px;
}
}
@media screen and (max-width: 710px) {
img {
--initial-height: 120px;
}
}Run Code Online (Sandbox Code Playgroud)
<img srcset="
https://www.dofactory.com/img/html/vangogh-sm.jpg 120w,
https://www.dofactory.com/img/html/vangogh.jpg 193w,
https://www.dofactory.com/img/html/vangogh-lg.jpg 278w
" sizes="(max-width: 710px) 120px,
(max-width: 991px) 193px,
278px" />Run Code Online (Sandbox Code Playgroud)