Как исчезать и исчезать CSS": после " псевдо-элемента при добавлении или удалении класса
Я знаю, что есть много других вопросов об использовании переходов на псевдо-элементе CSS, но после прохождения через целую кучу из них я все еще не могу заставить свой сценарий работать.
В основном, я хочу добавить класс к элементу, класс имеет: после псевдо-элемента с некоторым содержанием и фоном. Я бы хотел, чтобы эффект затухания на элементе: after при добавлении или удалении класса.
Я пробовал это в этом jsfiddle и код, который у меня есть пока это так:
HTML-код
<div id="divA">Div test</div>
<button id="btnAdd">Add it</button>
<button id="btnRemove">Take Away</button>
в CSS
div {
width: 200px;
transition: all .5s linear;
background: red;
}
.test{
background: blue;
}
.test:after{
background: #0c0;
content: "Test";
}
jQuery
$("#btnAdd").click(function() {
$("#divA").addClass("test");
});
$("#btnRemove").click(function() {
$("#divA").removeClass("test");
});
любая помощь и подсказки будут очень признательны.
3 ответов
Forking @NilsKaspersson ответ, чтобы заставить его работать с вашими требованиями.
переход означает от X к Y, вы не можете ожидать, что он будет работать с вновь созданными атрибутами.
затем вам нужно создать начальный атрибут и изменить его позже.
Так как вы не хотите, чтобы он был там в начале, просто используйте color: transparent;
и background: transparent;
код:
div {
width : 200px;
transition : all .5s linear;
background : red;
}
div:after {
transition : all .5s linear;
background : transparent;
color : transparent;
content : "Test";
}
.test{
background : blue;
}
.test:after{
background : #0c0;
color : black;
}
здесь происходит две вещи.
1.) transition
работает только тогда, когда есть что-то для перехода С. С вашего :after
элемент по существу создается, когда класс test
добавляется к нему, нет никакого перехода.
2.) transition
не наследуется, поэтому вам нужно будет объявить его еще раз на псевдо-элементе.
вот быстрая и грязная вилка вашего JSFiddle.
я переехал общие правила для псевдо-элемента для бесклассового div
и добавил transition
к нему. Тогда когда класс test
добавляется к нему, фон изменяется, и он может переходить от старого значения.
если вы не хотите, чтобы псевдо элемент content
чтобы быть видимым все время, подумайте о том, чтобы скрыть его с opactiy: 0
и переход к 1
, или используйте transparent
значение цвета для background
и/или color
.
Edit: изменение ответа на основе новой скрипки.
в большинстве случаев переход CSS должен применяться к уже определенным свойствам.
Additionnaly, изменение псевдо :after
элемент content
сделает элемент удаленным и повторно добавленным, что одновременно удаляет указанные свойства.
Я сделал демо с анимацией текста color
и background-color
при предварительной настройке content
, поэтому свойства уже присутствуют.
CSS :
div {
width: 200px;
transition: all .5s linear;
background: red;
}
div:after {
transition: all .5s linear;
background: red;
color: red;
content: 'Test';
}
.test{
background: blue;
}
.test:after{
background: #0c0;
color: black;
}
Скрипка:http://jsfiddle.net/W5e9Q/10/