การเว้นแถวของตาราง


88
<html>
    <head>
        <title>Table Row Padding Issue</title>
        <style type="text/css">
            tr {
                padding: 20px;
            }
        </style>
    </head>
    <body>
        <table>
            <tbody>
                <tr>
                    <td>
                        <h2>Lorem Ipsum</h2>
                        <p>Fusce sodales lorem nec magna iaculis a fermentum lacus facilisis. Curabitur sodales risus sit amet
                        neque fringilla feugiat. Ut tellus nulla, bibendum at faucibus ut, convallis eget neque. In hac habitasse 
                        platea dictumst. Nullam elit enim, gravida eu blandit ut, pellentesque nec turpis. Proin faucibus, sem sed 
                        tempor auctor, ipsum velit pellentesque lorem, ut semper lorem eros ac eros. Vivamus mi urna, tempus vitae 
                        mattis eget, pretium sit amet sapien. Curabitur viverra lacus non tortor luctus vitae euismod purus 
                        hendrerit. Praesent ut venenatis eros. Nulla a ligula erat. Mauris lobortis tempus nulla non 
                        scelerisque.</p>
                    </td>
                </tr>
            </tbody>
        </table>
    </body>
</html>

นี่คือลักษณะของช่องว่างภายใน ดูว่า td ภายในไม่ได้รับผลกระทบอย่างไร ทางออกคืออะไร? ปัญหาการขยายแถวของตาราง


1
ใช้<div>และ<p>แทนของตาราง
natrium

37
ข้อมูลที่นำเสนอเป็นตารางและควรอยู่ในตาราง
Spencer

คำตอบ:


121

เคล็ดลับคือการเพิ่มช่องว่างให้กับtdองค์ประกอบ แต่ให้มีข้อยกเว้นสำหรับครั้งแรก (ใช่มันแฮ็ก แต่บางครั้งคุณต้องเล่นตามกฎของเบราว์เซอร์):

td {
  padding-top:20px;
  padding-bottom:20px;
  padding-right:20px;   
}

td:first-child {
  padding-left:20px;
  padding-right:0;
}

เด็กคนแรกได้รับการสนับสนุนค่อนข้างดี: https://developer.mozilla.org/en-US/docs/CSS/:first-child

tr:first-child tdคุณสามารถใช้เหตุผลเหมือนกันสำหรับการขยายแนวนอนโดยใช้

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

td:not(:first-child) {
  padding-top:20px;
  padding-bottom:20px;
  padding-right:20px;       
}

