ด้วย flexbox การสร้างรางน้ำเป็นอาการปวดโดยเฉพาะอย่างยิ่งเมื่อต้องห่อหุ้ม
คุณต้องใช้ระยะขอบติดลบ ( ดังแสดงในคำถาม ):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
... หรือแก้ไข HTML ( ดังที่แสดงในคำตอบอื่น ):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... หรืออย่างอื่น.
ไม่ว่าในกรณีใดคุณต้องแฮ็กที่น่าเกลียดเพื่อให้มันทำงานได้เพราะ flexbox ไม่มีflex-gap
คุณสมบัติ "" ( อย่างน้อยก็ในตอนนี้ )
อย่างไรก็ตามปัญหาของรางน้ำนั้นทำได้ง่ายและสะดวกด้วย CSS Grid Layout
ข้อมูลจำเพาะของกริดให้คุณสมบัติที่สร้างช่องว่างระหว่างรายการกริดในขณะที่ละเว้นพื้นที่ระหว่างรายการและคอนเทนเนอร์ คุณสมบัติเหล่านี้คือ:
grid-column-gap
grid-row-gap
grid-gap
(ชวเลขสำหรับคุณสมบัติทั้งสองด้านบน)
เมื่อเร็ว ๆ นี้ข้อมูลจำเพาะได้รับการปรับปรุงเพื่อให้สอดคล้องกับCSS Box Alignment Moduleซึ่งมีชุดของคุณสมบัติการจัดตำแหน่งสำหรับใช้กับกล่องทุกรุ่น ดังนั้นคุณสมบัติตอนนี้:
column-gap
row-gap
gap
(ชวเลข)
อย่างไรก็ตามเบราว์เซอร์ที่สนับสนุนกริดทั้งหมดไม่สนับสนุนคุณสมบัติที่ใหม่กว่าดังนั้นฉันจะใช้เวอร์ชันดั้งเดิมในการสาธิตด้านล่าง
นอกจากนี้หากต้องการเว้นวรรคระหว่างรายการและคอนเทนเนอร์ padding
บนคอนเทนเนอร์ก็ใช้ได้ดี (ดูตัวอย่างที่สามในตัวอย่างด้านล่าง)
จากสเป็ค:
10.1 รางน้ำที่: row-gap
, column-gap
และgap
คุณสมบัติ
row-gap
และcolumn-gap
คุณสมบัติ (และพวกเขาgap
จดชวเลข) เมื่อระบุไว้บนภาชนะตารางกำหนดรางระหว่างแถวตารางและคอลัมน์ตาราง ไวยากรณ์ของพวกเขาถูกกำหนดในCSS Box Alignment 3 §8 Gap ระหว่างกล่อง§8ช่องว่างระหว่างกล่อง
ผลกระทบของคุณสมบัติเหล่านี้จะเหมือนกับความหนาของเส้นกริดที่ได้รับผลกระทบที่ได้รับ: แทร็กกริดระหว่างสองเส้นกริดคือช่องว่างระหว่างรางที่เป็นตัวแทน
.box {
display: inline-grid;
grid-auto-rows: 50px;
grid-template-columns: repeat(4, 50px);
border: 1px solid black;
}
.one {
grid-column-gap: 5px;
}
.two {
grid-column-gap: 10px;
grid-row-gap: 10px;
}
.three {
grid-gap: 10px;
padding: 10px;
}
.item {
background: lightgray;
}
<div class='box one'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
<hr>
<div class='box two'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
<hr>
<div class='box three'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
ข้อมูลมากกว่านี้: