Dovrei usare tag non standard in una pagina HTML per evidenziare le parole?


20

Vorrei sapere se è una buona pratica o legale utilizzare tag non standard in una pagina HTML per determinati scopi personalizzati.

Per esempio:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam consequat, felis sit amet suscipit laoreet, nisi arcu accumsan arcu, vel pulvinar odio magna suscipit mi.

Voglio evidenziare "consectetur adipiscing elit" come importante e "nisi arcu accumsan arcu" come evidenziato.

Quindi nell'HTML metterei:

Lorem ipsum dolor sit amet, <important> consectetur adipiscing elit </important>. Nullam consequat, felis sit amet suscipit laoreet, <highlighted> nisi arcu accumsan arcu </highlighted>, vel pulvinar odio magna suscipit mi.

e nel CSS:

important {
 background: red
 color: white;
}

highlighted {
 background: yellow;
 color: black;
}

Tuttavia, poiché questi non sono tag HTML validi, va bene?


56
<span class=..>?
Jake Berger,

12
Per definizione, se sono personalizzati non sono tag HTML (che sono standardizzati). Sono solo elementi che non hanno un significato specifico.
Oded,


14
<em>è fondamentalmente tuo <important>ed <mark>è tuo <highlight>.
Peter C,

3
Hai ragione. Le specifiche HTML5 dicono che <strong>è più appropriato per importanza di quanto non lo <em>sia. Colpa mia.
Peter C,

Risposte:


50

No, questa non è una buona pratica. Dovresti usare tag già semantici e significativi - forse <em>in questo caso - e applicare gli stili CSS per raggiungere i tuoi requisiti di progettazione.


3
Presumibilmente non ha familiarità con le lezioni. La sintassi è: HTML <em class="myclass">sample text</em>CSS .myclass: { background: red; etc. } Puoi dare lezioni alla maggior parte dei tag, non solo em. Di solito divo spanper il testo. Vedi anche
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft - le classi sparse in tutto il codice sono il modo sbagliato di gestire anche questo. Probabilmente potresti fare di meglio usando i selettori discendenti con una o due classi su container.
Wyatt Barnett,

14

La tua domanda è se è " buona pratica o legale ".

Innanzi tutto: è un po 'legale - almeno, è tollerato. I browser sono sempre stati programmati per far fronte a tag che non comprendono, anche se ciò significa che li ignorano. Questo codice HTML:

Some <b>bold</b> and some <slanted>italic</slanted>.

Apparirà come questo è ogni singolo browser:

Alcuni in grassetto e in corsivo.

Inoltre, la maggior parte dei browser ti permetterà di modellare quell'elemento nei CSS. Quindi se aggiungi la seguente definizione CSS:

slanted { font-style: italic; }

la maggior parte dei browser ora eseguirà il rendering come segue:

Alcuni in grassetto e in corsivo .

Davvero: provalo tu stesso . Per inciso, questo è un trucco che gli sviluppatori Web usano per provare e garantire che i nuovi tag HTML5 vengano visualizzati correttamente nei browser più vecchi.

Tuttavia, non è esattamente il quadro completo. La risposta completa è no, non è una buona pratica . Potresti aver notato il mio uso della frase " maggior parte dei browser". Sfortunatamente, tutte le versioni di Internet Explorer precedenti a IE9 non implementano questo comportamento. In IE8 e precedenti, il codice sopra sarà ancora simile a questo:

Alcuni in grassetto e in corsivo.

C'è una descrizione eccellente e dettagliata del problema in Dive Into HTML5 , dove troverai anche i dettagli di una soluzione alternativa. Tuttavia, la soluzione alternativa richiede JavaScript, quindi non è una soluzione HTML pura e non funzionerà in tutti gli scenari.

Quindi, risposta breve: attenersi solo agli elementi HTML standard e modellarli come preferisci nel CSS.


Non è legale La specifica definisce quali elementi sono ammessi. La capacità dei browser di recuperare dagli errori dell'autore non rende giusti gli errori dell'autore.
Quentin,

Dove posso trovarlo non è legale? Ho provato a cercare nelle specifiche HTML, ma non sono riuscito a trovare un buon riferimento.
Dibbeke,

2
@DavidDorward Sì, vedo il tuo punto. Quello che intendevo dire era che i browser garantiscono di non rompersi quando vedono un tag sconosciuto, al contrario della mancanza di garanzia intorno, diciamo, a un tag non chiuso. Quindi forse il termine corretto qui è "tollerato" piuttosto che legale. Ho aggiornato la risposta di conseguenza.
Mark Whitaker,

