【问题标题】:Make div take all space left after another div让 div 在另一个 div 之后占用所有空间
【发布时间】:2013-03-19 06:08:12
【问题描述】:

我有两个并排的 div。第一个包含一个相当长的文本字段,另一个包含一个很短的数字。

我需要第一个 div 占据所有可用空间,而无需拉伸父级并在必要时进行剪辑。 Ant 它应该考虑第二个 div 的宽度。所以如果文本的长度很短,那么两个div应该并排,但是如果文本很长,那么第一个会被剪掉,第二个会被一直推到右边。

这是大概的表格布局:

<div id="container">
    <div id="row">
        <span id="text">Short text</span><span id="value">123</span>
    </div>

    <div id="row">
        <span id="text">A bit longer text</span><span id="value">555</span>
    </div>

    <div id="row">
        <span id="text">A very very very very very very very very long text</span><span id="value">555</span>
    </div>
</div>

以及对应的CSS:

#container {
    border: 1px solid #000000;
    width: 300px;
}

#row {
    display: inline-block;
    border: 1px solid #000077;
    width: 100%;
    clear: both;
}

#text {
    display: inline-block;
    border: 1px solid #007700;
}

#value {
    display: inline-block;
    border: 1px solid #770000;
}

这是一个jsfiddle 模板,说明了我需要什么。 一个很长的文本行应该被剪掉,555应该放在它旁边的同一行,这样整个结构就适合指定的300px(数字是任意的,它将由现实生活中的其他元素定义,事先不知道) )。

【问题讨论】:

  • ID 必须是唯一的,你需要使用类来代替。
  • 你问的是CSS overflow property吗?
  • 数字总是3位数还是可以变化?
  • Ids 不是唯一的,因为它只是一个说明,实际代码使用类。
  • 数字可以是 1 到 6 位数字

标签: css html


【解决方案1】:

您可以使用display: table (Fiddle):

#container {
    display: table;
}

#row {
    display: table-row;
}

#text {
    display: table-cell;
}

#value {
    display: table-cell;
}

【讨论】:

  • 效果很好,但我不会使用display:table,而是使用一张桌子。
  • @Kraz,也可以,但要实际使用&lt;table/&gt;,您需要执行更多服务器端代码以将其放入列和行中。
  • 嗯...不是吗? exactly the same mark upspan 变成 tddiv 变成 tr#containertable
  • @Kraz,哈哈!我只是混淆了我的两个答案。 ;-) 对不起,你是对的,这是需要重新格式化代码的另一种情况。没关系。
  • 我需要较短的字符串旁边有数字,而不是在一列的右边。
【解决方案2】:

鉴于您有多个带有id="text" 的元素,我只是将样式内联。设置一个max-width,定义一个height,并一直设置overflow:hidden,而floating它们都离开了。您可能必须在行之间使用空白的clear-both div。

<div id="text" style="overflow:hidden; float:left; max-width:270px; height:22px;">A very very very very very very very very long text</div><div style="float:left;" id="value">555</div>

【讨论】:

  • 格式应该适应用户的字体设置,我不能使用绝对像素值。
【解决方案3】:

Demo Fiddle

#text {
    display: inline-block;
    border: 1px solid #007700;
    float:left;
    min-width:80%;
    max-width:80%;
}

#value {
    display: inline-block;
    border: 1px solid #770000;
    float:left;
    max-width:18%;
    overflow:hidden;
}

【讨论】:

  • 您可能应该在#value 上添加max-width:18%(可能会溢出?)
  • 我不知道确切的百分比值,数字可以是 1 到 6 位数字。通过“保留”最多 6 位数来浪费空间是一种耻辱。