ช่องว่างระหว่างสองแถวในตาราง?


755

เป็นไปได้ผ่าน CSS?

ฉันกำลังพยายาม

tr.classname {
  border-spacing: 5em;
}

ไม่มีประโยชน์ บางทีฉันอาจจะทำอะไรผิดพลาด?


เบราว์เซอร์คืออะไรและคุณสามารถให้ข้อมูลโค้ดของคุณ (html / css) ได้อย่างไร
Patrick Desjardins

ฉันใช้ ff3 อย่างที่รู้นั่นคือสนับสนุนกฎ แต่ตอนนี้ฉันต้องการแก้ไขใน ff3 ฉันพยายามเว้นระยะห่างและขยายเต็มไปด้วยโชคไม่ดี productlistingitem เป็นตารางหลัก <table class = "productListingItem" border = "0" cellpadding = "10" cellspacing = "0"> <tr> <tr> <tr> <td class = "dragItem">
Marin

1
บางทีมันอาจจะเป็นเพราะborder-spacingเป็นคุณลักษณะที่เกี่ยวข้องกับการไม่ได้table trลองtable.classname {border-spacing:5em}ดู Note: IE8 รองรับคุณสมบัติระยะห่างระหว่างชายแดนหากระบุ! DOCTYPE
Varun Natraaj

ฉันใช้ความสูงของเส้นเมื่อไม่มีเส้นขอบ
ลีอาห์

คำตอบ:


523

คุณต้องใช้ช่องว่างภายในtdองค์ประกอบของคุณ สิ่งนี้ควรทำเคล็ดลับ แน่นอนคุณสามารถรับผลลัพธ์เดียวกันโดยใช้การเติมเต็มด้านบนแทนการแพ็ดด้านล่าง

ในโค้ด CSS ด้านล่างเครื่องหมายมากกว่าหมายถึงการเติมเต็มจะใช้กับtdองค์ประกอบที่นำลูกไปยังtrองค์ประกอบที่มีคลาสspaceUnderเท่านั้น สิ่งนี้จะทำให้สามารถใช้ตารางที่ซ้อนกันได้ (Cell C และ D ในรหัสตัวอย่าง) ฉันไม่แน่ใจเกี่ยวกับการสนับสนุนเบราว์เซอร์สำหรับตัวเลือกลูกโดยตรง (คิดว่า IE 6) แต่ไม่ควรทำลายโค้ดในเบราว์เซอร์สมัยใหม่

/* Apply padding to td elements that are direct children of the tr elements with class spaceUnder. */

tr.spaceUnder>td {
  padding-bottom: 1em;
}
<table>
  <tbody>
    <tr>
      <td>A</td>
      <td>B</td>
    </tr>
    <tr class="spaceUnder">
      <td>C</td>
      <td>D</td>
    </tr>
    <tr>
      <td>E</td>
      <td>F</td>
    </tr>
  </tbody>
</table>

สิ่งนี้ควรแสดงผลดังนี้:

+---+---+
| A | B |
+---+---+
| C | D |
|   |   |
+---+---+
| E | F |
+---+---+

1
code.google.com/p/ie7-jsเพิ่มการสนับสนุนให้กับตัวเลือกลูกใน ie5.5, ie6, ie7 เช่นกัน
Antony Hatchkins

403
ยกเว้นสิ่งนี้จะไม่แก้ปัญหาเลยเมื่อแถวของคุณมีสีพื้นหลังและคุณต้องการ WHITESPACE ระหว่างแถวของคุณ
Simon East

6
@Simon: ช่องว่างมักจะหมายถึงพื้นที่ว่างและไม่เฉพาะสีขาว หากคุณต้องการทำให้สีของช่องว่างระหว่างแถวเป็นสีคุณสามารถลองด้วยคุณสมบัติ CSS <code> border-bottom </code> บนองค์ประกอบ td นั่นอาจจะแสดงผลได้อย่างถูกต้องด้วยเส้นขอบ 1px อีกวิธีหนึ่ง แต่ไม่หรูหราวิธีแก้ปัญหาคือใช้แถวที่ว่างเปล่า
Jan Aagaard

18
@Jan: ใช่ตรงจุดของฉัน ... มันเป็นเรื่องยากมากที่จะนำความโปร่งใสพื้นที่ว่างระหว่างแถว วิธีการแก้ปัญหาของคุณช่วยในบางกรณี แต่ไม่ได้แก้ปัญหานั้น การแทรกแถวของตารางที่ว่างเปล่าอาจใช้งานได้ แต่มันน่าเกลียด bottom-borderชุดยังอาจจะยังทำงานโปร่งใส แต่ฉันไม่แน่ใจว่าเบราว์เซอร์ที่เข้ากันได้มันเป็น
Simon East

1
@Simon: โคลแมนมีน่าเกลียด, การแก้ปัญหายังทำงานกับปัญหาของคุณ
eggy

387

ในตารางหลักลองตั้งค่า

border-collapse:separate; 
border-spacing:5em;

บวกกับการประกาศเส้นขอบและดูว่าสิ่งนี้บรรลุผลที่คุณต้องการหรือไม่ อย่างไรก็ตามระวังว่า IE นั้นไม่รองรับรูปแบบ "เส้นขอบที่คั่น"


5
ใช่วิธีนี้จะเหมาะยกเว้น IE 7 ที่ไม่รองรับ สำหรับการสนับสนุนเบราว์เซอร์โปรดดู: quirksmode.org/css/tables.html
Simon East

7
นอกจากนี้มันยังควบคุมการเว้นวรรคในทุกแถวในตารางคุณไม่สามารถตั้งค่าระยะห่างของแถวสำหรับแต่ละแถว (ซึ่งเป็นสิ่งที่ OP ต้องการจะทำให้สำเร็จ)
Simon East

1
สิ่งนี้ไม่สอดคล้องกันระหว่าง Chrome และ Firefox หากคุณมีtheadและtbodyจะเป็นการแสดงผลสองครั้งborder-spacingใน Chrome (แต่จะเป็นอันเดียวใน Firefox)
Camilo Martin

91
นี่คือคำตอบที่เกิดขึ้นจริงโดยเฉพาะborder-spacing: 0 1emเพื่อให้ได้ระยะห่างระหว่างแถวเท่านั้น
igneosaur

1
@igneosaur ฉันพยายามทำสิ่งที่คุณพูด แต่ก็ยังเพิ่มระยะห่างระหว่างแถวทั้งหมดไม่ใช่แค่สองอันแรก คุณสามารถให้ jsfiddle ที่ใช้งานได้หรือไม่?
user3281466

184

คุณมีตารางที่มีอัลบั้มประจำตัวพร้อมข้อมูลใด ๆ ... ฉันข้าม TRS และ TDS แล้ว

<table id="albums" cellspacing="0">       
</table>

ใน CSS:

table#albums 
{
    border-collapse:separate;
    border-spacing:0 5px;
}

15
นี้ทำงานได้ดีสำหรับฉัน. อาร์กิวเมนต์แรกของการเว้นวรรคชายแดนคือระยะห่างแนวนอนระหว่างเซลล์และประการที่สองคือระยะห่างแนวตั้ง

มันไม่เคยมีการโดย CSS แฟนซีถ้าดีเก่า HTML สามารถทำผลงานได้ :)
luator


เป็นไปได้หรือไม่ที่จะใช้กับ tr ภายใน "tbody" เท่านั้น?
Jaison

129

เนื่องจากฉันมีภาพพื้นหลังด้านหลังโต๊ะการแกล้งด้วยการใส่สีขาวจะไม่ทำงาน ฉันเลือกที่จะวางแถวว่างไว้ระหว่างเนื้อหาแต่ละแถว:

<tr class="spacer"><td></td></tr>

จากนั้นใช้ css เพื่อให้ตัวเว้นวรรคมีความสูงและพื้นหลังโปร่งใส


3
ฉันคิดว่าคงยืดหยุ่นกว่านี้ คุณไม่สามารถควบคุมได้ล่วงหน้าเมื่อคุณต้องการพื้นที่ (หน้าสร้างขึ้นแบบไดนามิก)
Stefan Kendall

10
สิ่งนี้ทำให้ฉันนึกถึงยุค 90 เมื่อการสนับสนุน CSS เกือบจะไม่มีอยู่จริงและใช้ตารางสำหรับเค้าโครงส่วนใหญ่ ฉันยังคงให้ +1 เพราะ "คำตอบ" อื่น ๆ นั้นไม่ได้ดีไปกว่านี้ในแง่ของการสร้างช่องว่างระหว่างแถวของตาราง
เขาวงกต

