Jaka jest różnica między „& nbsp;” i " "?


146

Oba oznaczają przestrzeń, ale czy jest jakaś różnica?

Odpowiedzi:


195

Jedna to spacja nierozerwalna, a druga to zwykła spacja. Niedzieląca spacja oznacza, że ​​wiersz nie powinien być zawijany w tym miejscu, tak jakby nie był zawijany w środku słowa.

Ponadto, jak wskazuje Svend w swoim komentarzu, spacje nierozdzielające nie są zwinięte.


42
& nbsp; również się nie zapadają, to prawdopodobnie najważniejszy aspekt ich użycia (przynajmniej tak ich używam, wypełnianie, szybko i łatwo)
Svend

47
Protip: Proszę nie używać 15% nbsp; w rzędzie, aby coś oddzielić. Doprowadza mnie do szaleństwa, kiedy widzę, że ludzie to robią. Użyj dopełnienia lub marginesu CSS.
Matthew Rapati,

5
Doprowadza mnie do szaleństwa, kiedy widzę, że Microsoft Word też to robi…
Josh Lee

@Amarghosh: Po prostu takim guru, jakim zawsze chciałem być ... :)
Brian Rasmussen

1
Istnieją również inne rozmiary jednostek odstępów, takie jak &hairsp      te, które można zobaczyć i poeksperymentować na [ jsfiddle.net/medmunds/4crt3c9j/]
Mark Gavagan,

70

Encja  tworzy nierozdzielającą spację, która jest używana, gdy nie chcesz, aby automatyczny podział wiersza w tej pozycji. Zwykła spacja ma kod znaku 32, a nierozdzielająca spacja ma kod znaku 160.

Na przykład, gdy wyświetlasz liczby ze spacjami jako separator tysięcy: 1 234 567, używasz nierozdzielających spacji, aby liczba nie mogła zostać podzielona na oddzielne wiersze. Jeśli wyświetlasz walutę i jest spacja między kwotą a walutą: 42 SEK, to używasz nierozdzielającej spacji, aby nie uzyskać kwoty w jednej linii, a waluty w następnej.


3
Dobre przykłady użycia nbsp. Sam ich szukałem, ale nie mogłem o nich myśleć.
Pete

47

Oprócz innych odpowiedzi tutaj, spacje nierozdzielające nie będą „zwinięte”, jak zwykłe spacje. Na przykład oba

<p>Word1          Word2</p>

i

<p>Word1 Word2</p>

będzie renderować się tak samo w każdej przeglądarce, podczas gdy

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

zachowa spacje podczas renderowania.


Nie, to skończyło się na & amp; poprzez. Nie zinterpretował & amp, ale zinterpretował & nbsp.
Graeme Perrow

33

Nie tyle odpowiedź, ile przykłady ...

Przykład 1:

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

Przykład 2:

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

I link do skrzypiec .


2
Nie ma potrzeby patrzeć na inne odpowiedzi IMHO. 9 lat, nadal ważne.
snr

10

Możesz zobaczyć działający przykład tutaj:

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

i

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

Ten sam element div, ten sam tekst, różne „spacje”

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

vs

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

Czy możesz mi wyjaśnić, dlaczego odrzucasz tę odpowiedź?
alberto-bottarini

Głosowałem za tym. Myślę, że to nie wyjaśnia rzeczy. Jednak wskazujesz na coś wizualnego, co jest przydatne.
Nishant

1
Pytania i odpowiedzi SO powinny być samodzielne. Dozwolony jest również zewnętrzny link do codepen , jeśli pełna odpowiedź jest również zawarta bezpośrednio w poście. Aby zachować zgodność z polityką SO, editpost powinien zawierać wynikowy wynik kodu w odpowiedzi lub dodawać własną osadzoną wersję codepen firmy SO, aby odwiedzający mógł uruchomić kod i zobaczyć wynik bez wychodzenia na zewnętrzną stronę. Powodem samodzielnej polityki jest to, że jeśli łącze staje się nieosiągalne, odpowiedź staje się bezużyteczna. Poza tym wymaganie od użytkowników opuszczenia strony tylko po to, by uzyskać odpowiedź , jest słabym UX .
SherylHohman

6

Wiele zwykłych znaków odstępu (spacja, tabulator i podział wiersza) jest traktowanych jako jeden znak odstępu :

Dla wszystkich elementów HTML z wyjątkiem PREsekwencji białych znaków oddzielających „słowa” (używamy tutaj terminu „słowo” w znaczeniu „sekwencje znaków innych niż białe znaki”). Podczas formatowania tekstu programy użytkownika powinny identyfikować te słowa i układać je zgodnie z konwencjami danego języka pisanego (skryptu) i docelowego medium.

