Ответ 1
Да, это возможно.
демонстрация
.boo {
position: relative;
width: 20em; min-height: 10em;
background: rgba(0,0,0,0) url(http://placekitten.com/320/160);
transition: background-color 1s;
}
.boo:hover {
background-color: rgba(0,0,0,.5);
}
.boo:before {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
background-color: inherit;
content: ' ';
}
Что я здесь делаю?
Что я делаю здесь, так это то, что я устанавливаю RGBa background-color
на div
, за его background-image
и переходя этот background-color
(его альфа) на :hover
. Все это происходит за background-image
. Однако я использую background-color: inherit
на псевдоэлементе, что означает, что в любой данный момент псевдоэлемент, расположенный над его родительским div
(и, следовательно, выше background-image
of div
) будет иметь тот же самый background-color
(что означает, что background-color
псевдоэлемента переходит от rgba(0,0,0,0)
в rgba(0,0,0,.5)
к :hover
).
Почему так?
Причина, по которой я не перехожу непосредственно к элементу background-color
псевдоэлемента, заключается в том, что поддержка переходов на псевдоэлементах еще не так хороша.
Поддержка переходов на псевдоэлементах
✓ Firefox поддерживает переходы на псевдоэлементах и долгое время поддерживал их, давайте сначала отбросим это.
✗ Текущие версии Safari и Opera не поддерживают переходы по псевдоэлементам.
Chrome поддерживает переходы в псевдоэлементах только начиная с версии 26.
IE10 поддерживает их немного странным образом, что означает что-то вроде:
.boo:before { color: blue; transition: 1s; }
.boo:hover:before { color: red; }
не будет работать, вам также нужно указать состояние зависания на самом элементе. Вот так:
.boo:hover {}
.boo:before { color: blue; transition: 1s; }
.boo:hover:before { color: red; }
Дополнительная информация и примеры того, как вы можете переходить к различным свойствам псевдоэлементов, используя этот метод inherit
: http://vimeo.com/51897358
ИЗМЕНИТЬ
Переходы непосредственно на псевдоэлементы теперь поддерживаются в Opera с момента перехода на Blink и Safari с 6.1.