หากcss3เป็นตัวเลือกสามารถทำได้โดยใช้calc()
ฟังก์ชันcss
กรณีที่ 1: จัดชิดขอบกล่องในบรรทัดเดียว ( FIDDLE )
มาร์กอัปนั้นง่าย - กอง div ที่มีองค์ประกอบคอนเทนเนอร์บางส่วน
CSS มีลักษณะดังนี้:
div
{
height: 100px;
float: left;
background:pink;
width: 50px;
margin-right: calc((100% - 300px) / 5 - 1px);
}
div:last-child
{
margin-right:0;
}
ที่-1pxเพื่อแก้ไขข้อผิดพลาดการคำนวณ IE9 + / การปัดเศษ - ดูที่นี่
กรณีที่ 2: จัดชิดขอบกล่องในหลายบรรทัด ( FIDDLE )
ที่นี่นอกเหนือจากcalc()
ฟังก์ชั่นmedia queries
มีความจำเป็น
แนวคิดพื้นฐานคือการตั้งค่าคิวรีสื่อสำหรับแต่ละ #columns ซึ่งฉันใช้ calc () เพื่อคำนวณระยะขอบขวาบนแต่ละองค์ประกอบ (ยกเว้นคอลัมน์ในคอลัมน์สุดท้าย)
ฟังดูเหมือนทำงานมาก แต่ถ้าคุณใช้ LESS หรือ SASS สามารถทำได้ค่อนข้างง่าย
(มันสามารถทำได้ด้วย css ปกติ แต่จากนั้นคุณจะต้องทำการคำนวณทั้งหมดด้วยตนเองและถ้าคุณเปลี่ยนความกว้างของกล่อง - คุณต้องคำนวณทุกอย่างอีกครั้ง)
ด้านล่างเป็นตัวอย่างการใช้น้อย: (คุณสามารถคัดลอก / วางรหัสนี้ที่นี่เพื่อเล่นกับมัน [มันเป็นรหัสที่ฉันใช้ในการสร้างซอดังกล่าวข้างต้น])
@min-margin: 15px;
@div-width: 150px;
@3divs: (@div-width * 3);
@4divs: (@div-width * 4);
@5divs: (@div-width * 5);
@6divs: (@div-width * 6);
@7divs: (@div-width * 7);
@3divs-width: (@3divs + @min-margin * 2);
@4divs-width: (@4divs + @min-margin * 3);
@5divs-width: (@5divs + @min-margin * 4);
@6divs-width: (@6divs + @min-margin * 5);
@7divs-width: (@7divs + @min-margin * 6);
*{margin:0;padding:0;}
.container
{
overflow: auto;
display: block;
min-width: @3divs-width;
}
.container > div
{
margin-bottom: 20px;
width: @div-width;
height: 100px;
background: blue;
float:left;
color: #fff;
text-align: center;
}
@media (max-width: @3divs-width) {
.container > div {
margin-right: @min-margin;
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: @3divs-width) and (max-width: @4divs-width) {
.container > div {
margin-right: ~"calc((100% - @{3divs})/2 - 1px)";
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: @4divs-width) and (max-width: @5divs-width) {
.container > div {
margin-right: ~"calc((100% - @{4divs})/3 - 1px)";
}
.container > div:nth-child(4n) {
margin-right: 0;
}
}
@media (min-width: @5divs-width) and (max-width: @6divs-width) {
.container > div {
margin-right: ~"calc((100% - @{5divs})/4 - 1px)";
}
.container > div:nth-child(5n) {
margin-right: 0;
}
}
@media (min-width: @6divs-width){
.container > div {
margin-right: ~"calc((100% - @{6divs})/5 - 1px)";
}
.container > div:nth-child(6n) {
margin-right: 0;
}
}
ดังนั้นโดยพื้นฐานคุณต้องตัดสินใจเลือกความกว้างของกล่องและระยะห่างขั้นต่ำที่คุณต้องการระหว่างกล่อง
ด้วยวิธีนี้คุณสามารถคำนวณจำนวนเนื้อที่ที่คุณต้องการสำหรับแต่ละรัฐ
จากนั้นใช้ calc () เพื่อคำนวณระยะขอบด้านขวาและ n-child เพื่อลบระยะขอบด้านขวาออกจากกล่องในคอลัมน์สุดท้าย
ประโยชน์ของคำตอบมากกว่านี้คำตอบที่ได้รับการยอมรับที่ใช้text-align:justify
ก็คือว่าเมื่อคุณมีมากกว่าหนึ่งแถวของกล่อง - กล่องในแถวสุดท้ายไม่ได้รับ 'ธรรม' เช่นถ้ามี 2 กล่องที่เหลืออยู่ในแถวสุดท้าย - ฉัน ไม่ต้องการให้กล่องแรกอยู่ทางซ้ายและอีกอันอยู่ทางขวา แต่ให้ทำตามกันตามลำดับ
เกี่ยวกับการรองรับเบราว์เซอร์ : สิ่งนี้จะทำงานบน IE9 +, Firefox, Chrome, Safari6.0 + - (ดูที่นี่สำหรับรายละเอียดเพิ่มเติม) อย่างไรก็ตามฉันสังเกตเห็นว่าใน IE9 + มีข้อผิดพลาดเล็กน้อยระหว่างสถานะการสืบค้นสื่อ [ถ้ามีคนรู้วิธีแก้ไขปัญหานี้ฉันอยากรู้ :)] <- คงที่นี่
display:inline-block;
แทนที่จะเป็นแบบลอยตัว?