Можно ли установить эквивалент атрибута src тега img в CSS?

Можно ли установить значение атрибута src в CSS? В настоящее время я делаю следующее:

<img src="pathTo/myImage.jpg"/>

и я хочу, чтобы это было примерно так

<img class="myClass"/>
.myClass {
    some-src-property: url("pathTo/myImage.jpg");

Я хочу сделать это без использования свойств background или background-image: в CSS.


person Rakesh Juyal    schedule 02.02.2010    source источник
comment
Очевидно, это будет возможно в CSS3: w3.org/TR/css3-values / # атрибут   -  person graphicdivine    schedule 02.02.2010
comment
Теперь это возможно. Проверено в Chrome / Safari / Opera: stackoverflow.com/a/11484688/632951   -  person Pacerier    schedule 14.07.2012
comment
Но FireFox 30.0, Internet Explorer 11.0 не поддерживает   -  person Laxmikant Dange    schedule 10.10.2014
comment
Это единственное решение CSS сработало для меня (во всех браузерах): stackoverflow.com/a/19114098/448816, за исключением Мне пришлось добавить: 'background-size: 100%;'.   -  person mikhail-t    schedule 03.12.2014
comment
(2020) Вы можете сделать это с помощью JS getPropertyValue("--src") см. jsfiddle.net/CustomElementsExamples/vjfpu3a2   -  person Danny '365CSI' Engelman    schedule 13.03.2020


Ответы (25)


Используйте content:url("image.jpg").

Полное рабочее решение (Live Demo):

<!doctype html>

<style>
.MyClass123{
	content:url("http://imgur.com/SZ8Cm.jpg");
}
</style>

<img class="MyClass123"/>

Проверено и работает:

  • Хром 14.0.835.163
  • Safari 4.0.5
  • Opera 10.6

Проверено и не работает:

  • FireFox 40.0.2 (наблюдая за Developer Network Tools, вы видите, что URL-адрес загружается, но изображение не отображается)
  • Internet Explorer 11.0.9600.17905 (URL-адрес никогда не загружается)
person Pacerier    schedule 14.07.2012
comment
Свойство содержимого следует использовать с псевдотегом, см. w3schools.com/cssref/pr_gen_content.asp < / а> - person RobAu; 18.12.2012
comment
@gotqn, пока только Chrome Safari Opera. - person Pacerier; 10.01.2013
comment
@EricG, у разных приложений разные требования. Если он не соответствует вашим требованиям, не используйте его. Если это так, используйте это. - person Pacerier; 22.02.2013
comment
Я думаю, вы можете использовать его только с: after и: before - person mlwacosmos; 08.03.2013
comment
@ XP1 Это зависит от используемой вами версии CSS. CSS3 поддерживает контент повсюду, тогда как CSS2.1 разрешает только: до и: после. - person RobAu; 17.05.2013
comment
К сожалению, этот метод бесполезен, если вы используете спрайты. Свойство background-image по-прежнему остается единственным универсальным решением. - person GetFree; 02.06.2013
comment
Неработающий IE10 - это не проблема. Мы отказываемся от IE7 (не будем говорить об IE6). IE8 тоже, если нужно. Но IE9 - IE10 ... нет. - person Rolf; 17.06.2013
comment
Стоит добавить, что даже в браузерах, поддерживающих присвоение content img, это меняет свое поведение. Изображение начинает игнорировать атрибуты размера, а в Chrome / Safari оно теряет такие параметры контекстного меню, как «Сохранить изображение». Это связано с тем, что присвоение content эффективно преобразует img из пустого замененного элемента во что-то вроде <span><img></span>. - person Ilya Streltsyn; 15.07.2013
comment
Это работает для меня в Android 2.3 WebView и Chrome ... конечно - person Ben; 27.07.2013
comment
без надлежащей поддержки браузера я не считаю это правильным ответом, извините. - person emachine; 30.08.2013
comment
К вашему сведению, есть еще один недостаток этого, если вы предварительно установите src-атрибут тега <img> с URL-адресом (например, для seo), и вы хотите перезаписать его через свойство css content:url(...), тогда будут загружены ОБА изображения, которые снова производят накладные расходы сети. - person Timo Ernst; 12.12.2013
comment
@Timo, какой браузер загружает его дважды? И если это так, накладные расходы должны быть довольно низкими для правильно кэшированных изображений. - person Pacerier; 14.12.2013
comment
@Pacerier Недоразумение. В своей заметке я говорил о 2 (!) Разных изображениях. Один с низким разрешением для атрибута src изображения и один с высоким разрешением для дисплеев сетчатки, который устанавливается через content:url(...). Я тестировал Google Chrome, и он загрузил оба изображения, хотя только одного было бы достаточно. - person Timo Ernst; 16.12.2013
comment
Невероятно, но это работает на Android 2.3, но не на Firefox 30. - person andreszs; 19.01.2015
comment
@ XP1: имейте в виду, что этот конкретный черновик css3-content является заброшенным черновиком, который последний раз изменялся десять лет назад, когда вы размещали свой комментарий - CSS 2 с тех пор обновился более чем несколько раз. . Есть очень веская причина, по которой Moz / MS не реализовали его - по их мнению, этот модуль не существует, и поэтому content применяется только к ::before и ::after . Он воскресает здесь: dev.w3.org/csswg/css-content с большое красное предупреждение с надписью «Не готов к реализации» - так что я бы не стал рассчитывать на то, что авторы в ближайшее время смогут использовать его в разных браузерах. - person BoltClock; 31.03.2015
comment
Я удивлен, что никто не связался с caniuse.com/#feat=css-gencontent пока что. Показывает поддерживаемые браузеры и известные проблемы. - person adam0101; 29.04.2015
comment
@ adam0101, на этой странице не отображается статус для content:url("image.jpg"). Графики там все зеленые, но это все еще не работает для IE и FF. - person Pacerier; 25.05.2015
comment
@EricG - Потому что причуды браузера не должны быть проблемой разработчика. Если браузер неправильно реагирует на код, это проблема для людей, которые создают этот браузер. И если пользователь использует браузер до того, как его исправил поставщик браузера, то это просто ошибка пользователя. Это решение решает проблему разработчика. Остальное должны исправить хорошие люди из Mozilla и Microsoft. - person aroth; 22.06.2015
comment
@aroth Я думаю, что был просто разочарован (для меня) неполным решением, которое (возможно, я) ожидал решить, конечно, это хорошее решение, если оно помогает людям. - person EricG; 23.06.2015
comment
Я не мог использовать это решение, так как оно поддерживает не все браузеры, которые мне нужны. Я разработал другое решение, которое помогло мне (может не работать для всех вас, но оно должно работать во всех браузерах, совместимых с Css3). и вот оно: я взял резервную копию фонового изображения для изображений без src: updated fiddle: ссылка - person jBear Graphics; 22.07.2015
comment
Спасибо, этот фрагмент только что помог мне сэкономить огромную сумму $$ :) :) :) - person Damiano; 15.08.2016
comment
По-прежнему не работает в Firefox 66.0.3, если кому-то интересно, хотя вы все равно можете увидеть сетевой запрос на изображение. - person Spencer D; 29.04.2019
comment
Свойство Content не подходит для тега img. Это недействительный HTML. - person Muhammad Bilal; 30.04.2019
comment
Есть ли способ использовать это в нотации JSON? что-то вроде: imageContent ['content'] = url (imageurl.jpg), похоже, это не работает в реакции. - person NoobNewb; 19.07.2019

