Decisão de design - por que gerar p sem / p?

14

tl; dr

Alguns programas amplamente utilizados, que geram html, só geram tags de parágrafo de abertura, e não fecham, assumindo que o navegador fechará os parágrafos corretamente.

À primeira vista, parece-me que a suposição de que os navegadores fecharão os parágrafos corretamente não está correta. Minha interpretação está correta? Mais geralmente, quais trocas estão envolvidas neste tipo de decisão?

Navegando pelo código-fonte do moinmoin, a seguinte linha de código chamou minha atenção:

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

( fonte )

Após ler o resto da implementação, eu me convenci de que sim, quando moinmoin gera código html para uma de suas páginas, ele irá gerar corretamente tags open de parágrafo, quando apropriado, enquanto ao mesmo tempo propositalmente evitando qualquer um dos tags de fechamento do parágrafo (apesar de ser capaz de fazê-lo trivialmente).

Para meu caso de uso específico, bastante incomum, esse comportamento não está correto. Estou tentado a enviar um relatório de bug e / ou alterar o comportamento. No entanto, parece que esta decisão de design foi cuidadosamente tomada. Eu não estou bem o suficiente versado nas complexidades do padrão html, ou as várias implementações de navegador, para ser capaz de dizer se este é o comportamento correto em geral, e tenho a sensação de que meu instinto para corrigir / alterar esse comportamento pode ser equivocada.

Este código é uma suposição válida sobre implementações de navegador? O html gerado é válido? Mais genericamente, que tradeoffs posso estar perdendo aqui?

    
por blueberryfields 04.09.2013 / 00:16
fonte

2 respostas

33

As tags de fim para elementos p eram opcionais em HTML e eram necessárias somente em XHTML. No entanto, o rascunho de HTML5 introduz um conjunto de condições para quando a tag p end for realmente opcional:

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

Dito isto, o único argumento que eu já ouvi para omitindo as tags finais para p elements é o tamanho do documento. Cabe a você decidir se isso faz sentido para o seu documento ou não. Pessoalmente, tenho a tendência de incluir todas as tags finais opcionais, caso eu não atenda aos requisitos para quando a tag final for opcional.

    
por 04.09.2013 / 00:22
fonte
16

A especificação do W3C para HTML5 afirma especificamente que:

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.

Então, basicamente, a especificação forneceu muitas maneiras pelas quais a complexidade (grande ou pequena que pode ser) de fechar a tag pode ser evitada. Qualquer implementação de navegador em conformidade teria que acomodar essas exceções.

    
por 04.09.2013 / 00:22
fonte