JavaScript có thể là giải pháp sạch hơn vì bạn chỉ cần có 1 quy tắc CSS (quy tắc ban đầu).
Nếu bạn biết vị trí của quy tắc, bạn có thể thực hiện các thao tác sau.
//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;
Bây giờ originalRule
sẽ chứa này:
.container{
...
transition: margin .2s;
...
}
Và originalHover
sẽ chứa này:
.container:hover{
...
margin: 10px 0;
...
}
chỉ đơn giản là thêm một hiệu ứng chuyển, bạn có thể làm như sau.
document.styleSheets[0].cssRules[3].style.transitionProperty += ",background-color";
document.styleSheets[0].cssRules[4].style.transitionDuration += ",1s";
Ở giai đoạn này, cả hai quá trình chuyển đổi sẽ có hiệu lực.
Nếu bạn chỉ muốn có sự chuyển đổi ban đầu, bạn có thể thêm nó bằng tay hoặc đơn giản là ...
//Delete the Rule
document.styleSheets[0].deleteRule(3);
//Add the Original Rule Back Again
document.styleSheets[0].insertRule(originalRule,3);
Nếu bạn làm như vậy, chỉ có sự chuyển đổi ban đầu (margin) sẽ có hiệu lực, don' Tôi cũng quên thay thế quy tắc originalHover để xóa bất kỳ hiệu ứng nào khác trên di chuột.
Lưu ý:
Đối với Chrome
document.styleSheets[0].cssRules[3].style.webkitTransitionProperty
Đối với Firefox
document.styleSheets[0].cssRules[3].style.mozTransitionProperty
Đối với IE insertRule
và deleteRule
không làm việc, có những cái thay vì:
addRule , removeRule
LIVE DEMO FOR CHROME AND FIREFOX
Tôi tin rằng giải pháp tạm thời của bạn sẽ khá ổn định. ';)' Đó là cách tính chất và tính đặc hiệu của CSS được dự định. Trừ khi bạn muốn hacks xấu xí (ví dụ như các yếu tố làm tổ và áp dụng một chuyển đổi cho mỗi) hoặc sử dụng một số tiền xử lý (mặc dù tôi không biết bất kỳ với một mixin bản địa cho điều này) cuối cùng nó sẽ đun sôi xuống những gì bạn có. –