Есть решение, которое я узнал сегодня (работает в IE6 +, FF, Opera, Chrome):

<img src='willbehidden.png' 
 style="width:0px; height:0px; padding: 8px; background: url(newimage.png);">

Как это работает:

  • Изображение сжимается до тех пор, пока не перестанет быть видимым по ширине и высоте.
  • Затем вам нужно «сбросить» размер изображения с помощью отступов. Это дает изображение 16x16. Конечно, вы можете использовать padding-left / padding-top для создания прямоугольных изображений.
  • Наконец, новое изображение помещается туда с использованием фона.
  • Если новое фоновое изображение слишком велико или слишком мало, я рекомендую использовать background-size, например: background-size:cover;, который помещает ваше изображение в отведенное пространство.

Он также работает с изображениями отправки-ввода, они остаются интерактивными.

См. Живую демонстрацию: http://www.audenaerde.org/csstricks.html#imagereplacecss

Наслаждаться!

person RobAu    schedule 20.04.2012
comment
@RobAnu: это работает неплохо - jsfiddle - person TimPietrusky; 29.05.2012
comment
Должен сообщить вам, что это увлекательно и умно, но пустой DIV более прямолинейный. - person Volomike; 11.07.2012
comment
В данном случае это так. Однако есть случаи, когда вы не можете управлять HTML и тем не менее хотите манипулировать IMG. Там это решение тоже будет работать - person RobAu; 11.07.2012
comment
+1 приятное предложение. Проверьте эту измененную скрипку в приведенном выше комментарии. - person Mr_Green; 29.05.2013
comment
Если изображение имеет атрибут src, это именно то, что вам нужно. +1 - мне очень помогли - person James Long; 21.06.2013
comment
Не ранжирование по этому ответу, что может быть решением для некоторых приложений, но у этого метода есть ограничение. Вы не можете контролировать размеры визуализации файла изображения. При обычном использовании вы можете контролировать высоту и ширину изображения, если файл указан в источнике. Но это в основном не отличается от div с фоновым изображением, где, если ваш div больше изображения, вам не повезло. - person TARKUS; 25.11.2013
comment
Если мне что-то не хватает, есть ли причина использовать этот подход в ситуации, когда вы управляете HTML? Возможно, этот ответ можно улучшить, указав, когда имеет смысл использовать этот подход, а когда имеет смысл просто использовать пустой div. - person Mark Amery; 02.12.2013
comment
Не совсем, с точки зрения структуры было бы разумно использовать IMG для изображений. Или, если вы не хотите менять весь свой HTML-код .. - person RobAu; 02.12.2013
comment
Ничего себе, хитрый прием, который хорошо работает, когда изображение жестко запрограммировано и у вас есть доступ только к файлу css. Чтобы настроить таргетинг на изображение с помощью css: img [src $ = image.png] ($ = заканчивается на w3schools.com/cssref/css_selectors.asp) - person GDmac; 02.03.2014
comment
это должен быть принятый ответ, кроссбраузерность и очень хороший трюк! - person Ilian Andreev; 17.05.2014
comment
Не отвечает требованиям оператора (который такой же, как у меня). Я не хочу использовать фон или фоновое изображение. Этот ответ заслуживает уценки за это (а также тот факт, что div может сделать это намного элегантнее) - person cmroanirgo; 28.06.2014
comment
Это было идеальное решение для моих нужд. Я не мог легко изменить HTML и не хотел вносить изменения в HTML, когда необходимость в замене изображения существует только на нескольких страницах из тысяч, которые все используют один и тот же HTML. Отличный трюк! - person David Colby; 04.11.2014
comment
Умно, но следует отметить, что это решение не влияет на результаты действия «Сохранить изображение» или «Копировать URL-адрес изображения» ... в этих случаях вы все равно получите изображение, определенное в атрибуте src. - person Shaun Scovil; 04.02.2015

Коллекция возможных методов для установки изображений из CSS


CSS2 :after псевдоэлемент или синтаксис новее _ 2_ из CSS3 вместе с _ 3_:

Первая рекомендация W3C: Каскадные таблицы стилей, уровень 2 спецификации CSS2 12 мая 1998 г.
Последняя рекомендация W3C: Рекомендация W3C для селекторов уровня 3 29 сентября 2011 г.

Этот метод добавляет содержимое сразу после содержимого дерева документа элемента.

Примечание: некоторые браузеры экспериментально отображают свойство content непосредственно над некоторыми селекторами элементов, игнорируя даже последнюю рекомендацию W3C, которая определяет:

Применимо к: :before и :after псевдоэлементам

Синтаксис CSS2 (прямая совместимость):

.myClass:after {
  content: url("somepicture.jpg");
}

Селектор CSS3:

.myClass::after {
  content: url("somepicture.jpg");
}

Отображение по умолчанию: Исходный размер (не зависит от явного объявления размера)

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

но даже на момент написания этой статьи поведение с тегом <IMG> все еще не определено, и хотя его можно использовать в взломанных и способ, не соответствующий стандартам, использование с <img> не рекомендуется!

Отличный кандидатный метод, смотрите выводы ...



CSS1 background-image: свойство:

Первая рекомендация W3C: Каскадные таблицы стилей, уровень 1 17 Декабрь 1996 г.

Это свойство устанавливает фоновое изображение элемента. При установке фонового изображения следует также установить цвет фона, который будет использоваться, когда изображение недоступно. Когда изображение доступно, оно накладывается поверх цвета фона.

Это свойство существует с самого начала CSS и, тем не менее, заслуживает славного упоминания.

Визуализация по умолчанию: Исходный размер (масштабировать нельзя, только позиционирование)

Однако,

Свойство CSS3 background-size: улучшил его, разрешив несколько вариантов масштабирования:

Последний статус W3C: Кандидат в рекомендации Уровень модуля фонов и границ CSS 3 9 сентября 2014 г.

[length> | <percentage> | auto ]{1,2} | cover | contain

Но даже с этим свойством это зависит от размера контейнера.

По-прежнему хороший кандидатный метод, см. Выводы ...



list-style: в CSS2 свойство вместе с display: list-item:

Первая рекомендация W3C: Каскадные таблицы стилей, спецификация CSS2 уровня 2 12 мая 1998 г.

list-style-image: свойство устанавливает изображение, которое будет использоваться в качестве маркера элемента списка (маркер)

Свойства списка описывают базовое визуальное форматирование списков: они позволяют таблицам стилей указывать тип маркера (изображение, глиф или число).

display: list-item Это значение заставляет элемент (например, <li> в HTML) создавать блок основного блока и блок маркера.

.myClass {
    display: list-item;
    list-style-position: inside;
    list-style-image: url("someimage.jpg");
}

Сокращенный CSS: (<list-style-type> <list-style-position> <list-style-image>)

.myClass {
    display: list-item;
    list-style: square inside url("someimage.jpg");
}

Отображение по умолчанию: Исходный размер (не зависит от явного объявления размера)

Ограничения:

  • # P30 #
  • # P31 #

Этот метод также не подходит для тега <img>, поскольку преобразование между типами элементов невозможно, а здесь ограничено, не совместимый взлом, который не работает в Chrome.

Хороший кандидатский метод, смотрите выводы ...



Свойство CSS3 border-image: рекомендация:

Последний статус W3C: Кандидат в рекомендации Уровень модуля фонов и границ CSS 3 9 сентября 2014 г.

Метод фонового типа, который полагается на определение размеров довольно своеобразным образом (не определено для этого варианта использования) и свойства резервной границы до сих пор (например, border: solid):

Обратите внимание, что даже если они никогда не вызывают механизма прокрутки, начальные изображения могут быть обрезаны предком или окном просмотра.

В этом примере показано, что изображение составлено только как украшение в правом нижнем углу:

.myClass {
    border: solid;
    border-width: 0 480px 320px 0;
    border-image: url("http://i.imgur.com/uKnMvyp.jpg") 0 100% 100% 0;
}

Применимо: ко всем элементам, кроме внутренних элементов таблицы, когда border-collapse: collapse

Тем не менее он не может изменить тег <img> src (но вот хак), вместо этого мы можем украсить его:

.myClass {
    border: solid;
    border-width: 0 96px 96px 0;
    border-image: url("http://upload.wikimedia.org/wikipedia/commons/9/95/Christmas_bell_icon_1.png") 
                  0 100% 100% 0;
}
<img width="300" height="120" 
     src="http://fc03.deviantart.net/fs71/f/2012/253/b/0/merry_christmas_card_by_designworldwide-d5e9746.jpg" 
     class="myClass"

Хороший кандидатный метод, который следует рассмотреть после распространения стандартов.



Нотация element() в CSS3 рабочий проект заслуживает упоминания:

Примечание. Функция element() воспроизводит только внешний вид указанного элемента, но не фактическое содержимое и его структуру.

<div id="img1"></div>

<img id="pic1" src="http://i.imgur.com/uKnMvyp.jpg" class="hide" alt="wolf">
<img id="pic2" src="http://i.imgur.com/TOUfCfL.jpg" class="hide" alt="cat">

Мы будем использовать визуализированное содержимое одного из двух скрытых изображений для изменения изображения фона в #img1 на основе Выбор идентификатора через CSS:

#img1 {
    width: 480px; 
    height: 320px; 
    background: -moz-element(#pic1) no-repeat;
    background-size: 100% 100%;
}

.hide {display: none}

Примечания: это экспериментальный, работает только с префиксом -moz в Firefox и только со свойствами background или background-image, также необходимо указать размеры.


Выводы

  1. Любое семантическое содержание или структурная информация передается в HTML.
  2. Информация о стилях и представлении передается в CSS.
  3. В целях SEO не скрывайте значимые изображения в CSS.
  4. Фоновая графика обычно отключена при печати.
  5. Пользовательские теги можно использовать и стилизовать из CSS, но примитивные версии Internet Explorer не понимает] (IE не стилизует теги HTML5 (с помощью заточки)) без указаний Javascript или CSS.
  6. SPA (одностраничные приложения) по замыслу обычно включают изображения в фоновом режиме.

Сказав это, давайте рассмотрим HTML-теги, подходящие для отображения изображений:

Элемент <li> [HTML4.01 +]

Идеальный вариант использования list-style-image с методом display: list-item.

Элемент <li>, который может быть пустым, разрешает поток содержимого и даже разрешено опускать конечный тег </li>.

.bulletPics > li {display: list-item}
#img1 {list-style: square inside url("http://upload.wikimedia.org/wikipedia/commons/4/4d/Nuvola_erotic.png")}
#img2 {list-style: square inside url("http://upload.wikimedia.org/wikipedia/commons/7/74/Globe_icon_2014-06-26_22-09.png")}
#img3 {list-style: square inside url("http://upload.wikimedia.org/wikipedia/commons/c/c4/Kiwi_fruit.jpg")}
<ul class="bulletPics">
    <li id="img1">movie</li>
    <li id="img2">earth</li>
    <li id="img3">kiwi</li>
</ul>

Ограничения: сложно стилизовать (width: или float: могут помочь)

Элемент <figure> [HTML5 +]

