HTML 源代码中的空格
在 HTML 源代码中,当您有文本或图像行或元素时inline-block
,如果它们之间有任何空格(空格、制表符或新行),则当页面被渲染。例如,在下面的 HTML 中,四个内容之间会出现一个空格:
one
two
<img src="three.png"/>
<span style="display: inline-block;">four<span>
这对于文本行以及出现在文本行中的小图像或 HTML 元素非常有用。但是当inline-block
用于布局目的而不是作为在一段文本中添加内容的方式时,它会成为一个问题。
删除多余的空间
避免在元素之间添加额外 4px 左右的空间的最安全的跨浏览器方法inline-block
是删除 HTML 源代码中 HTML 标记之间的任何空白。
例如,如果您有ul
3 个浮动li
标签:
<-- No space, tabs, or line breaks between </li> and <li> -->
<ul>
<li>...</li><li>...</li><li>...</li>
</ul>
不幸的是,这会损害网站的可维护性。除了使代码不可读之外,它还严重损害了数据和格式的分离。
如果另一个程序员后来出现并决定将每个li
标签放在源代码中的单独行(不知道为什么标签在同一行,或者可能通过 HTML Tidy 运行它,甚至没有机会注意到任何相关的 HTML评论),突然网站出现了一个可能难以识别的格式错误。
考虑浮动元素
空白行为强烈表明它可能不适合inline-block
用于一般布局目的,将其用于除了在一段文本流中添加内容之外的任何内容。
另外,在某些情况下,inline-block
内容很难完全设置样式和对齐,尤其是在旧浏览器上。
其他解决方案的快速总结
- 将关闭标签与下一个打开标签放在同一行,它们之间没有空格。
- 使用 HTML 注释填充关闭标记和下一个打开标记之间的所有空白(如 @Arbel 建议的那样)。
- 为每个元素添加负左边距(通常为 -3px 或 -4px,取决于字体大小)。我不推荐这种特殊的方法。
- 将
font-size
容器元素的 设置为 0 或 0.01em。这在 Safari 5 中不起作用(不确定更高版本),并且可能会干扰响应式设计网站或任何font-size
使用px
.
- 使用 JavaScript 或 jQuery 从容器中删除纯空格文本节点。这在 IE8 及更早版本中不起作用,因为当元素之间只有空格时,不会在这些浏览器中创建文本节点,尽管元素之间仍会添加空格。
- 为容器设置
letter-spacing
和word-spacing
(如@PhillipWills 建议的那样)。更多信息。这需要标准化em
网站上的尺寸,这可能不是所有网站的合理选择。
- 添加
text-space-collapse: discard;
到容器(以前称为white-space-collapse
)。不幸的是,这种 CSS3 样式还没有被任何浏览器支持,并且标准还没有完全定义。