JavaScript 可能是一个更简洁的解决方案,因为您只需要 1 个 CSS 规则(原始规则)。
如果您知道您的统治地位,您可以执行以下操作。
//First Save The Original Rule
var originalRule = document.styleSheets[0].cssRules[3].cssText;
//Save also the original Hover Rule
var originalHover = document.styleSheets[0].cssRules[4].cssText;
现在originalRule
将包含以下内容:
.container{
...
transition: margin .2s;
...
}
并将originalHover
包含以下内容:
.container:hover{
...
margin: 10px 0;
...
}
要简单地添加另一个过渡效果,您可以执行以下操作。
document.styleSheets[0].cssRules[3].style.transitionProperty += ",background-color";
document.styleSheets[0].cssRules[4].style.transitionDuration += ",1s";
在这个阶段,两个过渡都将生效。
如果您只想拥有原始过渡,您可以手动添加它或简单地添加它...
//Delete the Rule
document.styleSheets[0].deleteRule(3);
//Add the Original Rule Back Again
document.styleSheets[0].insertRule(originalRule,3);
如果你这样做了,只有原来的过渡(margin)会生效,别忘了也替换 originalHover 规则来移除任何其他的悬停效果。
笔记:
对于铬
document.styleSheets[0].cssRules[3].style.webkitTransitionProperty
对于火狐
document.styleSheets[0].cssRules[3].style.mozTransitionProperty
对于 IE
insertRule
并且deleteRule
不工作,有这些代替:
addRule , removeRule
Chrome 和 Firefox 的现场演示