CSS: ฉันจะสร้างช่องว่างระหว่างแถวในตารางได้อย่างไร


94

ความหมายทำให้ตารางผลลัพธ์มีลักษณะดังนี้:

[=== แถว ===]
[=== แถว ===]
[=== แถว ===]
[=== แถว ===]

... และอื่น ๆ เช่นนี้:

[=== แถว ===]

[=== แถว ===]

[=== แถว ===]

[=== แถว ===]

ฉันพยายามเพิ่ม

margin-bottom:1em;

เป็นทั้งtdและtrแต่ไม่มีอะไรเลย ความคิดใด ๆ ?


2
ทำไมไม่ใช้การเว้นระยะห่างเซลล์และแผงเซลล์?
adatapost

1
Cellspacing จะให้ระยะห่างระหว่างคอลัมน์ด้วย
rahul

4
Cellspacing และ cellpadding ไม่ถูกต้อง (X) HTML คุณไม่ควรใช้พวกเขา
freiksenet

8
@freiksenet: คุณคิดผิด เป็น HTML4 ที่เข้มงวดอย่างสมบูรณ์ ( w3.org/TR/html401/struct/tables.html#h-11.2.1 ), XHTML1 ( w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ) และแม้แต่ XHTML1 .1 ( w3.org/MarkUp/DTD/xhtml-table-1.mod )
mercator

คำตอบ:


217

ทั้งหมดที่คุณต้องการ:

table {
    border-collapse: separate;
    border-spacing: 0 1em;
}

สมมติว่าคุณต้องการช่องว่างแนวตั้ง 1em และไม่มีช่องว่างแนวนอน หากคุณกำลังทำสิ่งนี้คุณควรดูที่การควบคุมความสูงของเส้นด้วย

น่าแปลกที่คำตอบบางคำที่ผู้คนให้มาเกี่ยวข้องกับการล่มสลายของพรมแดน: การล่มสลายซึ่งผลของมันตรงกันข้ามกับคำถามที่ถาม


โอ้ใช่ฉันพยายามหาคอลัมน์เฉพาะเพื่อให้มีระยะห่างที่กว้างขึ้นจึงไม่คิดที่จะใช้กับตาราง
โจนาธาน

4
โซลูชันนี้ไม่อนุญาตให้คุณเลือกใช้ระยะห่างกับบางแถว
Flimm

15
คำถามไม่ได้ร้องขออย่างนั้น
John Haugeland

นี่เป็นความคิดที่ดี แต่ในการเติมช่องว่างด้านบนของแถวแรกฉันต้องมาหาวิธีแก้ปัญหาซึ่งไม่ได้มาตรฐานที่ฉันเดา แต่ใช้ได้ผล การให้thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ

4
ฉันบอกได้ไหมว่าฉันรักคุณ โอ้พระเจ้า. คุณเพิ่งบันทึก a $$
NikosKeyz

94
table {
    border-collapse: collapse;
}

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

เซลล์จะไม่ตอบสนองต่อสิ่งใดเว้นแต่คุณจะตั้งค่าการยุบขอบก่อน คุณยังสามารถเพิ่มเส้นขอบให้กับองค์ประกอบ TR ได้เมื่อตั้งค่าแล้ว (เหนือสิ่งอื่นใด)

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


คุณได้ทดสอบหรือไม่? ดูเหมือนว่า td จะมีช่องว่างภายในโดยมีหรือไม่มีการยุบ พรมแดนทำงานร่วมกับการล่มสลาย แต่ไม่ใช่บน IE
Kobi

สิ่งนี้ได้ผล น่ารำคาญที่ระยะขอบไม่ทำงาน แต่ไม่เป็นไรในกรณีนี้ ขอบคุณ.
MGOwen

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

1
เกือบจะเป็นส่วนแรกของ CSS2 ที่นำมาใช้เนื่องจากเบราว์เซอร์มีช่องว่างของตารางที่ใช้สำหรับเวอร์ชัน HTML ที่ทุกคนเคยใช้สำหรับการจัดวางแบบพิกเซลที่แม่นยำ ใช่ฉันแน่ใจ :)
John Haugeland

