2つのdiv、1つは固定幅、もう1つは残り


97

2つのdivコンテナーがあります。

1つは特定の幅にする必要がありますが、他のdivが残りのスペースを占めるように調整する必要があります。これを行う方法はありますか?

.left {
    float: left;
    width: 83%;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    margin-right: 10px;
    overflow: auto;
}

.right {
    float: right;
    width: 16%;
    text-align: right;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    height: 100%;
    overflow: auto;
}
<div class="left"></div>
<div class="right"></div> <!-- needs to be 250px -->


4
10年前のハックを古代のブラウザに使用しないでください。最新のフレックスボックスソリューションにスクロールダウンします。
エフゲニー

1
Evgenyのリンクをたどる前に、ユーザーが実際に使用したいブラウザではなく、ユーザーが実際に使用したいブラウザを検討してください。Flexboxは教授のIE 9でうまくレンダリングされません。caniuse.com

@duhaime IE9のグローバル使用率は0.13%
Evgeny

つまり、1000ユーザーに1人...
duhaime 2018年

回答:


127

参照: http : //jsfiddle.net/SpSjL/ (ブラウザの幅を調整)

HTML:

<div class="right"></div>
<div class="left"></div>

CSS:

.left {
    overflow: hidden;
    min-height: 50px;
    border: 2px dashed #f0f;
}

.right {
    float: right;
    width: 250px;
    min-height: 50px;
    margin-left: 10px;
    border: 2px dashed #00f;
}

を使用してこれを行うこともできますdisplay: table。これは通常、より優れたアプローチです。どのようにして、ラベルと同じ行に入力要素を配置できますか?


4
うまくいきません。左は100%の幅で、右は250pxです。2行:(
クマ

19
div私の答えとデモのように、sの順序を入れ替える必要があります。rightその後left
thirtydot

1
全体的にはこれでうまくいきますが、次の行に折り返すのではなく、左側のdivにテキストがある場合(スペースがある場合)、右側(右側のdivが始まる場所)で途切れるだけです。左側のdivでテキストを折り返すにはどうすればよいですか?
ガイ

1
フローティングしないDIVは全幅を埋めます。コンテンツがフローティングDIVよりも高い場合、またはテキストが長すぎる場合の悪い考え。
netAction 2015

46

これは2017年であり、IE10 +互換のflexboxを使用するのが最善の方法です。

.box {
  display: flex;
}

.left {
  flex: 1;  /* grow */
  border: 1px dashed #f0f;
}

.right {
  flex: 0 0 250px; /* do not grow, do not shrink, start at 250px */
  border: 1px dashed #00f;
}
<div class="box">
  <div class="left">Left</div>
  <div class="right">Right 250px</div>
</div>


1
質問へのコメントにより、IE6をサポートする必要がなくなりました。ありがとう!
Mike Davlantes、2017年

また、これは良いですが、Calcは()により、IE9とChrome 26との互換性にはるかに優れたフレックスより
ドンDilanga

これは私にはうまくいきました。.rightの幅を定義する必要すらありませんでした。
rotaercz

1
それは2017/2018/2019で、我々はまだIE 9の用心の線に沿ってコメントを得ることを私を殺す
マイクDevenney

43

CSSのcalc()関数が使えます。

デモ:http : //jsfiddle.net/A8zLY/543/

<div class="left"></div>
<div class="right"></div>

.left {
height:200px;
width:calc(100% - 200px);
background:blue;
float:left;
}

.right {
width:200px;
height:200px;
background:red;
float:right;   
}

これがあなたを助けることを願っています!!


アドバイスありがとうございます。ブラウザ間の互換性を確認したところ、安定した使用のためには
ある程度

1
これはベストアンサーとして選択する必要があります。このアンサーでは、DIVタグはベストアンサーのように入れ替えられないためです。
ドンディランガ2017

14

ソースコードの順序を入れ替えることができれば、次のようにすることができます:

HTML:

<div class="right"></div> // needs to be 250px    
<div class="left"></div>

CSS:

.right {
  width: 250px;
  float: right;
}   

例:http : //jsfiddle.net/blineberry/VHcPT/

コンテナーを追加すると、現在のソースコードの順序と絶対位置でそれを行うことができます。

HTML:

<div id="container">
  <div class="left"></div>
  <div class="right"></div>
</div>

CSS:

#container {
  /* set a width %, ems, px, whatever */
  position: relative;
}

.left {
  position: absolute;
  top: 0;
  left: 0;
  right: 250px;
}

.right {
  position: absolute;
  background: red;
  width: 250px;
  top: 0;
  right: 0;
}

ここでは、.leftdivがから暗黙的に設定幅を取得しtopleftし、rightそれが中に残りのスペースを埋めることを可能にするスタイル#container

例:http : //jsfiddle.net/blineberry/VHcPT/3/


最初の例は実際には機能していないようです。jsFiddleの.left divは、実際には画面の全幅です。両方のdivが同じ高さの場合は素晴らしいですが、この場合は、.pxに5pxのパディングを追加するだけで表示されます。
user3413723 2014年

1
2番目の解決策は私にとってもうまくいきました。天才!
user3413723 2014年

6

コンテナでそれらをラップできる場合は、<div>配置を使用して左を<div>固定することができます。このデモをleft:0;right:250px参照してください。これはIE6では機能しないと言います。ページ上に配置できるのはコーナーの1つのコーナーだけなので(詳細についてはこちら参照)。<div>


3

1-ラッパーdivを用意し、
必要に応じてパディングとマージンを設定します2-左側のdivを必要な幅にし、左にフロートさせます
3-右側のdivマージンを左側の幅に等しく設定します

.left
{
    ***width:300px;***
    float: left;
    overflow:hidden;

}

.right
{
    overflow: visible;
    ***margin-left:300px;***
}



<div class="wrapper">
    <div class="left">
        ...
    </div>

    <div class="right" >
        ...
    </div>

</div>

これがうまくいくことを願っています!



1

右側を特定の幅に設定してフロートさせ、左側でmargin-rightを250pxに設定します

.left {
vertical-align: middle;
min-height: 50px;
margin-right: 250px;
overflow: auto

}

.right {
width:250px;
text-align: right;
display: table-cell;
vertical-align: middle;
min-height: 50px;
height: 100%;
overflow: auto
}


あなたはどんな種類のラッパーdivを持っていますか?オンラインで検査できるものはありますか?これは完全にローカルですか?
メテオレイナー2011年

完全にローカルですが、jsfiddleに配置してみます。
クマ

ハハ、あなたはあなたのフロートを取り除いた:右。また、境界線の幅を考慮することを忘れないでください。境界線の幅を残す場合は、div幅の1つから幅を減算します。
meteorainer

0

クロスブラウザーソリューションが必要な場合は、明確で簡単な私のアプローチを使用できます。

.left{
        position: absolute;
        height: 150px;
        width:150px;
        background: red;
        overflow: hidden;
        float:left;
}
.right{
        position:relative;
        height: 150px;
        width:100%;
        background: red;
        margin-left:150px;
        background: green;
        float:right;
}

-1

これはあなたを助けることができる単純なを使用してください

<table width="100%">
    <tr>
         <td width="200">fix width</td>
         <td><div>ha ha, this is the rest!</div></td>
    </tr>
</table>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.