Рассмотрим элемент div, мы можем рисовать разными цветами в зависимости от состояния [open] переключаемого элемента деталей. Мы начинаем с (1) контроллера деталей и (2) следующего брата, который представляет собой окрашиваемый элемент .zone:
Код: Выделить всё
Painting color:
Код: Выделить всё
.zone {
background: white;
transition: 10s; /* if nothing else applies, gradually turn white again */
}
Код: Выделить всё
/* when details is open, clicks rapidly turn sibling .zone blue */
[open] + .zone:active {
background: blue;
transition: 3s;
}
/* when details is not open, clicks rapidly turn sibling .zone red */
:not([open]) + .zone:active {
background: red;
transition: 3s;
}
/* for ease of use, let's label the color on the details switch */
summary:after {
content: "red brush";
}
[open] summary:after {
content: "blue brush";
}
Код: Выделить всё
summary:after {
content: "red brush";
}
[open] summary:after {
content: "blue brush";
}
.zone {
transition-duration: 10s;
height: 100px;
width: 100px;
background-color: white;
border: thin solid black;
}
:not([open]) + .zone:active {
transition-duration: 2s;
background-color: red;
}
[open] + .zone:active {
transition-duration: 2s;
background-color: blue;
}Код: Выделить всё
Active color:
Наконец, здесь возникает проблема: если вместо этого мы заставим квадрат быстро становиться красным или белым (так же, как исходный базовый цвет), быстрый переход не вступит в силу. Вместо этого квадрат медленно становится белым, как если бы мы не нажимали на него, а ускоренное правило :active ничего не делает.
Код: Выделить всё
summary:after {
content: "red brush";
}
[open] summary:after {
content: "WHITE brush";
}
.zone {
transition-duration: 10s;
height: 100px;
width: 100px;
background-color: white;
border: thin solid black;
}
:not([open]) + .zone:active {
transition-duration: 2s;
background-color: red;
}
[open] + .zone:active {
transition-duration: 2s;
background-color: white;
}Код: Выделить всё
Active color:
Меня это немного удивляет; это почти похоже на ошибку, но выглядит одинаково во всех браузерах. Я интуитивно понимаю, что такое поведение (т. е. неспособность анимировать новый переход в пользу продолжающегося перехода к тому же значению свойства) проявляется всякий раз, когда элементу предлагается преобразовать одно из его свойств в значение свойства, которое у него «уже» есть.
Я также понимаю, что могу обойти эту проблему с помощью «почти» совпадающих свойств (например, перехода к не совсем белому #fffffe вместо белого).
Я ищу либо:
- решение, которое позволит мне заменить текущий переход переходом с другим временем перехода к тому же целевому значению, либо
- хотя бы широко применимую теорию переходов CSS, которая позволит мне обобщить, почему происходит такое поведение.
Подробнее здесь: https://stackoverflow.com/questions/798 ... oesnt-work
Мобильная версия