@labyrinth ไม่ค่อยมีการเปลี่ยนแปลงนับตั้งแต่ยุค 90 เกี่ยวกับ HTML ทุกอย่างมีประสิทธิภาพและยุ่งมากขึ้น
maaartinus

73

จาก Mozilla Developer Network :

คุณสมบัติ CSS ระยะห่างชายแดนระบุระยะห่างระหว่างเส้นขอบของเซลล์ที่อยู่ติดกัน (เฉพาะสำหรับรูปแบบชายแดนแยก) สิ่งนี้เทียบเท่ากับแอตทริบิวต์ cellspacing ใน HTML ที่นำเสนอแต่สามารถใช้ค่าที่สองซึ่งเป็นทางเลือกเพื่อตั้งค่าระยะห่างแนวนอนและแนวตั้งที่แตกต่างกัน

ส่วนสุดท้ายนั้นมักจะดูแล ตัวอย่าง:

.your-table {
    border-collapse: separate; /* allow spacing between cell borders */
    border-spacing: 0 5px; /* NOTE: syntax is <horizontal value> <vertical value> */

UPDATE

ตอนนี้ฉันเข้าใจว่า OP ต้องการเฉพาะแถวที่แยกต่างหากเพื่อเพิ่มระยะห่าง ฉันได้เพิ่มการตั้งค่าด้วยtbodyองค์ประกอบที่ประสบความสำเร็จโดยไม่ทำลายความหมาย อย่างไรก็ตามฉันไม่แน่ใจว่ารองรับเบราว์เซอร์ทั้งหมดหรือไม่ ฉันทำมันใน Chrome

ตัวอย่างด้านล่างคือการแสดงว่าคุณสามารถทำให้มันดูเหมือนตารางที่มีอยู่ของแถวแยกความหวานเต็ม CSS ยังให้ระยะห่างระหว่างแถวแรกกับการtbodyตั้งค่ามากขึ้น รู้สึกอิสระที่จะใช้!

ประกาศการสนับสนุน: IE8 +, Chrome, Firefox, Safari, Opera 4+

.spacing-table {
  font-family: 'Helvetica', 'Arial', sans-serif;
  font-size: 15px;
  border-collapse: separate;
  table-layout: fixed;
  width: 80%;
  border-spacing: 0 5px; /* this is the ultimate fix */
}
.spacing-table th {
  text-align: left;
  padding: 5px 15px;
}
.spacing-table td {
  border-width: 3px 0;
  width: 50%;
  border-color: darkred;
  border-style: solid;
  background-color: red;
  color: white;
  padding: 5px 15px;
}
.spacing-table td:first-child {
  border-left-width: 3px;
  border-radius: 5px 0 0 5px;
}
.spacing-table td:last-child {
  border-right-width: 3px;
  border-radius: 0 5px 5px 0;
}
.spacing-table thead {
  display: table;
  table-layout: fixed;
  width: 100%;
}
.spacing-table tbody {
  display: table;
  table-layout: fixed;
  width: 100%;
  border-spacing: 0 10px;
}
<table class="spacing-table">
  <thead>
    <tr>
        <th>Lead singer</th>
        <th>Band</th>
    </tr>
  </thead>
  <tbody>
    <tr>
        <td>Bono</td>
        <td>U2</td>
    </tr>
  </tbody>
  <tbody>
    <tr>
        <td>Chris Martin</td>
        <td>Coldplay</td>
    </tr>
    <tr>
        <td>Mick Jagger</td>
        <td>Rolling Stones</td>
    </tr>
    <tr>
        <td>John Lennon</td>
        <td>The Beatles</td>
    </tr>
  </tbody>
</table>


ถ้าฉันต้องการช่องว่างระหว่างจุดยอดสองแถวฉันเพิ่งเพิ่มแถวเว้นวรรค <tr> <td colspan = "2" style = "padding-bottom: 1em;"> </td> </tr>
Paul Taylor

แต่จะไม่ถูกต้องในเชิงความหมาย (เช่นในแถว seperator ของคุณไม่ใช่แถวจริงที่มีข้อมูลเหมือนแถวอื่น ๆ ) สิ่งนี้อาจสร้างความรำคาญให้กับผู้ที่ใช้โปรแกรมอ่านหน้าจอหรืออุปกรณ์ผู้ช่วยอื่น ๆ ไลค์มันอาจจะไม่สร้างความแตกต่างขนาดใหญ่ แต่เป็นการดีที่จะเก็บไว้ในหัวของคุณเมื่อพัฒนาเว็บไซต์ :)
Justus Romijn

นั่นเป็นความจริงถ้าเขาใช้ตารางเพื่อเป็นตัวแทนของตาราง หากเขาเพียงแค่ใช้ตารางเป็นวิธีการแสดงข้อมูลในรูปแบบตารางแล้วฉันจะเถียงว่ามันเหมาะสมกว่าที่จะแทรกแถวเพื่อแสดงช่องว่างระหว่างสองรายการมากกว่าแค่เพิ่มระยะห่างลงไปใน td elments หรือต่ำกว่าบรรทัดเนื่องจากสิ่งที่ผู้ใช้ต้องการทำคือเพิ่มช่องว่างระหว่างสองบรรทัดไม่เพิ่มขนาดขององค์ประกอบภายในบรรทัด
พอลเทย์เลอร์

53

คุณอาจลองเพิ่มแถวตัวคั่น:

HTML:

<tr class="separator" />

CSS:

table tr.separator { height: 10px; }

7
สำหรับ IE นั้น tr โดยไม่ต้องมีร่างกายจะไม่ถูกจดจำ เพิ่ม dummy td tag ด้วย
Nap

ปัญหาคือใน HTML5 ตัวตรวจสอบ W3Cจะส่งข้อผิดพลาดว่า "แถวของตารางกว้าง 0 คอลัมน์ซึ่งน้อยกว่าจำนวนคอลัมน์ที่กำหนดโดยแถวแรก"
David Grayson

เยี่ยมมากฉันได้เพิ่ม <tr>, <td> และ <p> อีกชุดและตั้งค่าการมองเห็นของแท็กให้เป็นแบบซ่อน .. ทำงานด้วย :-)
Jeppe

47

คุณไม่สามารถเปลี่ยนระยะขอบของเซลล์ตารางได้ แต่คุณสามารถเปลี่ยนช่องว่างภายใน เปลี่ยนช่องว่างภายในของ TD ซึ่งจะทำให้เซลล์มีขนาดใหญ่ขึ้นและผลักข้อความออกจากด้านข้างด้วยการเพิ่มช่องว่างที่เพิ่มขึ้น หากคุณมีเส้นขอบ แต่ก็ยังไม่ตรงตามที่คุณต้องการ


ใช่การขยายจะดันเส้นขอบลงborder-bottomและpadding-bottomหมายความว่าเส้นขอบจะอยู่ด้านล่างของช่องว่างภายใน
Dan Dascalescu

21

ลองดูที่การยุบตัวของเส้นขอบ:คุณสมบัติที่แยกต่างหาก (ค่าเริ่มต้น) และคุณสมบัติระยะห่างของเส้นขอบ

ก่อนอื่นคุณต้องแยกพวกมันออกด้วยการยุบขอบจากนั้นคุณสามารถกำหนดช่องว่างระหว่างคอลัมน์และแถวที่มีระยะห่างระหว่างชายแดนชายแดนระยะห่าง

ทั้งสอง CSS คุณสมบัติเหล่านี้เป็นจริงที่ดีได้รับการสนับสนุนในทุกเบราว์เซอร์, ดูที่นี่

table     {border-collapse: separate;  border-spacing: 10px 20px;}

table, 
table td,
table th  {border: 1px solid black;}
<table>
  <tr>
    <td>Some text - 1</td>
    <td>Some text - 1</td>
  </tr>
  <tr>
    <td>Some text - 2</td>
    <td>Some text - 2</td>
  </tr>
  <tr>
    <td>Some text - 3</td>
    <td>Some text - 3</td>
  </tr>
</table>


20

ตกลงคุณสามารถทำได้

tr.classname td {background-color:red; border-bottom: 5em solid white}

ตรวจสอบให้แน่ใจว่ามีการตั้งค่าสีพื้นหลังบน td แทนที่จะเป็นแถว สิ่งนี้ควรใช้กับเบราว์เซอร์ส่วนใหญ่ ... (Chrome คือ & ทดสอบโดย ff)


สิ่งนี้สร้างปัญหาการจัดแนวตั้งแปลก ๆ อย่างน้อยใน Firefox
cjohansson

20

คุณต้องตั้งborder-collapse: separate;บนโต๊ะ สไตล์ชีทเริ่มต้นของเบราว์เซอร์ส่วนใหญ่เริ่มต้นที่border-collapse: collapse;ซึ่งจะเว้นระยะห่างระหว่างขอบ

นอกจากนี้ชายแดนระยะห่าง: ไปบนไม่ได้ TDTR

ลอง:

<html><head><style type="text/css">
    #ex    { border-collapse: separate; }
    #ex td { border-spacing: 1em; }
</style></head><body>
    <table id="ex"><tr><td>A</td><td>B</td></tr><tr><td>C</td><td>D</td></tr></table>
</body>

1
การเว้นช่องว่างชายแดนใช้สำหรับตารางที่ไม่ใช่ td ด้วย
silversky

4
ขอบคุณ ฉันขอบคุณคุณในการแก้ไขความคิดเห็นก่อนหน้านี้ แต่ตัวแก้ไข overzealous ที่ต้องการเปลี่ยนสไตล์ของฉันและทำลายรหัสในกระบวนการยังลบคำพูดของฉันขอบคุณ ตอนนี้ฉันวางไว้ที่นี่ซึ่งไม่สามารถแก้ไขได้
John Haugeland

18

คุณสามารถใช้line-heightในตาราง:

<table style="width: 400px; line-height:50px;">

คุณถูกต้อง แต่ข้อความจะได้รับความสูงของเส้นซึ่งไม่ดีด้วยฉันคิดว่าคุณควรเห็น coleman! เขามีทางออกที่ดี
Waqas Tahir


11

คำตอบที่สายเกินไป :)

หากคุณใช้การลอยกับtrองค์ประกอบคุณสามารถเว้นวรรคระหว่างสองแถวพร้อมmarginแอตทริบิวต์

table tr{
float: left
width: 100%;
}

tr.classname {
margin-bottom:5px;
}

12
มันน่ากลัว สิ่งนี้กำลังทำจริง ๆ คือการตั้งค่าdisplayคุณสมบัติblockสำหรับแถว สิ่งนี้ทำให้แถวมีระยะขอบ แนวตั้งในแนวตั้ง " ใช้กับ: องค์ประกอบทั้งหมดยกเว้นที่มีประเภทการแสดงตารางอื่นนอกเหนือจากตารางคำอธิบายภาพตารางและอินไลน์ตาราง " เนื่องจากtable-rowไม่ใช่ข้อยกเว้นเหล่านั้นดังนั้นจึงไม่นับ คุณอาจจะได้รับผลกระทบแบบเดียวกันโดยการทำtr {display:block;}แต่ฉันจะระวังการใช้วิธีการใดวิธีการหนึ่งในตารางที่ซับซ้อน มันจะไม่ส่งผลในสิ่งที่คุณคาดหวัง
sholsinger

มันน่ากลัว แต่ก็ใช้ได้ ไม่ได้อยู่ใน ie7 แต่การวางเซลล์โดยตรงในตารางนั้นทำงานได้ใน ie7
Liko

แถวแบบลอยไม่ใช่วิธีที่ดี .. โดยเฉพาะถ้าหน้าของคุณมีขนาดใหญ่กว่า 2x ความกว้างของแถว เพิ่มคุณสมบัติความกว้างให้กับแท็กทั้งสอง
AndreaCi

11

สำหรับการสร้างภาพลวงตาของระยะห่างระหว่างแถวให้ใช้สีพื้นหลังกับแถวจากนั้นสร้างเส้นขอบหนาด้วยสีขาวเพื่อให้มีการสร้าง "ช่องว่าง" :)

tr 
{
   background-color: #FFD700;
   border: 10px solid white;
}

9

วิธีที่ถูกต้องในการให้ระยะห่างสำหรับตารางคือการใช้ Cellpadding และ Cellspacing เช่น

<table cellpadding="4">

5
คุณสามารถทำได้ผ่าน CSS ซึ่งฉันบอกว่ามัน "ถูกต้อง" มากกว่า (นอกเหนือจากความจริงที่ว่ามันมีสไตล์ที่หรูหรากว่าการย้ายสไตล์จากมาร์กอัปไปยัง CSS ช่วยประหยัดแบนด์วิดท์)
Camilo Martin

