在 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;
}
无法动画显示 属性。 none
和 block
之间根本没有渐进阶段。
在您的情况下,您可以通过使用巨大的负顶部位置来 "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>
我正在构建一个基于 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;
}
无法动画显示 属性。 none
和 block
之间根本没有渐进阶段。
在您的情况下,您可以通过使用巨大的负顶部位置来 "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>