วิธีลอย 3 divs เคียงข้างกันโดยใช้ CSS?


270

ฉันรู้วิธีที่จะทำให้ 2 divs ลอยข้างกันเพียงแค่ลอยหนึ่งไปทางซ้ายและอื่น ๆ ไปทางขวา

แต่จะทำอย่างไรกับ 3 divs หรือฉันควรใช้ตารางเพื่อจุดประสงค์นี้


3
ข้อมูลไม่เพียงพอ เลเยอร์กว้างแค่ไหน?
Josh Stodola

8
ฉันต้องการdisplay: inline-blockคนเหล่านั้นมากกว่าที่จะลอยพวกเขา หากความกว้างของพวกเขานั้นน้อยกว่าความกว้างของตู้คอนเทนเนอร์พวกเขาจะนั่งข้างกัน
Adam Waite

ฉันแนะนำให้ใช้ "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

31
@imray เพียงใช้% แทนที่จะเป็น px
TehTris

9
คุณช่วยอธิบายได้ไหมว่าทำไมถึงใช้<br style="clear: left;" />กับสไตล์นั้นโดยเฉพาะ
Mike de Klerk

2
@MikedeKlerk เป็น clearfix เพื่อหลีกเลี่ยงการล่มสลายของผู้ปกครอง
Angel Politis

ตามที่ @Nick Craver อธิบายไว้คุณควรให้องค์ประกอบทั้งหมดของคุณเป็นแบบลอยตัว: left property สิ่งนี้เกิดขึ้นเนื่องจากคุณสมบัติ float ระบุว่าองค์ประกอบถูกวางไว้ที่ด้านซ้ายหรือขวาของคอนเทนเนอร์หลักอย่างไร
Nesha Zoric

130

วิธีที่ทันสมัยคือการใช้flexbox 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

มันเป็นเช่นเดียวกับที่คุณทำเพื่อสอง divs เพียงลอยหนึ่งในสามไปทางซ้ายหรือขวาเกินไป

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

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

3
แต่ DIV เป็นองค์ประกอบระดับบล็อกใช่มั้ย แล้วทำไมมันถึงถูกวางเคียงข้างกันและไม่อยู่ในบรรทัดถัดไป (เนื่องจากองค์ประกอบระดับบล็อกเริ่มต้นและสิ้นสุดด้วยการขึ้นบรรทัดใหม่) ทุ่นลอยตัวมีผลกระทบกับมันด้วยหรือไม่?
Ashwin

26

ลอยพวกเขาทั้งหมดที่เหลือ

ตรวจสอบให้แน่ใจว่ามีการระบุความกว้างที่พวกเขาสามารถใส่ลงในคอนเทนเนอร์ของพวกเขาได้ (ไม่ว่าจะเป็น div อื่นหรือหน้าต่าง) มิฉะนั้นพวกมันก็จะพัน


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

รหัสนั้นที่มีคนโพสต์ที่นั่นทำเคล็ดลับ !!! เมื่อฉันวางมันก่อนที่จะปิด Container DIV มันจะช่วยเคลียร์ DIV ที่ตามมาทั้งหมดจากการทับซ้อนกับ DIVs ที่ฉันได้สร้างแบบเคียงข้างกันที่ด้านบน!

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

tadaa !! :)


16

ลอยทั้งสาม divs ไปทางซ้าย ชอบที่นี่:

.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
ประเด็นก็คือคำตอบของฉันเป็นคำตอบที่ถูกต้องที่สุดและเมื่อคนใหม่จะค้นหาคำถามนี้ทางอินเทอร์เน็ตพวกเขาจะเจอคำตอบของฉันซึ่งจะเป็นประโยชน์มากที่สุดสำหรับพวกเขา
อาร์เวน

2
นั่นอาจจะเป็น แต่มันไม่มีคำอธิบายใด ๆ ไซต์นี้สามารถคัดลอกคำตอบอื่น ๆ ได้โดยรวมคำตอบบางส่วนเข้าด้วยกันเป็นคำตอบที่ดีกว่า คุณสามารถแก้ไขและทำให้เสร็จสมบูรณ์ อย่างไรก็ตามผู้ใช้ใหม่มีข้อ จำกัด เล็กน้อย (upvoting, การเชื่อมโยงน้อย) ดังนั้นฉันยังคงแนะนำให้ไม่มุ่งเน้นคำถามเก่าและตอบ
cfi

@cfi ขอบคุณฉันจะเก็บไว้ใช้อ้างอิงในอนาคต
Arwen

10

ฉันมักจะลอยแรกไปทางซ้ายที่สองไปทางขวา บุคคลที่สามจัดตำแหน่งโดยอัตโนมัติระหว่างพวกเขาแล้ว

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

5
นั่นจะไม่ทำให้เกิดการสับสนเมื่อปรับขนาดเบราว์เซอร์หรือไม่
CodyBugstein

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% ถ้าคุณใช้ 3 x 30% ส่วนที่เหลืออีก 10% จะถูกแบ่งเป็นช่องว่างตัวแบ่ง 5% ระหว่าง collumns


7

คุณสามารถลอยได้: ปล่อยทิ้งไว้สำหรับพวกเขาทั้งหมดและตั้งค่าความกว้างเป็น 33.333%


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

ฉันไม่เห็นคำตอบ bootstrap ดังนั้นสำหรับสิ่งที่คุ้มค่า:

<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
ใน bootstrap 4 ฉันคิดว่าคุณต้องห่อทุกอย่างใน div ด้วย class row
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; }

อัปเดต: แน่นอนว่าต้องใช้เทคนิคนี้และเนื่องจากการกำหนดตำแหน่งแบบสัมบูรณ์คุณต้องใส่ divs ลงในคอนเทนเนอร์และทำการประมวลผลภายหลังเพื่อกำหนดความสูงของ if ซึ่งมีลักษณะดังนี้:

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

ไม่ใช่สิ่งที่น่าทึ่งที่สุดในโลก แต่อย่างน้อยก็ไม่ได้ทำลาย IE ที่เก่ากว่า


แน่นอนว่าการใช้เทคนิคนี้และเนื่องจากการกำหนดตำแหน่งที่แน่นอนคุณจะต้องใส่ divs ลงใน container และทำการ postprocessing เพื่อกำหนดความสูงของ if, สิ่งนี้:
jpbourbon

jQuery (เอกสาร). ready (function () {jQuery ('. main'). height (Math.max (jQuery ('. column-left'). height) (), jQuery ('. column-right') height (), jQuery ('. column-center'). height ()));}); ไม่ใช่สิ่งที่น่าทึ่งที่สุดในโลก แต่อย่างน้อยก็ไม่ได้ทำลาย IE ที่เก่ากว่า
jpbourbon

4

แต่มันใช้งานได้ใน 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

นี่คือวิธีที่ฉันจัดการเพื่อทำสิ่งที่คล้ายกับสิ่งนี้ภายใน<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 clearfix หรือ clear div เพื่อหลีกเลี่ยงเนื้อหาต่อไปนี้ยังคงต่ำกว่า div เหล่านี้

คุณสามารถดูรายละเอียดวิธีการใช้ clearfix div ได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.