2013-08-27 12 views
110

W około połowie przykładów svg, które widzę w Internecie, kod jest zawijany w zwykłe proste tagi <svg></svg>.Czy są potrzebne parametry SVG, takie jak "xmlns" i "wersja"?

W drugiej połowie, znaczniki SVG mają wiele skomplikowanych atrybutów tak:

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

Moje pytanie brzmi: czy jest to OK, aby używać prostych znaczników SVG? Próbowałem grać z tymi skomplikowanymi i wszystko działa dobrze na moim końcu, jeśli ich nie uwzględniam.

Odpowiedz

110

Wszystkie UA ignorują atrybut wersji, więc zawsze możesz go upuścić.

Jeśli osadzasz swój SVG w linii prostej na stronie HTML i wyświetlasz tę stronę jako text/html, a następnie xmlns attributes are not required. Osadzanie SVG w dokumentach HTML to dość niedawna innowacja, która pojawiła się w ramach HTML5.

Jeśli jednak podajesz swoją stronę jako obraz/svg + xml lub application/xhtml + xml lub inny typ MIME, który powoduje, że klient użytkownika używa parsera XML, a następnie the xmlns attributes are required. To był jedyny sposób, aby robić rzeczy do niedawna, więc jest wiele treści serwowanych w ten sposób.

+3

* „Wszystkie aplikacje klienckie ignorować atrybut wersji, więc zawsze można spaść, że.” * - ale co to spec mają do powiedzenia w tej sprawie? "Przeglądarki pozwolą ci odejść" jest (lub w pewnym momencie) odnosi się do wielu praktyk, które są (lub były) jednoznacznie niepoprawne. –

+0

W IE11, jeśli wstawię '' to działa, ale jeśli zabiorę xmlns lub zmienię go na '" nie działa. Dlaczego? –

+3

Czy można podać źródło dla tej odpowiedzi, proszę? – jtheletter

118

Atrybut xmlns="http://www.w3.org/2000/svg" jest:

  • Wymagane dla obraz/svg + xml plików.
  • Opcjonalnie dla inlined<svg>.

Atrybut xmlns:xlink="http://www.w3.org/1999/xlink" jest:

  • Wymagane dla obraz/svg + xml pliki z XLink: atrybutów.
  • Opcjonalnie dla inlined<svg> z XLink: atrybutów.

Atrybut version="1.1" jest:

  • Zalecane spełniać obrazu/svg + xml plików standardów.
  • Podobno został zignorowany przez każdego klienta użytkownika.

Internationalized Resource Identifiers (RFC3987)
Since HTML5
Extensible Markup Language (XML) 1.0
Prawdopodobnie do uwolnienia dalszej wersjami.

+5

Bardzo jasne informacje, dobra odpowiedź. – Semicolon

+0

Czy musi być http, czy może to być również https? – JohannesB

+0

@JohannesB oba protokoły są kompatybilne: D – ncomputers

1

Chciałbym dodać do obu odpowiedzi, ale nie mam punktów, dodaję nową odpowiedź. W ostatnich testów na Chrome (wersja 63.0.3239.132 (Dziennik budowy) (64-bitowy system Windows)), znalazłem, że:

  1. Dla inline SVG, który jest bezpośrednio wprowadzone do pliku HTML, za pomocą edytora tekstu lub javascript i elm.innerHTML, atrybuty xmlns nie są konieczne, jak stwierdzono w pozostałych dwóch odpowiedziach.
  2. Ale inline SVG, który jest ładowany za pomocą JavaScript i AJAX, istnieją dwie możliwości:
    • Zastosowanie xhr.responseText i elm.innerHTML. Nie wymaga to xmlns.
    • Użyj xhr.responseXML.documentElement i elm.appendChild() lub elm.insertBefore(). Ta metoda tworzenia wbudowanej SVG daje połowiczne wyniki bez zadeklarowania podstawowej przestrzeni nazw SVG, jak w przypadku xmlns="http://www.w3.org/2000/svg". <svg> ładuje się do HTML, ale funkcje na poziomie dokumentu, takie jak getElementById(), nie są rozpoznawane na elemencie <svg>. Zakładam, że dzieje się tak dlatego, że używa on parsera XMLHttpRequest XML poza kodem HTML.
Powiązane problemy