2
มันไม่ได้บันทึกแบนด์วิดธ์ ฉันใช้มากขึ้นจริง ๆ สมมติว่าคุณไม่ได้เพิ่มสไตล์ชีทสำหรับสิ่งนี้คุณต้องเพิ่มตัวเลือกและอาจเป็นรหัสหรือชื่อในตารางนี้ นั่นคือจำนวนไบต์ที่มากขึ้นไม่น้อย
majinnaibu

9

ฉันสะดุดกับสิ่งนี้ในขณะที่ดิ้นรนกับปัญหาที่คล้ายกัน ฉันพบคำตอบของ Varun Natraaj ว่ามีประโยชน์มาก แต่ฉันจะใช้เส้นขอบโปร่งใสแทน

td { border: 1em solid transparent; }

เส้นขอบโปร่งใสยังคงมีความกว้าง


6

ใช้งานได้กับเบราว์เซอร์รุ่นล่าสุดส่วนใหญ่ในปี 2558 โซลูชันที่เรียบง่าย มันใช้งานไม่ได้เพื่อความโปร่งใส แต่ต่างจากคำตอบของ Thoronwen ฉันไม่สามารถทำให้โปร่งใสได้ทุกขนาด

    tr {
      border-bottom:5em solid white;
    }

3

เพียงใส่divข้างในtdและตั้งค่ารูปแบบต่อไปนี้div:

margin-bottom: 20px;
height: 40px;
float: left;
width: 100%;

2

ฉันรู้ว่านี่คือคำตอบของเธรดเก่าและอาจไม่ใช่โซลูชันที่ร้องขอ แต่ในขณะที่โซลูชันที่แนะนำทั้งหมดไม่ได้ทำสิ่งที่ฉันต้องการโซลูชันนี้ใช้งานได้สำหรับฉัน

ฉันมีเซลล์ตาราง 2 เซลล์ตัวหนึ่งมีสีพื้นหลังส่วนอีกเซลล์หนึ่งที่มีสีเส้นขอบ การแก้ปัญหาข้างต้นลบเส้นขอบดังนั้นเซลล์ทางด้านขวาจะดูเหมือนลอยอยู่กลางอากาศ วิธีแก้ปัญหาที่ใช้กลอุบายคือการแทนที่table, trและtdด้วย divs และคลาสที่สอดคล้องกัน: table จะเป็นdiv id="table_replacer", tr จะเป็นdiv class="tr_replacer"และ td จะเป็นdiv class="td_replacer"(เปลี่ยนแท็กปิดเป็น divs อย่างชัดเจน)

เพื่อให้ได้ทางออกสำหรับปัญหาของฉัน css คือ:

