我遇到了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;
}
此代码仅在我删除display
。
我想在悬停后立即更改显示,但应使用过渡更改不透明度。
答案 0 :(得分:99)
根据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;
}
}
答案 1 :(得分:38)
您可以使用CSS动画:
0% display:none ; opacity: 0;
1% display: block ; opacity: 0;
100% display: block ; opacity: 1;
答案 2 :(得分:29)
如果可能 - 请使用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;
}
答案 3 :(得分:8)
此解决方法有效:
定义“关键帧”:
@-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; }
}
在“悬停”中使用此“关键帧”:
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;
}
答案 4 :(得分:7)
我用它来实现它。它们在悬停时褪色但隐藏时没有空间,完美!
.child {
height: 0px;
opacity: 0;
visibility: hidden;
transition: all .5s ease-in-out;
}
.parent:hover child {
height: auto;
opacity: 1;
visibility: visible;
}
答案 5 :(得分:6)
我改变了一下,但结果很美。
.child {
width: 0px;
height: 0px;
opacity: 0;
}
.parent:hover child {
width: 150px;
height: 300px;
opacity: .9;
}
谢谢大家。
答案 6 :(得分:4)
我遇到了同样的问题。我尝试使用动画而不是转换 - 正如@MichaelMullany和@Chris所建议的那样 - 但它只适用于webkit浏览器,即使我使用“-moz”和“-o”前缀进行了复制粘贴。
我可以使用visibility
代替display
解决问题。这对我有用,因为我的子元素是position: absolute
,因此文档流不会受到影响。它也可能适用于其他人。
这是原始代码使用我的解决方案的样子:
.child {
position: absolute;
opacity: 0;
visibility: hidden;
-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 {
position: relative;
opacity: 0.9;
visibility: visible;
}
答案 7 :(得分:3)
如果您使用JS触发更改,让我们说点击,有一个很好的解决方法。
您发现问题的发生是因为在显示时忽略了动画:无元素但浏览器一次应用所有更改,并且元素从不显示:阻止,而不是同时动画。
诀窍是要求浏览器在更改可见性之后但在触发动画之前渲染帧。
这是一个JQuery示例:
$('.child').css({"display":"block"});
//now ask the browser what is the value of the display property
$('.child').css("display"); //this will trigger the browser to apply the change. this costs one frame render
//now a change to opacity will trigger the animation
$('.child').css("opacity":100);
答案 8 :(得分:2)
在绝对或固定元素上,您还可以使用z-index:
.item {
position: absolute;
z-index: -100;
}
.item:hover {
z-index: 100;
}
其他元素现在的z-index应介于-100和100之间。
答案 9 :(得分:2)
我知道,这不是你问题的真正解决方案,因为你要求
显示+不透明度
我的方法解决了一个更普遍的问题,但也许这是应该通过将display
与opacity
结合使用来解决的背景问题。
我的愿望是当元素不可见时让元素脱离。 这个解决方案就是这样做的:它移动元素离开了,这可以用于转换:
.child {
left: -2000px;
opacity: 0;
visibility: hidden;
transition: left 0s 0.8s, visibility 0s 0.8s, opacity 0.8s;
}
.parent:hover .child {
left: 0;
opacity: 1;
visibility: visible;
transition: left 0s, visibility 0s, opacity 0.8s;
}
此代码不包含任何浏览器前缀或向后兼容性黑客。它只是说明了元素如何被移走的概念,因为它不再需要了。
有趣的部分是两种不同的转换定义。当鼠标指针悬停在.parent
元素上时,需要立即将.child
元素放置到位,然后将更改不透明度:
transition: left 0s, visibility 0s, opacity 0.8s;
当没有悬停,或者鼠标指针移出元素时,必须等到不透明度变化完成才能将元素移出屏幕:
transition: left 0s 0.8s, visibility 0s 0.8s, opacity 0.8s;
在设置display:none
不会破坏布局的情况下,移动对象将是一个可行的替代方案。
我希望尽管我没有回答这个问题,但我还是抓住了这个问题。
答案 10 :(得分:1)
要在onHoverIn / Out两种方式都有动画我做了这个解决方案。希望它会对某人有所帮助
@keyframes fadeOutFromBlock {
0% {
position: relative;
opacity: 1;
transform: translateX(0);
}
90% {
position: relative;
opacity: 0;
transform: translateX(0);
}
100% {
position: absolute;
opacity: 0;
transform: translateX(-999px);
}
}
@keyframes fadeInFromNone {
0% {
position: absolute;
opacity: 0;
transform: translateX(-999px);
}
1% {
position: relative;
opacity: 0;
transform: translateX(0);
}
100% {
position: relative;
opacity: 1;
transform: translateX(0);
}
}
.drafts-content {
position: relative;
opacity: 1;
transform: translateX(0);
animation: fadeInFromNone 1s ease-in;
will-change: opacity, transform;
&.hide-drafts {
position: absolute;
opacity: 0;
transform: translateX(-999px);
animation: fadeOutFromBlock 0.5s ease-out;
will-change: opacity, transform;
}
}
答案 11 :(得分:1)
如何使用CSS动画显示不透明性:
这是我的代码:
CSS代码
.item {
height:200px;
width:200px;
background:red;
opacity:0;
transition: opacity 1s ease-in-out;
}
.item:hover {
opacity: 1;
}
code {
background: linear-gradient(to right,#fce4ed,#ffe8cc);
}
<div class="item">
</div>
<p><code> move mouse over top of this text</code></p>
功能投票(){
var投票= getElementById(“ yourOpinion”)
if(this.workWithYou):
投票+ = 1};
大声笑
答案 12 :(得分:0)
我做的一件事是将初始状态的边距设置为“margin-left:-9999px”,因此它不会出现在屏幕上,然后在悬停状态下重置“margin-left:0”。在这种情况下保持“显示:阻止”。我的诀窍是:)
编辑:保存状态而不是恢复到之前的悬停状态?好的,我们需要JS:
<style>
.hovered {
/* hover styles here */
}
</style>
<script type="text/javascript">
$('.link').hover(function() {
var $link = $(this);
if (!$link.hasclass('hovered')) { // check to see if the class was already given
$(this).addClass('hovered');
}
});
</script>
答案 13 :(得分:-4)
display:
不可转换。您可能需要使用jQuery来执行您想要执行的操作。