2015-09-10 23 views
15

Próbuję lepiej zrozumieć model przetwarzania białych znaków HTML. Teraz mam porównanie dwóch fragmentów HTML:Białe spacje HTML: spacje przed i po <br>

<div>a <br>z</div> 

i

<div>a<br> z</div> 

Pierwszy urywek gdy renered, daje dwie linie: "a " i "z" (Więc pierwsza linia ma spacją).

Drugi fragment kodu daje dwie linie: "a" i "z". W drugiej linii nie ma miejsca wiodącego.

Moje pytanie brzmi: dlaczego? Obecnie używam tego http://www.w3.org/TR/CSS2/text.html#white-space-model jako odniesienia. Stwierdza

  1. Jeśli spacja (U + 0020) na początku linii ma własność 'white-space' ustawioną na 'normal', 'nowrap', lub 'pre-line', jest on usuwany .
  2. Wszystkie zakładki (U + 0009) są renderowane jako przesunięcie poziome, które wyrównuje krawędź początkową następnego glifu z następnym zatrzymaniem tabulatora. Tabulatory występują w punktach będących wielokrotnością 8-krotności szerokości spacji (U + 0020) wyświetlanej w czcionce bloku od początkowej krawędzi bloku bloku.
  3. Jeśli spacja (U + 0020) na końcu wiersza ma "białą przestrzeń" ustawioną na "normalną", "nowąp" lub "linię wstępną", jest również usuwana.
  4. Jeśli spacje (U + 0020) lub zakładki (U + 0009) na końcu linii mają "białą przestrzeń" ustawioną na "wstępną opaskę", aplikacje klienckie mogą wizualnie je zwinąć.

Naiwny czytanie to wskazywałoby, że od miejsca, że ​​początek lub końcu linii ma być usunięty (gdy „white-space” jest „normalny”), pierwszy Moje fragmenty powinny skutkować brakiem spacji. Ale tak nie jest.

Co się dzieje?

Moja obecna teoria mówi, że <br> potajemnie jest liczone jako "znak", który w pierwszym fragmencie zapobiega pozostawaniu końcowej przestrzeni na "końcu" jej linii. Ale naprawdę nie mam pojęcia.

EDYCJA: Aby było jasne, wiem, jak używać &nbsp; do tworzenia spacji do woli. Moje pytanie dotyczy tego, jaka zasada (w odniesieniu do niektórych specyfikacji) indukuje powyższe zachowanie.

+0

https://drafts.csswg.org/css-text/#white-space-phase-1, obecny spec, może dostarczyć pewnych wglądów – sideshowbarker

+0

@ Vucko: Tak to wygląda w inspektorze DOM, a nie w jaki sposób renderowane. – BoltClock

+0

@sideshowbarker: Dobry smutek. Ilość żargonu w css-text sprawia, że ​​tekst CSS2.1 jest czytany jak książka dla dzieci. – BoltClock

Odpowiedz

2

Dobre pytanie! Ustaliliśmy zachowanie zarówno w Chrome i Firefox, i potwierdził, że to nie ma nic wspólnego z <br>, jak to również wywołane przez zwykłego LINEBREAK w white-space: pre-line warunków:

<div style="white-space:pre-line">a 
z</div> 

mam sent an email to the list prośbą o wyjaśnienie ten problem i pytając, czy powinniśmy zmienić specyfikację, aby pasowała do implementacji, czy zgłosić błędy w przeglądarkach, aby pasowały do ​​specyfikacji.