Quelle est la différence entre "& nbsp;" et " "?

147

Les deux signifient espace, mais y a-t-il une différence?

OMG
la source

Réponses:

196

L'un est un espace insécable et l'autre est un espace régulier. Un espace insécable signifie que la ligne ne doit pas être enveloppée à ce stade, tout comme elle ne serait pas enveloppée au milieu d'un mot.

De plus, comme le souligne Svend dans son commentaire, les espaces insécables ne sont pas réduits.

Brian Rasmussen
la source
42
& nbsp; ne s'effondrent pas non plus, c'est probablement l'aspect le plus important de leur utilisation (du moins, c'est comme ça que j'ai tendance à les utiliser, les bourrages, rapides et faciles)
Svend
48
Protip: Veuillez ne pas utiliser 15% nbsp; de suite pour espacer quelque chose. Ça me rend fou quand je vois des gens faire ça. Utilisez un remplissage ou une marge CSS.
Matthew Rapati
6
Cela me rend fou quand je vois Microsoft Word faire ça aussi…
Josh Lee
@Amarghosh: Juste le genre de gourou que j'ai toujours voulu être ... :)
Brian Rasmussen
1
Il existe également d'autres tailles d'entités d'espacement, comme celles &hairsp      que vous pouvez voir et expérimenter sur [ jsfiddle.net/medmunds/4crt3c9j/]
Mark Gavagan
70

L'entité  produit un espace insécable, qui est utilisé lorsque vous ne voulez pas de saut de ligne automatique à cette position. L'espace régulier a le code de caractère 32, tandis que l'espace insécable a le code de caractère 160.

Par exemple, lorsque vous affichez des nombres avec un espace comme séparateur des milliers: 1 234 567, vous utilisez des espaces insécables afin que le nombre ne puisse pas être divisé sur des lignes séparées. Si vous affichez la devise et qu'il y a un espace entre le montant et la devise: 42 SEK, alors vous utilisez un espace insécable afin de ne pas obtenir le montant sur une ligne et la devise sur la suivante.

Guffa
la source
3
Bons exemples d'utilisation de nbsp. J'en cherchais moi-même, mais je ne pouvais pas y penser.
Pete
48

En plus des autres réponses ici, les espaces insécables ne seront pas «réduits» comme le seront les espaces normaux. Par exemple, les deux

<p>Word1          Word2</p>

et

<p>Word1 Word2</p>

rendra le même sur n'importe quel navigateur, tandis que

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

conservera les espaces lors du rendu.

Graeme Perrow
la source
Non, alors je me suis retrouvé avec & amp; tout au long de. Il n'a pas interprété les & amp mais il a interprété les & nbsp.
Graeme Perrow
34

Pas une réponse autant que des exemples ...

Exemple 1:

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

Exemple n ° 2:

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

Et lien vers le violon .

KellCOMnet
la source
3
Pas besoin de jeter un œil à une autre réponse à mon humble avis. 9 ans, toujours valable.
snr
10

Vous pouvez voir un exemple fonctionnel ici:

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

et

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

Même div, même texte, différents "espaces"

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

contre

<div style="width: 500px; background: red"> [loooong text with &nbsp;]</div>
alberto-bottarini
la source
Pouvez-vous m'expliquer, pourquoi voter contre cette réponse?
alberto-bottarini
Je l'ai voté. Je pense que cela n'explique pas les choses. Cependant, vous indiquez quelque chose de visuel qui est utile.
Nishant le
1
Les questions et réponses SO sont censées être autonomes. Un lien externe vers codepen est également autorisé, si la réponse complète est également incluse directement dans le message. Pour adhérer à la politique de SO, editvotre message doit soit inclure la sortie résultante du code dans votre réponse, soit ajouter la propre version intégrée de SO de codepen, afin que le visiteur puisse exécuter le code et voir le résultat sans quitter une page externe. La raison de la politique autonome est que si le lien devient inaccessible, la réponse devient inutile. En outre, il est médiocre d' exiger des utilisateurs qu'ils partent, juste pour obtenir une réponse.
SherylHohman
6

Plusieurs caractères d'espacement normal (espace, tabulation et saut de ligne) sont traités comme un seul caractère d'espace blanc :

Pour tous les éléments HTML à l'exception des PREséquences d'espaces blancs séparant les «mots» (nous utilisons ici le terme «mot» pour signifier «séquences de caractères non blancs»). Lors du formatage du texte, les agents utilisateurs doivent identifier ces mots et les disposer selon les conventions de la langue écrite (script) et du support cible.

