tl; dr
Niektóre powszechnie używane programy, które generują HTML, generują tylko otwierające znaczniki akapitów, a nie zamykające, zakładając, że przeglądarka prawidłowo zamyka akapity.
Na pierwszy rzut oka wydaje mi się, że założenie, że przeglądarki będą poprawnie zamykać akapity, jest nieprawidłowe. Czy moja interpretacja jest poprawna? Mówiąc bardziej ogólnie, jakie kompromisy wiążą się z tego rodzaju decyzją?
Przeglądając kod źródłowy moinmoin, mój wiersz przykuł moją uwagę:
# We only open those tags and let the browser auto-close them:
_auto_closing_tags = set(['p'])
( źródło )
Po przeczytaniu całej reszty implementacji przekonałem się, że tak, rzeczywiście, kiedy moinmoin generuje kod HTML dla jednej ze swoich stron, w razie potrzeby poprawnie wygeneruje otwarte akapity, a jednocześnie celowo uniknie akapity zamykają tagi (pomimo tego, że mogą to zrobić w trywialny sposób).
W moim konkretnym, raczej nietypowym przypadku użycia, takie zachowanie jest nieprawidłowe. Kusi mnie, aby przesłać raport o błędzie i / lub zmienić zachowanie. Wygląda jednak na to, że ta decyzja projektowa została starannie przemyślana. Nie jestem wystarczająco dobrze zaznajomiony z zawiłościami standardu HTML lub różnych implementacji przeglądarki, aby móc stwierdzić, czy ogólnie jest to prawidłowe zachowanie, i mam wrażenie, że mój instynkt do poprawienia / zmiany tego zachowania może być wprowadzony w błąd.
Czy ten kod stanowi prawidłowe założenie dotyczące implementacji przeglądarki? Czy wygenerowany HTML jest prawidłowy? Mówiąc bardziej ogólnie, jakich kompromisów mogę tutaj pominąć?
źródło
Odpowiedzi:
Tagi końcowe
p
elementów były opcjonalne w HTML i były wymagane tylko w XHTML. Jednak wersja robocza HTML5 wprowadza zestaw warunków, w którychp
tag końcowy jest w rzeczywistości opcjonalny:To powiedziawszy, jedynym argumentem, jaki słyszałem o pomijaniu znaczników końcowych
p
elementów, jest rozmiar dokumentu. To Ty decydujesz, czy ma to sens dla twojego dokumentu, czy nie. Osobiście zwykle dołączam wszystkie opcjonalne znaczniki końcowe, na wypadek, gdy nie spełniam wymagań, kiedy znacznik końcowy jest opcjonalny.źródło
<li>
tagów tagi działają bardziej jak punktory.Specyfikacja W3C dla HTML5 wyraźnie stwierdza, że:
Tak więc w zasadzie specyfikacja zapewnia wiele sposobów, dzięki którym można uniknąć złożoności (dużej lub małej) zamknięcia tagu. Każda zgodna implementacja przeglądarki musiałaby uwzględniać te wyjątki.
źródło