Почему псевдоэлементы:before и:after не работают с элементами img?
Я пытаюсь использовать :before
псевдоэлемент с img
элемент.
Рассмотрим этот HTML и CSS...
HTML
<img src="http://0.gravatar.com/avatar/this-is-not-a-hash" alt="" />
CSS
img:before {
content: "hello";
}
Это не дает желаемого эффекта (протестировано в Chrome 13 и Firefox 6). Тем не менее, это работает с div
или же span
элемент.
Почему бы и нет?
Есть ли способ заставить псевдоэлементы работать с img
элементы?
3 ответа
Заметка. Эта спецификация не полностью определяет взаимодействие
:before
а также:after
с замененными элементами (такими как IMG в HTML). Это будет определено более подробно в будущей спецификации.
Я думаю, это означает, что они не работают с img
элементы (на данный момент).
Также смотрите этот ответ.
Возможно, производители браузеров не внедрили псевдоэлементы в img
тег из-за их интерпретации спецификации: img
Элемент, строго говоря, не является элементом блочного уровня или встроенным элементом, это пустой элемент.
Просто для тестирования и зная, что это не красиво, вы можете сделать следующее, чтобы псевдоэлементы работали с элементами 'img'.
Добавлять: display: block; content: ""; height: (height of image)px
к элементу img в вашем CSS.
Хотя это сделает ваш тег img пустой причиной content: ""
Вы можете тогда
Добавлять: style="background-image: url(image.jpg)"
на ваш элемент img в HTML.
Протестировал это в Fx, Chrome и Safari