@DavidDorward è assolutamente legale. Il W3C è andato persino così lontano nelle specifiche HTML5 da dettare che "L'interfaccia HTMLUnknownElement deve essere usata per elementi HTML che non sono definiti da questa specifica". Se non fosse legale, lo avrebbero dichiarato. Penso che si stia costruendo un polverone sul fatto che UnknownElement o Microformats siano l'approccio semantico migliore per il web. Indipendentemente da quale sia meglio, entrambi sono legali.
canapa il

1
Dalla specifica : A differenza delle versioni precedenti della specifica HTML, questa specifica definisce in dettaglio l'elaborazione necessaria per documenti non validi e documenti validi. Tuttavia, anche se il trattamento di contenuti non validi è nella maggior parte dei casi ben definito, i requisiti di conformità per i documenti sono ancora importanti
Quentin

8

Se è necessario mantenere la semantica di <important/>per motivi specifici, è possibile utilizzare XSL per trasformare i tag personalizzati in HTML valido. Puoi leggere di più su questo argomento qui:

http://www.w3.org/Style/XSL/WhatIsXSL.html

http://www.4guysfromrolla.com/webtech/081300-2.shtml

http://www.ibm.com/developerworks/xml/library/x-tiphtml/index.html

http://www.siteexperts.com/tips/xml/ts01/page5.asp

http://www.htmlgoodies.com/beyond/xml/converting-xml-to-html-using-xsl.html

Non puoi ancora avere <important/>nell'output HTML finale, ma puoi trasformarlo automaticamente in qualcosa del genere <span class="important"....


8

Ci sono alcune risposte qui che spiegano perché non dovresti mai creare i tuoi tag personalizzati. Probabilmente, sono tutti errati.

L'analisi dei tag personalizzati di WHATWG conclude che sono accettabili, conformi agli standard (poiché la gestione dei tag non riconosciuti è ben definita) e più accessibili rispetto, ad esempio, allo stile di un div generico.

<x-accordion> </x-accordion> non è peggio di <div class = "accordion"> </div> in tutti i sensi meccanici. In assenza della definizione di "fisarmonica x" (o supporto del modello di componente), entrambi significano la stessa cosa, entrambi possono essere disegnati allo stesso modo. Uno è HTMLUnknownElement, l'altro è HTMLDivElement e la loro superficie API è identica.

Quello che dovresti fare, cosa che l'OP non ha fatto, è il prefisso di tutti i tag personalizzati con 'x-' per convenzione. Ciò indica chiaramente che intendi che questo tag sia locale nel tuo documento ed evita conflitti con futuri elementi di specifica.

Alcuni sostengono che poiché alcuni browser popolari non gestiscono i tag personalizzati in modo conforme agli standard, non è necessario utilizzarli. Tuttavia, il comportamento dei browser non conformi è un problema suo e preferibilmente non ti costringerà a scrivere markup non semantici. Esistono sia soluzioni Javascript che non Javascript a quel problema, che dovrebbero essere applicate solo per quei browser non conformi che desideri supportare specificamente.

Detto questo, se esiste un tag nella specifica (<mark>) che copre chiaramente il significato semantico del tag che hai creato (<highlight>), allora è sicuramente preferibile usare il tag esistente.


Se si desidera contrassegnare del testo (ad es. "Dm7") in modo tale che facendo clic su di essa si suoni una fisarmonica animata con un accordo di settima minore minore, l'approccio della "fisarmonica x" sarebbe un buon modo di procedere? Se il Javascript per la fisarmonica avesse bisogno di ulteriori informazioni, come dovrebbe essere meglio notato? Come <x-accordion data-notes="D2 D3 F3 A3 C4">Dm7</x-accordion>?
supercat

5

È possibile utilizzare <em />e <strong />con CSS personalizzato per modificare la modalità di visualizzazione.

Forte, si riferisce a una maggiore importanza.

Enfasi, si riferisce a una maggiore enfasi.


4

Sul lato pratico, non è necessario utilizzare nuovi tag per evidenziare. È possibile utilizzare emo itag, se si preferisce il corsivo come predefinita (non-CSS) il rendering e strongo bse si preferisce Bolding come predefinito. Se, per qualche motivo, preferisci il rendering predefinito come testo normale, cioè senza evidenziazione, usa span. In ogni caso, puoi utilizzare un classattributo per distinguere questo utilizzo dagli altri che potresti avere per il markup.

Le specifiche HTML e le bozze (HTML5) sono oscure per quanto riguarda la semantica di questi elementi, ma ciò non deve causare alcun forte mal di testa.


7
-1 Questo è un cattivo consiglio. I tag eme strongdovrebbero essere usati quando è semanticamente corretto per farlo, non quando si desidera grassetto o corsivo. Puoi modificare la presentazione con CSS.
SconcertatoGoat

2