ฉันจะใช้: ไม่ใช่ตัวดำเนินการสำหรับการยกเว้นรายการเดียว เช่น tr: not (#first_row)
jeff

@CengizFrostclaw แน่นอนนั่นจะเป็นเรื่องที่รอบคอบกว่านี้ แต่การสนับสนุนไม่ดีเท่า
Joeri Hendrickx

โอ้คุณอาจจะพูดถูก ฉันไม่รู้มันสมเหตุสมผลแล้วที่จะเชื่อว่า: ไม่ใช่ตัวดำเนินการที่ได้รับการสนับสนุนมากกว่า แต่อีกครั้งฉันทดสอบใน Chrome เท่านั้น: D
jeff

8
นี้ไม่ได้เป็น 'hacky' นี้เป็นสิ่งที่ตัวเลือกเหล่านี้ถูกออกแบบมาสำหรับ
เหยื่อ

@spinners นี่แฮ็ค มันไม่ทำงานกับเค้าโครง RTL สร้างหุ่น<td>s.
Adam Leggett

28

ในข้อกำหนดCSS 1และCSS 2ช่องว่างภายในพร้อมใช้งานสำหรับองค์ประกอบทั้งหมดรวมถึง<tr>. การสนับสนุนช่องว่างภายในสำหรับ table-row ( <tr>) ได้ถูกลบออกในข้อกำหนดCSS 2.1และCSS 3 ฉันไม่เคยพบเหตุผลเบื้องหลังการเปลี่ยนแปลงที่น่ารำคาญนี้ซึ่งส่งผลต่อคุณสมบัติระยะขอบและองค์ประกอบตารางอื่น ๆ อีกสองสามอย่าง (ส่วนหัวส่วนท้ายและคอลัมน์)

อัปเดต: ในเดือนกุมภาพันธ์ 2015 หัวข้อนี้ในwww-style@w3c.orgรายชื่อผู้รับจดหมายได้กล่าวถึงการเพิ่มการรองรับช่องว่างภายในและเส้นขอบสำหรับแถวตาราง สิ่งนี้จะใช้โมเดลกล่องมาตรฐานกับองค์ประกอบแถวตารางและคอลัมน์ตาราง จะอนุญาตให้มีตัวอย่างเช่นนี้ ดูเหมือนว่าเธรดจะแนะนำว่าการรองรับการขยายแถวตารางไม่เคยมีอยู่ในมาตรฐาน CSS เนื่องจากจะมีเอ็นจิ้นการจัดวางที่ซับซ้อน ใน 30 กันยายน 2014 Editor's Draft of CSS แบบจำลองกล่องพื้นฐานคุณสมบัติช่องว่างภายในและเส้นขอบมีอยู่สำหรับองค์ประกอบทั้งหมดรวมถึงองค์ประกอบแถวตารางและคอลัมน์ตาราง หากสุดท้ายกลายเป็นคำแนะนำ W3C ตัวอย่าง html + css ของคุณอาจทำงานได้ตามที่ตั้งใจไว้ในเบราว์เซอร์ในที่สุด


3
ฉันก็สนใจในเหตุผลเช่นกัน!
แดน

8

ให้ td padding


4
สิ่งเดียวคือถ้ามี 2 td ภายใน tr จากนั้นจะมีช่องว่างระหว่าง 2 td ซึ่งฉันไม่ต้องการ
Spencer

6

ตัวเลือกที่ 1

คุณสามารถแก้ได้โดยเพิ่มเส้นขอบโปร่งใสในแถว (tr) เช่นนี้

HTML

<table>
    <tr> 
         <td>1</td>
    </tr>
    <tr> 
         <td>2</td>
    </tr>
</table>

CSS

tr {
    border-top: 12px solid transparent;
    border-bottom: 12px solid transparent;
}

ใช้งานได้เหมือนมีเสน่ห์แม้ว่าคุณต้องการเส้นขอบปกติวิธีนี้ก็ไม่ได้ผล

ทางเลือกที่ 2

เนื่องจากแถวทำหน้าที่เป็นวิธีในการจัดกลุ่มเซลล์วิธีที่ถูกต้องในการดำเนินการนี้ก็คือการใช้

table {
    border-collapse: inherit;
    border-spacing: 0 10px;
}

-1

นี่เป็นโพสต์เก่ามาก แต่ฉันคิดว่าฉันควรโพสต์วิธีแก้ปัญหาที่คล้ายกันที่ฉันประสบเมื่อเร็ว ๆ นี้

คำตอบ : ฉันแก้ไขปัญหานี้โดยแสดงองค์ประกอบtrเป็นองค์ประกอบบล็อกเช่นการระบุ CSS ของdisplay: blockสำหรับองค์ประกอบtr คุณสามารถดูสิ่งนี้ได้ในตัวอย่างโค้ดด้านล่าง

<style>
  tr {
    display: block;
    padding-bottom: 20px;
  }
  table {
    border: 1px solid red;
  }
</style>
<table>
  <tbody>
    <tr>
      <td>
        <h2>Lorem Ipsum</h2>
        <p>Fusce sodales lorem nec magna iaculis a fermentum lacus facilisis. Curabitur sodales risus sit amet neque fringilla feugiat. Ut tellus nulla, bibendum at faucibus ut, convallis eget neque. In hac habitasse platea dictumst. Nullam elit enim, gravida
          eu blandit ut, pellentesque nec turpis. Proin faucibus, sem sed tempor auctor, ipsum velit pellentesque lorem, ut semper lorem eros ac eros. Vivamus mi urna, tempus vitae mattis eget, pretium sit amet sapien. Curabitur viverra lacus non tortor
          luctus vitae euismod purus hendrerit. Praesent ut venenatis eros. Nulla a ligula erat. Mauris lobortis tempus nulla non scelerisque.
        </p>
      </td>
    </tr>
  </tbody>
</table>
<br>
<br>This TEXT IS BELOW and OUTSIDE the TABLE element. NOTICE how the red table border is pushed down below the end of paragraph due to bottom padding being specified for the tr element. The key point here is that the tr element must be displayed as a block
in order for padding to apply at the tr level.


8
สกรูทั้งหมดนี้แสดงให้เห็นว่าเค้าโครงตารางทำงานอย่างไร หากคุณทำเช่นนี้คุณไม่ควรใช้โต๊ะ - divใช้เป็นประจำ
Caesay

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