【发布时间】:2021-11-02 02:20:37
【问题描述】:
我有two images,一个 JPG 和一个 SVG,必须重叠,JPG 位于 SVG 之上。它们都必须随着视口尺寸的变化而完全按比例调整大小,不仅在特定断点处,而且在不断变化。 JPG 是图形 (<figure><img/></figure>) 标记集中的图像,而 SVG 是 CSS background: url(/url/to/image.svg)。背景图像看起来像<figure> 图像周围的相框,因此要使它们看起来像是一个单元,在视口调整到任何尺寸时,它们每个都保持相同的纵横比至关重要。
我不知道如何在不同步或不同步且<figure> 图像与背景重叠或背景对于<figure> 来说太大的情况下实现这一点。这是我尝试过的。
<figure class="outline-img">
<img
width="1024" height="682"
src="//localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1.jpeg"
class="attachment-large size-large"
alt=""
loading="lazy"
data-src="//localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1.jpeg"
data-srcset="//localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1.jpeg 1024w, //localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1-300x200.jpeg 300w, //localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1-768x512.jpeg 768w"
data-sizes="(min-width: 960px) 75vw, 100vw"
srcset="//localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1.jpeg 1024w, //localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1-300x200.jpeg 300w, //localhost:8181/wp-content/uploads/2021/08/istockphoto-1034140728-1024x1024-1-768x512.jpeg 768w"
sizes="(min-width: 960px) 75vw, 100vw">
</figure>
这是当前构成的背景 CSS:
.outline-img {
padding: 9.4%;
width: 118%!important;
background: url(/wp-content/uploads/2021/09/frame.svg);
background-repeat: space;
background-position: 50%;
}
奇怪的填充和宽度值是我目前尝试将图像“保持”在 SVG 图像尺寸内的方式。任何小于该值的填充都会剪裁 SVG 图像的外边缘。任何小于该值的宽度都会使图像不适合 SVG 的内边缘。当我调整浏览器的大小时,框架图像不会“粘”到 SVG 的内部尺寸。
我很想知道是否有更简单的方法可以做到这一点。我尝试建议将这两个都制作成一张 JPG 图片,但设计师主要对这个解决方案感兴趣。
【问题讨论】:
-
最简单的方法是将图像放入 svg 并使用 svg 内联而不是 css 背景。您能否编辑您的问题并为 thr 框架添加 svg?
-
据我了解,您有一个图像和一个 SVG,它必须围绕图像作为某种边界。对于
outline-img,请尝试将填充设置为精确的测量值(em、px)而不是 %,否则它将根据父级大小不断变化。至于图像,给它一个max-width: 100%以防止它溢出,height: auto以保持纵横比。不确定您的 SVG 是什么样子,但使用随机图像进行了测试,这似乎对我有用。您是否需要 SVG 根据图像大小更改大小?在那种情况下,这种方法是行不通的。 -
您可以尝试的另一种方法,与以前一样,尝试为
outline-img提供精确的填充,将其设置为position: relative并将SVG 添加为::after元素。position: absolute; top: 0; bottom: 0; left: 0; right: 0;使其覆盖整个div。这将在图像的顶部,但如果你z-index: -1它,它应该在它的下方。如果您可以发布具有所需效果的屏幕截图以及它现在的样子,这将有助于更好地可视化正在发生的事情。 -
+1 在 SVG 中做所有事情。然后构建了一个W3C标准的Web Component,所以用户只需要做
<framed-img ... attributes > -
@Danny'365CSI'Engelman 我不知道 Web Components 是什么,所以我查了一下。我认为这不适合这个项目,因为它需要成为所有浏览器都接受的方法。 blog.logrocket.com/what-happened-to-web-components
标签: css wordpress image svg background