Sono necessari parametri SVG come 'xmlns' e 'versione'?


204

In circa la metà degli esempi svg che vedo su Internet, il codice è racchiuso in semplici <svg></svg>tag semplici .

Nell'altra metà, i tag svg hanno molti attributi complicati come questo:

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

La mia domanda è: va bene usare i semplici tag svg? Ho provato a giocare con quelli complicati e tutto funziona alla mia fine se non li includo.

Risposte:


207

Tutti gli user agent (browser) ignorano l'attributo version, quindi puoi sempre lasciarlo cadere.

Se incorpori il tuo SVG inline in una pagina HTML e offri quella pagina come text/htmlallora gli attributi xmlns non sono richiesti . L'incorporamento di SVG in linea nei documenti HTML è un'innovazione abbastanza recente introdotta come parte di HTML5.

Se tuttavia servi la tua pagina come image / svg + xml o application / xhtml + xml o qualsiasi altro tipo MIME che induca l'agente utente a utilizzare un parser XML, sono richiesti gli attributi xmlns . Questo era l'unico modo per fare le cose fino a poco tempo fa, quindi ci sono molti contenuti offerti in questo modo.


5
"Tutti gli UA ignorano l'attributo versione, quindi puoi sempre rilasciarlo." - ma cosa hanno da dire le specifiche sull'argomento? "I browser ti permetteranno di cavartela" è (o è stato a un certo punto) vero per molte pratiche che sono (o erano) inequivocabilmente errate.
Mark Amery,

In IE11, se lo metto <!DOCTYPE svg xmlns="www.w3.org/2000/svg">funziona, ma se tolgo gli xmlns o lo cambio in <!DOCTYPE svg xmlns="www.example.com">non funziona. Perché?
Paperino

8
Potrebbe essere citata una fonte per questa risposta, per favore?
2540625,

69
Ho scritto una frazione significativa del codice SVG in Firefox e lo dico. Non è abbastanza buono? In caso contrario, ho aggiunto alcuni collegamenti comunque.
Robert Longson,

1
@Marcel no se quei dati-uris sono image / svg + xml, che di solito è il caso, allora vale la parte finale della risposta.
Robert Longson,

228

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

  • Richiesto per file image / svg + xml . 1
  • Opzionale per inline <svg> . 2

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

  • Obbligatorio per i file image / svg + xml con xlink: attributi. 1
  • Opzionale per inline <svg> con xlink: attributi2

Il version="1.1"attributo è:

  • Consigliato per rispettare gli standard dei file image / svg + xml . 3
  • Apparentemente ignorato da ogni agente utente. 4
  • Rimosso in SVG 2. 5

1 Identificatori di risorse internazionalizzati (RFC3987)
2 Da HTML5
3 Extensible Markup Language (XML) 1.0
4 Probabilmente fino al rilascio di ulteriori versioni principali.
5 SVG 2, Raccomandazione per il candidato W3C, 07 agosto 2018


2
Deve essere http o può essere anche https?
JohannesB,

2
@JohannesB entrambi i protocolli sono compatibili: D
ncomputers

1
@JohannesB sì qui avete un inline esempio HTTP HTTPS e immagine / svg + xml file con inline svg con xlink attributi esempio HTTP HTTPS
ncomputers

1
Grazie, supponiamo che anche Nick Craver commetta errori;)
JohannesB,

2
Non confondere l' versionattributo della dichiarazione xml ( <?xml version...) per l' versionattributo <svg>dell'elemento. Il primo riguarda la versione del linguaggio di markup XML, mentre il secondo specifica la versione di SVG. L'autore di questa risposta ha commesso l'errore facendo riferimento a XML, non alla specifica SVG in ³. Ho provato a correggerlo, ma alcuni idioti hanno rifiutato la modifica.
Bachsau,

7

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

  1. Per SVG inline inserito 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 in linea che viene caricato tramite javascript e AJAX, ci sono due opzioni:
    • Usa xhr.responseTexte elm.innerHTML. Questo non richiede xmlns.
    • Utilizzare xhr.responseXML.documentElemente elm.appendChild()o elm.insertBefore(). Questo metodo di creazione dell'SVG in linea produce risultati semi-cotti senza lo spazio dei nomi SVG di base dichiarato, come in xmlns="http://www.w3.org/2000/svg". <svg> viene caricato nell'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.

0

A proposito dell'attributo versione SVG, dice MDD WebDoc

Obsoleto dal SVG 2
Questa funzione non è più consigliata. Anche se alcuni browser potrebbero ancora supportarlo, potrebbe essere già stato rimosso dagli standard web pertinenti, potrebbe essere in procinto di essere eliminato o potrebbe essere conservato solo per motivi di compatibilità. Evita di usarlo e aggiorna il codice esistente se possibile; vedere la tabella di compatibilità in fondo a questa pagina per guidare la tua decisione. Tieni presente che questa funzione potrebbe smettere di funzionare in qualsiasi momento.

L'attributo version viene utilizzato per indicare a quali specifiche è conforme un documento SVG. È consentito solo sull'elemento radice. È puramente consultivo e non ha alcuna influenza sul rendering o l'elaborazione.

PS: SVG 2 non è ancora diventato uno standard.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.