动画CSS3:显示+不透明度

Ale*_*ieu 85 css animation css3

我遇到了CSS3动画的问题.

.child {
    opacity: 0;
    display: none;

    -webkit-transition: opacity 0.5s ease-in-out;
    -moz-transition: opacity 0.5s ease-in-out;
    transition: opacity 0.5s ease-in-out;
}

.parent:hover .child {
    opacity: 0.9;
    display: block;
}
Run Code Online (Sandbox Code Playgroud)

此代码仅在我删除更改时才有效display.

我想在悬停后立即更改显示,但应使用过渡更改不透明度.

Chr*_*ris 104

根据Michaels的回答,这是要使用的实际CSS代码

.parent:hover .child
{
    display: block;

    -webkit-animation: fadeInFromNone 0.5s ease-out;
    -moz-animation: fadeInFromNone 0.5s ease-out;
    -o-animation: fadeInFromNone 0.5s ease-out;
    animation: fadeInFromNone 0.5s ease-out;
}

@-webkit-keyframes fadeInFromNone {
    0% {
        display: none;
        opacity: 0;
    }

    1% {
        display: block;
        opacity: 0;
    }

    100% {
        display: block;
        opacity: 1;
    }
}

@-moz-keyframes fadeInFromNone {
    0% {
        display: none;
        opacity: 0;
    }

    1% {
        display: block;
        opacity: 0;
    }

    100% {
        display: block;
        opacity: 1;
    }
}

@-o-keyframes fadeInFromNone {
    0% {
        display: none;
        opacity: 0;
    }

    1% {
        display: block;
        opacity: 0;
    }

    100% {
        display: block;
        opacity: 1;
    }
}

@keyframes fadeInFromNone {
    0% {
        display: none;
        opacity: 0;
    }

    1% {
        display: block;
        opacity: 0;
    }

    100% {
        display: block;
        opacity: 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 什么时候徘徊,如何实现fadeOutToNone? (16认同)
  • 因为你可以使用百分之几的分数,所以最好使用0.001%而不是1%的东西,因为它最大限度地减少了"开始"的延迟,这可以通过更长的动画持续时间变得明显 (4认同)
  • -o-keyframes 指令实际上是无用的,因为第一个支持动画的 Opera 版本已经基于 webkit。 (2认同)

Mic*_*any 39

您可以使用CSS动画:

0% display:none ; opacity: 0;
1% display: block ; opacity: 0;
100% display: block ; opacity: 1;
Run Code Online (Sandbox Code Playgroud)

  • 有人可以解释一下,如何使用这段代码? (4认同)
  • 你可以使用fill-mode:forwards在动画结束后保持更改. (2认同)

小智 33

如果可能 - 使用visibility而不是display

例如:

.child {
    visibility: hidden;
    opacity: 0;
    transition: opacity 0.3s, visibility 0.3s;
}

.parent:hover .child {
    visibility: visible;
    opacity: 1;
    transition: opacity 0.3s, visibility 0.3s;
}
Run Code Online (Sandbox Code Playgroud)

  • 可见性属性的问题在于,它不会隐藏元素,只会使其不可见.所以它仍然会占用空间. (21认同)
  • 不仅是隐形的,而且对事件(点击等)也是透明的.不改变显示意味着不回流文件,这是一件好事.大多数应该通过不透明度淡入/淡出的元素应该具有固定或绝对位置. (5认同)

Her*_*arz 9

此解决方法有效:

  1. 定义一个"关键帧":

    @-webkit-keyframes fadeIn { 
      0% { opacity: 0; }
      20% { opacity: 0; }
      40% { opacity: 0.3; }
      60% { opacity: 0.5; }
      80% { opacity: 0.9; }
      100% { opacity: 1; }
    }
    
    @keyframes fadeIn {
      0% { opacity: 0; }
      20% { opacity: 0; }
      40% { opacity: 0.3; }
      60% { opacity: 0.5; }
      80% { opacity: 0.9; }
      100% { opacity: 1; }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在"悬停"上使用此"关键帧":

    div a span { 
      display: none;
    }
    
    div a:hover span {
      display: block;
    
      -webkit-animation-name: fadeIn;
      -webkit-animation-duration: 1s;
      animation-name: fadeIn;
      animation-duration: 1s;
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 8

我用它来实现它.它们在悬停时褪色,但隐藏时不占空间,完美!

.child {
    height: 0px;
    opacity: 0;
    visibility: hidden;
    transition: all .5s ease-in-out;
}

.parent:hover child {
    height: auto;
    opacity: 1;
    visibility: visible;
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*ieu 6

我改变了一点,但结果很美.

.child {
    width: 0px;
    height: 0px;
    opacity: 0;
}

.parent:hover child {
    width: 150px;
    height: 300px;
    opacity: .9;
}
Run Code Online (Sandbox Code Playgroud)

谢谢大家.

  • 这不适合屏幕阅读器:他们会继续阅读内容. (4认同)

Raf*_*lKr 5

还有另一种很好的方法可以通过使用指针事件来完成这项工作:

.child {
    opacity: 0;
    pointer-events: none;

    -webkit-transition: opacity 0.5s ease-in-out;
    -moz-transition: opacity 0.5s ease-in-out;
    transition: opacity 0.5s ease-in-out;
}

.parent:hover .child {
    opacity: 0.9;
    pointer-events: all;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,IE10及以下版本不支持此功能.