【发布时间】:2018-12-02 14:07:18
【问题描述】:
我有以下 HTML 与有效的 table 对齐表单:
<div id="one">
<p>
<label for="a">a</label> <input type="text" id="a">
</p>
<p class="h">
<label for="b">bbbbbb</label> <input type="text" id="b">
</p>
</div>
使用以下 CSS:
#one {
display: table;
width: auto;
}
p {
display: table-row;
}
p label, p input {
display: table-cell;
}
#one 是自动计算的宽度,labels 和 inputs 的宽度未知。我想要对齐表单的功能,但是将类 h 添加到他们的行中然后删除,为其他元素垂直腾出空间,但不改变 #one 的宽度,因为它应该位于其他元素旁边自动计算宽度。
CSS3 中的.h 定义会给我的“表格行” (p) 高度等于 0 还是在不改变其父级宽度的情况下以其他方式在视觉上删除它?如果需要,我可以更改 HTML,但我想找到一个不使用 JS 的解决方案。
visibility: hidden 不会垂直删除它,height: 0 不起作用(可能是因为它是table-row),而display: none 不起作用,因为它将有效宽度更改为 0。我想要我的 @ 987654337@ 保持相同的宽度。将display: block !important 与height: 0 结合使用部分可行,但会留下一个奇怪的垂直空间(并且block 不应该是table 的子级)。
我正在搜索的内容类似于this SO question,但我正在搜索纯 CSS 解决方案,并且不固定表格宽度。
你可以在这里玩它:JSFiddle。
【问题讨论】:
-
这真的非常令人困惑。甚至 jsfiddle 也无济于事。我想我可能对您要实现的目标有所了解,但有几个问题:1.绝对有必要使用“css table”吗? 2.你有没有
#one的优先宽度(你从来没有设置过)? 3. 你对 HTML 有任何控制权吗?整个结构的最终视觉目标是什么——即:您希望桌子看起来如何? -
#one的宽度应该是auto。没有必要使用 css 表,但这是因为我在我的项目中拥有它,我不想依赖各种table的默认值 - 我只想在不知道其宽度的情况下对齐表单(以及表单旁边是未知宽度的其他东西)。我可以控制 HTML。视觉目标是当p获得h类然后它消失,为其他东西垂直腾出空间,但不会触发表单宽度的变化。我会相应地更新问题。 -
如果你没有在任何地方设置 any 元素的宽度,并且宽度是自动的,我想不出删除
.h的方法'不影响#one的宽度。事实上,它正在将宽度恢复到#one'soriginal 状态!.h更宽,整个表格在存在/可见时会适应它的宽度。width: auto完全按照它应该做的方式 - 它正在适应内容。我的意思是,请求自相矛盾,你不觉得吗?
标签: css css-tables