2つのdivを並べて表示-流体表示


222

2つのdivを並べて配置し、次のCSSを使用しようとしています。

#left {
  float: left;
  width: 65%;
  overflow: hidden;
}

#right {
  overflow: hidden;
}

HTMLはシンプルで、ラッパーdivに左と右の2つのdivがあります。

<div id="wrapper">
  <div id="left">Left side div</div>
  <div id="right">Right side div</div>
</div>

StackOverflowや他のサイトでもより良い方法を探すために何度も試みましたが、正確なヘルプが見つかりませんでした。

したがって、コードは一見問題なく動作します。問題は、幅(%)を増やすと、左側のdivが自動的にパディング/マージンを取得することです。したがって、幅が65%の場合、左側のdivにはパディングまたはマージンがあり、右側のdivと完全に揃っていません。次に、ページを拡大すると、右側のdivが左側のdivの下にスライドします。

注:すみません、たくさん検索しました。この質問は何度も尋ねられましたが、それらの答えは私を助けていません。私の場合、何が問題なのかを説明しました。

私はそれに対する修正があることを望みます。

ありがとうございました。

編集:申し訳ありませんが、HTMLの問題です。左側と右側の両方に2つの「ボックス」divがあり、%でパディングがあり、幅が広いため左側がより多くのパディングを示していました。申し訳ありませんが、上記のCSSは完璧に動作し、その流動的な表示と修正が行われています。間違った質問をして申し訳ありません...


1
2つのボックスdivがありましたか?ボックスdivとは何ですか?この質問は明確ではありません。
john ktejik 2014年

回答:


252

代わりにこのようなシステムを試してください:

.container {
  width: 80%;
  height: 200px;
  background: aqua;
  margin: auto;
  padding: 10px;
}

.one {
  width: 15%;
  height: 200px;
  background: red;
  float: left;
}

.two {
  margin-left: 15%;
  height: 200px;
  background: black;
}
<section class="container">
  <div class="one"></div>
  <div class="two"></div>
</section>

最初のdivの幅に等しい他のマージン左マージンを使用する場合、1つのdivをフロートする必要があるだけです。これはズームに関係なく機能し、サブピクセルの問題はありません。


1
それは役に立たず、ズームの問題は修正されました。修正されたと表示されていますが、右側のdivが下にスライドされ、その位置に修正されました
Waleed

あなたはおそらく何かをめちゃくちゃにしたり、コードをチェックしたり、jsFiddleへのリンクを私に教えたりして、それをよく見ていません。
dezman 2013年

ああ男、ごめんなさい。divは、上記のCSSで既に修正されています。左側と右側の「ボックス」divだけにパディングとマージンがあります。これは、右側のdivが短いため、パディングとマージンが等しいためです。申し訳ありません...
Waleed

すべきではない<section>こと<div>の代わりに?
jvriesem

218

これはフレックスボックスで簡単です:

#wrapper {
  display: flex;
}

#left {
  flex: 0 0 65%;
}

#right {
  flex: 1;
}
<div id="wrapper">
  <div id="left">Left side div</div>
  <div id="right">Right side div</div>
</div>


5
素晴らしい、フレックスボックスは間違いなく進むべき道です
Julian Soro

4
このサイトによると、フレックスはブラウザの94%で動作するはずです。caniuse.com/#search=flex
エイドリアン

8
@JoostSは、利用可能なさまざまなブラウザーの94%が(Chrome、Mozilla、IEなどで常に機能するように)有効ではありませんか?
Joe

6
現在それは97 +%に立っています。基本的に、IE8をターゲットにする必要がない場合は、フレックスボックスを使用します。この場合も同様です。フレックスボックスソリューションは、ほとんどの場合、よりエレガントで、理由付けが簡単です。
アラントーマス

6
既存のWebサイトがある場合は、ブラウザ共有を使用しないでください。自分のトラフィックログを確認してください。ほとんどのサイトで、IE8はトラフィックの約0.01%しか占めていません。ただし、特定のサイトで、企業、政府、または非営利組織のユーザーが多くのレガシーソフトウェアを使用しているため、古いIEブラウザーの使用率が驚くほど高い可能性があります。
cazort 2017

95

現在のサイトでこのCSSを使用しています。それは完璧に動作します!

#sides{
margin:0;
}
#left{
float:left;
width:75%;
overflow:hidden;
}
#right{
float:left;
width:25%;
overflow:hidden;
} 

49
自分の答えを見つけて受け入れたことをうれしく思いますが、#sidesとは何ですか?元の質問にはありません。
JMD、2015年

2
両方の子(#right)でfloat:leftを使用すると、親div(#wrapper)の高さが強制終了されます。したがって、このソリューションは要件によって異なります。一人の子供だけにフロートを与える方が良いです。(#あなたのケースでは左)
Rahul Gandhi

8

これがグーグルの人たちに対する私の答えです:

CSS:

.column {
    float: left;
    width: 50%;
}

/* Clear floats after the columns */
.container:after {
    content: "";
    display: table;
    clear: both;
}

HTMLは次のとおりです。

<div class="container">
    <div class="column"></div>
    <div class="column"></div>
</div>

3

このように両方のdivを作成します。これにより、両方のdivが並んで配置されます。

.my-class {
  display : inline-flex;
} 

1

#sides{
margin:0;
}
#left{
float:left;
width:75%;
overflow:hidden;
}
#right{
float:left;
width:25%;
overflow:hidden;
} 
<h1 id="left">Left Side</h1>
<h1 id="right">Right Side</h1>
<!-- It Works!-->


overflow:hiddenの理由は何ですか?それは必要ではないようです...
Honza

0
   <div style="height:50rem; width:100%; margin: auto;">
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left; background-color: black;">

    </div>
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left;  background-color: black;">

    </div>
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left;  background-color: black;">

    </div>
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left;  background-color: black;">

    </div>
   </div>

margin-rightは必要ありませんが。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.