在 CSS3 中的目标事件上动画 :target 元素

Animate :target element on target event in CSS3

我正在构建一个基于 CSS3 选择器 :target 的灯箱,它根据 url 中的散列选择一个元素。我想在 :target 事件中为目标元素设置动画,但这似乎不起作用。

假设我们有一个 div #banana which 在按下 link 到 #banana 时显示。

#banana {display: none;}
#banana:target {display: block;}

这很好用。但是当尝试为元素设置动画时,这是行不通的。参见 this fiddle

div#banana {
    display: none;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    opacity: 0;
    transition: opacity 5s linear 1s;
}

div#banana:target {
    display: block;
    opacity: 1;
}

该元素不会淡入。就好像浏览器跳过动画并立即触发最终结果。

问题是您正在更改 display 属性。 display 属性 无法转换,因为您无法真正为元素设置动画,使其从无变为块。

display 属性 完全可以省略。但是你需要给你的元素 visibility: hidden 这样它就不会阻止 link 被点击,然后将它转换为 visibility: visible:

div#banana {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    opacity: 0;
    transition: opacity 5s linear 1s;
    visibility: hidden;
}

div#banana:target {
    opacity: 1;
    visibility: visible;
}

Updated fiddle

无法动画显示 属性。 noneblock 之间根本没有渐进阶段。

在您的情况下,您可以通过使用巨大的负顶部位置来 "hide" 元素,并在目标事件上将其恢复为 0。实际过渡将通过更改不透明度来处理。

div#banana {
    position: fixed;
    left: 0;
    top: -1000px;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    opacity: 0;
    transition: opacity 1s linear;
}

div#banana:target {
    top: 0;
    opacity: 1;
}
<div id="banana">
    <a href="#">close</a>
</div>
<a href="#banana">Do you want a banana? Click me!</a>