เหตุใด div จึงมี“ display: table-cell;” ไม่ได้รับผลกระทบจากอัตรากำไร?


211

ฉันมีdivองค์ประกอบถัดจากแต่ละอื่น ๆ display: table-cell;ที่มี

ฉันต้องการตั้งค่าmarginระหว่างพวกเขา แต่margin: 5pxไม่มีผลใด ๆ ทำไม?

รหัสของฉัน:

<div style="display: table-cell; margin: 5px; background-color: red;">1</div>
<div style="display: table-cell; margin: 5px; background-color: green;">1</div>

คำตอบ:


310

สาเหตุ

จากเอกสาร MDN :

[คุณสมบัติขอบ] นำไปใช้กับองค์ประกอบทั้งหมดยกเว้นองค์ประกอบที่มีประเภทการแสดงตารางนอกเหนือจากคำบรรยายภาพตารางและตารางแบบอินไลน์

กล่าวอีกนัยหนึ่งmarginคุณสมบัติไม่สามารถใช้ได้กับdisplay:table-cellองค์ประกอบ

สารละลาย

พิจารณาใช้border-spacingคุณสมบัติแทน

หมายเหตุ: มันควรจะนำไปใช้กับองค์ประกอบหลักที่มีรูปแบบและdisplay:tableborder-collapse:separate

ตัวอย่างเช่น:

HTML

<div class="table">
    <div class="row">
        <div class="cell">123</div>
        <div class="cell">456</div>
        <div class="cell">879</div>
    </div>
</div>

CSS

.table {display:table;border-collapse:separate;border-spacing:5px;}
.row {display:table-row;}
.cell {display:table-cell;padding:5px;border:1px solid black;}

ดูตัวอย่าง jsFiddle


ระยะขอบที่ต่างกันทั้งแนวนอนและแนวตั้ง

ตามที่กล่าวไว้โดย Diego Quirós border-spacingสถานที่ให้บริการยังยอมรับสองค่าเพื่อตั้งค่าระยะห่างที่แตกต่างกันสำหรับแกนแนวนอนและแนวตั้ง

ตัวอย่างเช่น

.table {/*...*/border-spacing:3px 5px;} /* 3px horizontally, 5px vertically */

6
ขอบคุณ! นอกจากนี้ยังมีสัญกรณ์นี้ในกรณีที่พื้นที่แนวนอนและแนวตั้งจำเป็นต้องมีระยะห่างระหว่างเส้นขอบที่แตกต่างกัน: แนวตั้งแนวนอน;
Diego Quirós

และฉันคิดว่าฉันพบข้อผิดพลาด; ปรากฎว่าฉันต้องเรียนรู้ CSS เพิ่มเติม
Pete Alvin

ฉันเดาว่านี่ไม่ได้จัดการระยะขอบซ้าย / ขวา / บน / ล่างที่เฉพาะเจาะจงจริงๆเหรอ? และไม่มีวิธีที่จะมีตารางเซลล์ที่เฉพาะเจาะจงมีช่องว่างภายในที่แตกต่างจากส่วนที่เหลือ?
นาธาน

@Nathan paddingสามารถตั้งค่าสำหรับตัวเลือกใด ๆ ที่จำเป็น (เช่น class หรือ id) ตามปกติ หากคุณหมายถึงmarginระหว่างเซลล์ดังนั้นสามารถตั้งค่าแยกต่างหากสำหรับแกนแนวตั้งและแนวนอนโดยการตั้งค่าสองค่าเป็นborder-spacingแต่จะใช้กับทั้งตารางและไม่ใช่กับแต่ละเซลล์
โบอาซ

21

คุณสามารถใช้ div ภายในเพื่อตั้งค่าระยะขอบ

<div style="display: table-cell;">
   <div style="margin:5px;background-color: red;">1</div>
</div>
<div style="display: table-cell; ">
  <div style="margin:5px;background-color: green;">1</div>
</div>

JS Fiddle


2
นี่เป็นความคิดที่ดีถ้าคุณต้องการให้มีระยะห่างระหว่างเซลล์ แต่ไม่ไปทางซ้ายหรือขวาของพวกเขา จากนั้น CSS ของคุณอาจเป็นเช่น.inner-div { margin-right: 5px; } .outer-cell:last-child .inner-div { margin-right: 0; }นั้น แต่โปรดทราบว่า gotcha นี้: พื้นหลังสีแดงและสีเขียวของตัวอย่างนี้อาจไม่ตรงกับความสูงเนื่องจากมันไม่ได้อยู่ในเซลล์
Henrik N

8

เซลล์ตารางไม่เกี่ยวข้องกับระยะขอบ แต่คุณสามารถใช้เส้นขอบโปร่งใสแทน:

div {
  display: table-cell;
  border: 5px solid transparent;
}

หมายเหตุ: คุณไม่สามารถใช้เปอร์เซ็นต์ที่นี่ ... :(


2

หากคุณมี div ติดกันเช่นนี้

<div id="1" style="float:left; margin-right:5px">

</div>
<div id="2" style="float:left">

</div>

มันน่าจะใช้ได้นะ!


10
ตกลง แต่ถ้าเขาต้องการ div สองตัวในระดับความสูงเท่ากันล่ะ โฟลตไม่สามารถทำได้
hieroshima

และที่ว่าทำไมJSน่ากลัว :)
คริสมีความสุข

@ChrisHappy อย่าใช้ JavaScript เมื่อมีโซลูชัน CSS รหัสของคุณเพิ่งเทอะทะ
ssc-hrep3

@ ssc-hrep3 เมื่อการตอบสนองเป็นไปตามความต้องการโซลูชัน CSS ที่ใหญ่โตนั้นไม่เพียงพออีกต่อไป ...
Chris Happy

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