我有以下CSS示例:
.message{
background-color: red;
transition: background-color 5s;
-webkit-transition: background-color 5s; /* Safari */
transition-delay: 2s;
-webkit-transition-delay: 2s; /* Safari */
}
.unreadMessage{
background-color: blue;
}
然后,我有一个.message
类的DIV,按下按钮,我添加了类.unreadMessage
,然后按下另一个按钮,我将其删除。
通过此示例,每次我通过添加或删除background-color
来更改.unreadMessage
时,都会进行CSS转换。
我想要做的是,如果可能的话,在我添加.unreadMessage
时立即进行颜色更改,并且仅在删除时才进行转换。
我想到的第一件事就是拥有一个包含CSS过渡属性的不同类,并在添加.unreadMessage
后添加它。
但是可以只使用一个类或使用Javascript解决方法吗?
答案 0 :(得分:24)
如果您只想在.message
元素没有unreadMessage
类时应用转换,请将transition
属性放在.message:not(.unreadMessage)
选择器中:
.message{
background-color: red;
}
.message:not(.unreadMessage) {
-webkit-transition: background-color 5s; /* Safari */
transition: background-color 5s;
-webkit-transition-delay: 2s; /* Safari */
transition-delay: 2s;
}
.unreadMessage{
background-color: blue;
}
答案 1 :(得分:3)
使用CSS过渡时要记住两件事:
OP的问题最大的问题不在于他们的CSS,而是他们的命名结构。 CSS转换的一个主要模式是修改元素的类(或者在MDN的语言中使用Javascript"动态设置)。在OP的示例中,他们没有修改元素的类结构,他们正在更改类。当元素从一个类更改为另一个类时,CSS过渡不会起作用,但是当添加或删除类时它们将起作用。
最简单的示例是.element
到.element.active
。如果我们将转换放在基类.element
上,然后添加修改类.active
,则应用于.element
的转换将从.element
设置转换为{{ 1}}设置。
Here's a JSFiddle example of modifying a base class
其次,这是我一直忘记的,基类必须有一个起始样式。如果我没有在基本状态设置.element.active.
,我就无法在修改状态下转换left
。
答案 2 :(得分:0)
后面的代码段中有一个div
和transition: none;
点击时,通过添加新的类transition
覆盖add-transition
属性
第二次点击,相同的班级被删除且没有过渡。
var elm = document.querySelector('.no-transition');
elm.onclick = () => (
elm.classList.toggle('add-transition')
);
.no-transition {
background-color: aliceblue;
transition: none;
}
.add-transition {
background-color: deepskyblue;
transition: background-color 3s;
}
/* Note: As like other any other CSS property
Specificity or CSS Order can make the diffrence.
Styles below are for code the snippet to look better. */
.wrapper {
padding: 20px;
margin: 20px;
text-align: center;
cursor: pointer;
border: 1px solid lightgray;
}
<div class="wrapper no-transition">
Click here !!! <br/>
By default, No transition. <br/>
on click, bg color transition added. <br/>
on second click, back to default, no transtion.
</div>
https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity