Как правильно закрыть тег <img>?


123
<img src='stackoverflow.png'>
<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />

Какой из них правильный?


6
Вопрос в том, как правильно закрыть тег <img>? Это реальный вопрос, и ответы на него полезны. Этот вопрос нельзя было закрывать.

3
Вопрос, в настоящее время, в порядке. Он не является двусмысленным, расплывчатым, неполным, слишком широким или риторическим. Ниже также есть отличный ответ.
Дэвид Дж.

Я не знаю, какой из следующих ответов правильный, но, что интересно, инспектор кода Firefox добавляет </img> в конец тега, если вы его не поместили. И IE этого не делает. Это важно в моей вселенной.
Chiwda

PS Dreamweaver вставляет тег /> XHTML.
Chiwda

Ответы:


50
<img src='stackoverflow.png' />

Работает нормально и закрывает тег правильно. Лучше всего добавить altатрибут для людей с ослабленным зрением.


4
Это правильно, что <img />действует в [X] HTML / XML, хотя использование XHTML в настоящее время очень редко, и если ваш сервер обслуживает страницы, text/htmlвсе, о чем вам нужно беспокоиться, - это написать правильный HTML. Шансы на перенос HTML-приложения на XHTML близки к нулю.
Fabrício Matté,

1
Приведенный выше ответ не будет подтвержден с помощью средства проверки HTML W3C, если настроен таргетинг на 4.01 Transitional и выше. Также см. Службу проверки разметки W3C . Я считаю, что для ответа выше требуется HTML5 или XHTML. Чтобы избежать сбоев проверки, вам нужно использовать тот <img src='stackoverflow.png'>(если это важно для вас).
jww

1
@ FabrícioMatté Вы сильно недооцениваете фактическое использование xhtml. Чем крупнее компания, тем больше вероятность, что они будут работать с xhtml поверх html или html5, отформатированным как xhtml (для легкого / более быстрого синтаксического анализа), или вы работаете с другими вещами, такими как микроданные или расширенная разметка, например ixbrl.
Роберт Макки

Между «отлично работает» и «задано» существует большая разница, и вы никогда не найдете ни одной спецификации HTML, в которой использовалась бы закрывающая косая черта для этого тега. Как уже упоминалось, разрешено не нарушать работу веб-сайтов, изначально написанных для использования XHTML / XML, но нигде вы не найдете никаких формулировок или примеров, указывающих на необходимость его использования. Фактически, вы найдете формулировку, гласящую, что она не имеет смысла, и браузеры проинструктированы игнорировать ее!
Роб

Роб: 6 лет назад возникла проблема. Это исправило это. Думаю, теперь браузеры лучше
Эд Хил

164

Это действительный HTML5, и он абсолютно нормален, не закрывая его. Это так называемый пустотный элемент:

<img src='stackoverflow.png'>

Ниже приведены допустимые теги XHTML. Они должны быть закрыты. Последний вариант также подходит для HTML 5:

<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />

5
Он действителен не только для HTML5, но и для HTML4. Как вы сказали, HTML не требует самозакрывающихся "пустых" элементов. +1 за внятный ответ.
Fabrício Matté

2
HTML5 или XHTML не сможет пройти проверку с помощью средства проверки HTML W3C, если настроен таргетинг на 4.01 Transitional и выше. Также см. Службу проверки разметки W3C . Вам нужно использовать тот <img src='stackoverflow.png'>(если это важно для вас).
jww

Комментируя через много лет ... Я смутился, увидев <img src="about:logo" alt="about:logo">тег на about:logoстранице firefox 76 ! Хотя document.body.innerHTMLпоказывает <img src=\"about:logo\" alt=\"about:logo\">... Очень хороший ответ ...
С.Госвами

4

На самом деле в HTML5 действует только первый.

<img src='stackoverflow.png'>  

Только два последних действительны в XHTML

<img src='stackoverflow.png'></img>  
<img src='stackoverflow.png' />

(Хотя это и не обязательно, altатрибут _usually_ также должен быть включен).

Тем не менее, ваша страница HTML5, вероятно, будет отображаться так, как задумано, потому что браузеры будут переписывать или интерпретировать ваш html так, как он думает, вы имели в виду. Это может означать, что тег, например, из
<div />в <div></div>. Или, может быть, он просто игнорирует последнюю косую черту <img ... />.
см. 2016: Использовать HTML5 как XHTML 5.0 для устаревшей проверки.
см. обсуждение 2011 г. и дополнительные ссылки здесь, хотя со временем некоторые элементы могли измениться