No, sebbene sia consentito aggiungere nuovi tag da un altro spazio dei nomi in XHTML, l'elaborazione di tag HTML non specificati è fortemente sconsigliata.


2

Bene, è legale in quanto non verrai arrestato per averlo fatto. Ma se gli assassini del W3C si presentano alla tua porta, non essere sorpreso.

Prima di tutto, altri sviluppatori non sapranno cosa significano. Nel caso di <important>e <highlight>lo sono, ma se usi qualcosa come, diciamo, <set>potresti sapere che ti stai riferendo a un set matematico, ma qualcun altro che legge il tuo codice potrebbe scambiarlo per qualcos'altro. Senza le specifiche lì per dare una risposta, potrebbe esserci molta confusione.

In secondo luogo, se il W3C decidesse che un <important>elemento è una buona idea, ma pensa che dovrebbe significare un avviso urgente, come

<important>This site is going to be down for maintenance 2/29/2012.</important>

Allora sei fregato. I browser e i tuoi colleghi sviluppatori saranno piuttosto confusi. Probabilmente ti costringeranno ad analizzare il tuo codice con regex fino a quando non diventerai pazzo. E sappiamo tutti come andrà a finire.

In terzo luogo, IE <9 non ti consente di modellare elementi sconosciuti senza un piccolo trucco. Non è una grande cosa, ma fastidioso.

Infine, in questo caso, <important>ed <highlight>esiste già! <strong>e <mark>sono quello che stai cercando. Secondo le specifiche HTML5

L'elemento forte rappresenta una forte importanza per i suoi contenuti.

e

L'elemento mark rappresenta una sequenza di testo in un documento contrassegnato o evidenziato a scopo di riferimento ...

Se non lo si utilizza per "scopi di riferimento", un <span>con una classe andrebbe bene.


2

http://www.w3.org/TR/html5/elements.html

Questa è la revisione 1.5612.

Gli autori non devono utilizzare elementi, attributi o valori di attributi non consentiti da questa specifica o da altre specifiche applicabili, in quanto ciò rende significativamente più difficile l'estensione della lingua in futuro.


1
Questo è l'inizio di una grande risposta; tuttavia, per essere eccezionale, aggiungere alcuni dei ragionamenti per cui è stata scritta la linea guida sarebbe utile. Anche l'aggiunta di strategie alternative che consentono lo stesso effetto, ma che si adattano alla linea guida, sono spesso viste favorevolmente.
Giustino

1

Ignorando l'opinione altrui qui.

Non è una buona pratica per due motivi molto importanti:

Innanzitutto, è del tutto possibile che a un certo punto il comitato per le norme decida di includere un tag denominato <important>che finisce per comprometterne l'utilizzo. Certo, potrebbe volerci un po '.. Ma è possibile che perderai tempo a strapparlo in seguito.

Secondo, (questa è la vera ragione) il programmatore che eredita il tuo codice o dirà costantemente "wtf" al tuo approccio non standard mentre lo strappa fuori, o, ugualmente possibile, essere completamente confuso da ciò che sei tu Ho finito e semplicemente abbandonato la frustrazione.

Quindi sii gentile. Non si sa mai, un giorno potresti finire per chiedere a uno di loro un lavoro.


0

No, non puoi creare i tuoi tag HTML, perché dovresti quindi implementare tutti i principali browser per implementarli, attualmente quando i browser trovano un tag non riconosciuto, ignorano tutto ciò che contiene, quindi a meno che tu non voglia creare il tuo browser creando un nuovo il tag è inutile e anche allora funzionerebbero solo nel tuo browser.

Potresti provare a inviare un caso d'uso per loro al w3c, ma dubito che sarebbe arrivato ovunque.


0

No, non è una buona pratica per tutti i motivi forniti da tutte le altre risposte. Invece di ribadire quei punti, vorrei presentare un'opzione che non ho visto in quelle risposte!

Nel caso in cui non esistano tag il cui significato semantico corrisponde ai tuoi obiettivi, puoi utilizzare una combinazione di CSS e il nuovo data-*attributo nelle specifiche HTML 5. Ovviamente, questo funzionerà con quasi tutti i tag che scegli.

Esempio:

Lorem ipsum dolor sit amet, 
<span class="important" data-type="important">consectetur adipiscing elit</span>. 
Nullam consequat, felis sit amet suscipit laoreet, 
<span class="highlighted" data-type="highlighted">nisi arcu accumsan arcu</span>, 
vel pulvinar odio magna suscipit mi.

Sebbene questa non sia una soluzione perfetta, dal momento che non esiste un significato semantico ben definito per gli data-*attributi, ciò consentirebbe almeno di fornire informazioni aggiuntive a coloro che conoscevano il significato del proprio data-typeattributo.

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.