Нужны ли такие параметры SVG, как 'xmlns' и 'version'?

131

Примерно в половине примеров svg, которые я вижу в Интернете, код обернут в простые простые теги <svg></svg>.

В другой половине теги svg имеют много сложных атрибутов, таких как:

<svg 
  xmlns="http://www.w3.org/2000/svg" 
  version="1.1" 
  xmlns:xlink="http://www.w3.org/1999/xlink"> 

У меня вопрос: можно ли использовать простые теги SVG? Я пытался поиграть со сложными, и все отлично работает, если я их не включу.

Теги:
svg
tags

3 ответа

155
Лучший ответ

Все пользовательские агенты (браузеры) игнорируют атрибут версии, поэтому вы всегда можете его удалить.

Если вы встраиваете свой SVG файл в HTML-страницу и используете эту страницу как text/html то атрибуты xmlns не требуются. Встраивание SVG-кода в HTML-документы является сравнительно недавним нововведением, появившимся как часть HTML5.

Если же вы служите страницу как изображение /SVG + XML или приложение /XHTML + XML или любой другой тип MIME, который заставляет агент пользователя использовать XML - анализатор, то атрибуты Xmlns необходимы. До недавнего времени это был единственный способ сделать что-то, поэтому много контента обслуживается так.

  • 3
    «Все UA игнорируют атрибут version, так что вы всегда можете его удалить». - но что спецификация должна сказать по этому поводу? «Браузеры позволят вам избежать неприятностей» - это (или в какой-то момент) правда многих практик, которые (или были) однозначно неверны.
  • 0
    В IE11, если я добавлю <!DOCTYPE svg xmlns="www.w3.org/2000/svg"> это сработает, но если я уберу xmlns или поменяю его на <!DOCTYPE svg xmlns="www.example.com"> это не работает. Это почему?
Показать ещё 9 комментариев
162

Атрибут 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 г.

  • 6
    Очень четкая информация, хороший ответ.
  • 1
    Должен ли он быть http или также может быть https?
Показать ещё 7 комментариев
2

Я хотел бы добавить к обоим ответам, но у меня нет баллов, я добавляю новый ответ. В недавних тестах на Chrome (Версия 63.0.3239.132 (Официальная сборка) (64-битная Windows)) я обнаружил, что:

  1. Для встроенного SVG, который непосредственно вводится в файл HTML через текстовый редактор или javascript и elm.innerHTML, атрибуты xmlns не нужны, как указано в двух других ответах.
  2. Но для встроенного 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню