วิธีทำให้ DIV ไม่พันกัน?


179

ฉันต้องการสร้างสไตล์ DIV ของคอนเทนเนอร์ที่มีหลาย DIV อื่น ๆ มีการถามว่า DIV เหล่านี้จะไม่ห่อหากหน้าต่างเบราว์เซอร์มีการปรับขนาดให้แคบ

ฉันพยายามทำให้มันทำงานเหมือนด้านล่าง

<style>
   .container
   {
      min-width: 3000px;
      overflow: hidden;
   }
   .slide
   {
      float: left;
   }
</style>
<div class="container">
   <div class="slide">something</div>
   <div class="slide">something</div>
   <div class="slide">something</div>
   <div class="slide">something</div>
</div>

วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่ อย่างไรก็ตามในบางกรณีการแสดงผลไม่ถูกต้อง ฉันพบว่าคอนเทนเนอร์ DIV เปลี่ยนเป็นความกว้าง 3000px ใน RTL ของ IE7; และมันก็ยุ่งเหยิงไปหมด

มีวิธีอื่นในการทำ DIV ของคอนเทนเนอร์หรือไม่?


ฉันเพิ่มแท็กนี้: white-space: nowrap; และแท็กนี้: text-overflow: ellipsis; รหัสของฉัน
ดาบ tabatabaee yazdi

คำตอบ:



48

หากฉันไม่ต้องการกำหนดความกว้างน้อยที่สุดเพราะฉันไม่ทราบจำนวนองค์ประกอบสิ่งเดียวที่ทำงานกับฉันคือ:

display: inline-block;
white-space: nowrap;

แต่ใน Chrome และ Safari เท่านั้น: /


33

การทำงานต่อไปนี้สำหรับฉันโดยไม่ต้องลอย (ฉันแก้ไขตัวอย่างของคุณเพียงเล็กน้อยสำหรับเอฟเฟ็กต์ภาพ):

.container
{
    white-space: nowrap; /*Prevents Wrapping*/
    
    width: 300px;
    height: 120px;
    overflow-x: scroll;
    overflow-y: hidden;
}
.slide
{
    display: inline-block; /*Display inline and maintain block characteristics.*/
    vertical-align: top; /*Makes sure all the divs are correctly aligned.*/
    white-space: normal; /*Prevents child elements from inheriting nowrap.*/
    
    width: 100px;
    height: 100px;
    background-color: red;
    margin: 5px;
}
<div class="container">
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
</div>

divs อาจถูกคั่นด้วยช่องว่าง หากคุณไม่ต้องการสิ่งนี้ใช้margin-right: -4px;แทน( margin: 5px;สำหรับ.slideมันน่าเกลียด แต่เป็นปัญหาที่ยุ่งยากในการจัดการ )


คำตอบที่ดี ฉันได้เพิ่มตัวอย่างที่คล้ายกันด้านล่าง แต่ฉันลบมันหลังจากที่ฉันเห็นคุณ หากคุณไม่จำเป็นต้องรองรับ IE9 คุณสามารถใช้ flexbox: jsfiddle.net/7gsrb38L/1
ValentinVoilean

คุณสามารถใช้ความคิดเห็น HTML ระหว่าง div </div><!-- --><div class="slide">ถ้าคุณต้องการลบช่องว่างพิเศษระหว่างพวกเขา รูปแบบบล็อกแบบอินไลน์ทำให้พื้นที่สีขาวในรหัสของคุณถูกเลือกเป็นพื้นที่ในเอกสาร HTML
โจ

@Jo เพื่อลดขนาดหน้าคุณสามารถใช้สิ่งที่ไม่แสดงเช่นเมื่อใช้ php: </div><?php ?><div class="slide">renders </div><div class="slide">ในรหัสที่มา
Fleuv

นอกจากนี้หากคุณสร้าง HTML ด้วย JavaScript คุณสามารถหลีกเลี่ยงช่องว่างได้ ผมใช้DOThtml HTML ข้างต้นสามารถถูกแทนที่ด้วยสิ่งนี้:dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
JSideris

30

คอมโบที่คุณต้องการคือ

white-space: nowrap

บนผู้ปกครองและ

display: inline-block; // or inline

บนเด็ก ๆ


25

สิ่งนี้ใช้ได้กับฉัน:

.container {
  display: inline-flex;
}

.slide {
  float: left;
}
<div class="container">
  <div class="slide">something1</div>
  <div class="slide">something2</div>
  <div class="slide">something3</div>
  <div class="slide">something4</div>
</div>

https://css-tricks.com/snippets/css/a-guide-to-flexbox/


สิ่งนี้มีมากเกิน: สิ่งที่ซ่อนอยู่ก็ช่วยฉัน ขอบคุณ
Alfie

10

overflow: hiddenควรให้พฤติกรรมที่ถูกต้องแก่คุณ ฉันเดาว่าจะRTLเป็น messed up เพราะคุณมีfloat: leftในห่อหุ้มdivs

นอกจากข้อผิดพลาดนั้นคุณมีพฤติกรรมที่เหมาะสม


1
ฉันจะตรวจสอบว่ามันเป็นเพราะ "ลอย: ซ้าย" ใน divs ที่ห่อหุ้ม แต่โค้ดเดียวกันนี้ใช้ได้กับ Firefox และ Safari ไม่ใช่ใน IE ดังนั้นฉันสงสัยจริงๆในกรณีนี้
Morgan Cheng


2

ไม่มีข้อใดถูกเลยสำหรับฉัน

ในกรณีของฉันฉันจำเป็นต้องเพิ่มสิ่งต่อไปนี้ในการควบคุมผู้ใช้ที่ฉันสร้างขึ้น:

display:inline-block;

1

min-widthคุณสมบัติทำงานไม่ถูกต้องใน Internet Explorer ซึ่งเป็นส่วนใหญ่น่าจะเป็นสาเหตุของปัญหาของคุณ

อ่านข้อมูลและ สคริปต์ที่ยอดเยี่ยมที่แก้ไขปัญหาหลาย CSS IE


1

คุณสามารถใช้ได้

display: table;

สำหรับภาชนะบรรจุและหลีกเลี่ยงการ therfore overflow: hidden;ของคุณ มันควรจะทำงานถ้าคุณใช้มันเพียงเพื่อวัตถุประสงค์ในการแปรปรวน


0
<div style="height:200px;width:200px;border:; white-space: nowrap;overflow-x: scroll;overflow-y: hidden;">
   <p>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.</p>
</div>

0

ใช้display:flexและwhite-space:nowrap

p{
  display:flex;
  white-space:nowrap;
  overflow:auto;
}
<h2>Sample Text.</h2>

<p>Some example text that will not wrap..lla et dictum interdum, nisi lorem egestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Mauris ante ligula, facilisis sed ornare eu, lobortis in odio. Praesent convallis urna a lacus interdum ut hendrerit risus congue. Nunc sagittis dictum nisi, sed ullamcorper ipsum d</p>

<h3>Then some other text</h3>


-1

<span>แท็กจะใช้ในกลุ่มอินไลน์องค์ประกอบในเอกสาร
(ที่มา)


แม้ว่าสิ่งนี้จะเป็นจริง แต่ก็ไม่ได้ตอบคำถามทั้งหมด
เควนติน

สิ่งนี้ตอบโจทย์ได้อย่างสมบูรณ์แบบเนื่องจาก span และ div เหมือนกันในทุกสิ่งยกเว้น div นั้นถูกรวมไว้และไม่ได้เป็น span และคุณสามารถใช้วิธีแก้ปัญหาตามที่คุณต้องการ
Mike

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