2009-02-25 11 views
47

Durante mucho tiempo, he querido entender por qué el navegador añade un espacio vacío entre los elementos HTML prestados cuando hay un salto de línea entre ellos, por ejemplo:¿Por qué el navegador representa una nueva línea como espacio?

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

El HTML anterior es la salida del “Hola Mundo” cadena sin un espacio entre “Hola” y “mundo”, sin embargo, en el siguiente ejemplo:

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

el hTML anterior dará salida a un “Hello World” cadena con un espacio entre “Él llo "y" Mundo ".

Ahora, no tengo ningún problema para aceptar que esta es la forma en que funciona el período, pero lo que me molesta un poco es que siempre tuve la impresión de que los espacios (o saltos) entre los elementos html no importarían en el momento en que el navegador representa el html para el usuario.

Así que mi pregunta es si alguien sabe cuál es la razón filosófica o técnica detrás de este comportamiento.

Gracias.

Respuesta

44

Los navegadores condensan varios espacios en blanco (incluidos los saltos de línea) en un único espacio al representar. La única excepción es dentro de los elementos <pre> o aquellos que tienen el CSS property white-space establecido en pre o pre-wrap conjunto. (O en XHTML, el atributo xml:space="preserve".)

+0

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

+0

@AndrewEvt Por lo que puedo decir, 'pre-line' todavía causa que se multipliquen múltiples espacios, excepto las nuevas líneas. Aunque tu comentario me llevó a encontrar 'pre-wrap'. –

1

Si tuviera el carácter 'a' entre dos etiquetas, esperaría que se procesara. En este caso, tiene un carácter '\ n' entre dos etiquetas; el comportamiento es análogo y consistente ('\ n' se representa como un espacio en blanco único).

47

espacios en blanco entre los elementos de bloque son ignorados. Sin embargo, los espacios en blanco entre elementos en línea se transforman en un espacio. El razonamiento es que los elementos en línea pueden estar intercalados con el texto interno normal del elemento principal.

Consideremos el siguiente ejemplo:

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

En el caso ideal, desea que el usuario vea

This is my colored Hello World example 

Extracción del espacio en blanco entre los dos tramos sin embargo, resultaría en:

This is my colored HelloWorld example 

Pero esa misma muestra puede ser reescrita por un autor (con OCD sobre el formato HTMLti ng :-)) como:

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

Sería mejor si esto se representara de manera consistente con el ejemplo anterior.

+0

Acabo de enterarme de esto ya que estoy enfrentando el mismo problema. Buena respuesta explicativa. Sería bueno si los navegadores requieren un espacio entre los tramos en el ejemplo anterior, independientemente de la nueva línea. Sé que puede haber problemas con los editores de texto como Sublime, que se puede hacer para recortar el espacio en blanco, pero tendría más sentido para mí. ¿No podría ser esto del doctype (de transición, de cadena, etc.)? Quiero decir que hospedamos varios sitios web que usan el mismo marcado, pero noto los espacios en blanco mucho más en algunos sitios que en otros. Voy a vigilar esto en caso de que el tipo de documento sea el motivo. – ClarkeyBoy

-1

Navegadores comete un error aquí:

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

SGML (ver [ISO8879], sección 7.6.1) especifica que un salto de línea inmediatamente después de una etiqueta de inicio debe ser ignorada, ya que debe un salto de línea inmediatamente antes de una etiqueta de finalización. Esto se aplica a todos los elementos HTML sin excepción.

+3

No, está cometiendo un error aquí: ¡el salto de línea en el ejemplo del OP es * después de * la etiqueta final! –

Cuestiones relacionadas