Qual é a diferença entre "& nbsp;" e ""?

146

Ambos significam espaço, mas há alguma diferença?

AMD
fonte

Respostas:

195

Um é o espaço sem quebra e o outro é um espaço regular. Um espaço sem quebra significa que a linha não deve ser quebrada nesse ponto, assim como não seria quebrada no meio de uma palavra.

Além disso, como Svend ressalta em seu comentário, os espaços não quebráveis ​​não são destruídos.

Brian Rasmussen
fonte
42
& nbsp; são também não-colapso, isso é provavelmente o aspecto mais significativo do seu uso (pelo menos, é assim que eu tendem a usá-los, almofada material para fora, rápido e fácil)
Svend
47
Protip: Por favor, não use 15% nbsp; s em uma linha para espaçar algo. Me deixa louco quando vejo pessoas fazendo isso. Use preenchimento ou margem de CSS.
Matthew Rapati
5
Ele me deixa louco quando vejo Microsoft Word fazendo isso, também ...
Josh Lee
@Amarghosh: Apenas o tipo de guru que eu sempre quis ser ... :)
Brian Rasmussen
1
Existem também outros tamanhos de entidades de espaçamento, como as &hairsp      que você pode ver e experimentar em [ jsfiddle.net/medmunds/4crt3c9j/]
Mark Gavagan
70

A entidade  produz um espaço sem quebra, que é usado quando você não deseja uma quebra de linha automática nessa posição. O espaço regular possui o código de caractere 32, enquanto o espaço sem quebra possui o código de caractere 160.

Por exemplo, quando você exibe números com espaço como separador de milhares: 1 234 567, usa espaços sem quebra para que o número não possa ser dividido em linhas separadas. Se você exibir a moeda e houver um espaço entre o valor e a moeda: 42 SEK, use um espaço sem quebra para não obter o valor em uma linha e a moeda na seguinte.

Guffa
fonte
3
Bons exemplos de uso de nbsp. Eu mesmo estava procurando por alguns, mas não conseguia pensar neles.
Pete
47

Além das outras respostas aqui, os espaços sem quebra não serão "recolhidos", como os espaços regulares. Por exemplo, ambos

<p>Word1          Word2</p>

e

<p>Word1 Word2</p>

renderizará o mesmo em qualquer navegador, enquanto

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

manterá os espaços quando renderizados.

Graeme Perrow
fonte
Não, então acabei com o & amp; ao longo. Não interpretou os & amp's, mas interpretou os & nbsp's.
Graeme Perrow
33

Não é uma resposta tanto quanto exemplos ...

Exemplo 1:

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

Exemplo 2:

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

E link para o violino .

KellCOMnet
fonte
2
Não há necessidade de olhar para outras respostas IMHO. 9 anos, ainda válido.
snr
10

Você pode ver um exemplo de trabalho aqui:

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

e

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

Mesma div, mesmo texto, diferentes "espaços"

<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
fonte
Você pode me explicar, por que votar esta resposta?
Alberto-bottarini 18/11/2015
Eu voto positivo. Eu acho que não explica as coisas. No entanto, você está apontando algo visual que é útil.
Nishant
1
Portanto, perguntas e respostas devem ser independentes. Um link externo para codepen também é permitido, se a resposta completa também for incluída diretamente na postagem. Para aderir à política de SO, editsua postagem deve incluir a saída resultante do código em sua resposta ou adicionar a própria versão incorporada do codepen da SO, para que o visitante possa executar o código e ver o resultado sem sair para uma página externa. O motivo da política independente é que, se o link se tornar inacessível, a resposta se tornará inútil. Além disso, é um UX ruim exigir que os usuários saiam, apenas para obter uma resposta.
SherylHohman 9/01/19
6

Vários caracteres de espaço em branco normal (espaço, tabulador e quebra de linha) são tratados como um único caractere de espaço em branco :

Para todos os elementos HTML, exceto PRE, as seqüências de espaço em branco separam "palavras" (usamos o termo "palavra" aqui para significar "sequências de caracteres de espaço que não sejam espaços em branco"). Ao formatar o texto, os agentes do usuário devem identificar essas palavras e distribuí-las de acordo com as convenções da linguagem escrita específica (script) e da mídia de destino.

