2014-12-30 4 views
6

Esempio: http://jsfiddle.net/9e81ytwg/Gli elementi inline non comprimono spazi bianchi prima della fine del tag, nei browser moderni?

<div>Foo <span> Bar </span> Baz</div> 

*{font-size:30px;font-family:monospace} 
span{background:red;} 

Resi in browser legacy:

m

Rendered in browser moderni:

m

  • PRIMA bar ci sono due spazi, ottengono crollato in un unico spazio che appare bianca
  • DOPO bar ci sono due spazi, ottengono crollati in un unico spazio che appare rossa

perché questa differenza? e perché è diverso da come funzionava solo pochi mesi fa?

Esiste un punto specifico/punto in cui è stato modificato il rendering? Mi sarei aspettato che funzionasse come un tempo nei browser legacy. o è un bug?

+0

http://jsfiddle.net/abhitalks/9e81ytwg/1/ – Abhitalks

+0

http://jsfiddle.net/9e81ytwg/2/ –

+0

Stavo per mostrare [questo] (http://jsfiddle.net/9e81ytwg/ 3 /)? Il ragionamento è perché stai premendo ** spazio ** (che è contato come un personaggio) – jbutler483

risposta

10

http://www.w3.org/TR/CSS2/text.html#white-space-model (sottolineatura mia):

Se 'white-space' è impostato su 'normale', 'nowrap', o 'pre-line'

  1. ogni scheda (U 0009) viene convertito in uno spazio (U + 0020)
  2. qualsiasi spazio (U + 0020) seguente altro spazio (U + 0020) - anche uno spazio prima della linea, se che lo spazio ha anche 'bianco -SPA ce 'impostato su' normal ',' nowrap 'o ' pre-line '- viene rimosso.

Il comportamento che state vedendo è quindi del tutto corretta: tutti gli spazi è compresso da dietro in avanti, e quindi la spazio che precede non è rosso (è crollato nello 'spazio prima del inline') e il trailing uno è (come gli altri spazi collassano in esso).

Non ho idea di quali siano i "browser legacy" a cui ci si riferisce ma probabilmente questo era un bugfix nel loro motore da qualche parte lungo il percorso, poiché questo è stato negli standard come questo per diversi anni.

Aggiornamento: gli standard erano not explicit on this back in 2008 quando CSS2 è stato aggiornato l'ultima volta, e was explicit in the 2011 CSS 2.1 final drafts. Quindi non è davvero strano che i browser non fossero uniformi su come gestirlo.

+0

"standard" è una parola strana a volte, perché l'effettivo comportamento standard implementato da tutti i browser era l'altro . ma grazie per la tua risposta, e per aver effettivamente letto la mia domanda, perché ho avuto molti downvotes da persone che in realtà non l'hanno letto :) – Wes

+1

Le bozze di CSS 2.1 sono state esplicite su questo modello di elaborazione dal [2003] (http://www.w3.org/TR/2003/WD-CSS21-20030128/text.html#white-space-prop) – Alohci

+6

Ricorda che la raccomandazione CSS2 risale al 1998 - tutto ciò che è stato cambiato tra allora e '08 erano probabilmente cambiamenti senza interruzioni. L'aggiunta della sezione 16.6.1 al CSS2.1 è documentata [qui] (http://www.w3.org/TR/CSS21/changes.html#q115). – BoltClock