【问题标题】:Two images on each other with responsive behavior and proportional scaling具有响应行为和比例缩放的两个图像
【发布时间】:2021-04-25 06:45:38
【问题描述】:

我想在 HTML/CSS/javascript 中做一些非常标准的事情,但不知何故我现在没有找到任何解决方案:我希望多个图像相互叠加,其中一些是可点击的。例如: submarine with red circle button as window 在这种情况下,潜艇是一个 img,红色圆圈是一个 input type="image",用作按钮。

我希望这些多张图像在响应性和缩放方面表现得“一致”,这样我仍然可以看到相同的整体图像,而与我的窗口大小无关。

如果我在这里使用这个技巧:How do I position one image on top of another in HTML? 并使两个图像都具有响应性,那么圆圈不会与潜艇同时缩小。此外,由于红色圆圈以absolute 的方式定位,因此它与潜艇的位置不同。

这是我当前的代码:

    .div{
    position: relative;
    }

    .responsive {
      max-width: 100%;
    }
    
    #test2 {
    width: 12.3%;    
    position:absolute;
    z-index: 2;
    left: 73%;
    top: 62%;
    }
    
    #test
    {
      width: 100%;    
      position:relative;
      z-index: 1;
    }
<div>
      <img src="/submarine.png" id="test" class="responsive" />
      <input type="image" src="/red_circle.png"  id="test2" class="responsive" />
</div>

【问题讨论】:

  • 对链接问题的接受答案包括您可以用作无效示例的代码。您甚至可以将其用作对该问题进行更多尝试和研究的基础。
  • no @Hykilpikonna 不幸的是,这个解决方案不能回答我的问题。下面 Manu 的回答部分做了。我仍然有一个问题,即我的网站设计是用卡片构建的,这些卡片会根据窗口大小而改变大小,但是是逐步的,所以不是以连续响应的方式。由于红色圆圈在这张卡片中以绝对方式定位,而潜艇在同一张卡片中以相对方式定位,一旦卡片改变大小,红色圆圈不再正确定位。你明白我的意思吗?

标签: javascript css image responsive-design scaling


【解决方案1】:

为了实现这一点,您可以使用百分比,因此如果您减小窗口的比例,图像的大小也会随之减小。

CSS:

.submarine {
  width: 30%;
  height: 55%;
  position: relative;
}

.redDot {
  width: 2%;
  position: absolute;
}

HTML:

<div>
  <img src="submarine.jpg" clas="submarine">
  <img src="redDot.png" class="redDot">
</div>

然后用其他边距来定位潜艇中的红点。

【讨论】:

  • 非常感谢 Manu 的快速答复!它让我离目标更近了一步。我仍然遇到的问题是,我的网站设计是用卡片构建的,这些卡片会根据窗口大小而改变大小,但是是逐步的,所以不是以连续响应的方式。由于红色圆圈在这张卡片中以absolute 方式定位,而潜艇在同一张卡片中以relative 方式定位,一旦卡片改变大小,红色圆圈就不再正确定位。你明白我的意思吗?
  • 是的,我明白了。我发现它的解决方案很简单,将父 div(包含图像的那个)设为相对,并使用属性移动图像:topbottomrightleft,而不是使用@987654329 @。如果你不明白我在说什么,我可以做一个 sn-p
  • 感谢您的帮助!我更近了一步,但我认为我仍然有一种奇怪的行为。我试图尽可能地描述它。我在我的原始帖子中附上了一张图片,网站的窗口宽度相对于屏幕宽度不同,这确实向您展示了我的意思。我也会尝试添加我当前的 sn-p。
  • 好的,我想我设法按照自己的意愿添加了图像和当前代码。再次感谢您的帮助!
【解决方案2】:

百分比的尺寸和位置与父元素的尺寸有关。在您的情况下,潜艇的窗口应定位为潜艇尺寸的百分比。要做到这一点,你应该做的就是把窗户小时候放在潜艇里。最简单的方法是使用带有背景图像的 div 并使用 background-size: 100% 使背景图像随元素缩放。

您也可以使用“padding-bottom 技巧”将 div 的“高度”设置为父级宽度的百分比。

#submarine {
  background: yellow;
  width: 30%;
  padding-bottom: 20%;
  position: absolute;
  left: 20%;
  top: 20%;
 }
 
 #window{
   position: absolute;
   background: red;
   width: 20%;
   padding-bottom: 20%;
   right: 5%;
   top: 40%;
   background: red;
 }
<div id="submarine">
  <div id="window"></div>
</div>

【讨论】:

  • 感谢您的回答!我测试了它,但不幸的是我没有得到我想要的。我尝试了一个使用 img 区域的解决方案,但是如果不使用我想避免的 jquery,它就没有响应。不,我正在寻找一种简单的方法来创建矢量折线,以便拥有响应式可点击区域。非常感谢您的帮助!!!
  • 我认为 svg 图像会更好,它们是用矢量构建的,并且几乎可以自动缩放。我在这里做了一个例子:jsfiddle.net/n5tz7vaq(svg 绘图是用editor.method.ac 制作的)。 “潜艇”和红点在一个 svg 中,但或者您可以将它们放在不同的 html 元素中,并将 svgs 用作背景图像,并在我的回答中使用该技术。然后你可以使用一个输入元素并使用 svg 作为背景(如果你真的需要输入元素)。但是输入元素总是一种矩形(您可以应用边界半径,仅此而已)。
猜你喜欢
  • 2014-05-27
  • 2021-02-27
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多