【问题标题】:How can adjust images overlay size relative to img size如何相对于 img 大小调整图像叠加大小
【发布时间】:2017-03-07 19:32:30
【问题描述】:

我想在我的图像上设置一个叠加层,当我悬停图像时,一个叠加层会出现在图像上,并且与图像大小相同。当我调整窗口大小时,叠加层应该会自动调整大小。

我尝试了一些 JS 代码,但不起作用。它总是将宽度/高度设置为 0px。

请告诉我如何解决这个问题。

var portImg = document.getElementById("portimg");
var overlay = document.getElementsByClassName("overlay");
var overlayh = overlay.style.height = portImg.clientHeight;
var overlayw = overlay.style.width = portImg.clientWidth;
/*
tried this 1 too

clientHeight + "px";
clientWidth + "px";
*/
.col-sm-6 {
  position: relative;
}

.img-container {
  width=100%
}

.img-container img {
  width=100%
}

.overlay {
  position: absolute;
  margin-top: 20px;
  text-align: center;
}

.overlay:hover {
  transform: rotate(0deg);
  opacity: .95;
}
<div class="col-sm-6">
  <div class="overlay">
  </div>
  <!-- overlay continer -->

  <div class="img-container">
    <img id="portimg" src="images/port.jpg" alt="">
  </div>
  <!-- img container -->
</div>
<!-- col -->

【问题讨论】:

  • 你在覆盖什么?
  • 在图片上。每当我将鼠标移到所需的 img 上时。样本写在上面。
  • 什么你想叠加?文本?另一张图片?
  • 这里是截图。 prntscr.com/eh84v6
  • 所以你想覆盖额外的内容。 Michael Coker 为您提供了一个非常接近您需要做的答案。如果您对要求有更具体的了解,我相信他会更新他的答案以更准确地反映它们。

标签: javascript jquery html css image


【解决方案1】:

您可以使用自己的元素或伪元素单独使用 CSS 设置叠加层。在叠加层上使用absolute 定位,在父级上使用relative 定位,叠加层会随着父级自动缩放。

.img-container {
  position: relative;
}

.img-container img {
  display: block;
  width: 100%;
}

.overlay {
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  text-align: center;
  opacity: 0;
  transition: opacity .25s;
  background: black;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1em;
}

.img-container:hover .overlay {
  opacity: .5;
}
<div class="img-container">
  <img id="portimg" src="http://kenwheeler.github.io/slick/img/fonz1.png" alt="">
  <div class="overlay">overlay</div>
</div>

如果您仍希望通过 javascript 控制叠加层的宽度和高度,我将创建一个与高度匹配的函数,并在页面加载以及windowresize 事件上调用它。

.img-container {
  position: relative;
}

.img-container img {
  display: block;
  width: 100%;
}

.overlay {
  position: absolute;
  top: 0; left: 0; 
  /* right: 0; bottom: 0; */
  text-align: center;
  opacity: 0;
  transition: opacity .25s;
  background: black;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1em;
}

.img-container:hover .overlay {
  opacity: .5;
}
<div class="img-container">
  <img id="portimg" src="http://kenwheeler.github.io/slick/img/fonz1.png" alt="">
  <div class="overlay" id="overlay">overlay</div>
</div>

<script>
  function matchHeight() {
  var img = document.getElementById('portimg'),
      overlay = document.getElementById('overlay');
  overlay.style.width = img.offsetWidth + 'px';
  overlay.style.height = img.offsetHeight + 'px';
}

window.addEventListener("load",function() {
  matchHeight();
});

window.addEventListener("resize", function() {
  matchHeight();
});
</script>

【讨论】:

  • OP 想要覆盖内容(每个 cmets 提问)。也许您可以更新您的答案以反映这一点。
  • @FaisalImran 就像我提到的,您可以使用伪元素或普通元素。只需在 html 中添加一个普通元素 (div.overlay) 并更改 CSS 中的伪元素选择器以反映新元素。
  • @MichaelCoker 谢谢先生。这很有用。但如果你能提供 JavaScript 代码,这个线程与 JavaScript 相关。
  • @FaisalImran 对 JavaScript 有什么要求?只是为了看看它是如何在 JS 中完成的?如果你需要的东西可以通过 CSS 来完成,那就走那条路。尤其是当 CSS 比 JS 对应物更少涉及时。
  • @FaisalImran 没问题。刚刚用 JS 解决方案更新了我的答案。我不知道当你可以只使用 CSS 时你为什么会这样做。 JS 的性能会低得多,因为它必须手动设置高度/宽度,并且每次调整窗口大小都会触发手动工作,这根本没有性能。
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多