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


122
<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 Перехідні та новіші. Також див . Службу перевірки розмітки W3C . Я вважаю, що відповідь вище вимагає HTML5 або XHTML. Щоб уникнути збоїв у валідації, вам потрібно скористатися цією <img src='stackoverflow.png'>(якщо вона має значення для вас).
jww

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

Існує велика різниця між "добре працює" і "вказано", і ви ніколи не знайдете специфікації HTML, яка закликає використовувати замикаючу рису на цьому тезі. Як згадували інші, дозволено не порушувати веб-сайти, спочатку написані для використання XHTML / XML, але ніде не знайдете формулювань чи прикладів, що вказують на його використання. Насправді ви знайдете формулювання, в якому зазначено, що це не має сенсу, і браузерам доручено ігнорувати його!
Роб

Роб - 6 років тому виникла проблема. Це все виправило. Здогадайтесь, браузери краще
Ed Heal

163

Цей дійсний 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 Перехідні та новіші версії. Також див . Службу перевірки розмітки W3C . Вам потрібно скористатися одним <img src='stackoverflow.png'>(якщо він для вас важливий).
jww

Коментуючи через багато років ... Заплутався, побачивши <img src="about:logo" alt="about:logo">тег на сторінці firefox 76 about:logo! Хоча document.body.innerHTMLпоказує <img src=\"about:logo\" alt=\"about:logo\">... Дуже гарна відповідь ...
S.Goswami

4

Насправді в HTML5 діє лише перший

<img src='stackoverflow.png'>  

У XHTML діють лише останні два

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

(Хоча це altстрого не потрібно, атрибут _усуточно_ також повинен бути включений).

При цьому ваша HTML5 сторінка, ймовірно, відображатиметься за призначенням, оскільки браузери переписують чи інтерпретують ваш HTML у те, що він думає, що ви мали на увазі. Це може означати, що він перетворює тег, наприклад, з
<div />на в <div></div>. Або, можливо, він просто ігнорує остаточну косу рису <img ... />.
див. 2016: Подайте HTML5 як XHTML 5.0 для підтвердження застарілих даних.
Дивіться: обговорення 2011 року та додаткові посилання тут, хоча з часом деякі біти можуть змінитися

Частково це відбувається тому, що браузери дуже намагаються виправити помилку. Також тому, що існує багато плутанини щодо тегів, що закриваються, і тегів, що не закриваються. Нарешті, специфікація змінилася або не завжди була зрозумілою, і браузери намагаються бути сумісними назад.

Отже, хоча ви, ймовірно, можете піти з будь-якого з трьох варіантів,
лише перший дотримується стандарту HTML5 і гарантовано пройде валідатор HTML5.

Раціональною стратегією може бути:

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

Ось список тегів, які не слід закривати в HTML5 :

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

1
Це технічно неправильно. Елемент несанкціонованого закриття абсолютно дійсний у 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.