2013-08-27 8 views
110

In circa la metà degli esempi svg che vedo su Internet, il codice è racchiuso tra semplici tag <svg></svg>.Sono necessari parametri SVG come "xmlns" e "versione"?

Nell'altra metà, SVG tag hanno un sacco di caratteristiche complicate come questa:

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

La mia domanda è: è ok per utilizzare i semplici tag SVG? Ho provato a giocare con quelli complicati e tutto funziona alla fine se non li includo.

risposta

110

Tutti gli UA ignorano l'attributo di versione, quindi è sempre possibile eliminarlo.

Se si incorpora l'SVG in linea in una pagina HTML e la si fornisce come text/html quindi xmlns attributes are not required. Incorporare SVG in linea nei documenti HTML è un'innovazione piuttosto recente che è arrivata come parte di HTML5.

Se tuttavia si serve la pagina come immagine/svg + xml o application/xhtml + xml o qualsiasi altro tipo MIME che fa sì che l'interprete utilizzi un parser XML, quindi the xmlns attributes are required. Questo era l'unico modo per fare le cose fino a poco tempo fa quindi c'è un sacco di contenuti serviti in questo modo.

+3

* "Tutti i programmi utente ignorare l'attributo della versione, in modo da poter sempre cadere questo". * - ma cosa SPEC hanno da dire sulla questione? "I browser ti permetteranno di farla franca" è (o è stato, a un certo punto) vero per molte pratiche che sono (o erano) non ambiguamente errate. –

+0

In IE11, se metto '' funziona, ma se togli il xmlns o lo cambi a '' non funziona. Perché? –

+3

Potrebbe essere citata una fonte per questa risposta, per favore? – jtheletter

118

L'attributo xmlns="http://www.w3.org/2000/svg" è:

  • richiesto per immagine/svg + xml file.
  • opzionale per inline<svg>.

L'attributo xmlns:xlink="http://www.w3.org/1999/xlink" è:

  • richiesto per /svg + xml file di immagine con xlink: attributi.
  • opzionale per inline<svg> con xlink: attributi.

L'attributo version="1.1" è:

  • consigliato di osservare le immagine/svg + xml file standard.
  • Apparentemente ignorato da ogni agente utente.

Internationalized Resource Identifiers (RFC3987)
Since HTML5
Extensible Markup Language (XML) 1.0
Probabilmente fino al rilascio di ulteriori versioni principali.

+5

Informazioni molto chiare, buona risposta. – Semicolon

+0

Ha bisogno di essere http o può essere anche https? – JohannesB

+0

@JohannesB entrambi i protocolli sono compatibili: D – ncomputers

1

Vorrei aggiungere a entrambe le risposte, ma non ho punti, sto aggiungendo una nuova risposta. Negli ultimi test su Chrome (versione 63.0.3239.132 (Build ufficiale) (64-bit di Windows)), ho scoperto che:

  1. Per SVG inline che viene immesso direttamente nel file HTML, tramite editor di testo o javascript ed elm.innerHTML, gli attributi xmlns non sono necessari, come indicato nelle altre due risposte.
  2. Ma per SVG inline che viene caricato tramite JavaScript e AJAX, ci sono due opzioni:
    • Usa xhr.responseText e elm.innerHTML. Questo non richiede xmlns.
    • Utilizzare xhr.responseXML.documentElement e elm.appendChild() o elm.insertBefore(). Questo metodo di creazione dell'SVG in linea produce risultati infornati senza che venga dichiarato lo spazio dei nomi SVG di base, come in xmlns="http://www.w3.org/2000/svg". Il svg > si carica nel codice HTML, ma le funzioni a livello di documento, come ad esempio getElementById() non vengono riconosciute nell'elemento > svg . Presumo che ciò sia dovuto al fatto che utilizza il parser XML XMLHttpRequest al di fuori dell'HTML.