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


14

tl; dr

Alguns programas amplamente usados, que geram html, geram apenas tags de parágrafo de abertura e não de fechamento, supondo que o navegador feche adequadamente os parágrafos.

Aparentemente, parece-me que a suposição de que os navegadores fechem corretamente os parágrafos não está correta. Minha interpretação está correta? De um modo mais geral, que tradeoffs estão envolvidos nesse 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 )

Depois de ler o restante da implementação, convenci-me de que sim, quando o moinmoin gera código html para uma de suas páginas, ele gera corretamente tags de parágrafo abertas, quando apropriado, e ao mesmo tempo evita intencionalmente qualquer um dos as tags de fechamento do parágrafo (apesar de poder fazer isso trivialmente).

Para meu caso de uso específico, bastante incomum, esse comportamento não está correto. Estou tentado a enviar um relatório de erro e / ou alterar o comportamento. No entanto, parece que essa decisão de design foi cuidadosamente tomada. Não sou suficientemente versado nas complexidades do padrão html ou nas várias implementações de navegador para saber se esse é o comportamento correto em geral e tenho a sensação de que meu instinto de corrigir / alterar esse comportamento pode ser mal orientado.

Esse código faz uma suposição válida sobre implementações de navegador? O html gerado é válido? De um modo mais geral, que tradeoffs posso estar perdendo aqui?


2
Não obstante as respostas atuais, isso parece um projeto idiota. "Seja liberal no que você aceita e conservador no que você envia" e tudo isso. Também é completamente desnecessário. Definitivamente , eu enviaria um relatório de bug (fortemente redigido) ao Moinmoin. No mínimo, eles devem documentar e comentar esse comportamento não intuitivo com clareza.
Konrad Rudolph

Respostas:


33

As tags finais dos pelementos eram opcionais em HTML e eram necessárias apenas em XHTML. No entanto, o rascunho do HTML5 apresenta um conjunto de condições para quando a ptag final é realmente opcional:

A tag final de um elemento p pode ser omitida se o elemento p for imediatamente seguido por um endereço, artigo, aparte, blockquote, dir, div, dl, fieldset, rodapé, formulário, h1, h2, h3, h4, h5, h6, cabeçalho , hgroup, hr, menu, nav, ol, p, pre, section, table ou ul, elemento ou se não houver mais conteúdo no elemento pai e o elemento pai não for um elemento a.

Fonte: especificação HTML5

Dito isto, o único argumento que já ouvi sobre omitir as tags finais dos pelementos é o tamanho do documento. Cabe a você decidir se isso faz sentido para o seu documento ou não. Pessoalmente, costumo incluir todas as tags finais opcionais, caso eu não atenda aos requisitos de quando a tag final é opcional.


5
Grandes mentes pensam da mesma forma, eu acho. :)
Robert Harvey

@RobertHarvey Você vence esta rodada, por 12 segundos ...
yannis 3/13/13

2
Outro argumento a favor da omissão das tags finais: elas são evidentes na estrutura do documento e, quando mal utilizadas, também podem introduzir espaços em branco falsos.
Jon Purdy

1
Ser capaz de omitir tags finais era explicitamente um recurso de design do SGML, no qual o HTML era baseado. Também NÃO era explicitamente um recurso do XML, no qual o XHTML se baseia.
Alan Shutko

4
Um argumento que vejo muito é que parece mais limpo. Particularmente no caso de <li>tags, as tags agem mais como marcadores.
DisgruntledGoat

16

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

A tag final de um elemento p pode ser omitida se o elemento p for imediatamente seguido por um endereço, artigo, aparte, blockquote, dir, div, dl, fieldset, rodapé, formulário, h1, h2, h3, h4, h5, h6, cabeçalho , hr, menu, nav, ol, p, pré, seção, tabela ou elemento ul, ou se não houver mais conteúdo no elemento pai e o elemento pai não for um elemento a.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.