¿Cuál es la diferencia entre "& nbsp;" y ""?

146

Ambos significan espacio, pero ¿hay alguna diferencia?

Dios mio
fuente

Respuestas:

195

Uno es un espacio sin interrupciones y el otro es un espacio regular. Un espacio sin saltos significa que la línea no debe ajustarse en ese punto, al igual que no se envolvería en medio de una palabra.

Además, como señala Svend en su comentario, los espacios que no se rompen no se colapsan.

Brian Rasmussen
fuente
42
& nbsp; También se que no se aplasta, que es probablemente el aspecto más importante de su uso (al menos, eso es lo que tienden a utilizar ellos, almohadilla materia hacia fuera, rápida y fácil)
Svend
47
Protip: por favor no use 15% nbsp; 's en una fila para espaciar algo. Me vuelve loco cuando veo gente haciendo eso. Use relleno o margen CSS.
Matthew Rapati
55
Me vuelve loco cuando veo que Microsoft Word también hace eso ...
Josh Lee
@Amarghosh: Justo el tipo de gurú que siempre quise ser ... :)
Brian Rasmussen
1
También hay otros tamaños de entidades espaciadoras, como las &hairsp      que puede ver y experimentar en [ jsfiddle.net/medmunds/4crt3c9j/]
Mark Gavagan
70

La entidad  produce un espacio sin interrupción, que se utiliza cuando no desea un salto de línea automático en esa posición. El espacio regular tiene el código de caracteres 32, mientras que el espacio sin interrupciones tiene el código de caracteres 160.

Por ejemplo, cuando visualiza números con espacio como separador de miles: 1 234 567, entonces usa espacios sin división para que el número no se pueda dividir en líneas separadas. Si muestra la moneda y hay un espacio entre la cantidad y la moneda: 42 SEK, entonces usa un espacio sin interrupción para no obtener la cantidad en una línea y la moneda en la siguiente.

Guffa
fuente
3
Buenos ejemplos de uso de nbsp. Estaba buscando algunos, pero no podía pensar en ellos.
Pete el
47

Además de las otras respuestas aquí, los espacios que no se rompen no se "colapsarán" como lo harán los espacios normales. Por ejemplo, ambos

<p>Word1          Word2</p>

y

<p>Word1 Word2</p>

hará lo mismo en cualquier navegador, mientras

<p>Word1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Word2</p>

mantendrá los espacios cuando se represente.

Graeme Perrow
fuente
No, entonces terminé con & amp; en todo. No interpretó los & amp's pero sí interpretó los & nbsp's.
Graeme Perrow
33

No es una respuesta tanto como ejemplos ...

Ejemplo 1:

<div style="width:45px; height:45px; border: solid thin red; overflow: visible">
    Hello&nbsp;There
</div>  

Ejemplo # 2:

<div style="width:45px; height:45px; border: solid thin red; overflow: visible">
    Hello There
</div>

Y enlace al violín .

KellCOMnet
fuente
2
No es necesario mirar otras respuestas en mi humilde opinión. 9 años, aún válido.
snr
10

Puedes ver un ejemplo de trabajo aquí:

http://codepen.io/anon/pen/GJzBxo

y

http://codepen.io/anon/pen/LVqBQo

Mismo div, mismo texto, diferentes "espacios"

<div style="width: 500px; background: red"> [loooong text with spaces]</div>

vs

<div style="width: 500px; background: red"> [loooong text with &nbsp;]</div>
alberto-bottarini
fuente
¿Me puede explicar, por qué rechazar esta respuesta?
alberto-bottarini
Lo he votado. Creo que no explica las cosas. Sin embargo, estás señalando algo visual que es útil.
Nishant
1
Se supone que las preguntas y respuestas de SO son independientes. También se permite un enlace externo a codepen , si la respuesta completa también se incluye directamente en la publicación. Para cumplir con la política de SO, editsu publicación para incluir el resultado resultante del código en su respuesta, o para agregar la propia versión incrustada de codepen de SO, para que el visitante pueda ejecutar el código y ver el resultado sin salir a una página externa. La razón de la política autónoma es que si el enlace se vuelve inalcanzable, la respuesta se vuelve inútil. Además, es una mala experiencia de usuario exigir que los usuarios se vayan, solo para obtener una respuesta.
SherylHohman el
6

Múltiples caracteres de espacio en blanco normales (espacio, tabulador y salto de línea) se tratan como un solo carácter de espacio en blanco :

Para todos los elementos HTML excepto PRE, las secuencias de espacios en blanco separan las "palabras" (aquí usamos el término "palabra" para significar "secuencias de caracteres que no son espacios en blanco"). Al formatear el texto, los agentes de usuario deben identificar estas palabras y diseñarlas de acuerdo con las convenciones del lenguaje escrito particular (script) y el medio de destino.

