【问题标题】:fade background image and then show text(not faded) on hover淡化背景图像,然后在悬停时显示文本(不淡化)
【发布时间】:2017-06-08 16:30:42
【问题描述】:

我有一个图像,在悬停时,我希望不透明度为 0.7,然后显示隐藏文本。 我有它的工作,但文本也会褪色,因为它是褪色图像的孩子。

有没有办法解决这个问题,让文字不会褪色?

要考虑的事情是整个事情都将在引导程序中,并且图像是从数据库和文本动态加载的。

这是我目前所做的工作(感谢在这个网站上研究其他线程)。

html

<div class="portfolioImage" style="background-image: url('http://placekitten.com/200/150');">
    <div class="footerBar">A Sample Image</div>
</div>

css

.portfolioImage {
   width: 200px;
   height: 150px;
   position: relative;
   -webkit-transition: all 0.3s ease;
   -moz-transition:    all 0.3s ease;
   -o-transition:      all 0.3s ease;
   ms-transition:     all 0.3s ease;
   transition:         all 0.3s ease; 
   opacity: 1.0;
   z-index: 3;
}

.footerBar {    
   position: relative;
   top: 50%;
   transform: translateY(-50%);
   display: none;
   text-align:center;
   color:#000;
}

jQuery

$('.portfolioImage').hover(function(){                      
        $(this).css({"opacity":"0.7"});
        $('.footerBar').css('display','block');
        }, 
        function () {
            $(this).css({"opacity":"1.0"});
            $('.footerBar').css('display','none');
        }
    );

这里有一个显示示例的小提琴 jsfiddle

非常感谢任何帮助

【问题讨论】:

  • html 标记是否必须保持原样?或者您可以将 div 内的图像绝对定位,使用 div 作为包装器?
  • 不接受任何建议

标签: jquery html css opacity


【解决方案1】:

最简单的解决方案是不针对整个包含 div,这就是为什么一切都在降低不透明度的原因,所以我会将图像放在自己的 div 中,相应地定位它,然后简单地降低图像 div 上的不透明度,保持其他一切“原样”:

Working fiddle demo here: http://jsfiddle.net/g8n0csca/1/

Javascript

$('.portfolioImage').hover(
   function() {
         $(this).find(".image_frame").addClass("lowerOpacity");
}, function(){
     $(this).find(".image_frame").removeClass("lowerOpacity");
});

HTML

<div class="portfolioImage">
    <div class="footerBar">A Sample Image</div>
    <div class="image_frame" style="background-image: url('http://placekitten.com/200/150');">
</div>

CSS

.portfolioImage {
    width: 200px;
    height: 150px;
    position: relative;
}

.footerBar {    
     position: absolute;
     padding-top:50%;
     overflow:hidden;
     width:100%;
     height:20%;
     color:#000;
     transform: translateY(-50%);
     text-align:center;
     z-index:1;
}

.image_frame {
    width:100%;
    height:100%;
    -webkit-transition: all 0.3s ease;
    -moz-transition:    all 0.3s ease;
    -o-transition:      all 0.3s ease;
    ms-transition:      all 0.3s ease;
    transition:         all 0.3s ease; 
    position:absolute;
    z-index:2;
    opacity: 1.0;    
}

.lowerOpacity { opacity:0.7; }

Working fiddle demo here: http://jsfiddle.net/g8n0csca/1/

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    这里根本不需要 JS。只需像这样更改您的代码:

    <div class="portfolio-item">
        <img src="blah-blah-blah" />
        <p>Some text</p>
    </div>
    

    还有这样的css:

    .portfolio-item {
        position: relative;
        width: 200px;
        height: 100px;
        overflow: hidden;
    }
    .portfolio-item > img {
        transition: all 0.2s ease;
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        opacity: 1;
    }
    .portfolio-item > p {
        transition: all 0.2s ease;
        opacity: 0;
    }
    .portfolio-item:hover > img {
        opacity: 0;
    }
    .portfolio-item:hover > p {
        opacity: 1;
    }
    

    这种方法的一个问题是当投资组合项目块必须具有它的图像大小时,你不能使用它。

    但如果不是,您甚至可以通过将顶部、右侧、底部和左侧更改为 -999px 并设置“margin: auto”来显示图像中心。您也可以(当然)设置图像最大宽度和/或最大高度。

    【讨论】:

      【解决方案3】:

      WORKING FIDDLE

      有一个解决方法,只是它不是最好的,但它有效! 您必须在父级内部创建另一个 div,这就是图像。

      <div class="portfolioImage">
              <div class="image" style="width: 100%; height: 100%; background-image: url('http://placekitten.com/200/150');"></div>
              <div class="footerBar">A Sample Image</div>
      </div>
      

      文本不会是图像的子元素,也不会再次淡出。

      【讨论】:

        【解决方案4】:

        使用 rgb:

        $('.portfolioImage').hover(function(){                      
                    $(this).css({"rgb":"0,0,0,0.7"});
                    $('.footerBar').css('display','block');
                    }, 
                    function () {
                        $(this).css({"opacity":"1.0"});
                        $('.footerBar').css('display','none');
                    }
                );
        

        更多详情请见:Opacity of background-color, but not the text

        【讨论】:

        • 我更改了代码,但现在背景图像不褪色jsfiddle.net/s5ozf1r8/3
        • 除非 background-image 可以用 background-color 或 css 渐变替换,否则这不太可能解决问题。
        • corelangs.com/css/box/hover.html (Image Hover Text Overlay) 在 google 上找到了这个,可能会按照你想要的方式工作,只需添加过渡效果。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2014-03-29
        • 2014-06-04
        • 1970-01-01
        • 2014-07-24
        相关资源
        最近更新 更多