Яка різниця між "& nbsp;" і ""?


Відповіді:


196

Один - це нерозривний простір, а інший - звичайний простір. Нерозривний пробіл означає, що лінія не повинна бути загорнута в цій точці, подібно до того, як вона не буде загорнута в середині слова.

Крім того, як Свенд вказує у своєму коментарі, пробіли не руйнуються.


42
& nbsp; також не руйнуються, це, мабуть, найважливіший аспект їх використання (принаймні, саме так я схильний використовувати їх, прокладати речі швидко, просто)
Svend

48
Підказка. Будь-ласка, не використовуйте 15% nbsp; 's підряд, щоб щось розмістити. Зводить мене з розуму, коли бачу людей, що роблять це. Використовуйте CSS padding або margin.
Метью Рапаті

6
Це мене зводить з розуму, коли я бачу, що Microsoft Word це теж робить ...
Джош Лі

@Amarghosh: Просто таким гуру, яким я завжди хотів бути ... :)
Брайан Расмуссен

1
Існують також інші розміри міжрядкових сутностей, такі, як &hairsp      ви можете їх побачити та експериментувати на [ jsfiddle.net/medmunds/4crt3c9j/]
Марк Гаваган

70

Суб'єкт  виробляє нерозривний простір, який використовується, коли ви не бажаєте автоматичного розриву лінії в цій позиції. У звичайному просторі є код символу 32, тоді як нерозривний пробіл має код символу 160.

Наприклад, коли ви відображаєте числа з пробілом як роздільник тисяч: 1 234 567, ви використовуєте нерозривні пробіли, щоб число не можна було розділити на окремі рядки. Якщо ви відображаєте валюту, і між сумою та валютою є пробіл: 42 шведських крон, тоді ви використовуєте нерозривний пробіл, щоб не отримати суму на одному рядку та валюту на наступному.


3
Хороші приклади використання nbsp. Я щось шукав, але не міг їх придумати.
Піт

48

На додаток до інших відповідей тут, нерозривні пробіли не будуть "згортатися", як і звичайні пробіли. Наприклад, обидва

<p>Word1          Word2</p>

і

<p>Word1 Word2</p>

буде відображати те ж саме в будь-якому браузері, поки

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

збереже пробіли під час надання.


Ні, тоді я закінчив & amp; на всьому протязі. Він не інтерпретував & amp, але інтерпретував & nbsp.
Graeme Perrow

34

Не відповідь настільки, як приклади ...

Приклад №1:

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

Приклад №2:

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

І посилання на загадку .


3
Не потрібно дивитись на іншу відповідь ІМХО. 9 років, як і раніше.
snr

10

Ви можете побачити робочий приклад тут:

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

і

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

Той самий розділ, той самий текст, різні "пробіли"

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

проти

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

Чи можете ви поясніть мені, чому я спростовую цю відповідь?
Альберто-боттаріні

Я це відмовив. Я думаю, це не пояснює речі. Однак ви вказуєте щось корисне для візуального.
Нішант

1
Тому питання та відповіді повинні бути самостійними. Зовнішнє посилання на codepen також дозволено, якщо повна відповідь також міститься безпосередньо в публікації. Щоб дотримуватися політики щодо SO, editваша публікація або включить отриманий результат коду у свою відповідь, або додати вбудовану версію SO для вбудованого коду, щоб відвідувач міг запустити код і побачити результат, не переходячи на зовнішню сторінку. Причина самодостатньої політики полягає в тому, що якщо посилання стає недосяжним, відповідь стає марною. Крім того, це поганий UX, щоб вимагати від користувачів, щоб отримати відповідь.
ШерилГоман

6

Кілька нормальних символів пробілу (пробіл, таблиця та розрив рядків) трактуються як один єдиний символ пробілу :

Для всіх елементів HTML, за винятком PREпослідовностей пробілів, відокремлюються "слова" (тут ми використовуємо термін "слово", щоб означати "послідовності символів небілого пробілу"). Форматуючи текст, користувальницькі агенти повинні ідентифікувати ці слова та викладати їх відповідно до конвенцій певної писемної мови (сценарію) та цільового носія.