Entonces

foo    bar

se muestra como

foo bar

Pero el espacio sin interrupción siempre se muestra. Entonces

foo&‍nbsp;&‍nbsp;&‍nbsp;bar

se muestra como

foo   bar
Gumbo
fuente
5

Como ya se mencionó, no recibirá un salto de línea donde haya un "espacio sin interrupción".

También tenga cuidado, que los elementos que contienen solo un "" pueden aparecer incorrectamente, donde & nbsp; trabajará. Por ejemplo, en 6 al menos (hasta donde recuerdo, IE7 tiene el mismo problema), si tiene un elemento de tabla vacío, no aplicará estilo, por ejemplo bordes, al elemento, si no hay contenido, o solo blanco espacio. Por lo tanto, lo siguiente no se representará con bordes:

<td></td>
<td> <td>

Mientras que las fronteras se mostrarán en este ejemplo:

<td>& nbsp;</td>

Hmm, tuve que poner un espacio ficticio para que se renderice correctamente aquí

Pete
fuente
@Stewart - Lo intenté con amplificador, y funcionó en el texto, pero no en el código de ejemplo, porque también escribió la parte "amplificador"
Pete
Muy extraño. Obviamente un error.
Stewart
2

El primero no es tratado como espacio en blanco por el analizador HTML, el segundo sí. Como resultado, no se garantiza que el "" aparezca dentro de cierto marcado HTML, mientras que el espacio no rompible siempre aparecerá.

Zoidberg
fuente
1

&nbsp; debe manejarse como un espacio en blanco.

&nbsp;&nbsp; debe manejarse como dos espacios en blanco

'' se puede manejar como un espacio en blanco no interesante

'' + '' se puede manejar como un solo ''

CodificaciónBarfield
fuente
1

&nbsp; es apilable, lo que significa que puede crear múltiples espacios todos juntos.

HTML solo analizará un espacio '' y descarta el resto ...

Si quieres cinco espacios, colocarías 5 x &nbsp;


fuente
0

@Zoidberg tiene razón, ejemplo:

<h1>title</h1> <h2>date</h2>

no mostrará espacio entre el marcado del encabezado, con

& nbsp ; 

hará espacio :)

IProblemFactory
fuente
0

Al tener saltos de línea, la línea no se romperá cuando use $ bnsp; porque es un "espacio sin interrupciones". Esto puede ser importante si tiene ciertos nombres de productos o similares, que siempre deben escribirse juntos.

Puede ser interesante si (tiene que) usar un espacio en blanco como delimitador en números, como 12344567, que se muestra 12 344 567 en Francia. Sin la línea se rompería en el medio del número, muy feo. Prueba: 12 344 567

ppuschmann
fuente
0

TLDR; Además de la respuesta aceptada; Uno es implícito y el otro es explícito.

Cuando su navegador lea el HTML que ha escrito o generado por una aplicación / biblioteca / marco, lo mejor será interpretar lo que significaba su HTML (que puede variar de un navegador a otro). Cuando usa los códigos de entidad HTML, está siendo más específico para el navegador. Le está diciendo explícitamente que desea mostrar un carácter al usuario (y no que solo está espaciando su HTML para facilitar la legibilidad del desarrollador, por ejemplo).

Para ser más concreto, si el HTML de salida fuera:

<html>
   <title>hello</title>
   <body>
       <p>
           Tell me and I will forget. Teach me and I
           may remember.  Involve me and I will learn.
       </p>
   </body>
</html>

El navegador solo representaría un espacio entre todas estas palabras (incluso las que se han sangrado para una mejor legibilidad del desarrollador.

Sin embargo, si pones lo mismo y solo cambiaste la <p>etiqueta a:

<p>Hello&nbsp;&nbsp;&nbsp;There</p>

Luego representaría los espacios, como lo ha indicado más explícitamente. Existe cierta historia del uso de estos espacios para el estilo. Este uso ha disminuido un poco a medida que CSS ha madurado. Sin embargo, todavía hay usos válidos para muchas de las entidades de caracteres HTML: evitar la interpretación inesperada / involuntaria (por ejemplo, si desea mostrar el código). El w3 tiene una gran página para mostrar los otros códigos de caracteres .

Bagazo
fuente
Intente: <p>Hello &nbsp; There</p>O <p>Hello &nbsp; &nbsp; &nbsp; There</p>(Si romper no es un problema, puede guardar algunos bits utilizando el espacio vacío Regular antes y después de cada &nbsp;).
Cyborg