CSSを使用して3つのdivを並べてフロートさせる方法は?


270

2つのdivを並べてフロートさせる方法を知っています。1つを左に、もう1つを右にフロートします。

しかし、3つのdivでこれを行う方法や、この目的のためにテーブルを使用する必要がありますか?


3
十分な情報がありません。レイヤーの幅はどれくらいですか?
Josh Stodola、2010年

8
私はdisplay: inline-blockそれらを浮かすのではなく、それらの人たちにしたいと思います。それらの幅が合計でコンテナの幅よりも小さい場合、それらは互いに隣り合って配置されます。
アダムウェイト2014

「display:table」の使用をお勧めします。これは、最も保守可能で信頼性の高いソリューションです。stackoverflow.com/questions/14070787/…を
John Henckel

回答:


300

ちょうどそれらに幅を与えてfloat: left;、ここに例があります:

<div style="width: 500px;">
 <div style="float: left; width: 200px;">Left Stuff</div>
 <div style="float: left; width: 100px;">Middle Stuff</div>
 <div style="float: left; width: 200px;">Right Stuff</div>
 <br style="clear: left;" />
</div>

6
ページが展開されるときにそれらすべてを展開する場合はどうでしょうか?
CodyBugstein 14年

31
@imrayは、pxの代わりに%を使用する
TehTris '20

9
<br style="clear: left;" />特にそのスタイルで使用する理由について詳しく教えてください。
Mike de Klerk、2015

2
@MikedeKlerk親の崩壊を避けるための明確な修正です。
エンジェルポリティス2016

@Nick Craverが説明したように、すべての要素にfloat:leftプロパティを指定する必要があります。これは、floatプロパティが親コンテナの左側または右側に要素を配置する方法を指定するために発生します。
Nesha Zoric

130

最新の方法はCSSフレックスボックスを使用することです。サポート表を参照してください。

.container {
  display: flex;
}
.container > div {
  flex: 1; /*grow*/
}
<div class="container">
  <div>Left div</div>
  <div>Middle div</div>  
  <div>Right div</div>
</div>

CSSグリッドを使用することもできます。サポートテーブルを参照してください。

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* fraction*/
}
<div class="container">
  <div>Left div</div>
  <div>Middle div</div>  
  <div>Right div</div>
</div>


52

2つのdivの場合と同じですが、3番目のdivを左または右にフロートします。

<style>
  .left{float:left; width:33%;}
</style>

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

3
しかし、DIVはブロックレベルの要素ですよね?次に、それらが次の行ではなく並んで配置される理由(ブロックレベルの要素が改行で開始および終了するため)。フロートは他にも影響がありますか?
アシュウィン2013年

26

それらをすべて左に浮かせます

すべてがコンテナ(別のdivまたはウィンドウ)に収まるように幅が指定されていることを確認してください。


23
<br style="clear: left;" />

誰かがそこに投稿したコード、それはトリックをしました!!! コンテナーDIVを閉じる直前に貼り付けると、後続のすべてのDIVを、上部に並べて作成したDIVと重複しないようにできます。

<div>
<div class="left"></div>
<div class="left"></div>
...
...
<div class="left"></div>
<!--  then magic trick comes here  -->
<br style="clear: left;" />
</div>

だぁぁぁ!:)


16

3つのdivをすべて左にフロートします。ここのような:

.first-div {
  width:370px;
  height:150px;
  float:left;
  background-color:pink;
}

.second-div {
  width:370px;
  height:150px;
  float:left;
  background-color:blue;
}

.third-div {
  width:370px;
  height:150px;
  float:left;
  background-color:purple;
}

6
ポイントは私の答えが最も正しいものであり、新しい人がインターネットでこのQを検索するとき、彼らは彼らにとって最も役立つだろう私の答えに出くわすことです。
Arwen

2
そうかもしれません。しかし、それは何の説明にも欠けています。このサイトでは、他の回答をコピーして、複数の部分的な回答を1つの結合されたより良い回答にマージしても問題ありません。あなたはあなたのものを編集して完成させることができます。ただし、新しいユーザーにはいくつかの制限(賛成、リンク)があるため、古い質問や回答された質問に集中しないことをお勧めします。
cfi 2014年

@cfiありがとうございます。今後の参考のために保管しておきます。
Arwen

10

私は通常、1つ目を左に、2つ目を右にフロートさせます。3番目は自動的にそれらの間で整列します。

<div style="float: left;">Column 1</div>
<div style="float: right;">Column 3</div>
<div>Column 2</div>

5
ブラウザのサイズを変更すると、混乱を招きませんか?
CodyBugstein 14年

