web-dev-qa-db-ja.com

CSSを使用して3 divを並べてフローティングする方法は?

私は、2つのdivを左右に並べて、1つを左に、もう1つを右に浮動させる方法を知っています。

しかし、これを3 divでどうやって行うのでしょうか、それともこの目的のためにテーブルを使うべきでしょうか。

254
Dameon

幅と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>
285
Nick Craver

最新の方法は CSS flexbox を使用することです。 supportテーブル を参照してください。

.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グリッド を使用することもできます。 support tables を参照してください。

.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>
109
Stickers

それはあなたが2つのdivに対して行うのと同じ方法です、ちょうど3番目のものを左または右にも浮かべるだけです。

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

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

それらをすべて左に浮かべる

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

24
davidosomething
<br style="clear: left;" />

誰かがそこに投稿したそのコード、それはトリックをしました! Container 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>

ただいま! :)

22
Migisha

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;
}
15
Arwen

私は通常、最初のものを左に、2番目のものを右に浮かべるだけです。 3番目は自動的にそれらの間で整列します。

<div style="float: left;">Column 1</div>
<div style="float: right;">Column 3</div>
<div>Column 2</div>
9
Nick Travers
<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%の分割スペースとして分割されます。

8
SugaComa

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

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


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

あなたは浮かべることができます:それらすべてのために去り、幅を33.333%に設定します

6
Daniel A. White

私はこの方法が好きです、フロートは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; }

UPDATED:もちろん、このテクニックを使うには絶対位置のため、divをコンテナに入れてifの高さを定義するための後処理をする必要があります。

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

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

4
jpbourbon

私はブートストラップの答えを見ませんでした。

<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にパーセンテージを計算させます。念のため、両方をクリアするのが好きです。

4
John Grabauskas

しかし、それはChromeで動作しますか?

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

JSをクリックFiddle

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
AndrewD

これが<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 の使い方の詳細はこちら -

1
aquaaarian