Alors

foo    bar

s'affiche comme

foo bar

Mais l'espace sans pause est toujours affiché. Alors

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

s'affiche comme

foo   bar
Gombo
la source
5

Comme déjà mentionné, vous ne recevrez pas de saut de ligne s'il y a un "espace sans coupure".

Attention également, les éléments contenant uniquement un "" peuvent apparaître de manière incorrecte, où & nbsp; marchera. Dans ie 6 au moins (pour autant que je me souvienne, IE7 a le même problème), si vous avez un élément de tableau vide, il n'appliquera pas de style, par exemple des bordures, à l'élément, s'il n'y a pas de contenu, ou seulement du blanc espace. Ainsi, les éléments suivants ne seront pas rendus avec des bordures:

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

Alors que les frontières apparaîtront dans cet exemple:

<td>& nbsp;</td>

Hmm -doit mettre dans un espace factice pour que le rendu soit correct ici

Pete
la source
@Stewart - J'ai essayé avec un ampli, et cela a fonctionné dans le texte, mais pas dans l'exemple de code - parce qu'il a également écrit la partie "ampli"
Pete
Très étrange. De toute évidence un bug.
Stewart
2

Le premier n'est pas traité comme un espace blanc par l'analyseur HTML, le second l'est. Par conséquent, il n'est pas garanti que le "" apparaisse dans certains balisages HTML, tandis que l'espace insécable apparaîtra toujours.

Zoidberg
la source
1

&nbsp; doit être traité comme un espace blanc.

&nbsp;&nbsp; doit être traité comme deux espaces

'' peut être traité comme un espace blanc non intéressant

'' + '' peut être traité comme un seul ''

CodageBarfield
la source
1

&nbsp; est empilable, ce qui signifie que vous pouvez créer plusieurs espaces tous ensemble.

HTML analysera seulement un espace '' et il supprime le reste ...

Si vous voulez cinq espaces, vous placez 5 x &nbsp;


la source
0

@Zoidberg a raison, exemple:

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

n'affichera pas d'espace entre le balisage d'en-tête, avec

& nbsp ; 

fera de l'espace :)

IProblemFactory
la source
0

Lorsque vous avez des sauts de ligne, la ligne ne se coupera pas lorsque vous utilisez un $ bnsp; parce que c'est un «espace insécable». Cela peut être important si vous avez certains noms de produits ou autres, qui doivent toujours être écrits ensemble.

Peut être intéressant si vous (devez) utiliser un espace comme délimiteur dans les nombres, comme 12344567, qui est affiché 12 344 567 en France. Sans le, la ligne se briserait au milieu du nombre, très moche. Essai: 12344567

ppuschmann
la source
0

TLDR; En plus de la réponse acceptée; L'un est implicite et l'autre est explicite.

Lorsque le HTML que vous avez écrit ou généré par une application / bibliothèque / structure est lu par votre navigateur, il fera de son mieux pour interpréter ce que votre HTML signifie (qui peut varier d'un navigateur à l'autre). Lorsque vous utilisez les codes d'entité HTML, vous êtes plus spécifique au navigateur. Vous lui dites explicitement que vous souhaitez afficher un caractère à l'utilisateur (et non que vous espérez simplement votre HTML pour une lisibilité plus facile pour le développeur par exemple).

Pour être plus concret, si le HTML de sortie était:

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

Le navigateur ne rendrait qu'un espace entre tous ces mots (même ceux qui ont été mis en retrait pour une meilleure lisibilité du développeur.

Si, cependant, vous mettez la même chose et changez uniquement la <p>balise en:

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

Ensuite, il rendrait les espaces, comme vous l'avez indiqué plus explicitement. Il y a une histoire d'utilisation de ces espaces pour le style. Cette utilisation a quelque peu diminué à mesure que le CSS a mûri. Cependant, il existe encore des utilisations valables pour de nombreuses entités de caractères HTML: éviter une interprétation inattendue / involontaire (par exemple si vous vouliez afficher du code). Le w3 a une grande page pour afficher les autres codes de caractères .

Marc
la source
Essayez: <p>Hello &nbsp; There</p>OU <p>Hello &nbsp; &nbsp; &nbsp; There</p>(si la rupture n'est pas un problème, vous pouvez enregistrer quelques bits en utilisant un espace vide régulier avant et après chaque &nbsp;).
Cyborg