2 つの要素を水平方向に並べてスタックする必要がありますdiv
。右側の要素は常にコンテンツに合わせてサイズを自動的に調整し (指定された最大幅まで)、左側の要素は残っているスペースを使用する必要があります。
このようなもの:
これまでのところ問題ありません。div
右を右にフロートさせ、左のオーバーフローを非表示に設定することで、これを行うことができました。
HTML:
<div class="frame">
<div class="right">
I adjust my with to my content but still need to know my boundaries if I'm floated right (max-width)
</div>
<div class="left">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>
</div>
CSS:
.frame {
background-color: lightgreen;
width: 80%;
padding: 12px;
overflow: hidden;
}
.left {
overflow: hidden;
background-color: #709670;
border: 1px solid black;
}
.right {
float: right;
max-width: 200px;
background-color: #127212;
color: white;
border: 1px solid black;
}
課題はdiv
、ページが次のように小さな画面 (または小さなブラウザー ウィンドウなど) に表示されるときに、2 つの s を垂直に積み重ねることです。
基本的に、これは単純なメディアクエリで実行できると思いました:
@media screen and (max-width: 700px) {
.right {
float: none;
max-width: none;
}
}
これに関する唯一の問題は、右div
(コンテンツに応じてサイズが変更されるもの) をマークアップ内で左のものより前に作成して、フローティングを機能させる必要があることです。その結果、「小さい」レイアウトの左の上に表示されます。
以下に実際の例を示します (「小さい」レイアウトと「大きい」レイアウトを切り替えるには、中央のリサイズを使用するだけです): JSFiddle の例
フローティングの代わりにdisplay: table
andを使用してレイアウトを達成しようとしましたが、この方法では、右の列をそのコンテンツと同じ大きさにすることができず、まだ最大幅が設定されています。table-cell