it-swarm.dev

Je psaní samouzavírací značky pro prvky, které nejsou tradičně prázdné špatné praxe?

Všiml jsem si, že jQuery (nebo je to Firefox) změní některé z mých <span class="presentational"></span> into <span class="presentational" />

Teď je moje otázka, je to v pořádku napsat můj zápis takhle? Zapříčiní to nějaké prohlížeče?

Osobně si myslím, že to vypadá čistší, když děláme <span class="presentational" />, pokud to bude prázdné.

48
alex

Předpokládám, že vaše otázka má co do činění s červenou koncovou lomítko na samouzavírací prvky při zobrazení zdroje ve Firefoxu. Pokud ano, narazili jste do jednoho z nejprudších, ale zároveň pasivních agresivních debat v prohlížeči prohlížeče vs. válek webového vývojáře. XHTML NENÍ jen o značce dokumentu. Je to také o tom, jak mají být dokumenty zobrazovány na webu. 

Než začnu; Snažím se, abych tady nebyl.

Specifikace XHTML 1.1 říká, že webový server by měl sloužit XHTML s aplikací Content-type of application/xhtml + xml. Firefox rozděluje ty lomítka jako neplatné, protože váš dokument slouží spíše jako text/html než application/xhtml + xml. Vezměte tyto dva příklady; identické značení, jeden sloužil jako application/xhtml + xml, druhý jako text/html.

http://alanstorm.com/testbed/xhtml-as-html.php

http://alanstorm.com/testbed/xhtml-as-xhtml.php

Firefox označí koncové lomítko v metaznačce jako neplatné pro dokument doručený s textem/html a platný pro dokument doručený s aplikací/xhtml + xml.

Proč je to kontroverzní

Pro vývojáře prohlížeče, bod XHTML je, můžete zacházet s dokumentem jako XML, což znamená, že když vám někdo pošle něco, co není platné, spec říká, že ho nemusíte analyzovat. Pokud je tedy dokument podáván jako application/xhtml + xml a má obsah, který není dobře formován, může vývojář říct "ne můj problém". To můžete vidět zde

http://alanstorm.com/testbed/xhtml-not-valid.php

Když je dokument podáván jako text/html, Firefox ho považuje za prostý starý dokument ve formátu HTML a používá odpuštění, opravu pro vás, analýzu rutin 

http://alanstorm.com/testbed/xhtml-not-valid-as-html.php

Takže pro výrobce prohlížeče, XHTML sloužil jako text/html je směšný, protože to není nikdy považován za XML prohlížečem renderovací engine.

Před několika lety, weboví vývojáři, kteří chtějí být více než tag opice (Disclaimer: Já sám sebe jako jeden z nich) začal hledat způsoby, jak rozvíjet osvědčené postupy, které se netýkaly třikrát vnořených tabulek, ale přesto umožnil přesvědčivý design zkušenosti . Oni/My jsme zavřeli na XHTML/CSS, protože W3C řekl, že to byla budoucnost, a jedinou jinou volbou byl svět, kde jeden dodavatel (Microsoft) kontroloval defacto markup spec. Skutečné zlo tam je jediný dodavatel , a ne tolik Microsoft. Přísahám.

Kde je spor? Existují dva problémy s aplikací/xhtml + xml. První je Internet Explorer. V aplikaci IE je starší chyba/funkce, kde obsah sloužící jako aplikace/xhtml + xml vyzve uživatele ke stažení dokumentu. Pokud jste se pokusili navštívit stránku xhtml-as-xhtml.php uvedenou výše s IE, je to pravděpodobně to, co se stalo. To znamená, že pokud chcete použít application/xhtml + xml, musíte prohlížeč sniff pro IE, zaškrtněte záhlaví Přijmout a slouží pouze aplikacím/xhtml + xml těm prohlížečům, které je přijmou. Toto je ne tak triviální jak to zní, aby se dostalo do pořádku, a také šlo proti principu "zápisu jednou", o který se weboví vývojáři snažili.

Druhým problémem je tvrdost XML. To je opět jeden z těch problémů, které jsou náchylné k plamenům, ale někteří lidé si myslí, že jeden špatný tag nebo jeden znak nesprávně zakódovaný by neměl mít za následek, že uživatel nevidí dokument, který chtějí. Jinými slovy, ano, spec říká, že byste měli přestat zpracovávat XML, pokud to není dobře formované, ale uživatel se nestará o spec, záleží na tom, aby jejich webové stránky kočky byly rozbité.

Přidání ještě více benzínu k problému je XHTML 1.0 (ne 1.1) spec říká, že XHTML dokumenty může být podáván jako text/html, za předpokladu, že jsou dodržovány určité pokyny pro kompatibilitu . Věci, jako je značka img, se samy zavírají a podobně. Klíčové slovo zde je může . V RFC mluvit , může znamenat volitelné. Firefox se rozhodl, že nebude pracovat s dokumenty, které jsou poskytovány s doktypem XHTML, ale s obsahem typu text/html jako XHTML. Validátor W3C však tyto dokumenty šťastně ohlásí jako platné.

Nechám čtenáře, aby se zamyslel nad současným zázrakem/hrůzou kultury, která píše dokument, aby definovala, co znamená slovem může .

Posun vpřed

Nakonec je to o tom, co je celé HTML 5 věc. XHTML se stal tak politickým horkým bramborem, že se skupina lidí, kteří chtěli posunout jazyk vpřed, rozhodla jít jiným směrem. Oni produkovali spec pro HTML 5. Toto je v současné době hashed v W3C, a očekává se, že skončí někdy v příštím desetiletí. Mezitím dodavatelé prohlížečů vybírají a vybírají funkce ze specifikovaných specifik a provádějí je.

Aktualizace z komentářů

V komentářích Alex poukazuje na to, že pokud budete něco čichat, měli byste zkontrolovat záhlaví Accept, zda aplikace/xhtml + xml uživatelský agent přijal.

To je naprosto správné. Obecně platí, že pokud budete chtít čichat, čichat pro funkci, ne pro prohlížeč.

110
Alan Storm

Kromě dalších odpovědí: v IE, s prvky jako <span /> ve vašem mark-up způsobí všechny druhy problémů s DOM traversal metodami v JavaScriptu. Podívejte se na následující dokument XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test</title>
    <script type="text/javascript">
        function show() {
            var span = document.getElementById("span");
            alert(span.innerHTML);
        }
    </script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
           an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>

Myšlenka je, že když se stránka načte, JavaScript dostane odkaz na prázdné rozpětí a zobrazí obsah HTML. Bude to prázdný řetězec, že? Ne v IE nebude. V IE získáte veškerý obsah za rozsahem v celém dokumentu:

</P>
<P id=p2>Second paragraph just containing text</P>

Druhý soubor <p> se také zobrazí v kolekci childNodes. Stejné <p> je také v těle childNodes kolekce, což znamená uzel může mít více rodičů. To není strašně dobrá zpráva pro skripty, které se spoléhají na procházení DOM.

Mám o tom také blogované .

19
Tim Down

Ano. To je. To způsobí problémy v některých případech pro staré prohlížeče.

<script type='text/javascript' src='script.js' />

V tomto případě nemusí starý prohlížeč pochopit, že značka <script> skončila.

10
Mehrdad Afshari

Sloužil jako application/xhtml + xml, <span /> znamená vytvořit element span bez obsahu.

<Span />, sloužící jako text/html, znamená vytvoření elementu span, kde obsah elementu následuje tento tag, dokud se nenarazí na značku </span>, nebo na jinou značku (nebo EOF), která implicitně uzavírá prvek. tj. v tomto případě <span /> znamená totéž jako <span>.

Až na to, že HTML 5 definuje jak serializace HTML, tak XHTML, takže tento problém tak či onak neovlivní. Vyžaduje, stejně jako XHTML 1.1, aby XHTML sloužil jako application/xhtml + xml, na rozdíl od XHTML 1.0. Ve skutečnosti to však nic nezmění, protože všechny prohlížeče zpracovávají jakoukoli verzi XHTML, která sloužila jako text/html jako tag polévka. 

3
Alohci

Viz poznámka k tomuto tématu z pracovní skupiny XHMTL: http://www.w3.org/TR/xhtml-media-types/

Stručně řečeno - je to v pořádku, pokud se vaše XHTML bude léčit jako XHTML. Pokud se chystáte předstírat, že se jedná o HTML (což musíte udělat, pokud chcete, aby byl načten Internet Explorer (včetně verze 8, nejpozději v době psaní), pak musíte skočit přes obruče).

Obruče jsou dost nepříjemné, že bych doporučil většině lidí držet se HTML 4.01.

2
Quentin

Za zmínku stojí také to, že deklarace <?xml ...?> před doctype vyvolá IE do režimu quirks.

2
eyelidlessness

Obecně není problém používat zkratku pro prázdné prvky, ale existují určité výjimky, kde může způsobit problémy.

<script> je důležitý, který musí být uzavřen </script>, aby se předešlo problémům.

Další je <meta>, který pracuje mnohem lépe s pavouky psanými jako <meta></meta> místo <meta />

Není to přesně otázka, ale související, pokud jde o formátování, verze IE mají problémy pouze s prázdnými prvky, jako jsou <div></div> nebo <div />. V tomto případě je <div>&nbsp;</div> vyžadováno pro zachování formátování.

0
Derek H

Mělo by být výslovně řečeno, že v HTML neexistují žádné vlastní uzavřené tagy, takže kdykoli se prohlížeč rozhodne zpracovat váš XHTML jako HTML, nerozpozná, že je značka zavřená. Není to problém pro tagy, které nemusí být uzavřeny v HTML, jako je <img>, ale zjevně špatné s tagy jako <span>.

0