相当于......的HTML会破坏;

时间:2014-06-28 16:36:31

标签: html html5 whitespace spaces

如果我想强制两个视觉显示的两个空格,我可以这样做:

FOO BAR  FOO BAR

这将回避HTML的空白折叠功能,但它也会导致这样的换行:

FOO 
BAR  FOO 
BAR

是否有替代品会像常规空间那样破坏?这是我要问的伪代码:

FOO
BAR&bsp;&bsp;
FOO
BAR

ps:我知道这可以用CSS完成。这不是我对此感兴趣的。

4 个答案:

答案 0 :(得分:7)

SPACEU+0020)字符的渲染宽度取决于字体,通常为1/4 em(经常调整)。

这意味着,平均而言,Unicode FOUR-PER-EM SPACEU+2005)应该有效,因为它定义为:1/4 em。

重复:foo  bar  
呈现一个“易碎”的#39; foo bar foo bar etc.(有2'空格')(在我的电脑上用FF)。

查看Korpela's unicode spaces overview

 Code   Name of the character      Width of the character
U+0020  SPACE                      Depends on font, typically 1/4 em, often adjusted
U+00A0  NO-BREAK SPACE             As a space, but often not adjusted
U+1680  OGHAM SPACE MARK           Unspecified; usually not really a space but a dash
U+180E  MONGOLIAN VOWEL SEPARATOR  No width
U+2000  EN QUAD                    1 en (= 1/2 em)
U+2001  EM QUAD                    1 em (nominally, the height of the font)
U+2002  EN SPACE                   1 en (= 1/2 em)
U+2003  EM SPACE                   1 em
U+2004  THREE-PER-EM SPACE         1/3 em
U+2005  FOUR-PER-EM SPACE          1/4 em
U+2006  SIX-PER-EM SPACE           1/6 em
U+2007  FIGURE SPACE               "Tabular width", the width of digits
U+2008  PUNCTUATION SPACE          The width of a period "."
U+2009  THIN SPACE                 1/5 em (or sometimes 1/6 em)
U+200A  HAIR SPACE                 Narrower than THIN SPACE
U+200B  ZERO WIDTH SPACE           Nominally no width, but may expand
U+202F  NARROW NO-BREAK SPACE      Narrower than NO-BREAK SPACE (or SPACE)
U+205F  MEDIUM MATHEMATICAL SPACE  4/18 em
U+3000  IDEOGRAPHIC SPACE          The width of ideographic (CJK) characters.
U+FEFF  ZERO WIDTH NO-BREAK SPACE  No width (the character is invisible)

请注意EN SPACE(= 1/2 em)应该导致相同的视觉效果(2个空格),只使用一个unicode字符(并在html-source中保存7个字符!! )

SPACEQUAD之间的区别是(来自wikipedia):

  

en quad和en space通常是同义词,因为它们都开始了   作为宽度为1 en的空间。但是,在电子出版中   如果字体是浓缩的,那么很少有人将这两者对比起来   扩展为改变字符的宽度,en quad保持为1   en宽度,而en空间的宽度改变为相同   比例作为印刷字符。

希望这有帮助!

修改
我对此进行了一些跨浏览器测试,包括同时出现的其他答案。

正如所指出的,我的建议依赖于字体制作者逻辑/懒惰的结论,他的SPACE字符的宽度等于FOUR-PER-EM SPACE的宽度(和{{1}的一半) })。
作为程序员,我不喜欢不确定性 BoltCock的答案(EN QUAD)和Wesabi的回答(&nbsp;&nbsp;<wbr>)消除了宽度的不确定性。

讽刺的是,没有最好的&#39; (还):我的建议和Wesabi的&nbsp;&nbsp;&#x200b;使用旧浏览器(IE6)/字体不支持的字符;它们将呈现为白色方块&#x200b;

另一方面,BoltCock的在IE6中完美运行,但遇到其他问题:它在IE8(以及其他一些)中无效(来源:012)。

根据您的具体用例:Chris Nielsen的评论实际上可能是最佳的跨浏览器解决方案:<wbr> ...

<强> EDIT2:
结束思路:从语义的角度来看(文本内容本身),你正在打击一个白色空间折叠功能(你将其标记为HTML)。最好的&#39;因此,解决方案就是保留您的内容,并且(正如您自己指出的那样):使用css禁用空白区域折叠功能。

答案 1 :(得分:3)

你可以尝试使用&#34; ZERO WIDTH SPACE&#34;字符(十六进制200B)

aaaaaaaaaaaaaaaaaaaaaaaaa&nbsp;&nbsp;&#x200b;&nbsp;&nbsp;aaaaaaaaaaaaaaaaaaaaaaaaa

我认为这完全适合你的情况。

另外,还有一个HTML解决方案:

aaaaaaaaaaaaaaaaaaaaaaaaa&nbsp;&nbsp;<wbr>&nbsp;&nbsp;aaaaaaaaaaaaaaaaaaaaaaaaa

<wbr>代码定义了&#34;分词机会&#34;

答案 2 :(得分:2)

如果你真的必须在HTML的限制范围内工作,而不用担心空间宽度,你可能<wbr> s序列之后添加&nbsp;元素这样:

FOO 
BAR&nbsp;&nbsp;<wbr>FOO 
BAR

答案 3 :(得分:1)

如果你想要一个不会阻止换行的宽度大于正常的空间,你可能想要一个en空间(U + 2002,&ensp;)或一个em空间(U + 2003, &emsp;)。通常,en空间的宽度是普通空间的两倍,em空间的宽度是正常空间的四倍。