将文本定位在图像上,使其始终指向图像中的同一位置,即使在调整浏览器大小时也是如此
Positioning text over an image so that it always points to the same spot in the image even when resizing the browser
我目前正在使用 weblflow 构建一个网站,但是 运行 遇到了一个问题,这里有人可能会帮助我解决。这是我在多个项目中遇到的问题,所以非常感谢有人的帮助。
基本上,如果您有一个全屏尺寸的图像(设置为背景图像,100vw 和 100vh),然后想将 headings/labels 放在该图像的顶部,指向该图像中的特定部分,如何当有人调整浏览器大小时,我会得到这些 headings/labels 总是随图像移动吗?
至于现在,我对 headings/labels 使用了绝对定位,并使用 % 边距将它们定位在我希望它们在图像上指向的位置。我已将图像本身设置为相对位置。但是,使用该解决方案,headings/labels 在调整浏览器大小时永远不会准确地继续指向图像上的同一位置。
我认为主要问题是,当有人只更改浏览器的宽度时,图像会(例如)变小,因为它会保持比例。垂直 headings/labels 不要移动,因为高度没有变化,只是浏览器的宽度发生了变化。所以水平方向它仍然很好,但垂直方向标题现在关闭,因为由于调整浏览器的宽度,图像变小了。所以我想我确实知道为什么它不起作用,但我不知道如何解决这个问题。如果有人对此有解决方案,请告诉我。
例如:如果您打开此页面:http://nestin.bold-themes.com/classy/ 并向下滚动到“真正的价值总是在里面”部分,无论您如何调整浏览器大小,都会有一张带有 5 个编号标签的图像,这些 labels/numbers 留在图像的同一位置。我经常在网站上看到这个。这是如何实现的?
非常感谢任何帮助!
您可以通过百分比定位来实现这一点。例如,
在parentdiv
position: relative;
在childdiv
position: absolute;
top: 50%;
left: 30%;
现在 child div 将始终将自己定位在距 parent div 顶部 50% 和左侧 30% 的位置。 parent div 的大小无关紧要。我建议你拿一个 parent div 把图片和文字放在里面。
您的示例网站也使用了这种技术。
check their code here
另一种技术是使用 HTML canvas。但是对于像这样简单的事情,HTML canvas 就太过分了。
您创建一个父包装器,将图像和所有 div 放入其中。
父级是相关的,div 是绝对的。
这是一个小演示。
* {
box-sizing: border-box;
margin: 0;
}
img {
max-width: 100%;
display: block;
width: 100%;
}
.parent {
position: relative;
}
.parent .box {
position: absolute;
width: calc(1.6vw + 10px); height: calc(1.6vw + 10px);
border-radius: 50%;
background-color: #fff;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
}
.parent .box.window {
top: 0;
left: 39%;
}
.parent .box.light {
top: 16%;
left: 46%;
}
.parent .box.pool {
top: 90%;
left: 50%;
}
.parent .box.plant {
top: 55%;
left: 3%;
}
<div class="parent">
<div class="box plant">1</div>
<div class="box window">2</div>
<div class="box light">3</div>
<div class="box pool">4</div><img src="https://images.pexels.com/photos/4075088/pexels-photo-4075088.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260" alt=""/>
</div>
我目前正在使用 weblflow 构建一个网站,但是 运行 遇到了一个问题,这里有人可能会帮助我解决。这是我在多个项目中遇到的问题,所以非常感谢有人的帮助。
基本上,如果您有一个全屏尺寸的图像(设置为背景图像,100vw 和 100vh),然后想将 headings/labels 放在该图像的顶部,指向该图像中的特定部分,如何当有人调整浏览器大小时,我会得到这些 headings/labels 总是随图像移动吗?
至于现在,我对 headings/labels 使用了绝对定位,并使用 % 边距将它们定位在我希望它们在图像上指向的位置。我已将图像本身设置为相对位置。但是,使用该解决方案,headings/labels 在调整浏览器大小时永远不会准确地继续指向图像上的同一位置。
我认为主要问题是,当有人只更改浏览器的宽度时,图像会(例如)变小,因为它会保持比例。垂直 headings/labels 不要移动,因为高度没有变化,只是浏览器的宽度发生了变化。所以水平方向它仍然很好,但垂直方向标题现在关闭,因为由于调整浏览器的宽度,图像变小了。所以我想我确实知道为什么它不起作用,但我不知道如何解决这个问题。如果有人对此有解决方案,请告诉我。
例如:如果您打开此页面:http://nestin.bold-themes.com/classy/ 并向下滚动到“真正的价值总是在里面”部分,无论您如何调整浏览器大小,都会有一张带有 5 个编号标签的图像,这些 labels/numbers 留在图像的同一位置。我经常在网站上看到这个。这是如何实现的?
非常感谢任何帮助!
您可以通过百分比定位来实现这一点。例如,
在parentdiv
position: relative;
在childdiv
position: absolute;
top: 50%;
left: 30%;
现在 child div 将始终将自己定位在距 parent div 顶部 50% 和左侧 30% 的位置。 parent div 的大小无关紧要。我建议你拿一个 parent div 把图片和文字放在里面。
您的示例网站也使用了这种技术。 check their code here
另一种技术是使用 HTML canvas。但是对于像这样简单的事情,HTML canvas 就太过分了。
您创建一个父包装器,将图像和所有 div 放入其中。 父级是相关的,div 是绝对的。
这是一个小演示。
* {
box-sizing: border-box;
margin: 0;
}
img {
max-width: 100%;
display: block;
width: 100%;
}
.parent {
position: relative;
}
.parent .box {
position: absolute;
width: calc(1.6vw + 10px); height: calc(1.6vw + 10px);
border-radius: 50%;
background-color: #fff;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
}
.parent .box.window {
top: 0;
left: 39%;
}
.parent .box.light {
top: 16%;
left: 46%;
}
.parent .box.pool {
top: 90%;
left: 50%;
}
.parent .box.plant {
top: 55%;
left: 3%;
}
<div class="parent">
<div class="box plant">1</div>
<div class="box window">2</div>
<div class="box light">3</div>
<div class="box pool">4</div><img src="https://images.pexels.com/photos/4075088/pexels-photo-4075088.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260" alt=""/>
</div>