【发布时间】:2017-07-10 02:44:33
【问题描述】:
下面的示例 sn-p 生成如下布局:
这里的问题是当青色内容太宽时,它会增加父 div 的大小,但我想要发生的是它减小左下 div 的宽度,结果是这样的:
左下角的输入在一个表格中,特别是:
- 选择输入包含一个长选项,因此它的默认大小相当宽,并且
- 文本框输入默认大小只是...宽。
这都是使用弹性布局。我想通过仅缩小输入的宽度来缩小左下角(标签列应该保持不变)。
有没有办法可以限制输入大小,使下半部分的总宽度永远不会超过上半部分的总宽度(黄色)?基本上我希望整个东西是黄色框的宽度,如果右下角太宽,左下角的 div 会缩小。
我确实不提前知道黄色/蓝色内容的大小,它们都是动态生成的。我所知道的是黄色的足够宽,可以舒适地容纳底部的所有东西,假设我可以稍微缩小输入。
如果需要,我愿意用 flex div 替换该表格,只是表格更容易为下面的表格布局。
var state = true;
window.setInterval(function () {
document.getElementById('example-stuff2').style.width = (state ? '10px' : '100px');
state = !state;
}, 2000);
div { border: 1px solid red; }
#content, #panel, #bottom { display: flex; }
#content, #panel { flex-direction: column; }
#content { align-items: center; }
#bottom-right { flex-grow: 1; }
/* Example placeholders for content of unknown size. */
span { display: inline-block; }
#example-stuff1 { background: yellow; width: 300px; height: 120px; }
#example-stuff2 { background: cyan; width: 100px; height: 10px; }
<div id="content">
<div id="panel">
<div id="top"><span id="example-stuff1"></span></div>
<div id="bottom">
<div id="bottom-left">
<table>
<tr><td>Label:
<td>
<select>
<option>Option 1</option>
<option>Option 2 is a pretty long one</option>
<option>Option 3</option>
</select>
<tr><td>Label:
<td><input type="textbox" value="example">
</table>
</div>
<div id="bottom-right"><span id="example-stuff2"></span></div>
</div>
</div>
</div>
(注意:青色部分的宽度提前是未知的,但是一旦页面被渲染它就不会改变(不像sn-p)。它可能很窄(在这种情况下一切都适合)或者可能有点太宽(在这种情况下我会遇到需要缩小输入的问题)。sn-p 中的动画只是为了说明这个问题的两种情况,实际上青色内容是在提供页面时确定的并保持这种状态。)
【问题讨论】:
-
你正在使用 flex,所以它会这样。
-
@LKG 我也对非 flex 的替代品持开放态度,只是 flex 在大多数情况下可以让网站上的所有其他内容保持简单。
-
所以你需要青色部分宽度有一个固定的宽度?
-
@LKG 青色部分的宽度提前是未知的,但它一旦页面被渲染就不会改变(不像sn-p)。它可能很窄(在这种情况下一切都适合)或者它可能有点太宽(在这种情况下我遇到了需要缩小输入的问题)。 sn-p 中的动画只是为了说明这两种情况,实际上青色内容是在页面被提供并保持这种方式时确定的。