我有以下代码来使用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>