不要在网页中呈现html格式的空白


Do not render html formatting whitespace in the webpage

我有以下代码来使用cakepp的助手生成一些跨度

<div id="numberRow">
    <?php echo $this->Paginator->numbers(array('class' => 'numbers', 'separator' => '', 'before' => '', 'after' => '', 'first' => 1, 'last' => 1)); ?>
</div>

这会生成以下代码:

<div id="numberRow">
    <span class="current">1</span><span><a href="/posts/show/barter/page:2" class="numbers">2</a></span>
</div>

问题是浏览器在<span>之后渲染了一个我不想要的空间。

到目前为止,我的解决方案是将蛋糕写如下:

<div id="numberRow">
            <span class="current">1</span><span><a href="/posts/show/barter/page:2" class="numbers">2</a></span></div>

结束标记与<span>位于同一行,但这会破坏格式并使源更难读取。

有更好的方法吗?

好消息!有一种CSS样式就是为了解决这个确切的问题。它被称为white-space-collapse,在样式表中是这样的:

#numberRow {white-space-collapse: discard;}

在支持它的浏览器中,如果<div>中的标签周围没有任何其他字符,这将导致标签之间的空白被删除。

现在是坏消息。。。目前还没有一个浏览器支持它(

移动速度更快的浏览器可能很快就会支持它——我敢打赌,它至少会在今年年底出现在Chrome中——但这还不足以让它在未来一段时间内值得使用。

同时,这也是困扰许多网站设计者的一个常见问题。

根据您在问题中给出的示例,最常见的解决方案只是从源代码中删除空白。这并不理想,但它确实解决了问题,而且没有任何混乱的技巧。

如果你决心保持源代码的整洁(或者由于你使用的框架或其他原因,你根本无法避免),还有一些更棘手的解决方案:

首先是在页面加载时使用Javascript字符串替换来修剪不需要的空格。这很混乱,但确实有效,除非在极少数情况下用户禁用了javascript。您可能会遇到一些页面刷新问题,因为它首先用一个布局加载,然后立即将自己重新同步到正确的布局,但这可能是最小的(取决于浏览器速度和问题的规模)。

一个更混乱的解决方案,但无疑是一个聪明的破解方法,是为父元素(在您的情况下,为<div>)设置font-size:0;,然后将font-size设置回内容元素的正确大小。例如:

#numberRow {font-size:0;}
#numberRow>span {font-size:12px;}

(当然,用你想要的任何大小替换"12px")

这样做的缺点是:首先,这是一个可怕的黑客攻击;其次,这是一次可怕的黑客攻击;第三,如果你使用基于em的字体布局,而不是固定像素大小的字体,这可能会使你的字体大小难以控制。但它确实有效。

总而言之,我的建议是使用简单的答案,并删除PHP代码中的空格。至少在大多数人的浏览器中都有合适的CSS解决方案之前。

希望能有所帮助。

你能这么做吗?

<div id="numberRow"><?php echo $this->Paginator->numbers(array('class' => 'numbers', 'separator' => '', 'before' => '', 'after' => '', 'first' => 1, 'last' => 1)); ?></div>