Отчасти это связано с тем, что браузеры очень стараются исправить ошибки. Кроме того, потому что существует большая путаница с самозакрывающимися тегами и тегами void. Наконец, спецификация изменилась или не всегда была ясной, и браузеры стараются быть обратно совместимыми.

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

Разумная стратегия может заключаться в следующем:

  • Напишите новый код без закрывающей косой черты.
  • При рефакторинге кода обновляйте соседние теги изображений по мере их появления.
  • Не беспокойтесь о тегах в устаревших файлах, к которым вы не прикасаетесь, если не возникнет особой необходимости.

Вот список тегов, которые нельзя закрывать в HTML5 :

 <br>    <hr>    <input>       
 <img>  <link>   <source>  
 <col>  <area>   <base>
 <meta> <embed>  <param>  
<track>  <wbr>   <keygen> (HTML 5.2 Draft removed)

1
Это технически неверно. Самозакрывающийся элемент void совершенно допустим в html 5. См. Html.spec.whatwg.org/#start-tags, который будет <img src='stackoverflow.png' />действителен в любой версии XHTML и HTML 5.
Роберт Макки

1
@RobertMcKee Нет, это технически правильно. Хотя использование закрывающей косой черты разрешено и не будет помечено как ошибка, нигде в любой спецификации HTML вы не увидите, что она указана как подлежащая использованию. Разрешено не нарушать работу старых веб-сайтов, основанных на XHTML / XML, но нигде вы не найдете какой-либо спецификации HTML, показывающей словами или примером использование закрывающей косой черты в тех тегах, где они указаны либо W3C. или WHATWG.
Роб

@Rob Согласно документу WHATWG, который я привел выше в разделе 12.1.2.1.6 - Then, if the element is one of the void elements, or if the element is a foreign element, then there may be a single U+002F SOLIDUS character (/). This character has no effect on void elements, but on foreign elements it marks the start tag as self-closing.img является пустым элементом в разделе 12.1.2
Роберт МакКи

1
@RobertMcKee Да. Это (часть) спецификации, в которой излагается, почему разрешена косая черта (по причинам, которые я указал в моем предыдущем комментарии). Однако вам следует посмотреть на фактическую спецификацию этого элемента - в данном случае img - которая ясно показывает словами и примерами, что закрывающая косая черта не требуется и не указывается. Фактически, не глядя, дальнейшее чтение в этом разделе будет констатировать, что закрывающая косая черта не имеет значения, ничего не делает и браузеры должны ее игнорировать. Так что это бесполезно и бессмысленно и возвращает нас к моему первоначальному комментарию: закрывающая косая черта не используется.
Роб

1
@Rob Да, это необязательно, но вполне допустимо. Что делает заявление Actually, only the first one is valid in HTML5технически некорректным. Второй действителен и в HTML5. Не требуется, но действует. Никто не утверждает, что это необходимо. Только то, что согласно спецификациям, использование самозакрывающейся формы тега допустимо во всех текущих формах XHTML и HTML.
Роберт Макки

2

Лучшее использование тегов, которые вы должны использовать:

<img src="" alt=""/>

Также вы можете использовать в HTML5:

<img src="" alt="">

Эти два полностью действительны в HTML5. Выберите один из них и придерживайтесь его.


Первый не самый лучший в том смысле, что он не определен ни в одном стандарте HTML, а второй есть. Первый разрешен только по историческим причинам! (Совместимость с использованием XHTML / XML на старых веб-сайтах, которая сломалась бы, если бы браузеры запретили это.)
Роб

Не уверен, что здесь пытается сказать Роб, но в спецификации html действительно указано, что первое действительно.
Роберт Макки

2

Оба правильный ответ. HTML5 следует строгим правилам, и в HTML5 мы можем закрыть все теги. Итак, это зависит от вас, использовать HTML5 или HTML и следовать соответствующему ответу.

<img src='stackoverflow.png'>
<img src='stackoverflow.png' />

Второе свойство более подходящее.


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

1

-Тег пуст и содержит только атрибут. - Тег не имеет закрывающего тега.

Так,

<img src='stackoverflow.png'>
<img src='stackoverflow.png' />

оба верны и в HTML5.


Первым правильно! Второй разрешен только по историческим причинам. (Совместимость с использованием XHTML / XML на старых веб-сайтах, которая сломалась бы, если бы браузеры запретили это.)
Роб

1

Полезно иметь закрывающий тег, если вы когда-нибудь попытаетесь прочитать его с помощью анализатора XHTML. Может быть крайний случай, но я делаю это все время. Это не вредит, а значит, я знаю, что мы можем использовать массив считывателей XML, которые не опрокинутся при попадании в незакрытый тег.

Если вы никогда не собираетесь анализировать контент, игнорируйте закрытие.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.