Css绝对定位元素超过背景图像(响应)

时间:2017-03-22 11:16:26

标签: css responsive-design background css-position absolute

我有一个响应式背景图像,因此在调整屏幕大小时其宽度和高度会发生变化。在这个背景下,有一个绝对位置的元素。 现在,我的问题是,在调整屏幕大小时,绝对定位的元素不会在背景图像上跟随它...

这是我的HTML代码:

<section id="all">

  <div id="clicked1">
    <img class="box" src="factory.svg" width="100%" height="auto">
  </div>

</section>

CSS:

#all {
  width: 100%;
  height: 600px;
  position: relative;
  max-width: 1240px;
  background: url('beach_to_meter.svg') no-repeat;
}
#clicked1 {
  position: absolute;
  left: 27%;
  top: 28%;
  z-index: 100;
  width: 200px;
}
#clicked1 .box {
  width:14vw;
  max-width: 180px;
}

全屏是这样的: enter image description here 但是当屏幕较小时,绝对定位元素会移动,如下所示: enter image description here     在这里输入代码

3 个答案:

答案 0 :(得分:0)

如果你想要一个图像在一个确切的位置出现在另一个上面你应该尝试vw和vh(垂直宽度,垂直高度),我记得做出类似的工作。 如果这没有解决您的问题,您应该使用px,并使用javascript检测屏幕的大小,以便您知道放置元素的位置。

答案 1 :(得分:0)

我认为CSS Transform-translate在对齐元素时非常有用吗?也许你试一试?您可以定义小图片始终保持大图片高度的25%:

#clicked1 .box {
  transform:translateY(25%);
  transform:translateX(25%);
}

更多信息:https://www.w3schools.com/cssref/css3_pr_transform.asp。我没有你的图像来源,所以我无法尝试。但希望这会有所帮助。

答案 2 :(得分:0)

在背景图像上搜索绝对定位的元素我遇到了这个问题。希望我的询问能帮助到此为止的其他人。

您可以结合使用CSS技巧,以很好的方式将元素定位在任何设备/显示器上的图像上:查看下面的代码段

请注意,容器外部的所有内容的大小均按vh进行设置,witch是视口的高度。也可以使用vw(视口宽度)来完成,而我使用一些media queries来检测宽高比。

在容器内,您可以安全地使用百分比。查看.positioned元素。元素大小在vh(或vw)中,位置始终在左上方%中。

该代码段还使用了一个聪明的transform: translate(-50%, -50%);将容器放在视口的中心。

body {
  background-color: #404040;/* optional, to see position */
}
.container {
  background-image:    url(https://i.stack.imgur.com/2EzPF.jpg);
  background-size:     cover;
  height:90vh;
  width:90vh;
  background-repeat:   no-repeat;
  /* Center the container */
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%); /* magic of transform */
}
.positioned {
  background-image:    url(https://i.stack.imgur.com/jpkTo.png);
  background-size:     cover;
  height:10vh;
  width:10vh;
  position: absolute;
  top: 58%; /* Positioned on bottom left corner of factory*/
  left: 33%; /* Positioned on bottom left corner of factory*/
  opacity: 0.8; /* optional, to see position */
}
.positioned:hover {
  background-image: none;  /* optional, to see position */
}
@media (max-aspect-ratio: 1/1) {
  /* css for vertical viewport */
  .container {
    height:90vw;
    width:90vw;
  }
  .positioned {
    height:10vw;
    width:10vw;
  }
}
<div class="container">
  <div class="positioned"></div>
</div>