Переход CSS3 только при добавлении класса, а не при удалении
У меня есть следующий пример 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;
}
Затем у меня есть класс DIV с классом .message
, и, нажав кнопку, я добавлю класс .unreadMessage
и нажав другую кнопку, я удалю его.
В этом примере каждый раз, когда я изменяю background-color
, добавляя или удаляя .unreadMessage
, он выполняет переход CSS.
Что я хочу сделать, по возможности, иметь мгновенное изменение цвета, когда я добавляю .unreadMessage
, и имеет переход только при его удалении.
Первое, что пришло мне в голову, состояло в том, чтобы иметь другой класс, содержащий свойства перехода CSS, и добавить его после добавления .unreadMessage
.
Но это можно сделать только с одним классом или с использованием обходного пути Javascript?
Ответы
Ответ 1
Если вы хотите применить переход только тогда, когда элемент .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;
}
Ответ 2
При использовании переходов CSS необходимо помнить две вещи:
Самая большая проблема с вопросом OP - это не их CSS, это их структура именования. Основной шаблон переходов CSS - это изменение класса элемента (или на языке MDN, динамически заданного с использованием Javascript). В примере OP они не изменяют структуру класса элемента, они меняют классы. Переходы CSS не будут работать, если элемент изменится с одного класса на другой, но они будут работать, когда класс будет добавлен или удален.
Самый простой пример - от .element
до .element.active
. Если мы поместим переход в базовый класс, .element
, а затем добавим модифицирующий класс .active
, переходы, применяемые к .element
, перейдут от настроек .element
к настройкам .element.active.
.
Здесь пример JSFiddle для изменения базового класса
Во-вторых, и это тот, который я все время забыл, базовый класс должен иметь стиль начала. Я не могу переходить left
в измененное состояние, если у меня нет left
в базовом состоянии.
Ответ 3
CSS переход только при добавлении класса
Следующий фрагмент кода имеет 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>