【问题标题】:Highlight div on hover and fade out other divs using just css3在悬停时突出显示 div 并仅使用 css3 淡出其他 div
【发布时间】:2013-10-03 22:52:16
【问题描述】:

当一个 div 在悬停时突出显示时,我正在尝试淡化其他 div。 我知道使用 jquery 可以做到这一点,但我想知道仅使用 css3 是否有可能。

我确实尝试在下面的代码中使用 jquery,但因为 div 从一开始就没有 .highLight 类,只有在悬停时,所有的 div 最终都会因为使用 .panel:not(.highLight){opacity:0.5;}

而从一开始就淡出

希望这是有道理的。

jQuery

$('.panel').hover(function(){
        $(this).toggleClass('highLight');
});

CSS

.highLight{
    background-color: #333333;
}
.panel{
    -webkit-transition:0.3s;
    transition:0.3s;
    opacity:1;
}
.panel:not(.highLight){
    opacity:0.5;
}

HTML 下面

<section id="areas">
<div class="container content">

    <div class="projects">
        <div class="panel">
        </div>
    </div>
    <div class="blog">
        <div class="panel">
        </div>
    </div>
    <div class="contact">
        <div class="panel">
        </div>
    </div>
</div>
</section>

【问题讨论】:

  • 没有 jsBin,没有 jsFiddle :(
  • 你能不能不这样做:jsfiddle.net/Jf5AP
  • 这里有一个link 来传达这个想法,此时所有它都被突出显示,我试图让 .panel 在悬停时突出显示,而其他的则消失。 @SombreErmine 您的示例仅显示悬停状态,其他 div 没有消失。

标签: jquery html css


【解决方案1】:

您要调整当前项目的唯一选择器是:

#areas:hover > div {
    opacity: 0.5;
    -webkit-transition: all 0.5s linear;
    transition: all 0.5s linear;
}
#areas:hover > div:hover,
#areas:hover > div:hover * {
    opacity: 1;
    background-color: #ffa;

    -webkit-transition: all 0.5s linear;
    transition: all 0.5s linear;
}

到:

.panel
{
    opacity: .5;

    -webkit-transition: all 0.5s linear;
    transition: all 0.5s linear;
}

#areas:hover > div:hover .panel 
{
    opacity: 1;
    background-color: #ffa;

    -webkit-transition: all 0.5s linear;
    transition: all 0.5s linear;
}

css 的第一部分是没有选择面板时,因此是默认布局。我只是将不透明度设置为 0.5 以使其可见,但您也可以完全淡出它。
现在,第二部分发生在您将 div 元素悬停在#area div 中或悬停在#area div 本身时。 css 设置只会为 .panel 设置。在这种情况下,不透明度将设置为 1,并且将设置浅色背景色。
因此,在这种情况下,悬停只是触发器,它之后的元素将是实际使用的元素。

Example

编辑

现在如果你想添加功能让非悬停的元素在你悬停时消失,你应该添加这个代码:

#areas:hover > div:not(:hover) > .panel
{
    opacity: 0; 

    -webkit-transition: all 0.5s linear;
    transition: all 0.5s linear;
}

我确实使用:not() 选择器来排除 :hover 伪类。
所以在这种情况下,#area 是触发器,div 是排除器,.panel 是实际生效的元素。

jsFiddle

【讨论】:

  • 效果很好,但我也试图在突出显示一个框的同时淡出其他框。
  • 嗨,我使用了代码并且它有效。这是工作的链接。 jsfiddle.net/r1chyr1ch/5wyt5/15 我确实删除了一个 div,因为原本我在
    之前就有了它,但现在我将这个类移到了
    中。 谢谢
【解决方案2】:

这个 CSS 怎么样

#areas .panel {
    -webkit-transition:0.3s;
            transition:0.3s;
}    

#areas:hover .panel {
    opacity: 0.5;
}

#areas:hover .panel:hover {
    opacity: 1;
}

在这里演示 - http://jsfiddle.net/ytsTR/

【讨论】:

  • 当您的中间 div 带有光标时,由于#areas.@phil 上的不透明悬停状态,所有 div 仍然淡出。我在这里有一个演示来展示我正在做的事情。 jsfiddle.net/r1chyr1ch/5wyt5/7
  • 我试图让曲线框 (.panel) 在悬停时突出显示,而其他框则淡出。 @菲尔
【解决方案3】:

我建议最简单的:

/* aesthetics, this block doesn't really matter; it's just to help visualise */
section, div {
    border: 1px solid #000;
    min-height: 2em;
    line-height: 2em;
    width: 90%;
    margin: 0.5em auto;
}

section div {
    opacity: 0.5;
    background-color: #fff;
    /* vendor-prefixes stripped for brevity */
    transition: all 0.5s linear;
}

section > div:hover,
section > div:hover * {
    opacity: 1;
    background-color: #ffa;
    /* vendor-prefixes stripped for brevity */
    transition: all 0.5s linear;
}

JS Fiddle demo.

假设您希望它们完全可见,直到悬停 section

section > div {
    opacity: 1;
    background-color: #fff;
    /* vendor-prefixes stripped for brevity */
    transition: all 0.5s linear;
}

section:hover > div {
    opacity: 0.5;
    /* vendor-prefixes stripped for brevity */
    transition: all 0.5s linear;
}

section:hover > div:hover,
section:hover > div:hover * {
    opacity: 1;
    /* vendor-prefixes stripped for brevity */
    transition: all 0.5s linear;
}

JS Fiddle demo.

【讨论】:

  • 我认为他希望初始状态完全不透明,直到其中一个悬停
  • @Phil:是的,同意;正如你评论的那样写下来。 :)
  • 感谢您的回复。这确实有效,但如果你将鼠标悬停在部分 div 上,它会在我需要它仍然完全不透明时全部淡出。
  • 这里有一个link 来展示我正在做的事情。想知道是否可以只更改悬停时的 .panel?目前它改变了 .btn 颜色,我只希望面板颜色改变,而其他面板在悬停时消失。
【解决方案4】:

/// css

  .content .testing {
          -moz-transition: opacity 0.5s linear;
          -o-transition: opacity 0.5s linear;
          -webkit-transition: opacity 0.5s linear;
          transition: opacity 0.5s linear;
  }

   .content:hover .testing {
           opacity: 0.5;
   }

   .content .testing:hover {
          opacity: 1 !important;
   }

///html

    <section id="areas">
        <div class="container content">

            <div class="projects testing">
              <div class="panel">
               Div one
            </div>
       </div>

       <div class="blog testing">
            <div class="panel">
                 Div two
       </div>

       </div>
            <div class="contact testing">
                 <div class="panel">
                     Div three
                 </div>
             </div>
           </div>
      </div>
   </section>

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多