【问题标题】:Css absolute positioned element over background image (responsive)背景图像上的 Css 绝对定位元素(响应式)
【发布时间】:2017-08-14 11:25:18
【问题描述】:

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

这是我的 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 在此输入代码

【问题讨论】:

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


    【解决方案1】:

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

    您可以使用 CSS 技巧的完美组合来获得在任何设备/显示器中的图像上定位元素的良好表现方式:看看下面的 sn-p

    请注意,容器外的所有内容都按vh 调整大小,即视口高度。这也可以使用vw(视口宽度)来完成,我使用一些media queries 来检测纵横比。

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

    sn-p 还使用巧妙的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>

    【讨论】:

      【解决方案2】:

      我认为 CSS Transform-translate 在对齐元素方面很有帮助?也许你试一试?您可以定义小图始终保持在大图高度的 25% 左右:

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

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

      【讨论】:

      • 谢谢!我已经尝试过了,但不幸的是,结果与我的示例相同......
      【解决方案3】:

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

      【讨论】:

      • 感谢您的快速回复。我已经尝试过使用 vh 和 vw,但我得到了相同的结果......你知道如何使用 JS 来做到这一点吗?
      • 我现在正在工作,所以我无法详细说明代码,但是当我大约 8 小时后回到家时,如果没有人解决您的问题,我会看看我能做些什么。跨度>
      • 那太好了!非常感谢!同时,我会继续努力解决它,所以如果我能解决它,我会告诉你。
      • 我突然想到你可能没有调整第二个元素的大小,你使用 vw 一个,% 另一个尝试使用 % ,以及 200px 的 div可能会干扰它,将所有内容更改为 %
      猜你喜欢
      • 2016-11-25
      • 2017-01-20
      • 1970-01-01
      • 2023-03-11
      • 2021-05-19
      • 2012-09-18
      相关资源
      最近更新 更多