在class级变更时从“display:none”过渡到CSS?
我已经开始使用转换来“现代化”网站的感觉。 到目前为止, :hover
转换工作很好。 现在我想知道是否有可能触发基于其他事情的转换,例如类更改时。
这里是相关的CSS:
#myelem { opacity: 0; display: none; transition: opacity 0.4s ease-in, display 0.4s step-end; -ms-transition: opacity 0.4s ease-in, display 0.4s step-end; -moz-transition: opacity 0.4s ease-in, display 0.4s step-end; -webkit-transition: opacity 0.4s ease-in, display 0.4s step-end; } #myelem.show { display: block; opacity: 1; transition: opacity 0.4s ease-out, display 0.4s step-start; -ms-transition: opacity 0.4s ease-out, display 0.4s step-start; -moz-transition: opacity 0.4s ease-out, display 0.4s step-start; -webkit-transition: opacity 0.4s ease-out, display 0.4s step-start; }
引发更改的JavaScript是:
document.getElementById('myelem').className = "show";
但过渡似乎并没有发生 – 只是从一个州跳到另一个州。
我究竟做错了什么?
它在你删除display
属性时工作。
#myelem { opacity: 0; transition: opacity 0.4s ease-in; -ms-transition: opacity 0.4s ease-in; -moz-transition: opacity 0.4s ease-in; -webkit-transition: opacity 0.4s ease-in; } #myelem.show { opacity: 1; transition: opacity 0.4s ease-out; -ms-transition: opacity 0.4s ease-out; -moz-transition: opacity 0.4s ease-out; -webkit-transition: opacity 0.4s ease-out; }
JSFiddle 。
这是因为只有具有数字的CSS属性才能被转换。 你认为“ display: none;
”和“ display: block;
”之间的“50%状态”应该是什么? 由于无法计算,因此无法为display
属性设置animation。
您不能使用display
属性在状态之间转换。
@MarcoK提供的答案,包括评论显示已经是正确的方向。 设置display
属性会阻碍 transition
。
尽pipe如此, 更好的做法是在浏览器供应商的前缀之后加上前缀(标准)版本,以保证未来的发展。 后者的属性覆盖前者。
其他改进:
- 正如@Charmander所指出的,任何Internet Explorer都不支持
-ms-transition
- 还有Opera的供应商在Op 10.5-12和Op Mobile 10-12上加上了前缀
-o-transition
,目前全球浏览器的支持率可能不足0.1%。 我会把它完成
CSS:
#myelem { opacity: 0; -webkit-transition: opacity .4s ease-in; -moz-transition: opacity .4s ease-in; -o-transition: opacity .4s ease-in; transition: opacity .4s ease-in; } #myelem.show { opacity: 1; -webkit-transition: opacity .4s ease-out; -moz-transition: opacity .4s ease-out; -o-transition: opacity .4s ease-out; transition: opacity .4s ease-out; }
这是可能的animation显示和隐藏元素在CSS中,而不是:
display: none; /* and */ display: block;
使用:
overflow: hidden; max-height: 0; /* and */ max-height: 9999999px;
由于你replace了这个属性,你可以通过transition
为任何css值设置animation。
工作示例: https : //jsfiddle.net/utyja8qx/