1
มันเป็นหนึ่งในมุมแปลก ๆ ของ CSS ที่ไม่มีใครนอกจากคนที่อ่านข้อมูลจำเพาะรู้เรื่อง (มีจำนวนมากอย่างน่าประหลาดใจโดยทั่วไปแล้วการลอยไม่ควรใช้แบบที่ใช้ในทางปฏิบัติ)
John Haugeland

8

หากไม่มีคำตอบอื่นใดที่น่าพอใจคุณสามารถสร้างแถวว่างและจัดรูปแบบด้วย CSS อย่างเหมาะสมเพื่อให้โปร่งใส


ทำไมต้องโหวตลง? คำตอบอื่น ๆ เป็นปัญหา: คำตอบของ rpflo ต้องการให้คุณใช้การยุบขอบและเพื่อขยายช่องว่างของเซลล์ทำให้เซลล์มีขนาดใหญ่ขึ้นแทนที่จะสร้างระยะห่างระหว่างเซลล์เหล่านี้ คำตอบของ John Haugeland ไม่อนุญาตให้คุณเลือกใช้ระยะห่างกับบางแถว ฉันสามารถไปต่อได้ แต่คำตอบนี้เป็นทางเลือกหนึ่งที่ใช้ได้กับกรณีการใช้งานของฉันเมื่อไม่มีคำตอบอื่นใด
Flimm

2
วิธีการลดลงของผู้ใช้ที่ไม่ระบุชื่อในการระบุความสูงของแต่ละแถวด้วย CSS นั้นเหนือกว่าการเพิ่มเนื้อหาจำลองลงในตารางอย่างมากในกรณีที่คุณต้องควบคุมแต่ละแถวซึ่งไม่ได้เกี่ยวกับคำถามนี้
John Haugeland

แถวปลอมยังสร้างความสับสนให้กับเครื่องมือที่คาดว่าแถวของตารางจะเป็นแถวของตาราง (เช่นเครื่องมือการช่วยการเข้าถึงที่สำคัญสำหรับผู้ปิดใช้งานและปลั๊กอินทั่วไปสำหรับการส่งออก / เรียงลำดับ / ฟอร์แมตใหม่ / ฯลฯ ) มีหลายเหตุผลในการใช้สไตล์เพื่อควบคุมการจัดแต่งทรงผมแทนที่จะเอาของปลอมเข้ามาเหมือนกฎทั่วไป อ่านเกี่ยวกับ Semantic Markup สำหรับข้อมูลเพิ่มเติม
MGOwen

@MGOwen คุณสามารถตั้งชื่อเครื่องมือการเข้าถึงที่จะล้มเหลวภายใต้สถานการณ์นี้ได้หรือไม่และจะล้มเหลวได้อย่างไร ตอนนี้ฉันไม่แน่ใจในคำแนะนำการช่วยสำหรับการเข้าถึงที่ไม่ได้กล่าวถึงเฉพาะมีคำแนะนำการช่วยสำหรับการเข้าถึงที่ไม่ดีมากมายที่นั่นไม่ได้ช่วยใครได้จริง (ตัวอย่างเช่นคำแนะนำร่างเอกสารสำหรับ HTML 5 นั้นผิดทั้งหมดเครื่องมือการเข้าถึงไม่ ทำงานในแบบที่คนทั่วไปบอกว่าทำงาน)
Flimm

4

หากคุณไม่ได้มีพรมแดนหรือมีพรมแดนและต้องการระยะห่างภายในเซลล์คุณสามารถใช้หรือpadding line-heightเท่าที่ฉันรู้ระยะขอบไม่มีผลต่อเซลล์และแถว
คุณสมบัติ CSS สำหรับการเว้นระยะห่างของเซลล์คือborder-spacingแต่ใช้ไม่ได้บน IE6 / 7 (ดังนั้นคุณสามารถใช้ได้ขึ้นอยู่กับฝูงชนของคุณ)

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

