Decisione di progettazione: perché generare p senza / p?

14

tl; dr

Alcuni programmi molto diffusi, che generano html, generano solo tag di paragrafo di apertura, e non di chiusura, presumendo che il browser chiuderà correttamente i paragrafi.

A prima vista, mi sembra che l'ipotesi che i browser chiudano correttamente i paragrafi non è corretta. La mia interpretazione è corretta? Più in generale, quali compromessi sono coinvolti in questo tipo di decisione?

Navigando attraverso il codice sorgente di moinmoin, la seguente riga di codice attirò la mia attenzione:

# We only open those tags and let the browser auto-close them:
_auto_closing_tags = set(['p'])

( fonte )

Dopo aver letto tutto il resto dell'implementazione, mi sono convinto che sì, infatti, quando moinmoin genera codice html per una delle sue pagine, genererà correttamente i tag di apertura del paragrafo, laddove appropriato, mentre allo stesso tempo volutamente evitando qualsiasi tag di chiusura del paragrafo (nonostante sia in grado di farlo banalmente).

Per il mio caso d'uso specifico, piuttosto insolito, questo comportamento non è corretto. Sono tentato di inviare un bug report e / o modificare il comportamento. Tuttavia, sembra che questa decisione progettuale sia stata pensata. Non sono abbastanza esperto delle complessità dello standard html, o delle varie implementazioni del browser, per essere in grado di dire se questo è un comportamento corretto in generale, e ho la sensazione che il mio istinto a correggere / cambiare questo comportamento possa essere sbagliata.

Questo codice sta facendo un'ipotesi valida sulle implementazioni del browser? L'html generato è valido? Più in generale, quali compromessi potrei mancare qui?

    
posta blueberryfields 04.09.2013 - 00:16
fonte

2 risposte

33

I tag di fine per p elementi erano facoltativi in HTML e erano richiesti solo in XHTML. Tuttavia, la bozza HTML5 introduce una serie di condizioni per quando il tag di fine p è effettivamente facoltativo:

A p element's end tag may be omitted if the p element is immediately followed by an address, article, aside, blockquote, dir, div, dl, fieldset, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, menu, nav, ol, p, pre, section, table, or ul, element, or if there is no more content in the parent element and the parent element is not an a element.

Source: HTML5 specification

Detto questo, l'unico argomento che ho mai sentito per che omette i tag finali per p elementi è la dimensione del documento. Spetta completamente a te decidere se questo ha senso per il tuo documento o meno. Personalmente tendo a includere tutti i tag finali opzionali, nel caso in cui non soddisfi i requisiti per quando il tag di chiusura è facoltativo.

    
risposta data 04.09.2013 - 00:22
fonte
16

La specifica W3C per HTML5 specifica in particolare che:

A p element’s end tag may be omitted if the p element is immediately followed by an address, article, aside, blockquote, dir, div, dl, fieldset, footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, nav, ol, p, pre, section, table, or ul element, or if there is no more content in the parent element and the parent element is not an a element.

Quindi in sostanza la specifica ha fornito molti modi con cui è possibile evitare la complessità (piccola o grande che sia) di chiusura del tag. Qualsiasi implementazione conforme del browser dovrebbe contenere queste eccezioni.

    
risposta data 04.09.2013 - 00:22
fonte

Leggi altre domande sui tag