Элемент figure представляет некоторое содержимое потока, необязательно с заголовком, которое является самодостаточным (например, полное предложение) и обычно упоминается как единый блок из основного потока документа.

Элемент допустим без содержимого, но рекомендуется содержать <figcaption>.

Таким образом, этот элемент можно использовать для аннотирования иллюстраций, диаграмм, фотографий, списков кодов и т. Д.

Рендеринг по умолчанию: элемент выровнен по правому краю, с левым и правым отступом!

Элемент <object> [HTML4 +]

Чтобы включить изображения, авторы могут использовать элемент OBJECT или элемент IMG.

Атрибут data является обязательным и может иметь допустимый MIME-тип в качестве значения. !

<object data="data:x-image/x,"></object>

Примечание: уловка для использования тега <object> из CSS заключается в установке настраиваемого действительного MimeType x-image/x с последующим отсутствием данных (значение не имеет данных после требуемой запятой ,)

Рендеринг по умолчанию: 300 x 150 пикселей, но размер можно указать в HTML или CSS.

Тег <SVG>

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

Элемент <canvas> [HTML5 +].

Атрибут width по умолчанию равен 300, а атрибут height - 150.

Элемент <input> с type="image"

Ограничения:

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

Chrome следует за ним и отображает пустой квадрат 4x4px, когда нет текста

Частичное решение, установите value=" ":

<input type="image" id="img1" value=" ">

Также обратите внимание на предстоящий элемент <picture> в HTML5.1, в настоящее время это рабочий проект.

person CSᵠ    schedule 31.03.2015
comment
(2020) Используйте свойства CSS: stackoverflow.com/questions/2182716/ - person Danny '365CSI' Engelman; 13.03.2020
comment
Отличный ответ, но показывает полную несостоятельность Интернета как платформы для предоставления базовых примитивов. - person serraosays; 09.05.2020

Я использовал пустое решение div с этим CSS:

#throbber {
    background-image: url(/Content/pictures/ajax-loader.gif);
    background-repeat: no-repeat;
    width: 48px;
    height: 48px;
    min-width: 48px;
    min-height: 48px;
}

HTML:

<div id="throbber"></div>
person Emmanuel Touzery    schedule 13.10.2011
comment
Что, если я хочу отобразить его встроенным? Добавление display: inline дает размер моего div 0x0 ... - person elsurudo; 04.02.2014
comment
@elsurudo Используйте display: inline-block, если вы хотите установить ширину и высоту встроенного элемента - person Erin Drummond; 20.03.2014
comment
Главный ответ не работает с Firefox, поэтому мне больше нравится ваш ответ! И это понятно и никаких css-хаков. - person Sergey Bogdanov; 24.05.2014
comment
Если вам нужно отобразить более одного изображения, имейте в виду, что поле id технически должно быть уникальным, поэтому использование селектора классов CSS вместо идентификатора является идеальным. - person mix3d; 09.11.2016
comment
Изображения этого типа не будут печататься должным образом, если в настройках печати отключена фоновая графика. - person posfan12; 01.06.2018

Я нашел способ лучше, чем предлагаемые решения, но он действительно использует фоновое изображение. Соответствующий метод (невозможно подтвердить для IE6) Авторы: http://www.kryogenix.org/code/browser/lir/

<img src="pathTo/myImage.jpg"/>

CSS:

img[src*="pathTo/myImage.jpg"] {

    background-image: url("mynewimg.jpg"); /* lets say 20x20 */
    width: 20px;

    display:inline-block;
    padding: 20px 0 0 0;
    height: 0px !important;

    /* for IE 5.5's bad box model */
    height /**/:20px;
}

Старое изображение не отображается, а новое отображается должным образом.


Следующее удобное решение работает только для webkit

img[src*="pathTo/myImage.jpg"] {

    /* note :) */
    content:'';
    display:inline-block;

    width: 20px;
    height: 20px;
    background-image: url("mynewimg.jpg"); /* lets say 20x20 */

}
person EricG    schedule 25.05.2012
comment
Это изящный трюк, но действительно ли он соответствует стандартам? На странице W3C говорится, что свойство content применяется только к :before и :after псевдоклассы. Кроме того, если вам нужно поддерживать IE7 или более раннюю версию, я думаю, content поддержки не существует. Тем не менее, очень заманчиво. - person jatrim; 01.06.2012
comment
Вы правы, я только что нашел более послушный метод. Обновляю свой пост! Теперь проголосуйте за меня;) Ха-ха. - person EricG; 04.06.2012
comment
Обновленный подход определенно лучше, чем тот, который полагается на контент. Спасибо, что включили исходную ссылку. Это было проницательно. Вы заметите, что ответ @RobAu на самом деле очень похож на вашу обновленную версию. - person jatrim; 04.06.2012
comment
@jatrim Свойство content применяется ко всем элементам. http://www.w3.org/TR/css3-content/#content < / а> - person XP1; 02.05.2013