assim

foo    bar

é exibido como

foo bar

Mas o espaço sem interrupção é sempre exibido. assim

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

é exibido como

foo   bar
quiabo
fonte
5

Como já mencionado, você não receberá uma quebra de linha onde houver um "espaço sem interrupção".

Também tenha cuidado, que elementos contendo apenas "" podem aparecer incorretamente, onde & nbsp; vai funcionar. Em ie 6, pelo menos (tanto quanto me lembro, o IE7 tem o mesmo problema), se você tiver um elemento de tabela vazio, ele não aplicará estilo, por exemplo, bordas, ao elemento, se não houver conteúdo ou apenas branco espaço. Portanto, o seguinte não será renderizado com bordas:

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

Enquanto as fronteiras aparecerão neste exemplo:

<td>& nbsp;</td>

Hmm - tinha que colocar um espaço fictício para fazê-lo renderizar corretamente aqui

Pete
fonte
@Stewart - Eu tentei com amp, e funcionou no texto, mas não em exmple código - porque ele também escreveu o "amp" parte para fora
Pete
Muito estranho. Obviamente um bug.
31310 Stewart
2

O primeiro não é tratado como espaço em branco pelo analisador de HTML, o segundo é. Como resultado, não é garantido que "" seja exibido dentro de determinadas marcações HTML, enquanto o espaço não quebrável sempre será exibido.

Zoidberg
fonte
1

&nbsp; deve ser tratado como um espaço em branco.

&nbsp;&nbsp; deve ser tratado como dois espaços em branco

'' pode ser tratado como um espaço em branco não interessante

'' + '' pode ser tratado como um único ''

CodingBarfield
fonte
1

&nbsp; é empilhável, o que significa que você pode criar vários espaços todos juntos.

HTML analisará apenas um espaço '' e soltará o resto ...

Se você quiser cinco espaços, coloque 5 x &nbsp;


fonte
0

@Zoidberg está certo, exemplo:

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

não exibirá espaço entre a marcação do cabeçalho, com

& nbsp ; 

vai fazer espaço :)

IProblemFactory
fonte
0

Quando houver quebras de linha, a linha não será interrompida quando você usar um $ bnsp; porque é um 'espaço sem quebra'. Isso pode ser importante se você tiver determinados nomes de produtos ou outros, que sempre devem ser escritos juntos.

Pode ser interessante se você (precisar) usar um espaço em branco como delimitador em números, como 12344567, exibido 12 344 567 na França. Sem a linha iria quebrar no meio do número, muito feio. Teste: 12 344 567

ppuschmann
fonte
0

TLDR; Além da resposta aceita; Um está implícito e outro explícito.

Quando o HTML que você escreveu ou gerou por um aplicativo / biblioteca / estrutura é lido pelo seu navegador, é melhor interpretar o significado do seu HTML (que pode variar de navegador para navegador). Ao usar os códigos de entidade HTML, você está sendo mais específico ao navegador. Você está explicitamente dizendo que deseja exibir um caractere para o usuário (e não que você esteja apenas espaçando seu HTML para facilitar a legibilidade para o desenvolvedor, por exemplo).

Para ser mais concreto, se o HTML de saída fosse:

<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>

O navegador renderizaria apenas um espaço entre todas essas palavras (mesmo as que foram recuadas para melhor legibilidade do desenvolvedor.

Se, no entanto, você colocar a mesma coisa e apenas alterar a <p>tag para:

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

Em seguida, renderizaria os espaços, como você o instruiu mais explicitamente. Há um histórico de uso desses espaços para estilizar. Esse uso foi um pouco diminuído à medida que o CSS amadureceu. No entanto, ainda existem usos válidos para muitas das entidades de caracteres HTML: evitando interpretação inesperada / não intencional (por exemplo, se você deseja exibir o código). O w3 tem uma ótima página para mostrar os outros códigos de caracteres .

Marc
fonte
Tente: <p>Hello &nbsp; There</p>OU <p>Hello &nbsp; &nbsp; &nbsp; There</p>(Se a quebra não for um problema, você poderá salvar alguns bits usando o espaço vazio regular antes e depois de cada &nbsp;).
Cyborg