#table_replacer{display:table;}
.tr_replacer {border: 1px solid #123456;margin-bottom: 5px;}/*DO NOT USE display:table-row! It will destroy the border and the margin*/
.td_replacer{display:table-cell;}

หวังว่านี่จะช่วยใครซักคน


Imho โซลูชันนี้เทียบเท่ากับการใช้ตารางปกติ, tr, td pattern และ style tr {display: block;} ซึ่งฉันลอง ปัญหา: ตารางมีลักษณะแตกต่างกันเนื่องจากองค์ประกอบ td จะไม่แสดงผลตามความกว้างของตาราง แต่จะลอยไปทางซ้ายภายใน tr หมายความว่าองค์ประกอบ td ของแถวทั้งหมดจะไม่ถูกจัดตำแหน่งในแนวตั้งอีกต่อไป
Andreas Stankewitz

0

คุณสามารถเติมองค์ประกอบ <td /> ด้วยองค์ประกอบ <div /> และใช้ส่วนต่างใด ๆ กับ divs ที่คุณต้องการ สำหรับช่องว่างระหว่างแถวภาพคุณสามารถใช้ภาพพื้นหลังซ้ำในองค์ประกอบ <tr /> (นี่เป็นวิธีแก้ปัญหาที่ฉันเพิ่งใช้ในวันนี้และดูเหมือนว่าจะทำงานได้ทั้งใน IE6 และ FireFox 3 แม้ว่าฉันจะไม่ได้ทดสอบอีกต่อไป)

นอกจากนี้หากคุณไม่ชอบการแก้ไขรหัสเซิร์ฟเวอร์เพื่อใส่ <div /> s ไว้ใน <td /> s คุณสามารถใช้ jQuery (หรือบางอย่างที่คล้ายกัน) เพื่อห่อเนื้อหา <td /> ใน <div / แบบไดนามิก > ช่วยให้คุณสามารถใช้ CSS ได้ตามต้องการ



0

นี่เป็นวิธีแก้ปัญหาที่ง่ายและสง่างามโดยมีข้อแม้บางประการ:

  • คุณไม่สามารถทำให้ช่องว่างโปร่งใสได้จริงคุณต้องให้สีที่เฉพาะเจาะจงแก่พวกเขา
  • คุณไม่สามารถปัดเศษเส้นขอบด้านบนและด้านล่างของช่องว่างได้
  • คุณจำเป็นต้องรู้ช่องว่างภายในและขอบของเซลล์ตารางของคุณ

เมื่อนึกถึงสิ่งนี้ลองทำสิ่งนี้:

td {padding:5px 8px;border:2px solid blue;background:#E0E0E0}  /* lets say the cells all have this padding and border, and the gaps should be white */

tr.gapbefore td {overflow:visible}
tr.gapbefore td::before,
tr.gapbefore th::before
{
  content:"";
  display:block;
  position:relative;
  z-index:1;
  width:auto;
  height:0;
  padding:0;
  margin:-5px -10px 5px;  /* 5px = cell top padding, 10px = (cell side padding)+(cell side border width)+(table side border width) */
  border-top:16px solid white;  /* the size & color of the gap you want */
  border-bottom:2px solid blue; /* this replaces the cell's top border, so should be the same as that. DOUBLE IT if using border-collapse:separate */
}

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

โปรดทราบว่าหากคุณมีเส้นขอบรอบ ๆ ตารางรวมทั้งเซลล์คุณจะต้องเพิ่มระยะขอบแนวนอนของบล็อก 'ของคุณ ดังนั้นสำหรับเส้นขอบตาราง 4px คุณควรใช้แทน:

margin:-5px -12px 5px;     /* 14px = original 10px + 2px for 'uncollapsed' part of table border */

และหากตารางของคุณใช้border-collapse:separateแทนคุณborder-collapse:collapseจะต้อง (ก) ใช้ความกว้างเส้นขอบตารางแบบเต็ม:

margin:-5px -14px 5px;     /* 14px = original 10px + 4px full width of table border */

... และ (b) แทนที่เส้นขอบความกว้างสองเท่าซึ่งตอนนี้จำเป็นต้องปรากฏใต้ช่องว่าง:

border-bottom:4px solid blue;     /* i.e. 4px = cell top border + previous row's bottom border */

เทคนิคนี้ได้รับการปรับให้เข้ากับรุ่น. gap หลังจากที่คุณต้องการหรือสร้างช่องว่างแนวตั้ง (คอลัมน์) แทนช่องว่างแถว

นี่คือ codepen ที่คุณสามารถดูได้ในการทำงาน: https://codepen.io/anon/pen/agqPpW


-1

ที่นี่ทำงานได้อย่างราบรื่น:

#myOwnTable td { padding: 6px 0 6px 0;}

ฉันคิดว่าคุณสามารถหาเลย์เอาต์ที่ละเอียดยิ่งขึ้นได้โดยระบุ td ที่ต้องการ


-5

ทำสิ่งนี้แสดงให้เห็นข้างต้น ...

table tr{ float: left width: 100%; }  tr.classname { margin-bottom:5px; } 

ลบการจัดแนวคอลัมน์แนวตั้งดังนั้นโปรดระมัดระวังวิธีที่คุณใช้


-17

คุณเคยลองไหม:

tr.classname { margin-bottom:5em; }

อีกวิธีหนึ่งแต่ละ td สามารถปรับได้เช่นกัน:

td.classname { margin-bottom:5em; }

หรือ

 td.classname { padding-bottom:5em; }

ใช้งานได้จริงหรือ ฉันมีdiv.el { display: table-row; margin: 10px; }และกำไรไม่ได้ทำอะไรเลย ฉันรู้ว่ามันแตกต่างจากโต๊ะจริงเล็กน้อย แต่มันไม่ควร ...
bradlis7

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