Spacja przed zamknięciem Slash?


93

Często widziałem spację poprzedzającą zamykający ukośnik w tagach XML i HTML. Podział wiersza XHTML jest prawdopodobnie kanonicznym przykładem:

<br />

zamiast:

<br/>

Przestrzeń wydaje się zbędna. Właściwie uważam, że jest to zbędne.

Jaki jest powód napisania tego miejsca?

Czytałem, że przestrzeń rozwiązuje niektóre „problemy ze zgodnością wsteczną”. Jakie problemy ze zgodnością wsteczną? Czy te problemy są nadal aktualne, czy też nadal dodajemy dodatkowe spacje ze względu na, powiedzmy, zgodność z IE3? Czy istnieje jakaś specyfikacja z ostateczną odpowiedzią na ten temat?

Jeśli nie kompatybilność wsteczna, czy jest to problem z czytelnością? Podobnie jak w przypadku debaty dotyczącej Wielkiej Otwartej Kręconej Brace?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

Z pewnością szanuję różne opinie stylistyczne, dlatego z przyjemnością dowiem się, że pisanie przestrzeni to po prostu kwestia gustu.


5
Jestem do tego tak przyzwyczajony, że <br /> po prostu wygląda o wiele lepiej niż <br/>
mk12

Odpowiedzi:


65

Odpowiedź brzmi: ludzie chcą stosować się do Załącznika C specyfikacji XHTML1.0 . Co musisz zrobić tylko wtedy, gdy udostępniasz XHTML jako tekst / html . Co robi większość ludzi, ponieważ prawdziwy typ MIME XHTML (aplikacja / html + xml) nie działa w przeglądarce Internet Explorer.

Żadna obecna przeglądarka nie dba o to miejsce. Przeglądarki są bardzo tolerancyjne w stosunku do tych rzeczy.

Przestrzeń była wymagana, aby parsery HTML traktowały końcowy ukośnik jako nierozpoznany atrybut.


2
Czy możesz bardziej szczegółowo opisać „kiedyś”? Rok i / lub wersja przeglądarki wystarczą, dzięki!
Greg Mattes

5
Myślę, że w3.org/TR/xhtml1/#C_2 jest bardziej precyzyjnym linkiem do tej odpowiedzi. Wydaje się więc, że XHTML 1.0 dodatek C2 jest faktycznie przestarzały i że pisanie tego miejsca jest czysto kwestią gustu.
Greg Mattes

1
Przykro nam, kiedyś oznacza „jest” - jeśli chodzi o upewnienie się, że parser HTML traktuje końcowy ukośnik jako nierozpoznany atrybut, nie wszystkie parsery HTML są przeglądarkami. Nie chciałbym ryzykować zgadnięcia, która wersja przeglądarki zablokowała się, jeśli w ogóle, ale nie pamiętam narzekania IE4 lub Netscape 4.
Lee Kowalkowski

3
w rzeczywistości prawdziwy typ MIME to application / xhtml + xml.
mk12

3
@JanAagaard: Nie wiem, zapamiętałbym to, gdyby tak - zacząłem tworzyć strony internetowe na IE4 i Netscape 4. Ta odpowiedź, do której się odnosiłeś, zawiera również komentarz na ten temat, mówi, że to tak naprawdę Netscape 3.
Lee Kowalkowski

31

Netscape 4.80 pokazujący różne zachowanie <br/> i <br /> w HTML

Wspieranie odpowiedzi bobince'a ze zrzutem ekranu Netscape 4.80 pokazującym dokumenty

data:text/html,<title>space</title>foo<br />bar

(u góry po lewej, renderowane podziały wierszy) i

data:text/html,<title>no space</title>foo<br/>bar

(na dole po lewej, podział wiersza zignorowany).


Wysyłanie jako odpowiedź, aby pokazać zdjęcie

