Действительно ли включить изображения с <object> вместо <img>?

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

В настоящее время я разрабатываю веб-приложение, и, будучи перфекционистом, я стараюсь сделать все блестящим и соответствовать всем стандартам. Насколько я знаю, тег <img> должен быть устаревшим в следующих стандартах для xHTML, и поскольку в настоящее время даже IE способен обрабатывать <object> правильно, я хотел использовать тег <object> для всех изображений на мой сайт

Стало ясно, что "предстоящие стандарты", о которых говорил плакат, - это заброшенная XHTML2 spec, которая даже не официально отклонить <img>. (Хотя, по-видимому, об этом говорили ).

Насколько я знаю, я не видел никого в сообществе разработчиков веб-сайтов, пропагандирующего использование тега <object> общего назначения поверх более семантического и определенно более совместимого тега <img>.

Есть ли веская причина использовать <object> вместо <img>? Если <object> можно использовать даже вместо <img> – что это может сломаться?

Ответ 1

Чтобы ответить на вопрос в заголовке: да, это действительно, конечно. Действительность элемента object даже не зависит от типа встроенных данных. Если вы хотели спросить, правильно ли это, тогда ответ будет да, в спецификациях нет ничего, что запрещало бы его или рекомендовало бы против него.

Среди возможных причин использования object для встраивания изображения наиболее практичным является то, что он позволяет резервному контенту содержать разметку HTML, такую ​​как заголовки, списки, таблицы и разметку фраз. Элемент img позволяет вам указывать только обычный текст в качестве резервного содержимого. Даже абзацы не могут быть указаны.

По причинам доступности любое изображение должно иметь резервный контент, который должен быть отображен, например. когда документ используется в невизуальном просмотре (программа чтения с экрана, шрифт Брайля и т.д.), или изображение не отображается по той или иной причине. Для любого контента, богатого контентом (например, организационной диаграммы или чертежа, описывающего сложный процесс), резервный контент должен быть длинным и должен иметь некоторую структуру.

Однако для внедрения изображения редко используется object. Важность запасного контента не получила широкого распространения, и практические экономические и технические соображения часто приводят к игнорированию проблем резервного копирования. Более того, object имеет долгую историю медленной, ошибочной и качественно плохой реализации в браузерах. Совсем недавно стало достаточно безопасно использовать object для включения изображения.

Вопрос о том, какой элемент более семантичен, в основном бесполезен, и ответы обычно отражают только различные способы не понимать понятие "семантика". Оба img и object означают включение (вложение) внешнего контента. Элемент img в принципе предназначен для включения изображений, независимо от того, что это означает, хотя он также использовался для включения видео. Для элемента object атрибут type может использоваться для указания типа встроенного содержимого, вплоть до определенного типа изображения, например. type=image/gif, или он может быть оставлен открытым.

Это означает, что элемент object более гибкий: вы можете оставить тип неопределенным, позволяя его указывать в заголовках HTTP. Таким образом, тип встроенных данных может быть изменен без изменения элемента object или документа внедрения в целом; например, вы можете начать с простой версии, где внедренный контент - это изображение, а затем заменить его на документ HTML (содержащий изображение и текст, например).

Ответ 2

Единственный раз, когда я когда-либо видел объект, используемый для показа изображения, - это создать "резервную копию", когда по какой-либо причине невозможно загрузить загруженный объект. Возьмите этот пример из спецификаций W3:

<OBJECT title="The Earth as seen from space" classid="http://www.observer.mars/TheEarth.py">
    <!-- Else, try the MPEG video -->
    <OBJECT data="TheEarth.mpeg" type="application/mpeg">
        <!-- Else, try the GIF image -->
        <OBJECT data="TheEarth.gif" type="image/gif">
            <!-- Else render the text -->
            The <STRONG>Earth</STRONG> as seen from space.
        </OBJECT>
    </OBJECT>
</OBJECT>

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

Ответ 3

Нет хорошей практической причины использовать object вместо img. object всегда был непоследовательно и беспорядочно поддержан. Используйте img для изображений, embed для флэш-контента и video или audio для мультимедийного контента. В основном единственное использование object left - это вызов определенных плагинов.

Тем не менее, философская позиция для существования object все еще очень хороша. Он должен был быть общим элементом для любого типа контента, который может содержать вложенный резервный контент. W3C/XHTML2 имел очень идеалистическую дорожную карту для html, которая подчеркивала синтаксическую и семантическую чистоту и хотела делать такие вещи, как позволить href для любого элемента (исключая a) и исключить img в пользу object. Однако браузеры никогда не могли бы получить object прямо полностью. Кроме того, было сложно определить js API для общего элемента object. Это большая причина, по которой video и audio являются отдельными - object, обслуживающие видео, не будут отображаться API-интерфейсы js.

Однако XHTML2 потерян и HTML5 выиграл, а HTML5 поддерживает img, поэтому используйте img.