Was ist der Unterschied zwischen "& nbsp;" und " "?

146

Beide bedeuten Raum, aber gibt es einen Unterschied?

Oh mein Gott
quelle

Antworten:

195

Einer ist ein nicht brechender Raum und der andere ist ein regulärer Raum. Ein nicht unterbrechendes Leerzeichen bedeutet, dass die Zeile an diesem Punkt nicht umbrochen werden sollte, so wie sie nicht in die Mitte eines Wortes eingeschlossen werden würde.

Darüber hinaus werden, wie Svend in seinem Kommentar betont, nicht brechende Leerzeichen nicht reduziert.

Brian Rasmussen
quelle
42
& nbsp; sind auch nicht kollabierend, das ist wahrscheinlich der wichtigste Aspekt ihrer Verwendung (zumindest neige ich dazu, sie zu verwenden, Sachen auszufüllen, schnell und einfach)
Svend
46
Protip: Bitte verwenden Sie nicht 15% nbsp; 's in einer Reihe, um etwas zu platzieren. Macht mich wahnsinnig, wenn ich Leute sehe, die das tun. Verwenden Sie CSS-Auffüllung oder Rand.
Matthew Rapati
5
Es macht mich wahnsinnig, wenn ich sehe, dass Microsoft Word das auch tut ...
Josh Lee
@Amarghosh: Genau die Art von Guru, die ich immer sein wollte ... :)
Brian Rasmussen
1
Es gibt auch andere Größen von Abstandsentitäten, wie &hairsp      Sie sie unter [ jsfiddle.net/medmunds/4crt3c9j/]
Mark Gavagan
70

Die Entität  erzeugt einen nicht unterbrechenden Bereich, der verwendet wird, wenn an dieser Position kein automatischer Zeilenumbruch gewünscht wird. Das reguläre Leerzeichen hat den Zeichencode 32, während das nicht unterbrechende Leerzeichen den Zeichencode 160 hat.

Wenn Sie beispielsweise Zahlen mit Leerzeichen als Tausendertrennzeichen anzeigen: 1 234 567, verwenden Sie nicht unterbrechende Leerzeichen, damit die Zahl nicht in separate Zeilen aufgeteilt werden kann. Wenn Sie die Währung anzeigen und zwischen dem Betrag und der Währung ein Leerzeichen steht: 42 SEK, verwenden Sie ein nicht unterbrechendes Leerzeichen, damit Sie den Betrag nicht in einer Zeile und die Währung in der nächsten Zeile erhalten.

Guffa
quelle
3
Gute Beispiele für die Verwendung von nbsp. Ich habe selbst nach einigen gesucht, konnte aber nicht an sie denken.
Pete
47

Zusätzlich zu den anderen Antworten hier werden nicht unterbrechende Leerzeichen nicht wie normale Leerzeichen "reduziert". Zum Beispiel beides

<p>Word1          Word2</p>

und

<p>Word1 Word2</p>

wird das gleiche in jedem Browser rendern, während

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

behält die Leerzeichen beim Rendern bei.

Graeme Perrow
quelle
Nein, dann kam ich zu & amp; während. Es hat die & amp's nicht interpretiert, aber es hat die & nbsp's interpretiert.
Graeme Perrow
33

Keine Antwort so sehr wie Beispiele ...

Beispiel 1:

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

Beispiel 2:

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

Und Link zur Geige .

KellCOMnet
quelle
2
Keine Notwendigkeit, einen Blick auf andere Antworten zu werfen, IMHO. 9 Jahre, noch gültig.
Snr
10

Ein funktionierendes Beispiel finden Sie hier:

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

und

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

Gleiches div, gleicher Text, verschiedene "Leerzeichen"

<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
quelle
Können Sie mir bitte erklären, warum Sie diese Antwort ablehnen?
Alberto-Bottarini
Ich habe es positiv bewertet. Ich denke, es erklärt die Dinge nicht. Sie weisen jedoch auf etwas Visuelles hin, das nützlich ist.
Nishant
1
SO sollen Fragen und Antworten in sich geschlossen sein. Ein externer Link zum Codepen ist ebenfalls zulässig, wenn die vollständige Antwort auch direkt im Beitrag enthalten ist. Um die SO-Richtlinie editeinzuhalten, muss Ihr Beitrag entweder die resultierende Ausgabe des Codes in Ihre Antwort aufnehmen oder die eigene eingebettete Version von Codepen von SO hinzufügen, damit der Besucher den Code ausführen und das Ergebnis anzeigen kann, ohne eine externe Seite zu verlassen. Der Grund für die in sich geschlossene Richtlinie ist, dass die Antwort unbrauchbar wird, wenn der Link nicht mehr erreichbar ist. Außerdem ist es eine schlechte UX, wenn Benutzer das Unternehmen verlassen müssen, um eine Antwort zu erhalten.
SherylHohman
6

Mehrere normale Leerzeichen (Leerzeichen, Tabulator und Zeilenumbruch) werden als ein einziges Leerzeichen behandelt :

Für alle HTML-Elemente außer PRE, Leerzeichenfolgen trennen "Wörter" (wir verwenden hier den Begriff "Wort", um "Folgen von Nicht-Leerzeichen" zu bedeuten). Bei der Formatierung von Text sollten Benutzerprogramme diese Wörter identifizieren und sie gemäß den Konventionen der jeweiligen Schriftsprache (Skript) und des Zielmediums anordnen.

