สอง divs เคียงข้าง - จอแสดงผลของไหล


222

ฉันพยายามวางสอง divs เคียงข้างกันและใช้ CSS ต่อไปนี้เพื่อมัน

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

#right {
  overflow: hidden;
}

HTML นั้นง่าย div สองตัวทางซ้ายและขวาใน div wrapper

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

ฉันได้ลองหลายครั้งเพื่อค้นหาวิธีที่ดีกว่าใน StackOverflow และเว็บไซต์อื่น ๆ ด้วย แต่ไม่พบความช่วยเหลือที่แน่นอน

ดังนั้นรหัสทำงานได้อย่างรวดเร็วในครั้งแรก ปัญหาคือสิ่งนี้ div ด้านซ้ายได้รับการเติมเต็ม / ระยะขอบโดยอัตโนมัติเมื่อฉันเพิ่มความกว้างเป็น (%) ดังนั้นที่ความกว้าง 65% div ด้านซ้ายมีช่องว่างภายในหรือขอบและไม่สอดคล้องกับ div ที่ถูกต้องฉันพยายาม padding / margin 0 แต่ไม่มีโชค ประการที่สองถ้าฉันซูมในหน้า div ที่ถูกต้องจะเลื่อนลงด้านล่าง div ด้านซ้ายมันไม่เหมือนกับการแสดงผลแบบของเหลว

หมายเหตุ: ฉันขอโทษฉันค้นหามาก คำถามนี้ถูกถามหลายครั้ง แต่คำตอบเหล่านั้นไม่ได้ช่วยฉัน ฉันได้อธิบายสิ่งที่เป็นปัญหาในกรณีของฉัน

ฉันหวังว่าจะมีการแก้ไขสำหรับสิ่งนั้น

ขอบคุณ.

แก้ไข: ขออภัยฉันปัญหา HTML, มีสอง "กล่อง" divs ทั้งในด้านซ้ายและด้านขวาพวกเขามีช่องว่างภายใน%, ด้านซ้ายแสดงให้เห็นช่องว่างภายในมากขึ้นเนื่องจากความกว้างมากขึ้น ขออภัย CSS ข้างต้นทำงานได้อย่างสมบูรณ์แบบแสดงผลของเหลวและแก้ไขแล้วขออภัยที่ถามคำถามผิด ...


1
มี div สองกล่องหรือไม่ div box คืออะไร คำถามนี้ไม่ชัดเจน
john ktejik

คำตอบ:


251

ลองใช้ระบบเช่นนี้แทน:

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


1
มันไม่ได้ช่วยสิ่งที่ซูมได้รับการแก้ไขแล้วในขณะนี้มันบอกว่าได้รับการแก้ไขแล้ว แต่ตอนนี้ div ที่ถูกต้องเลื่อนลงและจับจ้องอยู่ที่ตำแหน่งนั้น
Waleed

คุณอาจจะเลอะอะไรขึ้นตรวจสอบรหัสของคุณหรือบอกลิงค์ไปยัง jsFiddle และดูมันไม่ดี
dezman

คน aww ฉันขอโทษ div ได้รับการแก้ไขแล้วโดย CSS ด้านบนของฉันที่ฉันให้ไว้ divs ที่ "กล่อง" ในทั้งด้านซ้ายและด้านขวามีช่องว่างภายในและ% เป็น% เนื่องจาก div ที่ถูกต้องนั้นสั้นเพราะเหตุใด ขออภัย ...
Waleed

ไม่ควร<section>จะเป็น<div>แทนหรือไม่
jvriesem

218

นี่เป็นเรื่องง่ายด้วย flexbox:

#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
Nice, flexbox เป็นวิธีที่จะไปแน่นอน
Julian Soro

4
ตามเว็บไซต์นี้ยืดหยุ่นควรทำงานกับ 94% ของเบราว์เซอร์ caniuse.com/#search=flex
Adrian

8
@JoostS ไม่ใช่ 94% ของเบราว์เซอร์ที่แตกต่างกัน (เช่นที่ใช้กับ Chrome, Mozilla, IE และอื่น ๆ ) ไม่ทำงาน 94% ของเวลาโดยไม่คำนึงถึงเบราว์เซอร์?
Joe

6
ปัจจุบันอยู่ที่ 97 +% โดยทั่วไปฉันจะบอกว่าถ้าคุณไม่จำเป็นต้องกำหนดเป้าหมาย IE8 ไปกับ flexbox ในกรณีนี้และอื่น ๆ โซลูชัน Flexbox นั้นสวยงามกว่าและให้เหตุผลได้ง่ายกว่าเสมอ
อลันโทมัส

6
หากคุณมีเว็บไซต์อยู่ไม่ต้องไปที่เบราว์เซอร์แชร์ดูบันทึกการจราจรของคุณเอง ในไซต์ส่วนใหญ่ของฉัน IE8 คิดเป็นปริมาณการเข้าชมเพียง 0.01% อย่างไรก็ตาม ... ฉันเคยเห็นไซต์เฉพาะที่ผู้ชมเป็นผู้ใช้ในองค์กรรัฐบาลหรือองค์กรที่ไม่แสวงหาผลกำไรโดยใช้ซอฟต์แวร์รุ่นเก่าจำนวนมากจากนั้นการใช้เบราว์เซอร์ IE แบบเก่าอาจสูงอย่างน่าประหลาดใจ
cazort

95

ใช้ CSS นี้สำหรับเว็บไซต์ปัจจุบันของฉัน มันใช้งานได้สมบูรณ์แบบ!

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

49
ดีใจที่ได้ยินว่าคุณพบและยอมรับคำตอบของคุณเอง แต่ #sides คืออะไร มันไม่ได้อยู่ในคำถามเดิมของคุณ
JMD

2
การใช้ float: ปล่อยให้ลูกทั้งคู่ (#right) จะฆ่าความสูงของ div parent (#wrapper) ดังนั้นวิธีนี้ขึ้นอยู่กับความต้องการ ดีกว่าที่จะให้ลอยกับเด็กคนหนึ่งเท่านั้น (# ทิ้งไว้ในกรณีของคุณ)
Rahul Gandhi

8

นี่คือคำตอบของฉันสำหรับผู้ที่ Googling:

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 ทั้งสองเป็นแบบนี้ สิ่งนี้จะจัดแนว divs ทั้งสองแบบเคียงข้างกัน

.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!-->


อะไรคือสาเหตุของการล้น: ซ่อนเร้น? ดูเหมือนจะไม่จำเป็น ...
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>

ระยะขอบขวาไม่จำเป็นต้องใช้

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