【发布时间】:2020-08-21 01:45:09
【问题描述】:
我想在我的 Web 表单上使用 flex display 属性,以便让两个文本字段并排并自动增长以填充空间。我选择在表格布局上使用 flex,因为我希望它们在窗口缩小时移动到自己的行。
我相信我误解了如何使用 flexbox。
以下是我到目前为止的工作(为在此处发布而进行了简化)。我使用一个字段集作为 flex 父级,并且每个应该并排“增长”的表单元素都封装在一个 div 中(设置为display: inline,因此它们可以在同一行)。我还有一个字段集的图例,设置为display:block 和width:100%,这样它就可以单独一行了。
fieldset {
display: flex;
flex-direction: row;
justify-content: space-between;
border: none;
}
label {
display: none;
}
legend {
display: block;
width: 100%;
}
fieldset > div {
display: inline;
flex: 1 1 auto;
}
input {
width: 100%;
}
<form>
<fieldset>
<legend>These are Text Fields</legend>
<div>
<input type="text" id="text1">
<label for="text1">Text Field</label>
</div>
<div>
<input type="text" id="text2">
<label for="text2">More Text</label>
</div>
</fieldset>
</form>
如您所见,每个 div 都在自己的行中(尽管有 display: inline 和 flexbox 的东西)。如果为 div 元素添加边框,您会看到它们现在是 100% 宽度;但即使您手动定义宽度(例如 30%),它们也会保持在自己的行上。
如何使用 flex 并排显示 div 并允许它们缩放以填充父级的宽度?
【问题讨论】:
-
见bugzilla.mozilla.org/show_bug.cgi?id=949476 和code.google.com/p/chromium/issues/detail?id=262679 简单来说,
fieldset有一个不能被覆盖的专用渲染器。 -
@GabyakaG.Petrioli 谢谢。我在最初的搜索中没有发现这个问题——我不怀疑它是一个固有的字段集。