【问题标题】:Weird quirk when re sizing columns with css使用 css 调整列大小时奇怪的怪癖
【发布时间】:2015-03-03 04:28:12
【问题描述】:

我发布了一个较早的问题,关于使列以一种利用视口中最多空间的方式进行换行,对 here。结合一些答案,我想出了以下jfiddle。我将有可变数量的列(2-5)和每列中可变数量的单词。如果您水平调整 jfiddle 窗口的大小,您会注意到中间列使用了视口的三分之一,即使那里几乎没有任何文字,基本上留下空白区域。我不介意使用 jquery/js,但我希望更巧妙地调整列的大小。

我目前的 CSS 是

body {
    padding: 1em;
    display: table;

    width: 100%;
}
div {
    display: table-cell;
        -moz-column-width:7em;
    -webkit-column-width:7em;
    column-width:7em;
}
span {
    display: block;
    width: 5em;
}

body 是容器,div 代表列,span 是每列中的单词。我想不惜一切代价避免的唯一一件事就是让这些列彼此下方。

【问题讨论】:

    标签: html css multiple-columns


    【解决方案1】:

    您的列的行为方式与它们相同,因为它们的大小相同。您有一个 div 样式,因此所有列都应用相同的样式规则,并且(在您的小提琴中)平均共享宽度,每个列获得 1/3 的水平空间。

    B 列中只有 7 个条目意味着它没有到达底部,因此不会像其他内容更多的列一样包裹到 div 内部,因此不能使用额外的空间。

    这并不是“即使那里几乎没有任何单词”的情况,因为“那里几乎没有任何单词” - 没有足够的内容可以根据表格单元格的高度包装到空间中.

    单元格的高度取决于所有三列的内容以及它们的换行方式。因此,无论哪一列的单词最多,都会将其内容包裹起来,直到它在页面上垂直占用一定量的空间。这就是整个表格和所有三列的高度。如果其他两列中的任何一列都没有足够的内容来换行,它们将留下空间。

    例如,如果将 A 列中的单词数加倍,则很容易出现 B 列和 C 列都有“剩余空间”的情况。

    【讨论】:

    • 感谢您的解释,这是有道理的,但是我可以改变什么来考虑可变的列宽,因为我非常想以某种方式摆脱空白......
    • 您需要找到单词数最少的列,并在渲染到标记时添加一个“最少”类。然后,您可以运行一些脚本来检查浏览器的宽度,并将 $('.least') 的宽度设置为 5em(当只能容纳一列时),10em(当您可以容纳两列时),依此类推。
    • 您可以使用 body { padding: 1em;显示:表格;边框折叠:折叠;宽度:100%; } div { 显示:表格单元格; -moz 列宽:7em; -webkit-column-width:7em;列宽:7em; } 跨度 { 显示:块;空白:nowrap;文本对齐:居中; } .least { 宽度:10em; }
    • 谢谢,我会尝试这样做,但我的列是可变的,因为它们来自数据库,而且我一次输出一列。有什么方法可以实时进行计算吗?
    • 一次从数据库中获取它们的列,即多个请求并不是很有效。您可以同时获得它们,编写一个 proc 或 union 来做到这一点(一口气)。然后,您可以预先获得计数并处理您的数据。如果您不想切换到单次读取,那么您需要跟踪哪个是最小值,然后将其添加到匹配 nth-child(col) 的跨度,然后 .addClass('least')
    猜你喜欢
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2011-03-17
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多