【问题标题】:How do I make p appear on hover ONTOP of an image?如何让应用程序出现在图像顶部悬停时?
【发布时间】:2019-05-25 18:09:35
【问题描述】:

我知道重叠的问题已被多次回答,但是,我试图将文本放在图像顶部,一旦悬停就居中。 我尝试了 z-index,我尝试了相对和绝对,决定寻求帮助。

.flex-container {
    display: flex;
    flex-direction: row;
    align-items: center;
    flex-wrap: wrap;
    margin: 0;
    padding-left: 7%;
    padding-right: 7%;
    padding-top: 25px;
    padding-bottom: 50px;
    justify-content: center;

}
.flex-container div {
    margin: 0;
    position: relative;
    margin-bottom: -5px;
    font-size: medium;
    text-align: center;
    z-index: 0;
}

.flex-container div:hover {
    filter: brightness(50%);
}

.flex-container div p {
    display: none;
}

.flex-container div:hover p {
    position: absolute;
    color: black;
    z-index: 1;
    text-align: center;
}
<div>
    <a href="Printing/menus.html">
        <img src="../Images/menus-01.png" alt="Printing" style="width:100%; height:auto;"/>
    </a>
    <p>Menus</p>
</div>

【问题讨论】:

  • 您的 HTML 中没有带有 .flex-container 的元素吗?您需要将父 div 设置为相对位置,然后在要重叠的 p 元素上设置绝对位置。您的 :hover 事件应该只显示:子 p 元素的块。
  • HTML 中的.flex-container 元素在哪里?
  • 对不起,我没有将它添加到代码中。我已经进行了编辑

标签: html css


【解决方案1】:

您应该先设置文本 CSS,然后将鼠标悬停以显示样式,另外,您忘记在代码中设置容器样式。

看看是不是你想要的:

HTML:

<div class="container">
  <img src="../Images/menus-01.png" alt="Image" style="width:100%;">
  <div class="topTxt">Text on Center/div>
</div>

CSS:

.container {
  position: relative;
  text-align: center;
}

.topTxt {
  position: absolute;
  display: none;
  top: 0;
  left: 50%;
  transform: translate(-50%, 0%);
}

.container:hover .topTxt {
  display: block;
}

使用 JavaScript:

document.getElementsByClass("container").addEventListener("mouseover", function() {
  document.getElementsByClass("topTxt").style.display = "block";
});

获取以下 sn-p 以更好地查看您的请求:

#container {
  max-width: 900px;
  margin: 0 auto;
  padding: 5px;
  font-size: 0;
  list-style: none;
  background-color: #444;
}

#container li {
  display: inline-block;
  width: 25%;
  vertical-align: middle;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.container-cells {
  margin: 5px;
  box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);
  display: block;
  position: relative;
  overflow: hidden;
}

.imgs {
  display: block;
  width: 100%;
  height: auto;
  border: none;
  filter: brightness(100%);
  transition: all 0.3s;
}

#container li:hover .imgs {
  filter: brightness(50%);
}

.overlay {
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  width: 100%;
  height: 0px;
  margin: auto;
  background: #000;
  background-size: 50px 50px;
  transition: all 0.3s;
}

#container li:hover .overlay {
  height: 30px;
}

.title {
  display: block;
  padding: 5px 30px;
  box-sizing: border-box;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 40px;
  text-align: center;
  font-size: 18px;
  color: white;
  opacity: 0;
  transform: translateY(-20px);
  transition: all .3s;
}

#container li:hover .title {
  transform: translateY(0px);
  opacity: 0.9;
}

@media (max-width: 9000px) {
  #container li {
    width: 25%;
  }
}

@media (max-width: 700px) {
  #container li {
    width: 33.33%;
  }
}

@media (max-width: 550px) {
  #container li {
    width: 50%;
  }
}
<ul id="container">
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
  <li>
    <a class="container-cells" href="#">
      <img class="imgs" src="https://www.madpaws.com.au/wp-content/uploads/2019/02/Raise-Your-Kitten-to-Use-the-Litter-Box-300x200.jpg">
      <span class="overlay"></span>
      <span class="title">Hello World !</span>
    </a>
  </li>
</ul>

你只需要把文字放在图片之前,因为无论哪种方式,图片都是背景,只要加上之前的文字,那么图片和文字就会是兄弟姐妹,而不是父子关系,所以效果悬停不会影响孩子,因此,文本颜色将保留而无需应用过滤器。

【讨论】:

  • 仍然出现在下方
  • 抱歉,它确实有效。我已将相关属性放在 .container div 上。不过我有一个问题。我也有filter: brightness(50%) 悬停。所以它把白色变成灰色。有没有办法让 .topTxt 保持白色?我试过z-index: 1;
  • 尝试将您的风格从filter更改为opacity,因此在悬停时更改为opacity: 0.5;
  • 请记住,您还可以包含一个 JS addEventListener 来进行此更改并使用 style.opacity = "0.5" 应用它
  • 我宁愿变暗而不是淡出。但是关于不透明度,那不也适用于文本吗?因为它在.flex-container div 下?我还没有学过任何javascript,但是如果有什么可以解决这个问题的,如果你能帮助我,我将不胜感激
【解决方案2】:

也许您正在寻找以下内容?

How to put text over images in html?

答案建议使用“div”标签而不是“img”标签。这是一个例子:

 .image {
       width:400px; 
       height:400px; 
       background-image: url(http://lorempixel.com/output/cats-q-c-640-480-4.jpg);
       background-size:cover;
 }
&lt;div class="image"&gt;Text on top of image&lt;/div&gt;

【讨论】:

  • 虽然这可能会回答问题,但您应该将相关代码放在这里,否则这可能是评论。您还可以将问题标记为可能重复的问题。
  • 我希望它是流畅的,所以我尝试将 px 替换为 %,然后它使用了 100% 的文本,而不是图像
  • 如果你想为 div 使用百分比,你需要在 css 中添加 "position:absolute"。
  • 还是不行。现在比文字宽了,但是高度设置为auto的文字高度
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
相关资源
最近更新 更多