10
<style>
.left-column
{
float:left;
width:30%;
background-color:red;
}
.right-column
{
float:right;
width:30%;
background-color:green;
}
.center-column
{
margin:auto;
width:30%;
background-color:blue;
}
</style>

<div id="container">
<section class="left-column">THIS IS COLUMN 1 LEFT</section>
<section class="right-column">THIS IS COLUMN 3 RIGHT</section>
<section class="center-column">THIS IS COLUMN 2 CENTER</section>
</div>

この方法の利点は、100%未満に保つ限り、各列の幅を互いに独立して設定できることです。3x 30%を使用する場合、残りの10%は列間の5%の分割スペースとして分割されます。



7

スタイルに「display:block」を追加してみてください

<style>
   .left{
          display: block;
          float:left; 
          width:33%;
    }
</style>


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

6

私はブートストラップの答えを見なかったので、それは何の価値があるのですか?

<div class="col-xs-4">Left Div</div>
<div class="col-xs-4">Middle Div</div>
<div class="col-xs-4">Right Div</div>
<br style="clear: both;" />

Bootstrapにパーセンテージを計算させます。念のため、両方をクリアしたい。


1
ブートストラップ4では、行クラスを使用して全体をdivでラップする必要があると思います。
John Grabauskas

5

私はこの方法を好んでいます、フロートは古いバージョンのIEではサポートされていません(本当に?...)

.column-left{ position:absolute; left: 0px; width: 33.3%; background: red; }
.column-right{position:absolute; left:66.6%; width: 33.3%; background: green; }
.column-center{ position:absolute; left:33.3%; width: 33.3%; background: yellow; }

更新:もちろん、この手法を使用するには、絶対配置のため、コンテナーにdivを囲み、ifの高さを定義するために次のような後処理を行う必要があります。

jQuery(document).ready(function(){ 
    jQuery('.main').height( Math.max (
        jQuery('.column-left').height(),
        jQuery('.column‌​-right').height(),
        jQuery('.column-center').height())
    ); 
});

世界で最も驚くべきことではありませんが、少なくとも古いIEで壊れることはありません。


:もちろん、あなたが、場合の高さを定義するために容器上にdivを囲み、後処理を行うには、このような何か必要な絶対位置にこの技術および原因を使用する
jpbourbon

jQuery(document).ready(function(){jQuery( '。main')。height(Math.max(jQuery( '。column-left')。height()、jQuery( '。column-right')。height ()、jQuery( '。column-center')。height()));}); 世界で最も驚くべきことではありませんが、少なくとも古いIEで壊れることはありません。
jpbourbon 2014

4

しかし、それはChromeで機能しますか?

各divをフロートし、クリアに設定します。両方とも行に対してです。必要がない場合は、幅を設定する必要はありません。Chrome 41、Firefox 37、IE 11で動作します

クリックしてJSフィドル

HTML

<div class="stack">
    <div class="row">
        <div class="col">
            One
        </div>
        <div class="col">
            Two
        </div>
    </div>
        <div class="row">
        <div class="col">
            One
        </div>
        <div class="col">
            Two
        </div>
                    <div class="col">
            Three
        </div>
    </div>
</div>

CSS

.stack .row { 
clear:both;

}
.stack .row  .col    {
    float:left;
      border:1px solid;

}

3

これが私が<footer>要素の中でこれに似た何かをどうにかしてどうにかしたものです:

<div class="content-wrapper">

    <div style="float:left">
        <p>&copy; 2012 - @DateTime.Now.Year @Localization.ClientName</p>
    </div>

    <div style="float:right">
        <p>@Localization.DevelopedBy <a href="http://leniel.net" target="_blank">Leniel Macaferi</a></p>
    </div>

    <div style="text-align:center;">
        <p>☎ (24) 3347-3110 | (24) 8119-1085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;✉ @Html.ActionLink(Localization.Contact, MVC.Home.ActionNames.Contact, MVC.Home.Name)</p>
    </div>

</div>

CSS:

.content-wrapper
{
    margin: 0 auto;
    max-width: 1216px;
}

2

@Lenielこの方法は良いですが、すべてのフローティングdivに幅を追加する必要があります。私はそれらを同じ幅にするか、固定幅を割り当てます。何かのようなもの

.content-wrapper > div { width:33.3%; }

を追加するのinline styleではなく、各divにクラス名を割り当てることができますが、これは良い方法ではありません。

以下のコンテンツがこれらのdivの下にとどまらないように、必ずclearfix divまたはclear divを使用してください。

clearfix divの使用方法の詳細については、こちらをご覧ください。

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