当前位置: 首页 > 知识库问答 >
问题:

链接上的悬停操作后图像覆盖悬停失败

陶璞
2023-03-14

我有以下HTML:

<div class="post-box">
       <a href='<?php the_permalink() ?>'>
            <span class='overlay'></span>
            <div class='post-img' style="background-image:url('<?php echo wp_get_attachment_url(get_post_thumbnail_id($post->ID)) ?>');"></div>
       </a>
       <a class='post-title' href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
       <p><?php the_excerpt(); ?></p>
       <a  class='read-more' href="<?php the_permalink(); ?>">Read more</a>
 </div>

这是CSS,它在悬停时导致图像上的覆盖:

.post-img{
    height:300px;
    width: 100%;
    background-size:cover;
    transition : opacity 200ms ease-out; 
    -webkit-transition : opacity 200ms ease-out; 
    -moz-transition : opacity 200ms ease-out;
    -o-transition : opacity 200ms ease-out;    
}
.post-img:hover{
  opacity:0.5;
}
span.overlay {
    background-color: #f39300;
    cursor: pointer;
    height: 300px;
    width: 585px;
    position: absolute;
    left: 0;
    z-index: 10;
    opacity: 0;
}
span.overlay:hover {
  opacity: .5;
  transition: opacity 200ms ease-in;
  -webkit-transition: opacity 200ms ease-in;
  -moz-transition: opacity 200ms ease-in;
  -o-transition: opacity 200ms ease-in;
}

以上所有的工作都很好,我很高兴。

问题是,我在标记中还有一个“阅读更多”按钮,当它悬停在上面时,我也想显示覆盖图像。我想我应该使用jQuery来实现这一点。

我有以下脚本:

$(document).ready(function () {
    $('#srch-term').click(function () {
        if ($('#search-builder').is(":hidden")) {
            $("#search-builder").slideDown("fast");
        } else {
            $("#search-builder").slideUp("fast");
        }
    });
    $('.read-more').hover(
            function () {
                $img = $(this).closest('div').find('.post-img');
                $overlay = $(this).closest('div').find('.overlay');
                $img.css({
                    "opacity": "0.5"
                });
                $overlay.css({
                    "opacity": ".5",
                    "transition": "opacity 200ms ease-in",
                    "-webkit-transition": "opacity 200ms ease-in",
                    "-moz-transition": "opacity 200ms ease-in",
                    "-o-transition": "opacity 200ms ease-in"
                });
            }, function () {
        $img = $(this).closest('div').find('.post-img');
        $overlay = $(this).closest('div').find('.overlay');
        $img.css({
            "opacity": "1.0",
            "height": "300px",
            "width": "100%",
            "background-size": "cover",
            "transition": "opacity 200ms ease-out",
            "-webkit-transition": "opacity 200ms ease-out",
            "-moz-transition": "opacity 200ms ease-out",
            "-o-transition": "opacity 200ms ease-out"
        });
        $overlay.css({
            " background-color": "#f39300",
            "cursor": "pointer",
            "height": "300px",
            "width": "585px",
            "position": "absolute",
            "left": "0",
            "z-index": "10",
            "opacity": "0"
        });
    });
});

脚本工作得很好,但当我将关闭按钮悬停并尝试将打开图像时,覆盖层将不再出现。

所以总结一下:

当使用类.post-img悬停在div上时,我使用CSS显示一个覆盖层,它起作用了。我使用jQuery在悬停在带有类.read-more的链接上时显示覆盖--并且它起作用--但是当我悬停在div.post-img上时,它不再显示覆盖

你知道我哪里出了问题吗?

共有1个答案

单于耘豪
2023-03-14

hover()“exit”函数中,您直接在元素上设置opacity等:

$overlay.css({
  // ...
  "opacity": "0"
});

一旦设置,这些非常特定的样式将覆盖CSS中的任何内容,包括:hover样式。

相反,创建一个与:hover共享相同样式的类,只需在链接悬停时添加/删除该类。这也使您不必保持jQuery和CSS样式的同步。

null

