in english

Трюки с SVG и тегом <image>

Алексей Тен, 14.08.2013
Обновление: 16.08.2013

Недавно Лиа Веру (Lea Verou) поделилась ссылкой на пост Джейка Арчибальда (Jake Archibald) Having fun with <image>, в котором он в очередной раз обнаружил, что теги image и img практически синонимы, в процессе парсинга тег image заменяется на img всегда и во всех браузерах.

svg.svg
svg.png

Именно это свойство тега image пару месяцев назад натолкнуло меня на мысль использовать его для graceful degradation SVG картинок в браузерах, не поддерживающих SVG. Идея предельно простая: подготовим SVG-файл для хороших браузеров и обычную растровую картинку для остальных. И напишем в HTML такой код:

<svg width="96" height="96">
    <image xlink:href="svg.svg" src="svg.png" width="96" height="96"/>
</svg>

Дальше произойдёт магия: браузеры, поддерживающие SVG, прочитают этот код как:

<svg width="96" height="96">
    <image xlink:href="svg.svg" width="96" height="96"/>
</svg>

проигнорировав атрибут src, и покажут красивую векторную картинку.

Браузеры, не поддерживающие SVG, проигнорируют неизвестный им тег svg и, благодаря тому что image и img — это синонимы, прочитают код как:

<img src="svg.png" width="96" height="96"/>

и покажут обычную растровую картинку.

Для совсем простых картинок (например, иконок) можно обойтись без отдельного SVG-файла, указав всё содержание файла прямо в HTML-е. Зачастую это содержание короче, чем путь к файлу.

<svg height="16" width="16">
    <path d="M5 1v14l9-7">
    <image src="next.png">
</svg>
Примеры: