CSS:将具有长单元格内容的表格约束到页面宽度?

前端之家收集整理的这篇文章主要介绍了CSS:将具有长单元格内容的表格约束到页面宽度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
采用以下CSS HTML:
<style>
    div.stuff {
        overflow: hidden;
        width: 100%;
        white-space: nowrap;
    }
    table { width: 100%; }
    td { border: 1px dotted black; }
</style>

<table>
    <tr><td>
        <div class='stuff'>Long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text</div>
    </td></tr>
</table>

这会导致表增长以容纳整个长文本. (使浏览器窗口变小,看是否有很大的屏幕分辨率.)

添加了宽度:100%和溢出:隐藏,表示长文本应该被剪掉,但似乎忽略了这一点.如何约束表/表格单元格/ div,使表格的宽度不超过文档的宽度?

(请不要评论使用表格的优点.我确实在显示表格数据,因此表格的使用在语义上是正确的.另外请不要质疑切断文本的用户友好性;那里实际上是一个“扩展”按钮,允许用户查看完整的内容.谢谢!)

(编辑:我也尝试了最大宽度,无济于事.)

解决方法

要实现这一点,您必须将长文本包装成两个div.外部的位置是相对的,只包含内部的位置.内部的位置:绝对,溢出:隐藏,宽度:100%(这会将其约束为表格单元格的大小).

表格布局算法现在将这些表格单元格视为空(因为绝对定位的元素从布局计算中排除).因此,无论如何,我们必须告诉它增长该列.有趣的是,在相关的< col>上设置宽度:100%.元素工作,从它实际上不填充100%的宽度,但100%减去所有其他列(自动大小)的宽度.它还需要一个vertical-align:top,否则(空)外部div对齐中间,所以绝对定位的元素将偏离半行.

这是一个完整的示例,其中包含一个三列,两行表,显示了这一点:

CSS:

div.outer {
    position: relative;
}
div.inner {
    overflow: hidden;
    white-space: nowrap;
    position: absolute;
    width: 100%;
}
table {
    width: 100%;
    border-collapse: collapse;
}
td {
    border: 1px dotted black;
    vertical-align: top;
}
col.fill-the-rest { width: 100%; }

HTML:

<table>
    <col><col><col class="fill-the-rest">
    <tr>
        <td>foo</td>
        <td>fooofooooofooooo</td>
        <td>
            <div class='outer'>
                <div class='inner'>
                    Long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text
                </div>
            </div>
        </td>
    </tr>
    <tr>
        <td>barbarbarbarbar</td>
        <td>bar</td>
        <td>
            <div class='outer'>
                <div class='inner'>
                    Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text
                </div>
            </div>
        </td>
    </tr>
</table>

在这个例子中,前两列将具有最小可能的大小(即空格将使它们包裹很多,除非你还添加了white-space:nowrap).

jsFiddle:http://jsfiddle.net/jLX4q/

原文链接:https://www.f2er.com/css/218005.html

猜你在找的CSS相关文章