$(document).ready(function() {
  $('#srch-term').click(function() {
    if ($('#search-builder').is(":hidden")) {
      $("#search-builder").slideDown("fast");
    } else {
      $("#search-builder").slideUp("fast");
    }
  });
  
  $('.read-more').hover(
    function() {
      $img = $(this).closest('div').find('.post-img');
      $overlay = $(this).closest('div').find('.overlay');
      $img.addClass('hovered');
      $overlay.addClass('hovered');
    },
    function() {
      $img = $(this).closest('div').find('.post-img');
      $overlay = $(this).closest('div').find('.overlay');
      $img.removeClass('hovered');
      $overlay.removeClass('hovered');
    });
});
.post-img {
  height: 300px;
  width: 100%;
  background-size: cover;
  transition: opacity 200ms ease-out;
  -webkit-transition: opacity 200ms ease-out;
  -moz-transition: opacity 200ms ease-out;
  -o-transition: opacity 200ms ease-out;
}

.post-img:hover, .post-img.hovered {
  opacity: 0.5;
}

span.overlay {
  background-color: #f39300;
  cursor: pointer;
  height: 300px;
  width: 585px;
  position: absolute;
  left: 0;
  z-index: 10;
  opacity: 0;
}

span.overlay:hover, .overlay.hovered {
  opacity: .5;
  transition: opacity 200ms ease-in;
  -webkit-transition: opacity 200ms ease-in;
  -moz-transition: opacity 200ms ease-in;
  -o-transition: opacity 200ms ease-in;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="post-box">
  <a href='#'>
    <span class='overlay'></span>
    <div class='post-img' style="background-image:url('http://placehold.it/200');"></div>
  </a>
  <a class='post-title' href="#">Title</a>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
    dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  <a class='read-more' href="#">Read more</a>
</div>
 类似资料:
  • 问题内容: 我有一个链接图像。当用户将鼠标悬停在链接上时,我想显示不同的图像。 目前,我正在使用以下代码: 但是我遇到了很多问题:div没有选择CSS规则(当我在Firebug中查看元素时,该元素只是没有显示相关的CSS规则)。 也许这是因为(据我所知)这是无效的HTML:您不能在周围加上。但是,如果切换到该位置,似乎会遇到更大的问题,因为您不能可靠地在span上设置高度和宽度。 帮帮我!我该如何

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

  • 问题内容: 如何更改此确切代码以对鼠标悬停产生悬停效果? 我尝试遵循其他一些问题和答案,但我无法真正遵循它们。 因此,HTML是: 现在,我要做的是当鼠标悬停在小图像上时更改大尺寸图像。 问题答案: 请尝试以下代码。工作正常 我修改了代码,希望它能稍作延迟。.但是,它不是动画。

  • 问题内容: 我知道,如果鼠标悬停在文本上方,将允许显示文本。我想知道是否可以在鼠标悬停时更改图像?提前致谢。 问题答案: 我会在您保存图片的组件中添加一个。 然后只需重写方法并 更改图像即可。 这是一个完整的工作示例:

  • 问题内容: 我从材料ui版本3升级到了4,并且想覆盖:.MuiOutlinedInput-root:hover .MuiOutlinedInput- notchedOutline 因为我认为此更新引入了悬停状态,从而改变了我当前的用户界面。 我用了createMuiTheme() 并尝试了以下方法,但没有一个起作用: 我做错了什么,希望有人可以帮忙 问题答案: 你很亲近 正确的语法是您两次尝试中各

  • 问题内容: 每当鼠标仅用CSS悬停在图像上时,我都试图在图像上添加透明的黑色覆盖层。这可能吗?我尝试了这个: 但是我无法让div出现。 问题答案: 我建议使用伪元素代替overlay元素。由于伪元素不能添加到封闭的元素上,因此您仍然需要包装该元素。 至于CSS,请在元素上设置 可选尺寸,并相对放置它。如果您希望获得自适应图像,则只需省略尺寸即可,但仍然可以使用(示例)。值得注意的是,尺寸必须位于父