宽度为 25% 的四个节点不适合彼此相邻?

Posted

技术标签:

【中文标题】宽度为 25% 的四个节点不适合彼此相邻?【英文标题】:Four nodes with a width of 25% don't fit next to each other? 【发布时间】:2010-09-25 22:41:48 【问题描述】:

我有一个头节点,其中有四个子节点。 没有边框,填充或边距。 四个都有宽度:25%; css 规则。 在 Opera 中它工作得很好,在 IE 中,最后一个块有时会根据窗口的宽度翻转到下一行。

我可以通过给一个块设置 24.8% 的宽度来解决这个问题,但 Opera 将其解释为 24%,因此在块的末端留下了 1% 的宽阔间隙。

我该如何解决这个问题?最后一个块错过右边的一个像素是可以的。

【问题讨论】:

【参考方案1】:

http://ejohn.org/blog/sub-pixel-problems-in-css/

不幸的是,这在 CSS 世界中是一个众所周知的问题。可能的问题是这些适合的 100% 像素等效是奇数,因此在计算像素时存在舍入误差。

通常我通过使用特定于 IE 的选择器来解决这个问题。 Rob 建议使用特定于浏览器的样式表,但我总是发现这种行为很难维护,并且需要从浏览器加载额外的 HTTP。我也讨厌 CSS hack,但你可以在声明适当的宽度后尝试著名的 #width:24.9%(例如 width:25%; #width:24.9%; )。希望如果 IE 在未来的版本中修复了这个 hack,它也会与舍入问题一起出现。

另外,如果你知道父元素的像素宽度,你可以确保它可以被 4 整除。但如果这是一个流动的布局,那不是一个选择。

【讨论】:

谢谢,我确实找到了一些记录问题的材料。而且似乎还没有真正的解决方案:s 此外,Opera 忽略小数百分比的事实使其更加困难。我喜欢我的歌剧,但这真的很糟糕。【参考方案2】:

您可能只想根据浏览器加载不同的样式表。您可以在标头中使用一些 javascript 来做到这一点。

【讨论】:

我发现网站开始要求 JS 处理琐碎的事情是一个可悲的趋势。我可以在没有 JS 的情况下有条件地加载它们。这确实是一个解决方案。不是最好的,但可以作为最后的手段。【参考方案3】:

这取决于使用的舍入算法。如果您有许多像素可以被 4 整除,那么您就不会有问题,因为不存在舍入问题。如果你没有那个,那么有时你会得到太多的像素,因为宽度被四舍五入了。

总宽度:800
25% 宽度:200
四个 25% 的区块:800
总宽度:799
25% 宽度:199.75
四个并排的块:796 或 800

800 宽度对 799 宽度的窗口将下拉。

【讨论】:

百分比的整个概念是流畅的布局。所以限制我的宽度会使百分比变得多余。

以上是关于宽度为 25% 的四个节点不适合彼此相邻?的主要内容,如果未能解决你的问题,请参考以下文章

Android布局权重是怎样的

元素大小合适,但是却莫名掉下去了为什么?关于margin的解释之一

如何将图像彼此对齐,以使它们沿页面宽度均匀分布? [关闭]

具有比例宽度和文本驱动高度的动态 UILabel

使用可拖动事件增加 div 的宽度,并排显示

如何使用 flexbox 制作四个基于视口的盒子?