当前位置: 首页 > 面试题库 >

仅将CSS悬停在图像上的黑色透明覆盖层?

梁锋
2023-03-14
问题内容

每当鼠标仅用CSS悬停在图像上时,我都试图在图像上添加透明的黑色覆盖层。这可能吗?我尝试了这个:

但是我无法让div出现。

<div class="image">
    <img src="http://www.newyorker.com/online/blogs/photobooth/NASAEarth-01.jpg" alt="" />
    <div class="overlay" />
</div>

.image {
  position: relative;
  border: 1px solid black;
  width: 200px;
  height: 200px;
}
.image img {
  max-width: 100%;
  max-height: 100%;
}
.overlay {
  position: absolute;
  top: 0;
  left: 0;
  display: none;
  background-color: red;
  z-index: 200;
}
.overlay:hover {
  display: block;
}

问题答案:

我建议使用伪元素代替overlay元素。由于伪元素不能添加到封闭的img元素上,因此您仍然需要包装该img元素。

<div class="image">
    <img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>

至于CSS,请在元素上设置 可选尺寸.image,并相对放置它。如果您希望获得自适应图像,则只需省略尺寸即可,但仍然可以使用(示例)。值得注意的是,尺寸必须位于父元素上,而不是img元素本身。

.image {
    position: relative;
    width: 400px;
    height: 400px;
}

给子img元素设置100%父元素的宽度,然后添加vertical-align:top以修复默认的基线对齐问题。

.image img {
    width: 100%;
    vertical-align: top;
}

对于伪元素,设置内容值并将其相对于.image元素绝对定位。的宽度/高度100%将确保它适用于变化的img尺寸。如果要过渡元素,请设置其不透明度0并添加过渡属性/值。

.image:after {
    content: "\A';
    position: absolute;
    width: 100%; height:100%;
    top:0; left:0;
    background:rgba(0,0,0,0.6);
    opacity: 0;
    transition: all 1s;
    -webkit-transition: all 1s;
}

将鼠标1悬停在伪元素上时,请使用不透明度,以方便过渡:

.image:hover:after {
    opacity: 1;
}

如果要在悬停时添加文本,请执行以下操作:

对于最简单的方法,只需将文本添加为​​伪元素的content值即可:

.image:after {
    content: 'Here is some text..';
    color: #fff;

    /* Other styling.. */
}

在大多数情况下,这 应该 有效但是,如果您有多个img元素,则可能不希望在悬停时显示相同的文本。因此,您可以在data-*属性中设置文本,因此每个img元素都有唯一的文本。

.image:after {
    content: attr(data-content);
    color: #fff;
}

随着content中值attr(data-content),伪元素添加从文本.image元素的data-content属性:

<div data-content="Text added on hover" class="image">
    <img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>

您可以添加一些样式并执行以下操作:

在上面的示例中,:after伪元素用作黑色覆盖,而:before伪元素是标题/文本。由于元素彼此独立,因此可以使用单独的样式来获得最佳的定位。

.image:after, .image:before {
    position: absolute;
    opacity: 0;
    transition: all 0.5s;
    -webkit-transition: all 0.5s;
}
.image:after {
    content: "\A';
    width: 100%; height:100%;
    top: 0; left:0;
    background:rgba(0,0,0,0.6);
}
.image:before {
    content: attr(data-content);
    width: 100%;
    color: #fff;
    z-index: 1;
    bottom: 0;
    padding: 4px 10px;
    text-align: center;
    background: #f00;
    box-sizing: border-box;
    -moz-box-sizing:border-box;
}
.image:hover:after, .image:hover:before {
    opacity: 1;
}


 类似资料:
  • 我有以下HTML: 这是,它在悬停时导致图像上的覆盖: 以上所有的工作都很好,我很高兴。 问题是,我在标记中还有一个“阅读更多”按钮,当它悬停在上面时,我也想显示覆盖图像。我想我应该使用jQuery来实现这一点。 我有以下脚本: 脚本工作得很好,但当我将按钮悬停并尝试将图像时,覆盖层将不再出现。 所以总结一下: 当使用类悬停在上时,我使用CSS显示一个覆盖层,它起作用了。我使用jQuery在悬停在

  • 因此,我正在创建一个代表自动售货机的GUI。我只是遇到了一些问题,试图让布局按我想要的方式工作。我的想法是在JLabel中插入一个图像,然后在特定位置用透明JButton覆盖该图像,这样当您在特定位置单击图像时,它将触发JButton。我还没有达到透明性,因为我目前正专注于如何将JButton精确地放置在需要的位置。 我已经尝试过setLoctionandsetBound,但没有成功。任何关于如何

  • 问题内容: 我的页面布局涉及很多绝对位置和z索引位置,因此有很多元素相互重叠。 元素之一仅包含文本,它悬停在许多其他事物之上。 在该元素下方,有几个应用了CSS悬停伪类的元素。 当鼠标经过包含文本的元素时,我想以某种方式使下面的Element响应鼠标的存在并激活伪类样式。 有没有什么样式的元素,以便它允许悬停通过它传递给下面的任何元素? 使用JavaScript并不是很难,但是为了使事情尽可能简单

  • #klem1,#klem2 { opacity:0.4; filter:alpha(opacity=40); /* For IE8 and earlier */ } #klem1:hover,#klem2:hover { opacity:1.0; filter:alpha(opacity=100); /* For IE8 and earlier */ } div.background { widt

  • 问题内容: 将鼠标悬停在缩略图上时,图像会向右移动一点,并且仅在Chrome上发生。 我的CSS: 问题答案: 另一个解决方案是使用 在具有不透明度的悬停元素上。背面可见性与有关,由于这是特定于Webkit的问题,因此只需要指定webkit的背面可见性即可。还有其他供应商前缀。

  • 假设我有一个视频和一个图像(碰巧包含一个alpha通道)。我可以像这样在视频上混合这个图像: (为了可读性,这里使用了多行,通常这是一个命令行)。 有没有一种方法可以添加一个自定义的整体不透明度或透明度混合因子,比如或其他什么,这会使图像只有50%的可见性?