Они правы. IMG - это элемент контента, а CSS - это дизайн. Но как насчет того, чтобы использовать некоторые элементы или свойства контента в целях дизайна? У меня есть IMG на моих веб-страницах, которые должны измениться, если я изменю стиль (CSS).

Что ж, это решение для определения представления IMG (на самом деле не изображения) в стиле CSS.

  1. создать прозрачный GIF или PNG размером 1x1.
  2. Назначьте этому изображению свойство "src" IMG.
  3. Определите финальную презентацию с помощью "background-image" в стиле CSS.

Работает как часы :)

person Frank    schedule 11.08.2011
comment
-1 Несмотря на то, что ваш ответ неплох, он специально упоминает, что не хочет использовать background* - person fresskoma; 12.08.2011
comment
это уловка ... по-моему браузеры изменят уловки ... и через день с утра ты увидишь ад на своем сайте: D :))) - person Mahdi Jazini; 24.11.2016

Вот очень хорошее решение -> http://css-tricks.com/replace-the-image-in-an-img-with-css/

За и против:
( +) работает с векторными изображениями, имеющими относительную ширину / высоту (то, что RobAu answer не обрабатывает)
(+) кросс-браузер (работает также для IE8 +)
(+) он использует только CSS. Поэтому нет необходимости изменять img src (или если у вас нет доступа / вы не хотите изменять уже существующий атрибут img src).
(-) извините, он действительно использует фоновый атрибут css :)

person OviC    schedule 01.10.2013
comment
Это подходящее решение, оно работает во всех браузерах, спасибо !! Также стоит упомянуть, что мне пришлось добавить: background-size: 100%; в класс css в решении выше, чтобы изображение для замены отображалось правильно. - person mikhail-t; 02.12.2014

Вы можете определить 2 изображения в своем HTML-коде и использовать display: none;, чтобы решить, какое из них будет видно.

person Kostas Andrianopoulos    schedule 11.03.2013
comment
Я искал повсюду решение, которое было бы веб-адаптивным, но также поддерживало бы SEO. Я хотел использовать медиа-запросы в CSS, чтобы изменить свое изображение в зависимости от используемого устройства, но я хотел сохранить свой контент в HTML. Объявление источников в CSS было путём, которым я не хотел идти, поэтому background-image не подходил. Мне нужны img теги для SEO. Ваш ответ такой простой, элегантный и решает все мои проблемы! Браво! Также пользователю не нужно загружать оба изображения. Кроме того, я могу добавить любое количество изображений. - person Xavier; 25.01.2019
comment
Каждый ответ, который я прочитал до сих пор, заставлял меня либо объявить мои источники в моей таблице стилей, либо использовать встроенный CSS в моей разметке. Ни то, ни другое меня не устраивало. Грязный код! - person Xavier; 25.01.2019

Нет, вы не можете установить атрибут изображения src через CSS. Самое близкое, что вы можете получить, это, как вы говорите, background или background-image. В любом случае я бы не рекомендовал это делать, поскольку это было бы несколько нелогично.

Однако вам доступно решение CSS3, если браузеры, на которые вы нацелены, могут его использовать. Используйте content:url , как описано в Pacerier's ответ. Вы можете найти другие кросс-браузерные решения в других ответах ниже.

person cletus    schedule 02.02.2010
comment
почему голосование против? этот ответ более точен, чем принятый ответ. - person harsimranb; 17.04.2014
comment
Лучший ответ на данный момент: НЕТ, вы не можете сделать это с помощью CSS. - person Milche Patern; 23.09.2014

Поместите несколько изображений в «управляющий» контейнер и вместо этого измените класс контейнера. В CSS добавьте правила для управления видимостью изображений в зависимости от класса контейнера. Это даст тот же эффект, что и изменение свойства img src отдельного изображения.

HTML:

<span id="light" class="red">
    <img class="red" src="red.png" />
    <img class="yellow" src="yellow.png" />
    <img class="green" src="green.png" />
</span>

CSS:

#light         { ... }
#light         *        { display: none; }     // all images are hidden
#light.red     .red     { display: inline; }   // show red image when #light is red
#light.yellow  .yellow  { display: inline; }   // .. or yellow
#light.green   .green   { display: inline; }   // .. or green

Обратите внимание, что он будет предварительно загружать все изображения, как с CSS backround-images, но в отличие от изменения img src с помощью JS.

person Bronx    schedule 10.08.2013

Альтернативный способ

.myClass {
background: url('/img/loading_big.gif');
}
<div class="myClass"></div>
person Tukaz    schedule 01.04.2011

