Jakie są wszystkie prawidłowe elementy samozamykające (np. <br/>) w XHTML (zaimplementowane przez główne przeglądarki)?
Wiem, że technicznie XHTML pozwala na samozamykanie dowolnego elementu, ale szukam listy tych elementów obsługiwanych przez wszystkie główne przeglądarki. Zobacz http://dusan.fora.si/blog/self-closing-tags, aby zapoznać się z przykładami niektórych problemów spowodowanych przez samozamykające się elementy, takie jak <div />.
html
xhtml
browser
cross-browser
kamens
źródło
źródło
Odpowiedzi:
Każda przeglądarka obsługująca XHTML (Firefox, Opera, Safari, IE9 ) obsługuje samozamykającą się składnię każdego elementu .
<div/>
,<script/>
,<br></br>
Wszystko powinno działać dobrze. Jeśli tak nie jest, masz HTML z nieprawidłowo dodanym XHTML DOCTYPE.DOCTYPE nie zmienia sposobu interpretacji dokumentu. Tylko typ MIME tak .
Decyzja W3C o ignorowaniu DOCTYPE :
To bardzo powszechna pułapka, ponieważ W3C Validator w dużej mierze ignoruje tę zasadę, ale przeglądarki przestrzegają jej religijnie. Przeczytaj artykuł Understanding HTML, XML i XHTML z bloga WebKit:
Aby sprawdzić, czy masz prawdziwy XHTML lub nieprawidłowy HTML z DOCTYPE XHTML, umieść to w swoim dokumencie:
<span style="color:green"><span style="color:red"/> If it's red, it's HTML. Green is XHTML. </span>
Sprawdza, aw prawdziwym XHTML działa doskonale (zobacz: 1 vs 2 ). Jeśli nie możesz uwierzyć własnym oczom (lub nie wiesz, jak ustawić typy MIME), otwórz swoją stronę przez serwer proxy XHTML .
Innym sposobem sprawdzenia jest wyświetlenie źródła w przeglądarce Firefox. Podświetli ukośniki na czerwono, gdy są nieprawidłowe.
W HTML5 / XHTML5 to się nie zmieniło, a różnica jest jeszcze wyraźniejsza, ponieważ nie masz nawet dodatkowych
DOCTYPE
.Content-Type
jest królem.Dla przypomnienia, specyfikacja XHTML pozwala na samozamykanie dowolnego elementu poprzez uczynienie XHTML aplikacji XML : [wyróżnienie moje]
Jest to również wyraźnie pokazane w specyfikacji XHTML :
źródło
<script>
lub<div>
powoduje różne renderowanie / interpretację.text/html
. W prawdziwym XHTML, wysłany takapplication/xhtml+xml
, jak działa dobrze. Przeczytaj artykuł, do którego mam łącze (lub specyfikację XHTML dodatek C) przed głosowaniem.application/xhtml+xml
typem MIME mogę zagwarantować, że<script/>
zadziała. Z typem MIME. Tylko.Jednym z elementów, z którymi należy być bardzo ostrożnym w tym temacie, jest
<script
element>. Jeśli masz zewnętrzny plik źródłowy, spowoduje to problemy podczas samodzielnego zamykania. Spróbuj:<!-- this will not consistently work in all browsers! --> <script type="text/javascript" src="external.js" />
To zadziała w Firefoksie, ale psuje się przynajmniej w IE6. Wiem, bo wpadłem na to, nadgorliwie samozamykając każdy element, który zobaczyłem ;-)
źródło
Składnia samozamykająca działa na wszystkich elementach w application / xhtml + xml. Nie jest obsługiwany w żadnym elemencie w tekście / html, ale elementy, które są „puste” w HTML4 lub „void” w HTML5 i tak nie przyjmują tagu końcowego, więc jeśli umieścisz na nich ukośnik, wygląda to tak, jakby obsługiwana była samozamykająca się składnia.
źródło
Ze strony referencyjnej W3 Schools :
<area /> <base /> <basefont /> <br /> <hr /> <input /> <img /> <link /> <meta />
źródło
/>
:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
grep EMPTY xhtml1-strict.dtd | sort
lubgrep EMPTY xhtml1-transitional.dtd | sort
Lepszym pytaniem byłoby: jakie tagi można samozamykać nawet w trybie HTML bez wpływu na kod? Odpowiedź: tylko te, które mają pustą treść (są nieważne). Zgodnie ze specyfikacją HTML następujące elementy są nieważne:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
Podano również starszą wersję specyfikacji
command
. Poza tym, według różnych źródeł, następujące nieaktualne lub niestandardowe tagi są nieważne:basefont, bgsound, frame, isindex
źródło
Mam nadzieję, że to komuś pomoże:
<base /> <basefont /> <frame /> <link /> <meta /> <area /> <br /> <col /> <hr /> <img /> <input /> <param />
źródło
A co z
<meta>
i<link>
? Dlaczego nie ma ich na tej liście?Praktyczna zasada, nie zamykaj samoczynnie żadnego elementu, który ma mieć treść, ponieważ z pewnością wcześniej czy później spowoduje to problemy z przeglądarką.
Te, które z natury zamykają się samoczynnie, jak
<br>
i<img>
, powinny być oczywiste. Te, które nie są ... po prostu ich nie zamykaj!źródło
Kiedy ostatnio sprawdzałem, następujące elementy były puste / void wymienione w HTML5.
Obowiązuje dla autorów: area, base, br, col, command, embed, eventsource, hr, img, input, link, meta, param, source
Nieprawidłowe dla autorów: basefont, bgsound, frame, spacer, wbr
Poza kilkoma nowościami w HTML5, powinno to dać ci wyobrażenie o tych, które mogą być obsługiwane podczas obsługi XHTML jako text / html. (Po prostu przetestuj je, sprawdzając wyprodukowany DOM).
Jeśli chodzi o XHTML obsługiwany jako application / xhtml + xml (co sprawia, że jest to XML), obowiązują reguły XML i każdy element może być pusty (nawet jeśli XHTML DTD nie może tego wyrazić).
źródło
Powinieneś rzucić okiem na DTD xHTML , wszystkie są wymienione. Oto krótki przegląd wszystkich głównych:
<br /> <hr /> <img /> <input />
źródło
W HTML 5 nazywane są elementami „void”. Są one wymienione w oficjalnej specyfikacji W3 .
Od kwietnia 2013 r. Są to:
Od grudnia 2018 r. (HTML 5.2) są to:
źródło
Innym problemem dotyczącym samozamykających się tagów w IE jest element tytułu. Kiedy IE (właśnie wypróbowałem to w IE7) widzi to, wyświetla użytkownikowi pustą stronę. Jednak „przeglądasz źródło” i wszystko tam jest.
<title/>
Pierwotnie widziałem to, kiedy mój XSLT wygenerował samozamykający się tag.
źródło
<title/>
tagów.Nie będę się nad tym rozwodził, zwłaszcza że większość stron, które piszę, jest generowana lub tag zawiera treść. Jedyne dwa, które sprawiły mi kłopoty przy ich samozamykaniu, to:
<title/>
W tym celu po prostu uciekałem się do nadawania mu oddzielnego tagu zamykającego, ponieważ gdy już znajdzie się w tagu,
<head></head>
tak naprawdę nie powoduje to bałaganu w kodzie.<script/>
Jest to duży problem, z którym ostatnio miałem problemy. Od lat zawsze używałem samozamykających się
<script/>
tagów, gdy skrypt pochodzi z zewnętrznego źródła. Ale bardzo niedawno zacząłem otrzymywać komunikaty o błędach JavaScript dotyczące formularza pustego. Po kilku dniach poszukiwań odkryłem, że problem polegał (podobno) na tym, że przeglądarka nigdy nie docierała do<form>
tagu, ponieważ nie zdawała sobie sprawy, że to koniec<script/>
tagu. Więc kiedy stworzyłem osobne<script></script>
tagi, wszystko działało. Dlaczego różni się na różnych stronach, które stworzyłem w tej samej przeglądarce, nie wiem, ale znalezienie rozwiązania było wielką ulgą!źródło
<hr /> to kolejny
źródło