它们都表示空间,但有区别吗?


当前回答

除了这里的其他答案外,非间断空格不会像常规空格那样被“折叠”。例如:

<!——都是——> < p > Word1 Word2 < / p > <!——和——> < / p > < p > Word1 Word2 <!——将在任何浏览器上呈现相同的效果——> <!—下图在渲染时保留空格。--> < p > Word1&nbsp;,,,,, Word2 < / p >

其他回答

一个是非间断空间,另一个是规则空间。非换行空格意味着该行不应该在该点被换行,就像它不会在单词中间被换行一样。

此外,正如Svend在他的评论中指出的那样,非间断空间并不是折叠的。

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有一个很棒的页面来显示其他字符代码。

实体&nbsp;生成非换行空格,当不希望在该位置自动换行时使用该空格。常规空格的字符代码为32,而不间断空格的字符代码为160。

例如,当您显示以空格作为千位分隔符的数字:1 234 567时,则使用不间断空格,以便该数字不能在单独的行上分割。如果您显示货币,并且金额和货币之间有空格:42 SEK,则使用非换行空格,这样您就不会在一行上显示金额而在下一行上显示货币。

你可以在这里看到一个工作示例:

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

and

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

相同的div,相同的文本,不同的空格

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

vs

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

如前所述,在有“无换行空格”的地方,您将不会收到换行符。

还要注意,只包含“”的元素可能会错误地显示,其中&nbsp;将工作。至少在i.e. 6中(据我所知,IE7也有同样的问题),如果你有一个空的表格元素,如果没有内容,或者只有空白,它就不会对元素应用样式,例如边框。因此,下面的代码将不带边框:

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

而边界将在本例中显示:

<td>& nbsp;</td>

嗯-不得不放一个虚拟空间,让它在这里正确渲染