2009-02-25 17 views
47

Per lungo tempo, ho voluto capire perché il browser aggiunge uno spazio vuoto tra gli elementi HTML resi quando v'è un ritorno a capo tra di loro, ad esempio:Perché il browser esegue il rendering di una nuova riga come spazio?

<span>Hello</span><span>World</span> 

il codice HTML sopra uscita volontà “HelloWorld” stringa senza uno spazio tra “Ciao” ​​e “mondo”, tuttavia nel seguente esempio:

<span>Hello</span> 
<span>World</span> 

il codice HTML sopra uscita volontà un “Ciao mondo” stringa con uno spazio tra “Lui llo "e" Mondo ".

Ora, non ho problemi ad accettare che questo è solo il modo in cui funziona periodo, ma la cosa che mi infastidisce un po 'è che ho sempre avuto l'impressione che spazi (o newline) tra gli elementi HTML non avrebbero importato nel momento in cui il browser ha reso l'html all'utente.

Quindi la mia domanda è se qualcuno sa qual è la ragione filosofica o tecnica alla base di questo comportamento.

Grazie.

risposta

44

I browser condensano più caratteri di spazi vuoti (incluse le nuove linee) in un unico spazio durante il rendering. L'unica eccezione è all'interno degli elementi <pre> o in quelli con CSS property white-space impostato su pre o pre-wrap impostato. (O in XHTML, l'attributo xml:space="preserve".)

+0

o 'white-space: pre-line;' –

+0

@AndrewEvt Per quanto posso dire, 'pre-line' causa ancora più spazi per essere compresso, tranne che per i newline. Anche se il tuo commento mi ha portato a trovare 'pre-wrap'. –

1

Se si ha il carattere "a" tra due tag, ci si aspetterebbe che venisse visualizzato. In questo caso, hai un carattere '\ n' tra due tag; il comportamento è analogo e coerente ('\ n' è reso come un singolo spazio bianco).

47

spazio tra elementi di blocco vengono ignorati. Tuttavia, gli spazi bianchi tra elementi in linea vengono trasformati in uno spazio. Il ragionamento è che gli elementi in linea potrebbero essere intervallati da un testo interno regolare dell'elemento genitore.

consideri il seguente esempio:

<p>This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example</p> 

Nel caso ideale, si desidera che l'utente per vedere

This is my colored Hello World example 

Rimozione spazio bianco tra le due campate però si tradurrebbe in:

This is my colored HelloWorld example 

Ma lo stesso campione può essere riscritto da un autore (con OCD sul formato HTML ng :-)) come:

<p> 
    This is my colored 
    <span class="red_text">Hello</span> 
    <span class="blue_text">World</span> 
    example 
</p> 

Sarebbe meglio se questo fosse reso coerentemente con l'esempio precedente.

+0

Ho appena scoperto questo perché sto affrontando lo stesso problema. Bella, risposta esplicativa. Sarebbe bello se i browser richiedessero uno spazio tra gli span nell'esempio sopra, indipendentemente dalla nuova linea. So che potrebbero esserci problemi con editor di testo come Sublime, che possono essere fatti per tagliare lo spazio bianco, ma sarebbe più sensato per me. Questo potrebbe non essere il doctype (transitorio, stringa, ecc.)? Intendo che ospitiamo una serie di siti web che utilizzano lo stesso codice, ma noto molto più gli spazi bianchi su alcuni siti che su altri. Terrò d'occhio questo nel caso in cui il doctype sia la ragione. – ClarkeyBoy

-1

I browser fanno un errore qui:

http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.1

SGML (si veda [ISO8879], sezione 7.6.1) specifica che una linea di rompere subito dopo un tag di apertura deve essere ignorato, come deve un'interruzione di linea immediatamente prima di un tag di chiusura. Questo vale per tutti gli elementi HTML senza eccezioni.

+3

No, stai facendo un errore qui: l'interruzione di riga nell'esempio dell'OP è * dopo * il tag di fine! –

Problemi correlati