Некоторые данные я бы оставил в HTML, но лучше определить src в CSS:

<img alt="Test Alt text" title="Title text" class="logo">

.logo {
    content:url('../images/logo.png');
}
person Renat Gatin    schedule 30.01.2018

Насколько мне известно, ВЫ НЕ МОЖЕТЕ. CSS - это стиль, а src изображения - это контент.

person NawaMan    schedule 02.02.2010
comment
В настоящее время довольно часто изображения используются только для стилизации страницы. - person Lorenzo Polidori; 08.08.2012
comment
Подразумевается, что может быть разница между изображениями, используемыми в качестве границ, фона и т. Д., И изображениями, которые фактически являются частью содержимого страницы, т. Е. схемы, фото статей и т. д. - person Rhys van der Waerden; 03.03.2014
comment
ВЫ МОЖЕТЕ, и есть общие допустимые случаи, когда вы захотите. - person ryan0; 31.10.2014

Чтобы повторить предыдущее решение и подчеркнуть реализацию чистого CSS, вот мой ответ.

Решение на чистом CSS необходимо в тех случаях, когда вы получаете контент с другого сайта и, таким образом, не можете контролировать доставляемый HTML. В моем случае я пытаюсь удалить брендинг лицензионного исходного контента, чтобы лицензиату не приходилось рекламировать компанию, у которой он покупает контент. Поэтому я удаляю их логотип, а все остальное оставляю. Я должен отметить, что это предусмотрено контрактом с моим клиентом.

{ /* image size is 204x30 */
     width:0;
     height:0;
     padding-left:102px;
     padding-right:102px;
     padding-top:15px;
     padding-bottom:15px;
     background-image:url(http://sthstest/Style%20Library/StThomas/images/rhn_nav_logo2.gif);
}
person Daniel Byrne    schedule 16.01.2013

Я знаю, что это действительно старый вопрос, однако никакие ответы не дают правильного объяснения, почему это никогда не может быть сделано. Хотя вы можете «делать» то, что ищете, вы не можете делать это правильным образом. Чтобы иметь действительный тег img, он должен иметь атрибуты src и alt.

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

Вкратце: то, что вы ищете, не может быть выполнено на законных основаниях в рамках структуры синтаксиса.

Источник: W3 Validator

person Geowil    schedule 14.07.2013

Или вы можете сделать это, что я нашел в сети.

https://robau.wordpress.com/2012/04/20/override-image-src-in-css/

<img src="linkToImage.jpg" class="egg">
.egg {
  width: 100%;
  height: 0;
  padding: 0 0 200px 0;
  background-image: url(linkToImage.jpg);
  background-size: cover;
}

Так эффективно скрывает изображение и заполняет фон. Ах, что за хакер, но если вам нужен тег IMG с альтернативным текстом и фоном, который можно масштабировать без использования JavaScript?

В проекте, над которым я сейчас работаю, я создал шаблон веточки блока героя.

<div class="hero">
  <img class="image" src="{{ bgImageSrc }}"
       alt="{{ altText }}" style="background-image: url({{ bgImageSrc }});">
</div>
person Pocketninja    schedule 24.08.2015

Если вы не хотите устанавливать свойство фона, вы не можете установить атрибут src изображения, используя только CSS.

В качестве альтернативы вы можете использовать JavaScript для этого.

person Guillaume Flandre    schedule 02.02.2010

Используя CSS, это невозможно сделать. Но, если вы используете JQuery, что-то вроде этого поможет:

$("img.myClass").attr("src", "http://somwhere");
person Veera    schedule 02.02.2010
comment
на самом деле может)) ответ на этот же вопрос можно найти здесь: stackoverflow.com/questions/2182716/ - person mikhail-t; 02.12.2014

Вы можете преобразовать его с помощью JS:

$('.image-class').each(function(){
    var processing = $(this).attr('src');
    $(this).parent().css({'background-image':'url('+processing+')'});
    $(this).hide();
});
person Raul Martin    schedule 27.02.2016

Если вы пытаетесь добавить изображение на кнопку динамически в зависимости от контекста вашего проекта, вы можете использовать? взять для ссылки на источник в зависимости от результата. Здесь я использую дизайн mvvm, чтобы позволить моему значению Model.Phases [0] определять, хочу ли я, чтобы моя кнопка была заполнена изображениями включенной или выключенной лампочки, в зависимости от значения фазы света.