/ * ตารางยังคงต้องการcellspacing="0"ในมาร์กอัป * /


2

นี่คือวิธีการ (ฉันคิดว่ามันเป็นไปไม่ได้):

ขั้นแรกให้ตารางเฉพาะระยะห่างเส้นขอบแนวตั้ง (เช่น 5px) และตั้งค่าระยะห่างของเส้นขอบแนวนอนเป็น 0 จากนั้นคุณควรกำหนดเส้นขอบที่เหมาะสมให้กับเซลล์แต่ละแถว ตัวอย่างเช่นเซลล์ด้านขวาสุดในแต่ละแถวควรมีขอบด้านบนล่างและขวา เซลล์ด้านซ้ายสุดควรมีเส้นขอบด้านบนด้านล่างและด้านซ้าย และเซลล์อื่น ๆ ระหว่าง 2 เซลล์นี้ควรมีขอบด้านบนและด้านล่างเท่านั้น ดังตัวอย่างนี้:

<table style="border-spacing:0 5px; color:black">
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
</table>

1

ในความคิดของฉันวิธีที่ง่ายที่สุดคือการเพิ่มช่องว่างในแท็กของคุณ

td {
 padding: 10px 0
}

หวังว่านี่จะช่วยคุณได้! เชียร์!


สิ่งนี้จะสร้างพื้นที่เพิ่มเติมภายในแถวตาราง ถ้าแถวตารางมีสีจะดูไม่ดี
Kokodoko

1

เพียงแค่คุณสามารถใช้padding-topและpadding-bottomในtdองค์ประกอบ

หน่วยสามารถอะไรก็ได้จากรายการนี้:

ป้อนคำอธิบายภาพที่นี่

รหัสสาธิต:

td
{
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
  </tr>
</table>


0

ช่องว่างภายใน TD จะทำงานได้หากคุณต้องการให้พื้นที่มีสีพื้นหลังเหมือนกับ td

ในกรณีของฉันความต้องการคือช่องว่างระหว่างแถวส่วนหัวและอะไรก็ตามที่อยู่เหนือมัน

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

<td colspan="10"> 
    <div class="HeaderRow" 
         style="margin-top:10px;">
            <%# Eval("VendorName")%>
     </div>
</td>  

-1

หากคุณยึดติดกับการออกแบบโดยใช้ตารางความคิดที่ดีที่สุดคือให้แถวว่างที่ไม่มีเนื้อหาและระบุความสูงระหว่างแต่ละแถวในตาราง

คุณสามารถใช้ div เพื่อหลีกเลี่ยงความซับซ้อนนี้ได้ เพียงแค่ให้ส่วนต่างกับแต่ละ div


1
ยังคงมีเหตุผลที่ดีในการใช้ตาราง (เช่นข้อมูลแบบตาราง) คุณพูดถูกแถวที่ว่างเปล่าเป็นเส้นทางที่โง่เง่าอย่างแน่นอน: P แต่มีวิธีแก้ไขคือการยุบตัวของเส้นขอบ
Ryan Florence

-1

คุณยังสามารถปรับเปลี่ยนความสูงของแต่ละแถวโดยใช้ CSS

<head>
 <style>
 tr {
   height:40px;
 }
</style>
</head>

<body>
<table>

<tr> <td>One</td> <td>Two</td> </tr>
<tr> <td>Three</td> <td>Four</td> </tr>
<tr> <td>Five</td> <td>Six</td> </tr>

</table>
</body>

คุณยังสามารถปรับเปลี่ยนความสูงของ<td>องค์ประกอบได้ซึ่งควรให้ผลลัพธ์เดียวกัน


-1

สร้างอีกอัน<tr>ด้านล่างและเพิ่มพื้นที่หรือความสูงให้กับเนื้อหาของ<td>

ป้อนคำอธิบายภาพที่นี่

ตัวอย่างเช่นชำระเงินซอ

https://jsfiddle.net/jd_dev777/wx63norf/9/


นี่ถือเป็นการปฏิบัติที่ไม่ดี สาเหตุหนึ่งคือเครื่องมือ (เช่นโปรแกรมอ่านสำหรับผู้ใช้ที่ปิดใช้งาน) คาดว่าแถวของตารางจะเป็นแถวของตารางและจะส่งออก / อ่าน / ตีความแถว "ปลอม" ของคุณผสมกับของจริง ดูครั้งแรกที่คำตอบเดียวกันนี้ในปี 2014 ข้างต้น
MGOwen

1
@MGOwen ขอบคุณสำหรับคำแนะนำของคุณ เห็นด้วยโดยสิ้นเชิง
Jaydeep Chauhan

-4

เพิ่มกฎต่อไปนี้ใน tr และควรใช้งานได้

float: left

ตัวอย่าง (เปิดใน IE9 offcourse :)): http://jsfiddle.net/zshmN/

