我有一个带有几个英文句子的 HTML 表单,每行显示一个句子。在每个句子的中间都有一个<select>
下拉菜单,它的左右边缘需要跨多行对齐以使其看起来更干净:
<div class="row">
<div class="column col1"> <p> Choose something: </p> </div>
<div class="column col2"> <select name="dropdown"> ... options ... </select> </div>
<div class="column col3"> <p> and finish the sentence.</p> </div>
</div>
<div class="row">
<div class="column col1"> <p> Choose something else: </p> </div>
<div class="column col2"> <select name="dropdown2"> ... options ... </select> </div>
<div class="column col3"> <p> and finish another sentence.</p> </div>
</div>
<div class="row">
<div class="column col1"> <p> Choose last thing: </p> </div>
<div class="column col2"> <select name="dropdown3"> ... options ... </select> </div>
<div class="column col3">
<p>
and all dropdowns should be left- and right-aligned if
there is space. This longer third column should get broken
onto a second line below the second dropdown if it can't fit
immediately to the right of the other two.
</p>
</div>
</div>
但是它是一个响应式布局,我只想固定中间列的宽度,并根据以下设计标准让第 1 列和第 3 列自动扩展/收缩:
column
每个中尽可能多的元素row
应并排放置,具体取决于视口宽度。col2
尽可能多的元素应该左对齐。
在上面,第一个优先于第二个;换句话说,如果我们从一个足够宽的浏览器视口开始,以适应这两个标准:
- 随着浏览器视口宽度的减小,第一个缩小的宽度应该是第三列,保持
col2
对齐并保持所有三个column
元素并排。 - 如果将第 3 列缩小到其最小宽度还不够,则第 1 列应该开始缩小,这会在某些时候破坏对齐,但仍使元素并排。
- 如果这还不够,
col3
任何行中仍然太宽的整个块都应该移到col1
andcol2
块下方。Now不再与andcol3
并列,但这种牺牲意味着我们可以恢复对齐。(此时's将防止句子开头和下拉列表之间出现不希望的间隙。)col1
col2
col2
col1
max-width
根据前两条规则,显然任何使用百分比的方法都行不通。大概是由于第三条规则,任何使用的东西<table>
都不起作用。
可以假定任何边距/填充是固定的。 会破坏英文句子,因此元素overflow: hidden
不能有高度限制。<p>
我已经阅读了无数 HTML/CSS 文章和 SO 问题,但到目前为止还没有找到任何解释如何实现这一点的东西。这是您可以尝试的起点:
涉及 HTML5 或 CSS 中更新功能的解决方案比基于 JavaScript 的 hack 更受欢迎。解决方案可以更改 HTML,尽管我很想知道是否只能通过 CSS 实现。谢谢!