Не уверен, что это поможет. Я использую JqueryUI, Blueprint и CSS. Определение класса должно позволить вам стилизовать кнопку в зависимости от того, что вы хотите.

    <button>                           
  <img class="@(Model.Phases[0] ? "light-on": "light-off")" src="@(Model.Phases[0] ? "~/Images/LightBulbOn.png" : "~/Images/LightBulbOff.png")"/>                             
  <img class="@(Model.Phases[0] ? "light-on": "light-off")" src="@(Model.Phases[0] ? "~/Images/LightBulbOn.png" : "~/Images/LightBulbOff.png")"/>   
  <img class="@(Model.Phases[0] ? "light-on": "light-off")" src="@(Model.Phases[0] ? "~/Images/LightBulbOn.png" : "~/Images/LightBulbOff.png")"/>     

person Tschlegel    schedule 23.05.2012

Я бы добавил следующее: фоновое изображение можно также расположить с помощью background-position: x y; (x по горизонтали y по вертикали). (..) Мой случай, CSS:

(..) 
#header {
  height: 100px; 
  background-image: url(http://.../head6.jpg); 
  background-position: center; 
  background-repeat: no-repeat; 
  background-color: grey; 
  (..)
} 
(...)
person john    schedule 17.01.2013

Код HTMl:

<!DOCTYPE html>
<html>
     <head>
         <link type="text/css" rel="stylesheet" href="css destination" />
     </head>
     <body>
<!-- click-able pic with link -->
           <a href="site you want"> 
<!-- Take the off if you don't want click-able link -->
                <h1 id(or class)="nameOfClassorid">
                     <span>Text that is not important</span>
                </h1>
           </a>
      </body>
 </html>

Код CSS:

span {
     display: none;
}
h1 id or class {
     height: of pic;
     width: of pic;
/* Only flaw (so far) read bottom */
     background-image:url(/* "image destination" */);
}
h1 id or class:hover {
/* Now the awesome part */
     background-image:url(/* 'new background!!!' */);
}

Я изучал html после школы несколько дней и хотел знать, как это сделать. Выяснили предысторию и сложили 2 и 2 вместе. Это работает на 100%. Я проверил, если нет, то обязательно заполнили необходимые вещи !!! Нам нужно указать высоту, потому что без нее ничего бы не было !!! Я оставлю эту базовую оболочку, которую вы можете дополнить.

Пример:

 <!DOCTYPE html>
 <html>
     <head>
         <link type="text/css" rel="stylesheet" href="style.css" />
     </head>
     <body>
           <a href="http:localhost"> 
                <h1>
                     <span>Text that is not important</span>
                </h1>
           </a>
     </body>
 </html>
span {
     display: none;
}
h1 {
     height: 100px;
     width: 100px;
     background-image:url("http://linuxlog.org/wp-content/uploads/2011/01/[email protected]");
}

h1:hover {
     height: 300px;
     width: 300px;
     background-image:url("http://cdn.css-tricks.com/images/ads/wufoo-600x600-red.png");
}

P.S. Да, я пользователь Linux;)

person Community    schedule 31.05.2013

Любой метод, основанный на background или background-image, скорее всего, не сработает, когда пользователь распечатает документ с отключенными «печать цветов фона и изображений». К сожалению, это типичный браузер по умолчанию.

Единственный удобный для печати и кросс-браузерный метод здесь - это метод, предложенный Bronx.

person Simon Rozman    schedule 19.09.2014

Загрузка IMG src из определения CSS с использованием современных свойств CSS

<style>
  body {
    --imgid: 1025; /* optional default img */
  }

  .shoes {
    --imgid: 21;
  }

  .bridge {
    --imgid: 84;
  }

  img {
    --src: "//i.picsum.photos/id/"var(--imgid)"/180/180.jpg"
  }

</style>
<script>
  function loadIMG(img) {
    img.src = getComputedStyle(img) // compute style for img
      .getPropertyValue("--src")        // get css property
      .replace(/[" ]/g, "");                // strip quotes and space
  }

</script>
<img src onerror=loadIMG(this) class=bridge>
<img src onerror=loadIMG(this) class=shoes>
<img src onerror=loadIMG(this)>

  • пустое определение src на ‹IMG› запускает обработчик ошибки: функция loadIMG
  • Функция loadIMG вычисляет значение CSS
  • удаляет все недопустимые символы
  • устанавливает IMG.src
  • при изменении CSS изображение НЕ обновляется! Вы должны снова позвонить в loadIMG

JSFiddle: https://jsfiddle.net/CustomElementsExamples/vjfpu3a2/

person Danny '365CSI' Engelman    schedule 13.03.2020

Просто используйте HTML5 :)

<picture>
    <source srcset="smaller.jpg" media="(max-width: 768px)">
    <source srcset="default.jpg">
    <img srcset="default.jpg" alt="My default image">
</picture>
person Max    schedule 27.04.2016
comment
OP специально пытается очистить свою разметку HTML с помощью решения CSS. Этот ответ только еще больше загромождает разметку. - person webaholik; 04.11.2019