Więc

foo    bar

jest wyświetlany jako

foo bar

Ale spacja bez przerwy jest zawsze wyświetlana. Więc

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

jest wyświetlany jako

foo   bar

5

Jak już wspomniano, nie otrzymasz znaku końca wiersza, jeśli jest „miejsce bez przerwy”.

Uważaj również, ponieważ elementy zawierające tylko „” mogą być wyświetlane nieprawidłowo, gdzie & nbsp; będzie działać. W ie co najmniej 6 (o ile pamiętam, IE7 ma ten sam problem), jeśli masz pusty element tabeli, to nie zastosuje stylizacji, na przykład ramek, do elementu, jeśli nie ma treści lub tylko biały przestrzeń. Więc następujące elementy nie zostaną wyrenderowane z ramkami:

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

Podczas gdy granice pojawią się w tym przykładzie:

<td>& nbsp;</td>

Hmm-musiałem wstawić obojętne miejsce, aby wyświetlić tutaj poprawnie


@Stewart - próbowałem ze wzmacniaczem i działało w tekście, ale nie w przykładzie kodu - ponieważ napisał również część „amp”
Pete

Bardzo dziwny. Oczywiście błąd.
Stewart

2

Pierwsza nie jest traktowana jako biała przestrzeń przez parser HTML, a druga jest. W rezultacie „” nie ma gwarancji, że pojawi się w ramach pewnych znaczników HTML, podczas gdy nierozerwalna przestrzeń będzie zawsze widoczna.


1

&nbsp; powinny być traktowane jako spacje.

&nbsp;&nbsp; powinny być traktowane jako dwie spacje

„” można traktować jako nieciekawą spację

„+” może być traktowane jako pojedynczy „”


1

&nbsp; można układać w stosy, co oznacza, że ​​można razem tworzyć wiele przestrzeni.

HTML przeanalizuje tylko jedną spację '', a resztę porzuca ...

Jeśli chcesz mieć pięć spacji, umieść 5 x &nbsp;


0

@Zoidberg ma rację, przykład:

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

nie wyświetli spacji między znacznikami nagłówka, z

& nbsp ; 

zrobi przestrzeń :)


0

W przypadku znaków końca linii linia nie zostanie przerwana, gdy użyjesz $ bnsp; ponieważ jest to „niełamliwa przestrzeń”. Może to być ważne, jeśli masz określone nazwy produktów lub takie, które zawsze powinny być zapisane razem.

Może być interesujące, jeśli jako separatora liczb używasz (musisz) spacji, na przykład 12344567, który we Francji jest wyświetlany jako 12 344 567. Bez linii pękłaby w połowie liczby, bardzo brzydka. Test: 12 344 567


0

TLDR; Oprócz zaakceptowanej odpowiedzi; Jeden jest niejawny, a drugi jawny.

Kiedy HTML, który napisałeś lub wygenerowałeś przez aplikację / bibliotekę / framework, zostanie odczytany przez twoją przeglądarkę, najlepiej będzie zinterpretować, co oznacza twój HTML (co może się różnić w zależności od przeglądarki). Kiedy używasz kodów encji HTML, jesteś bardziej specyficzny dla przeglądarki. Wyraźnie mówisz mu, że chcesz wyświetlić użytkownikowi znak (a nie, że umieszczasz swój kod HTML w odstępach, na przykład dla łatwiejszej czytelności dla programisty).

Mówiąc dokładniej, gdyby wyjściowy kod HTML był:

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

Przeglądarka renderowałaby tylko jedną spację między wszystkimi tymi słowami (nawet tymi, które zostały wcięte dla lepszej czytelności dla programistów.

Jeśli jednak umieścisz tę samą rzecz i zmienisz tylko <p>tag na:

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

Następnie wyrenderowałoby spacje, tak jak nakazałeś to bardziej wyraźnie. Istnieje pewna historia wykorzystywania tych przestrzeni do stylizacji. To użycie zostało nieco zmniejszone w miarę dojrzewania CSS. Jednak nadal istnieją ważne zastosowania dla wielu jednostek znakowych HTML: unikanie nieoczekiwanej / niezamierzonej interpretacji (np. Jeśli chcesz wyświetlić kod). W3 ma świetną stronę, aby pokazać inne kody znaków .


Spróbuj: <p>Hello &nbsp; There</p>LUB <p>Hello &nbsp; &nbsp; &nbsp; There</p>(jeśli łamanie nie stanowi problemu, możesz zaoszczędzić trochę bitów, używając zwykłej pustej przestrzeni przed i po każdym &nbsp;).
Cyborg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.