Вставка другого изображения рядом с <img>с помощью: before - PullRequest
2 голосов
/ 25 сентября 2010

Я пытаюсь заменить <img> элементы смайликами с разными изображениями через CSS (чтобы я мог сопоставить их с используемым стилем). Я подумал, что могу просто вставить еще один смайлик с псевдоэлементом :before CSS и скрыть оригинальный элемент. Это будет работать, за исключением того, что браузеры, кажется, не вставляют дополнительное изображение! Это происходит только в том случае, если я пробую это с элементом <img>, отлично работает, когда я пробую это с <span>. Код, который я пробовал:

<!doctype html>
<style>
img.icon:before {
    display: inline-block;
    content: url(smiley.png);
    width: 16px;
    height: 16px;
}
</style>
<p>Lorem ipsum <img src="smiley.png" class="icon" alt=":)"> dolor sit amet...</p>

Спецификация в http://www.w3.org/TR/CSS2/generate.html#before-after-content имеет примечание внизу:

Примечание. Эта спецификация не полностью определить взаимодействие : до и: после с заменой элементы (такие как IMG в HTML). это будет определено более подробно в будущая спецификация.

Мы используем фоновое изображение, как это предлагается в комментариях, но проблема заключается в том, что изображения не будут печататься с настройками печати по умолчанию. Следующим вариантом, который мы рассматриваем, является использование <span class="icon"><img ...></span> и добавление :before в диапазон, но это немного уродливо.

Мне также интересно, указано ли это в CSS3, чтобы можно было исправить это в ближайшем будущем.

Ответы [ 2 ]

3 голосов
/ 25 сентября 2010

Почти наверняка проще в использовании:

img.icon:before {
display: inline-block;
background-image: transparent url(smiley.png) 0 0 no-repeat;
width: 16px;
height: 16px;
}

Возможно, вы не захотите использовать background-image, но псевдоэлементы :before и :after уже плохо реализованы; попытка использовать content для размещения изображений, вероятно, слишком далеко на этом этапе.

Я не уверен, что вижу смысл этого подхода; кажется, вы закончите с двумя версиями smiley.png рядом друг с другом. Это может быть легче реализовать (заменив общий smiley.png на тематический smiley.png) на стороне сервера, чем на клиенте.

0 голосов
/ 25 сентября 2010

Еще один способ сделать это - просто установить background-image и скрыть элемент img с переполнением, не используя :before:

<style>
.icon { 
  width: 0;
  height: 0;
  padding-top: 16px;
  padding-left: 16px;
  overflow: hidden;
  background-position: 0 0;
  background-repeat: no-repeat;
}
.smiley { background-image: url(smiley.png); }
</style>

<img class="icon smiley" src="smiley.png" alt=":)">

Также ознакомьтесь с этой статьей об использовании атрибуты данных вместо классов для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...