แก้ไข: นี่ไม่ใช่วิธีแก้ปัญหาที่ถูกกฎหมายหรือถูกต้องตามที่หลาย ๆ คนชี้ให้เห็น แต่ถ้าคุณไม่มีตัวเลือกและต้องการบางสิ่งสิ่งนี้จะใช้ได้ใน IE9

ดังนั้นผู้ที่ให้คะแนนกรุณาแจ้งให้เราทราบแนวทางแก้ไขด้วย


3
วิธีนี้จะป้องกันการเรียงคอลัมน์โดยอัตโนมัติเมื่อเซลล์มีข้อมูลที่มีขนาดต่างกัน - การมาร์กอัปตารางจะไม่มีจุดหมาย ใช้งานได้ดีพอในตัวอย่างที่ให้ไว้ แต่ไม่ใช่เทคนิคที่แนะนำ แก้ไขข้อความของเซลล์เพื่อดูว่าฉันหมายถึงอะไร
verism

เฮ้ @verism ขอโทษ แต่ฉันไม่เข้าใจประเด็นของคุณ คุณช่วยอธิบายเพิ่มเติมได้ไหม หรือถ้าคุณสามารถจัดหาซอที่วิธีนี้ล้มเหลวเนื่องจากฉันใช้วิธีนี้อย่างกว้างขวางและต้องการดูแลสถานการณ์ที่มันล้มเหลว
Sandeep Choudhary

ไม่มีการแบ่งคอลัมน์ที่ชัดเจน ซึ่งหมายความว่าข้อมูลแบบตารางจะสูญเสียโครงสร้างภาพและอ่านยากขึ้น jsfiddle.net/verism/zshmN/5
verism

@verism นี่เป็นปัญหาหนึ่ง แต่เราสามารถกำหนดคอลัมน์แก้ไขความกว้างได้ ฉันรู้ว่านี่ไม่ใช่วิธีแก้ปัญหาที่ดี แต่ฉันไม่พบโซลูชันอื่นใดที่ใช้ได้กับ IE9
Sandeep Choudhary

1
แถวตารางลอยไม่ถูกต้องตามข้อกำหนดของ CSS CSS2 ส่วนที่ 17 ต้องการให้ display: องค์ประกอบของแถวตารางอยู่ภายใน display: table-row-group, -header-group หรือ -footer-group elements อย่างไรก็ตามอัลกอริทึมแบบลอยตามส่วนที่ 9 จะฉีดบล็อกพาเรนต์ที่ไม่ระบุชื่อ ซึ่งหมายความว่าแถวตารางไม่มีเค้าโครงหลักตามกฎหมายอีกต่อไปและเบราว์เซอร์คาดเดาสิ่งที่ต้องทำ การแบนนี้ไม่ถูกต้อง
John Haugeland
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.