行ごとに 1 つの文として視覚的に表示される、いくつかの英語の文を含む 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
要素を左揃えにする必要があります。
上記では、1 番目が 2 番目に優先されます。言い換えれば、両方の基準に対応するのに十分な幅のブラウザー ビューポートから始めると、次のようになります。
- ブラウザのビューポートの幅が縮小されると、縮小する最初の幅は 3 列目になり、
col2
配置が保持され、3 つの要素がすべてcolumn
横並びで保持されます。 - 3 番目の列を最小幅に縮小するだけでは不十分な場合は、1 番目の列が縮小を開始する必要があります。これにより、ある時点で配置が崩れますが、要素は横並びのままになります。
- それでも十分でない場合は、
col3
幅が広すぎる行内のブロック全体col1
を andcol2
ブロックの下に移動する必要があります。はもはや ととcol3
並んでいるわけではありませんが、この犠牲は、整列を復元できることを意味します。(この時点で は、文の先頭とドロップダウンの間の望ましくないギャップを防ぎます。)col1
col2
col2
col1
max-width
最初の 2 つのルールに基づくと、パーセンテージを使用するものは明らかに機能しません。そして、おそらく 3 番目の規則により、 を使用<table>
するものも機能しません。
マージン/パディングは固定されていると見なすことができます。 は英語の文を壊してしまうため、要素overflow: hidden
に高さ制限を設けることはできません。<p>
無数の HTML/CSS の記事と SO の質問に目を通しましたが、これまでのところ、これを達成する方法を説明するものは何も見つかりませんでした。ここから始めて、いろいろと試してみてください。
CSS の HTML5 またはそれ以降の機能を含むソリューションは、JavaScript ベースのハックよりもはるかに好まれます。ソリューションが HTML を変更することは問題ありませんが、それが CSS のみで可能かどうか知りたいです。ありがとう!