CSS - ทำให้ div จัดแนวในแนวนอน


85

ฉันมีคอนเทนเนอร์ div ที่มีค่าคงที่widthและheightด้วยoverflow: hidden.

ฉันต้องการลอยแถวแนวนอน: div ด้านซ้ายภายในคอนเทนเนอร์นี้ ตัวหารที่ลอยไปทางซ้ายจะดันเข้าสู่ 'บรรทัด' ด้านล่างตามธรรมชาติหลังจากที่พวกเขาอ่านขอบเขตทางขวาของพาเรนต์ สิ่งนี้จะเกิดขึ้นแม้ว่าheightผู้ปกครองจะไม่อนุญาตก็ตาม นี่คือลักษณะที่ปรากฏ:

! [ผิด] [1] - ลบรูปภาพกระท่อมรูปภาพที่ถูกแทนที่ด้วยโฆษณา

ฉันต้องการให้มีลักษณะอย่างไร:

! [ขวา] [2] - ลบรูปภาพกระท่อมที่ถูกแทนที่ด้วยโฆษณา

หมายเหตุ: เอฟเฟกต์ที่ฉันต้องการสามารถทำได้โดยใช้องค์ประกอบแบบอินไลน์ & white-space: no-wrap(นั่นคือวิธีที่ฉันทำในภาพที่แสดง) อย่างไรก็ตามสิ่งนี้ไม่ดีสำหรับฉัน (ด้วยเหตุผลที่ยาวเกินไปที่จะอธิบายที่นี่) เนื่องจาก div ย่อยต้องเป็นองค์ประกอบระดับบล็อกแบบลอย


8
ลิงก์รูปภาพของคุณดูเหมือนจะเสีย หากคุณยังมีต้นฉบับอยู่โปรดอัปโหลดซ้ำไปที่ stack.imgur ขอบคุณ!
Ilmari Karonen

คำตอบ:


100

คุณอาจใส่ Div ด้านในลงในคอนเทนเนอร์ที่กว้างพอที่จะเก็บ Div ที่ลอยได้ทั้งหมด

#container {
  background-color: red;
  overflow: hidden;
  width: 200px;
}

#inner {
  overflow: hidden;
  width: 2000px;
}

.child {
  float: left;
  background-color: blue;
  width: 50px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>


แล้วฉันจะสร้างศูนย์ div ด้านนอกได้อย่างไร ฉันลองเพิ่ม align = "center" ใน div ชั้นนอกแล้วดูเหมือนจะไม่ได้ผล
hakunami

1
ซึ่งใช้ได้กับความกว้างเปอร์เซ็นต์เช่นกัน ในกรณีของฉันฉันใช้ div ภาชนะที่มีและองค์ประกอบเด็กแต่ละคนwidth: 200%; width: 50%;จากนั้นฉันสามารถใช้transform: translateX(n%);บนคอนเทนเนอร์เพื่อเลียนแบบเอฟเฟกต์แบบหมุนได้ตราบใดที่ฉันมีคอนเทนเนอร์หลักด้วยoverflow: hidden;
evolross

31

style="overflow:hidden"สำหรับผู้ปกครองdivและstyle="float: left"สำหรับเด็กทุกคนdivsเป็นสิ่งสำคัญในการdivsจัดตำแหน่งในแนวนอนสำหรับเบราว์เซอร์รุ่นเก่าเช่น IE7 และต่ำกว่า

สำหรับเบราว์เซอร์สมัยใหม่คุณสามารถstyle="display: table-cell"ใช้ได้กับเด็กทุกคนdivsและจะแสดงผลในแนวนอนอย่างถูกต้อง


6

สิ่งนี้ดูเหมือนใกล้เคียงกับที่คุณต้องการ:

#foo {
  background: red;
  max-height: 100px;
  overflow-y: hidden;
}

.bar {
  background: blue;
  width: 100px;
  height: 100px;
  float: left;
  margin: 1em;
}
<div id="foo">
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
</div>


5

คุณสามารถใช้clipคุณสมบัติ:

#container {
  position: absolute;
  clip: rect(0px,200px,100px,0px);
  overflow: hidden;
  background: red;
}

จดบันทึกposition: absoluteและoverflow: hiddenจำเป็นเพื่อclipไปทำงาน


4
การสนับสนุนเบราว์เซอร์ของคลิปคืออะไร?
alex

1
จากw3schools.com/cssref/pr_pos_clip.asp : คุณสมบัติคลิปได้รับการสนับสนุนในเบราว์เซอร์หลักทั้งหมด หมายเหตุ: ไม่รองรับค่า "inherit" ใน IE7 และรุ่นก่อนหน้า IE8 ต้องใช้! DOCTYPE IE9 รองรับ "สืบทอด"
dsomnus

5

ตอนนี้คุณสามารถใช้ css flexbox เพื่อจัดแนว div ในแนวนอนและแนวตั้งได้หากต้องการ สูตรทั่วไปจะเป็นแบบนี้

parent-div {
  display: flex;
  flex-wrap: wrap;
  /* for horizontal aligning of child divs */
  justify-content: center;
  /* for vertical aligning */
  align-items: center;
}

child-div {
  width: /* yoursize for each div */
  ;
}

โซลูชันที่หรูหรา
zawhtut

4

Float: left, display: inline-block จะล้มเหลวในการจัดแนวองค์ประกอบในแนวนอนหากเกินความกว้างของคอนเทนเนอร์

สิ่งสำคัญคือต้องทราบว่าคอนเทนเนอร์ไม่ควรห่อหุ้มหากองค์ประกอบต้องแสดงในแนวนอน: white-space: nowrap


1

ลอยทิ้งไว้ ใน Chrome อย่างน้อยคุณก็ไม่จำเป็นต้องมี Wrapper id="container"ในตัวอย่างของ LucaM


0

คุณสามารถทำสิ่งนี้:

#container {
  background-color: red;
  width: 200px;
}

.child {
  background-color: blue;
  width: 150px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>

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