如何在调整大小时将元素大小和位置映射到其他元素大小和位置
How can I map Elements size and position to other Elements size and position on resize
所以我 运行 在尝试使图像上的对象可点击时遇到了问题。
我有一个包含 3 个对象的图像,我想 link 到 3 个不同的页面/执行 3 个不同的功能 onclick。
现在,当我调整 window 大小时出现问题。具有以下样式的图像始终显示对象,即使我调整 window 大小并填满整个屏幕也是如此。
img {
object-fit: cover;
object-position: center;
width: 100%;
height: calc(100vh - 90px);
}
由于对象非常大,当我调整大小时,比方说移动视图,links 将重叠并且比屏幕本身大。
这是当前的HTML结构,我可以更改它。
<div>
<img src="img/steintafelAussen.jpg" alt="Kircheneingang" />
<div class="buttons">
<button class="btn-1"></button>
<button class="btn-2"></button>
<button class="btn-3"></button>
</div>
</div>
现在我的问题是,是否可以将按钮的大小和位置映射到图像,自动重新缩放,或者我是否需要使用媒体查询来实现?
我正在考虑跟踪某个人的图像的初始比例并将其应用到 links transform: scale();
,也许吧?
我可以使用放置在图像上的透明 SVG,有 3 个带有 eventListeners 的对象而不是 links 吗?
使用 JS 很好,因为它是 vue 3 应用程序。
我已经通过在图像上放置相同大小的 SVG 并将 eventListeners 添加到链接的路径来解决问题。导致以下代码:
.wrapper {
aspect-ratio: 4 / 3;
position: absolute;
max-height: calc(100vh - 90px); /*Calc because my header and footer are 40px and 50px otherwise it would be 100vh*/
margin: auto;
width: auto;
top: 40px; /*header is 40px*/
right: 0;
bottom: 50px; /*footer is 50px*/
left: 0;
}
.img,
.overlay-svg {
position: absolute;
max-height: 100%;
margin: auto;
width: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
<div class="wrapper">
<img
class="img"
src="/path/to/image"
/>
<svg
class="overlay-svg"
viewBox="0 0 2049 1537"
xmlns="http://www.w3.org/2000/svg"
>
<path
class="btn-svg"
d="M810 523V495.5L890 479.5H993.5L1090 495.5L1178 523V1311L787 1329.5L799.5 940.5L810 523Z"
/>
<path
class="btn-svg"
d="M1461 672L1808 585L1832 1537H1471.5L1461 672Z"
/>
<path
class="btn-svg btn-lamp"
d="M481 567L517 512L544 567L577 589.5L544 699L506.5 739.5L466 690L451 579L481 567Z"
/>
</svg>
</div>
所以我 运行 在尝试使图像上的对象可点击时遇到了问题。 我有一个包含 3 个对象的图像,我想 link 到 3 个不同的页面/执行 3 个不同的功能 onclick。
现在,当我调整 window 大小时出现问题。具有以下样式的图像始终显示对象,即使我调整 window 大小并填满整个屏幕也是如此。
img {
object-fit: cover;
object-position: center;
width: 100%;
height: calc(100vh - 90px);
}
由于对象非常大,当我调整大小时,比方说移动视图,links 将重叠并且比屏幕本身大。
这是当前的HTML结构,我可以更改它。
<div>
<img src="img/steintafelAussen.jpg" alt="Kircheneingang" />
<div class="buttons">
<button class="btn-1"></button>
<button class="btn-2"></button>
<button class="btn-3"></button>
</div>
</div>
现在我的问题是,是否可以将按钮的大小和位置映射到图像,自动重新缩放,或者我是否需要使用媒体查询来实现?
我正在考虑跟踪某个人的图像的初始比例并将其应用到 links transform: scale();
,也许吧?
我可以使用放置在图像上的透明 SVG,有 3 个带有 eventListeners 的对象而不是 links 吗?
使用 JS 很好,因为它是 vue 3 应用程序。
我已经通过在图像上放置相同大小的 SVG 并将 eventListeners 添加到链接的路径来解决问题。导致以下代码:
.wrapper {
aspect-ratio: 4 / 3;
position: absolute;
max-height: calc(100vh - 90px); /*Calc because my header and footer are 40px and 50px otherwise it would be 100vh*/
margin: auto;
width: auto;
top: 40px; /*header is 40px*/
right: 0;
bottom: 50px; /*footer is 50px*/
left: 0;
}
.img,
.overlay-svg {
position: absolute;
max-height: 100%;
margin: auto;
width: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
<div class="wrapper">
<img
class="img"
src="/path/to/image"
/>
<svg
class="overlay-svg"
viewBox="0 0 2049 1537"
xmlns="http://www.w3.org/2000/svg"
>
<path
class="btn-svg"
d="M810 523V495.5L890 479.5H993.5L1090 495.5L1178 523V1311L787 1329.5L799.5 940.5L810 523Z"
/>
<path
class="btn-svg"
d="M1461 672L1808 585L1832 1537H1471.5L1461 672Z"
/>
<path
class="btn-svg btn-lamp"
d="M481 567L517 512L544 567L577 589.5L544 699L506.5 739.5L466 690L451 579L481 567Z"
/>
</svg>
</div>