Нужны ли параметры SVG, такие как "xmlns" и "версия"?
Примерно в половине примеров svg, которые я вижу в Интернете, код обернут в простые простые теги <svg></svg>
.
В другой половине теги svg имеют много сложных атрибутов, таких как:
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink">
У меня вопрос: можно ли использовать простые теги SVG? Я пытался поиграть со сложными, и все отлично работает, если я их не включу.
Ответы
Ответ 1
Все пользовательские агенты (браузеры) игнорируют атрибут версии, поэтому вы всегда можете его удалить.
Если вы встраиваете свой SVG файл в HTML-страницу и используете эту страницу как text/html
то атрибуты xmlns не требуются. Встраивание SVG-кода в HTML-документы является сравнительно недавним нововведением, появившимся как часть HTML5.
Если же вы служите страницу как изображение /SVG + XML или приложение /XHTML + XML или любой другой тип MIME, который заставляет агент пользователя использовать XML - анализатор, то атрибуты Xmlns необходимы. До недавнего времени это был единственный способ сделать что-то, поэтому много контента обслуживается так.
Ответ 2
Атрибут xmlns="http://www.w3.org/2000/svg"
:
- Требуется для файлов image/svg + xml. 1
- Необязательно для встроенного
<svg>
. 2
xmlns:xlink="http://www.w3.org/1999/xlink"
:
- Требуется для файлов image/svg + xml с атрибутами xlink:. 1
- Необязательно для встроенного
<svg>
с атрибутами xlink:. 2
Атрибут version="1.1"
:
- Рекомендуется для соответствия стандартам image/svg + xml files. 3
- Видимо игнорируется каждым пользовательским агентом. 4
- Удалено в SVG 2. 5
1Интернационализированные идентификаторы ресурсов (RFC3987)
2С HTML5
3Расширяемый язык разметки (XML) 1,0
+4 Вероятно, до выхода дальнейших основных версий.
5SVG 2, Рекомендация кандидата W3C, 7 августа 2018 г.
Ответ 3
Я хотел бы добавить к обоим ответам, но у меня нет баллов, я добавляю новый ответ. В недавних тестах на Chrome (Версия 63.0.3239.132 (Официальная сборка) (64-битная Windows)) я обнаружил, что:
- Для встроенного SVG, который непосредственно вводится в файл HTML через текстовый редактор или javascript и elm.innerHTML, атрибуты xmlns не нужны, как указано в двух других ответах.
- Но для встроенного SVG, который загружается через javascript и AJAX, есть два варианта:
- Используйте
xhr.responseText
и elm.innerHTML
. Это не требует xmlns. - Используйте
xhr.responseXML.documentElement
и elm.appendChild()
или elm.insertBefore()
. Этот метод создания встроенного SVG приводит к получению полупеченных результатов без объявления базового пространства имен SVG, как в xmlns="http://www.w3.org/2000/svg"
. <Svg> загружается в HTML, но функции уровня документа, такие как getElementById()
, не распознаются в элементе <svg>. Я предполагаю, что это потому, что он использует XMLHttpRequest XML-парсер вне HTML.
Ответ 4
Об атрибуте версии SVG в MDN WebDoc говорится
Устаревшая версия с SVG 2
Эта функция больше не рекомендуется. Хотя некоторые браузеры могут все еще поддерживать его, возможно, он уже удален из соответствующих веб-стандартов, может быть в процессе отброшено или может храниться только в целях совместимости. Избегать использования и обновите существующий код, если это возможно; см. таблицу совместимости в нижней части этой страницы, чтобы направить ваше решение. Знать, что это функция может перестать работать в любое время.
Атрибут version используется для указания, какая спецификация SVG документ соответствует. Это разрешено только для корневого элемента. Это носит чисто рекомендательный характер и не влияет на рендеринг или обработку.
PS: SVG 2 еще далеко не стал стандартом.