Związane stycznie: w rzeczywistości miałem obszerną odpowiedź identyfikującą przyczynę takiego niewłaściwego zachowania starożytnych przeglądarek (i wynikającą z niej rekomendację uwzględnienia spacji) w niezrozumianych specyfikacjach SGML, a mianowicie SGML Null End Tag ( NET ) (gdzie 1<tag/2/3równa się 1<tag>2</tag>3tak 1<tag/>2właściwie oznaczałaby 1<tag>>2), ale nie tylko nie byłem w stanie znaleźć dobrego dowodu i konkretnej wersji normy, nie byłem nawet w stanie pojąć właściwego zachowania zgodnego z normami. Tak mało nieprzetworzonych linków w celach informacyjnych:

(Obecnie nie można tam odtworzyć, ale popiera stwierdzenie Lee Kowalkowskiego dotyczące wielu przeglądarek, których to dotyczy).


25

Czy te problemy są nadal aktualne, czy też nadal dodajemy dodatkowe spacje ze względu na, powiedzmy, zgodność z IE3?

Byliście blisko - to dla Netscape 4.

Ciekawie jest zobaczyć inne racjonalizacje, ale to wszystko, do czego było przeznaczone.


2
Dzięki! Czy możesz podać odniesienie do tego?
Greg Mattes

1
Hmm, trudno znaleźć główne źródła w tych starych ... oficjalnych materiałach W3 unikaj wspominania o jakimkolwiek UA, a dyskusja na listach wydaje się przyjmować sytuację tak, jak czytano. Prawdopodobnie istniały inne UA, które również potrzebowały miejsca, ale N4 był ostatnim, który sprawiał webmasterom kłopoty przez lata.
bobince

Było tak, aby Twój dokument XHTML był również renderowany w Netscape. W szczególności dotyczyło to znaczników przerwania i tagów graficznych. Główne źródło: 10 lat temu kodowałem pod kątem zgodności z IE4 i NS3.
Philihp Busby

4

Nie, miejsce nie jest wymagane, ale niektóre starsze przeglądarki muszą poprawnie renderować te tagi. Właściwy sposób to zrobić bez dodatkowego miejsca, ponieważ jest to coś, co XHTML odziedziczył po XML.


1
Które konkretnie starsze przeglądarki? Chciałbym się dowiedzieć, czy mówimy o przeglądarkach ze znaczącym udziałem w rynku.
Greg Mattes

Nie były. W większości IE5 i starsze.
jmucchiello


3

Spacja sprawia, że ​​tagi są bardziej czytelne. Jestem wielkim zwolennikiem formatowania dla bardziej czytelnego kodu. Takie drobne rzeczy mogą się przydać. Bez spacji tag zamykający wtapia się w tag otwierający. Przetwarzanie go zajmuje mi tylko chwilę dłużej, ponieważ szybko czytam kod.


0

Co by było, gdyby był tam bardzo leniwy autor HTML, a może bał się cudzysłowów. Weź pod uwagę następujące kwestie, jeśli byłeś jego robotem indeksującym strony ...

<img src=http://myunquotedurl.com/image.jpg />

przeciw

<img src=http://myunquotedurl.com/image.jpg/>

To może wydawać się małe, ale zobacz, co może zrobić, jeśli nie ma miejsca. Robot nie będzie wiedział, czy ukośnik jest częścią adresu URL, czy częścią tagu zamykającego.


12
Cóż, ale i tak powinny być cudzysłowy wokół adresu URL.
Florian Wendelborn

-1

Myślę, że biała przestrzeń to sposób na wzmocnienie idei, że ten tag jest pusty i zamyka się sam.

Dzisiaj nie używam już spacji, ponieważ nigdy nie miałem problemu z brakiem spacji.


1
„wzmocnić” to trafne słowo dla „silnego”
Hao

dzięki za zauważenie tego. dobrze jest widzieć, że mamy ludzi, którzy dbają o jakość pisania.
nicruo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.