【问题标题】:Set width of table cell relative to other cell in column设置表格单元格相对于列中其他单元格的宽度
【发布时间】:2014-10-02 16:28:44
【问题描述】:

这是基本设置:

<table>
    <tr>
        <td id="short">A medium width cell.</td>
    </tr>
    <tr>
        <td id="long" style="overflow: hidden; text-overflow: ellipsis;">A long long long long long long cell.</td>
    </tr>
</table>

(另见http://jsfiddle.net/vp1rzrnt/。)

我想实现第二个表格行中的#long 单元格不会在#short 单元格上扩展其宽度,而只是被切断。

不幸的是,像我一样设置overflow: hidden 并不能解决问题。

编辑

而且我无法设置固定宽度,因为内容是动态的。

编辑 2

理想情况下,我希望能够仍然使用text-overflow: ellipsis; 功能来发出切割信号。

【问题讨论】:

  • 单行 jQuery 解决方案你还可以吗?
  • 从未使用过 jQuery。但我想我可以用 JavaScript 重写它。但是,理想情况下,我只想依赖 css ......但这可能是不可能的。也就是说:我很高兴有任何解决方案。
  • 我已经把 jQuery 和 js 解决方案都放了

标签: html css width html-table


【解决方案1】:

这只是 css 解决方案。

GCyrillus[Soln] 和 my[Soln] 以前的解决方案的混合。

jsFiddle:http://jsfiddle.net/vp1rzrnt/8/

更新:

td {
    border: solid;
    display:block;
}
#short, #long {
    width:100%;
}
#long {
    margin-right:-1000px;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
}

html : 没有额外的标签

<table>
    <tr>
        <td id="short">A medium width cell.</td>
    </tr>
    <tr>
        <td id="long">A long long long long long long cell.</td>
    </tr>
</table>

【讨论】:

  • 如果您将td 设置为display: block,则不需要td 中的其他HTML 标记和ID
  • 对我来说似乎很完美!谢谢。
  • @Vector 谢谢。我加了。
  • @thecbuilder:现在单元格右侧有额外的空间。我不知道它来自哪里,但我更喜欢带有p 标签的版本而不是没有标签的版本。
  • #did you add width:100% to both #long and #short as in the new css?
【解决方案2】:

使用 td 内容的包装器,您实际上可以减小其宽度。DEMO

HTML 包装

<td id="long" style="overflow: hidden;"><p>A long long long long long long cell.</p></td>

CSS

tr + tr td p{
    margin:0;
    margin-right:-1000px;/* hudge negative margin to reduce virtually width to  nothing*/
}

溢出的内容将无法访问:(

【讨论】:

  • 好把戏。不幸的是,我现在看到使用溢出对我来说比我意识到的更重要。例如,我想使用text-overflow: ellipsis;。如果我没看错,您的解决方案也会丢失此功能。
【解决方案3】:

这是一个快速的 jQuery 解决方案:http://jsfiddle.net/vp1rzrnt/3/

$(function(){$("#long").width($("#short span").width());});

js 中类似的东西:http://jsfiddle.net/vp1rzrnt/2/

long.style.width = s_span.offsetWidth + "px";

html 的小改动:(添加 &lt;span&gt;

<table>
    <tr>
        <td id="short"><span id="s_span">A medium width cell.</span></td>
    </tr>
    <tr>
        <td id="long">A long long long long long long cell.</td>
    </tr>
</table>


对于text-overflow:ellipsis;http://jsfiddle.net/vp1rzrnt/5/

html

<table>
    <tr>
        <td id="short"><span id="s_span">A medium width cell.</span>
        </td>
    </tr>
    <tr>
        <td id="long">
            <p id="long_p">A long long long long long long cell.</p>
        </td>
    </tr>
</table>

css

td {
    border: solid;
}
#long_p {
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
    padding:0;
    margin:0;
}

jQuery

$("#long_p").width($("#s_span").width());

【讨论】:

  • 感谢您的评论。不幸的是,文本不是“只是切断”,而是被分成新的行。此外,还有一些不错的 CSS 功能,例如text-overflow: ellipsis;,迷失在这个解决方案中。
  • 太棒了!这似乎可以解决问题。我想我将不得不依靠 JS 来完成这项工作。这个任务对于纯 CSS 来说似乎太棘手了,尽管 with 应该保持原样,单元格中没有内容......
猜你喜欢
  • 2014-01-06
  • 2017-11-26
  • 2019-11-16
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2017-03-02
相关资源
最近更新 更多