Так

foo    bar

відображається як

foo bar

Але простір без перерви завжди відображається. Так

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

відображається як

foo   bar

5

Як вже було сказано, ви не отримаєте розрив рядка там, де є "пробіл без перерви".

Також будьте обережні, що елементи, що містять лише "", можуть відображатися неправильно, де & nbsp; буду працювати. Принаймні, 6 щонайменше (наскільки я пам’ятаю, IE7 має той самий випуск), якщо у вас є порожній елемент таблиці, він не застосовуватиме елемент, наприклад, межі, до елемента, якщо немає вмісту, або лише білий простір. Таким чином, з кордонами не буде надано наступне:

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

Тоді як межі будуть показані в цьому прикладі:

<td>& nbsp;</td>

Хм -мало розмістити в манекені простір, щоб змусити його правильно відобразитись тут


@Stewart - Я намагався з amp, і він працював у тексті, але не в кодовому прикладі - тому що він також виписав "amp" частина
Pete

Дуже дивно. Очевидно помилка.
Стюарт

2

Перший не розглядається як пробіл за допомогою HTML-аналізатора, другий -. Як результат, "" не гарантується показ у певній розмітці HTML, тоді як нерозривний простір завжди з'явиться.


1

&nbsp; слід обробляти як пробіл.

&nbsp;&nbsp; слід обробляти як два пробіли

"" можна обробляти як не цікавий пробіл

'' + '' можна обробляти як єдиний ''


1

&nbsp; є складною, тобто ви можете створити кілька просторів разом.

HTML проаналізує лише один пробіл "", а решту випаде ...

Якщо ви хочете п'ять пробілів, ви помістите 5 х &nbsp;


0

@Zoidberg має рацію, наприклад:

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

не відображатиме пробіл між розміткою заголовка, з

& nbsp ; 

зробить простір :)


0

Якщо у вас є розриви рядків, лінія не розривається, коли ви використовуєте $ bnsp; тому що це "пробій, що не порушується". Це може бути важливо, якщо у вас є певні найменування продуктів або такі, які завжди повинні писатися разом.

Це може бути цікаво, якщо ви (повинні) використовувати пробіл як роздільник цифр, наприклад 12344567, який відображається у Франції 12 344 567. Без лінії перервалася б посередині числа, дуже потворна. Тест: 12 344 567


0

TLDR; Крім прийнятої відповіді; Одне неявне, а одне - явне.

Коли HTML, який ви написали або генерував додаток / бібліотека / фреймворк, прочитає ваш браузер, то найкраще буде інтерпретувати те, що означав ваш HTML (що може змінюватись від браузера до браузера). Використовуючи коди сутності HTML, ви надаєте більш конкретну інформацію про браузер. Ви чітко повідомляєте, що хочете відобразити персонаж користувача (а не те, що ви просто розставляєте свій HTML для легшої читальності, наприклад, для розробника).

Якщо бути більш конкретним, якби вихідний HTML був:

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

Веб-переглядач надасть лише один пробіл між усіма цими словами (навіть тими, які були відведені для кращої читабельності розробника.

Якщо ви ввели те саме і змінили <p>тег лише на:

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

Тоді воно буде відображати пробіли, як ви це чіткіше доручили. Існує деяка історія використання цих просторів для стилізації. Це використання дещо зменшилось у міру дозрівання CSS. Однак для багатьох суб'єктів символів HTML все ж є дійсними: уникати несподівано / ненавмисної інтерпретації (наприклад, якщо ви хочете відобразити код). У w3 є чудова сторінка для відображення інших кодів символів .


Спробуйте: <p>Hello &nbsp; There</p>АБО <p>Hello &nbsp; &nbsp; &nbsp; There</p>(якщо порушення не є проблемою, ви можете зберегти деякі біти, використовуючи регулярне порожнє місце до і після кожного &nbsp;).
Кіборг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.