So

foo    bar

wird angezeigt als

foo bar

Es wird jedoch immer ein Unterbrechungsbereich angezeigt. So

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

wird angezeigt als

foo   bar
Gumbo
quelle
5

Wie bereits erwähnt, erhalten Sie keinen Zeilenumbruch, wenn ein "Leerzeichen ohne Unterbrechung" vorhanden ist.

Seien Sie auch vorsichtig, dass Elemente, die nur ein "" enthalten, möglicherweise falsch angezeigt werden, wobei & nbsp; wird funktionieren. Zumindest in 6 (soweit ich mich erinnere, hat IE7 das gleiche Problem), wenn Sie ein leeres Tabellenelement haben, wird das Element nicht mit Stilen, z. B. Rahmen, versehen, wenn kein Inhalt vorhanden ist oder nur Weiß Platz. Folgendes wird also nicht mit Rahmen gerendert:

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

Während die Grenzen in diesem Beispiel angezeigt werden:

<td>& nbsp;</td>

Hmm - musste ein Dummy-Leerzeichen einfügen, damit es hier richtig gerendert werden konnte

Pete
quelle
@Stewart - Ich habe es mit Amp versucht, und es hat im Text funktioniert, aber nicht im Code-Beispiel - weil es auch den "Amp" -Teil ausgeschrieben hat
Pete
Sehr eigenartig. Offensichtlich ein Fehler.
Stewart
2

Der erste wird vom HTML-Parser nicht als Leerzeichen behandelt, der zweite. Infolgedessen wird nicht garantiert, dass das "" innerhalb eines bestimmten HTML-Markups angezeigt wird, während der nicht zerbrechliche Bereich immer angezeigt wird.

Zoidberg
quelle
1

&nbsp; sollte als Leerzeichen behandelt werden.

&nbsp;&nbsp; sollte als zwei Leerzeichen behandelt werden

'' kann als nicht interessantes Leerzeichen behandelt werden

'' + '' kann als einzelnes '' behandelt werden

CodingBarfield
quelle
1

&nbsp; ist stapelbar, dh Sie können mehrere Räume zusammen erstellen.

HTML analysiert nur ein Leerzeichen und lässt den Rest fallen ...

Wenn Sie fünf Leerzeichen möchten, würden Sie 5 x platzieren &nbsp;


quelle
0

@ Zoidberg ist richtig, Beispiel:

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

zeigt kein Leerzeichen zwischen den Header-Markups an, mit

& nbsp ; 

wird Platz machen :)

IProblemFactory
quelle
0

Bei Zeilenumbrüchen wird die Zeile nicht unterbrochen, wenn Sie ein $ bnsp verwenden. weil es ein "nicht brechender Raum" ist. Dies kann wichtig sein, wenn Sie bestimmte Produktnamen oder dergleichen haben, die immer zusammen geschrieben werden sollen.

Kann interessant sein, wenn Sie ein Leerzeichen als Trennzeichen in Zahlen verwenden müssen (müssen), z. B. 12344567, das in Frankreich 12 344 567 angezeigt wird. Ohne das würde die Linie in der Mitte der Zahl brechen, sehr hässlich. Test: 12 344 567

ppuschmann
quelle
0

TLDR; Neben der akzeptierten Antwort; Einer ist implizit und einer ist explizit.

Wenn der von Ihnen geschriebene oder von einer Anwendung / Bibliothek / einem Framework generierte HTML-Code von Ihrem Browser gelesen wird, ist es am besten, die Bedeutung Ihres HTML-Codes zu interpretieren (der von Browser zu Browser unterschiedlich sein kann). Wenn Sie die HTML-Entitätscodes verwenden, sind Sie spezifischer für den Browser. Sie teilen ihm ausdrücklich mit, dass Sie dem Benutzer ein Zeichen anzeigen möchten (und nicht, dass Sie nur Ihren HTML-Code für eine bessere Lesbarkeit für den Entwickler platzieren).

Genauer gesagt, wenn der Ausgabe-HTML-Code wäre:

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

Der Browser würde nur ein Leerzeichen zwischen all diesen Wörtern rendern (auch diejenigen, die zur besseren Lesbarkeit für Entwickler eingerückt wurden.

Wenn Sie jedoch dasselbe setzen und nur das <p>Tag in Folgendes ändern :

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

Dann würden die Leerzeichen gerendert, wie Sie es expliziter angewiesen haben. Es gibt eine gewisse Geschichte, diese Räume für das Styling zu verwenden. Diese Verwendung wurde etwas verringert, als CSS gereift ist. Es gibt jedoch immer noch gültige Verwendungen für viele der HTML-Zeichenentitäten: Vermeiden einer unerwarteten / unbeabsichtigten Interpretation (z. B. wenn Sie Code anzeigen möchten). Das w3 hat eine großartige Seite, auf der die anderen Zeichencodes angezeigt werden .

Marc
quelle
Versuchen Sie: <p>Hello &nbsp; There</p>ODER <p>Hello &nbsp; &nbsp; &nbsp; There</p>(Wenn das Brechen kein Problem darstellt, können Sie einige Bits speichern, indem Sie vor und nach jedem einen regulären Leerraum verwenden &nbsp;.)
Cyborg