divに残りの幅を埋めさせるにはどうすればよいですか?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
どうすればdiv2
残りを埋めることができますか?
divに残りの幅を埋めさせるにはどうすればよいですか?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
どうすればdiv2
残りを埋めることができますか?
回答:
次のようなものを試してください。
<style>
#divMain { width: 500px; }
#left-div { width: 100px; float: left; background-color: #fcc; }
#middle-div { margin-left: 100px; margin-right: 100px; background-color: #cfc; }
#right-div { width: 100px; float: right; background-color: #ccf; }
</style>
<div id="divMain">
<div id="left-div">
left div
</div>
<div id="right-div">
right div
</div>
<div id="middle-div">
middle div<br />bit taller
</div>
</div>
divは当然コンテナの100%の幅を占めます。この幅を明示的に設定する必要はありません。2つのサイドdivと同じように左右のマージンを追加することにより、それ自体のコンテンツがそれらの間に配置されます。
HTMLでは「middlediv」が「rightdiv」の後に続くことに注意してください
このソリューションは、によって提供されるソリューションよりもさらに単純ですLeigh
。それは実際にそれに基づいています。
ここで、中央の要素(この場合は"content__middle"
クラスあり)には、寸法プロパティが指定されておらず、幅、パディング、マージン関連のプロパティがまったく指定されておらず、overflow: auto;
(注1を参照)のみであることがわかります。
大きな利点は、左右の要素にamax-width
とamin-width
を指定できることです。これは流動的なレイアウトに最適です..したがってレスポンシブレイアウト:-)
注1:クラスにmargin-left
&margin-right
プロパティを追加する必要があるLeighの回答と比較してください"content__middle"
。
ここでは、左右の要素(クラス"content__left"
と"content__right"
)の幅が固定されています(ピクセル単位)。したがって、非流体レイアウトと呼ばれます。
http://jsbin.com/qukocefudusu/1/edit?html,css,outputのライブデモ
<style>
/*
* [1] & [3] "floats" makes the 2 divs align themselves respectively right & left
* [2] "overflow: auto;" makes this div take the remaining width
*/
.content {
width: 100%;
}
.content__left {
width: 100px;
float: left; /* [1] */
background-color: #fcc;
}
.content__middle {
background-color: #cfc;
overflow: auto; /* [2] */
}
.content__right {
width: 100px;
float: right; /* [3] */
background-color: #ccf;
}
</style>
<div class="content">
<div class="content__left">
left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>
</div>
<div class="content__right">
right div<br/>right div<br/>right div<br/>right div<br/>
</div>
<div class="content__middle">
middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller
</div>
</div>
ここで、左右の要素(クラス"content__left"
と"content__right"
)の幅は可変です(パーセンテージ)ですが、最小幅と最大幅もあります。したがって、流動レイアウトと呼ばれます。
max-width
プロパティhttp://jsbin.com/runahoremuwu/1/edit?html,css,outputを使用した流動的なレイアウトのライブデモ
<style>
/*
* [1] & [3] "floats" makes the 2 divs align themselves respectively right & left
* [2] "overflow: auto;" makes this div take the remaining width
*/
.content {
width: 100%;
}
.content__left {
width: 20%;
max-width: 170px;
min-width: 40px;
float: left; /* [1] */
background-color: #fcc;
}
.content__middle {
background-color: #cfc;
overflow: auto; /* [2] */
}
.content__right {
width: 20%;
max-width: 250px;
min-width: 80px;
float: right; /* [3] */
background-color: #ccf;
}
</style>
<div class="content">
<div class="content__left">
max-width of 170px & min-width of 40px<br />left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>
</div>
<div class="content__right">
max-width of 250px & min-width of 80px<br />right div<br/>right div<br/>right div<br/>right div<br/>
</div>
<div class="content__middle">
middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller
</div>
</div>
次のWebブラウザのBrowserStack.comでテストされています。
overflow
は、ブロックフォーマットコンテキストを作成するためですか?うdisplay: flex
同じ効果がありますか?
overflow-y: hidden
)の幅がセット、Bであることを許さ)それとして最高のブラウザのサポートおよびCを持っている)テーブルではなかった
フレックスボックスは解決策です-そしてそれらは素晴らしいです。私は10年の間cssからこのようなものを望んでいました。必要なのはdisplay: flex
、「メイン」のスタイルに追加することだけですflex-grow: 100
(100は任意ですが、正確に100である必要はありません)。このスタイルを追加してみてください(効果を表示するために色を追加します):
<style>
#Main {
background-color: lightgray;
display: flex;
}
#div1 {
border: 1px solid green;
height: 50px;
display: inline-flex;
}
#div2 {
border: 1px solid blue;
height: 50px;
display: inline-flex;
flex-grow: 100;
}
#div3 {
border: 1px solid orange;
height: 50px;
display: inline-flex;
}
</style>
フレックスボックスの詳細については、https://css-tricks.com/snippets/css/a-guide-to-flexbox/をご覧ください。
これを実現するには、CSSFlexbox flex-grow
プロパティを使用します。
.main {
display: flex;
}
.col-1, .col-3 {
width: 100px;
}
.col-2 {
flex-grow: 1;
}
<div class="main">
<div class="col-1" style="background: #fc9;">Left column</div>
<div class="col-2" style="background: #eee;">Middle column</div>
<div class="col-3" style="background: #fc9;">Right column</div>
</div>
bit
回答の投稿は遅れていますが、マージンを使用しない別のアプローチがあります。
<style>
#divMain { width: 500px; }
#div1 { width: 100px; float: left; background-color: #fcc; }
#div2 { overflow:hidden; background-color: #cfc; }
#div3 { width: 100px; float: right; background-color: #ccf; }
</style>
<div id="divMain">
<div id="div1">
div 1
</div>
<div id="div3">
div 3
</div>
<div id="div2">
div 2<br />bit taller
</div>
</div>
残りのスペースを取る必要があるDivはクラスである必要があります。他のdivはid(s)にすることができますが、幅が必要です。
CSS:
#main_center {
width:1000px;
height:100px;
padding:0px 0px;
margin:0px auto;
display:block;
}
#left {
width:200px;
height:100px;
padding:0px 0px;
margin:0px auto;
background:#c6f5c6;
float:left;
}
.right {
height:100px;
padding:0px 0px;
margin:0px auto;
overflow:hidden;
background:#000fff;
}
.clear {
clear:both;
}
HTML:
<body>
<div id="main_center">
<div id="left"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
</body>
次のリンクには、残りのエリアカバレッジの問題を解決するコードが実行されています。
反対の問題の解決策を探していました。中央に固定幅のdivが必要で、両側に流体幅のdivが必要だったので、次のことを思いつき、誰かが必要になった場合に備えてここに投稿すると思いました。
#wrapper {
clear: both;
width: 100%;
}
#wrapper div {
display: inline-block;
height: 500px;
}
#center {
background-color: green;
margin: 0 auto;
overflow: auto;
width: 500px;
}
#left {
float: left;
}
#right {
float: right;
}
.fluid {
background-color: yellow;
width: calc(50% - 250px);
}
<div id="wrapper">
<div id="center">
This is fixed width in the centre
</div>
<div id="left" class="fluid">
This is fluid width on the left
</div>
<div id="right" class="fluid">
This is fluid width on the right
</div>
</div>
#center
要素の幅を変更する場合は、のwidthプロパティを次の.fluid
ように更新する必要があります。
width: calc(50% - [half of center width]px);