CSS : 테이블의 행 사이에 간격을 어떻게 생성합니까?


94

결과 테이블을 다음과 같이 보이게 만드는 것을 의미합니다.

[=== 행 ===]
[=== 행 ===]
[=== 행 ===]
[=== 행 ===]

... 그리고 더 비슷합니다 :

[=== 행 ===]

[=== 행 ===]

[=== 행 ===]

[=== 행 ===]

나는 추가를 시도했다

margin-bottom:1em;

tdtr 모두에게 있지만 아무것도 얻지 못했습니다. 어떤 아이디어?


2
왜 cellpacing과 cellpadding은 안되나요?
adatapost

1
셀 간격은 열 사이의 간격도 제공합니다.
rahul 2009-08-12

4
셀 간격 및 셀 패딩이 유효하지 않습니다 (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 2009-08-12

답변:


214

당신이 필요로하는 모든:

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

그것은 당신이 1em 수직 간격을 원하고 수평 간격이 없다고 가정합니다. 이 작업을 수행하는 경우 줄 높이 제어도 살펴 봐야합니다.

사람들이 제공 한 답변 중 일부가 국경 붕괴 : 붕괴와 관련되어 있다는 것은 다소 이상합니다. 그 효과는 질문이 요청한 것과 정반대입니다.


아 맞다, 나는 더 넓은 간격을 갖도록 특정 열을 얻으려고했기 때문에 테이블에 적용 할 생각은 없었다
Jonathan.

4
이 솔루션을 사용하면 특정 행에 간격을 선택적으로 적용 할 수 없습니다.
Flimm

15
질문은 그것을 요구하지 않았습니다.
John Haugeland 2014

이것은 좋은 생각이지만 첫 번째 행의 상단 간격을 채우기 위해 표준이 아니지만 작동하는 해결 방법을 찾아야했습니다. 주기 thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ

3
당신을 사랑한다고 말할 수 있습니까? 세상에. 당신은 내 $$ 저장
NikosKeyz

93
table {
    border-collapse: collapse;
}

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

먼저 border-collapse를 설정하지 않으면 셀이 반응하지 않습니다. 설정된 TR 요소에 테두리를 추가 할 수도 있습니다.

이것이 레이아웃의 경우 DIV 및 최신 레이아웃 기술을 사용하는 것으로 이동하지만 이것이 표 형식의 데이터라면 스스로를 두 드리십시오. 나는 여전히 데이터를 위해 웹 애플리케이션에서 테이블을 많이 사용합니다.


테스트 했습니까? td의 패딩은 붕괴 유무에 관계없이있을 수 있습니다. 테두리는 축소와 함께 작동하지만 IE에서는 작동하지 않습니다.
Kobi

이것은 효과가 있었다. 여백이 작동하지 않는다는 것이 귀찮지 만이 경우에는 중요하지 않습니다. 감사.
MGOwen

30
이것은 정말 나쁜 접근법입니다. 셀이 떨어져 있기를 원하기 때문에 셀을 함께 융합하여 셀 위치를 지정하는 것이 아니라 셀의 위치를 ​​지정하도록 셀 상자를 수정합니다. 두 번째로 세포에 배경이 필요하면 엉망입니다. 올바른 접근 방식은 테두리 분리가 아니라 테두리 분리입니다. 테두리 분리를 사용하여 테두리 분리를 정의합니다.
John Haugeland 2013 년

1
브라우저에는 이미 모든 사람들이 픽셀 단위의 정확한 레이아웃에 사용하는 HTML 버전에 대해 구현 된 테이블 간격이 있기 때문에 구현 된 CSS2의 거의 첫 번째 부분입니다. 네, 확신합니다. :)
John Haugeland 2015

1
사양을 읽은 사람 외에는 아무도 모르는 CSS의 이상한 모서리 중 하나입니다. (그들 중 의외로 많은 수 있습니다 마찬가지로 기본적으로는 실제로 사용되는 방법을 사용해서는 안됩니다 떠..)
존 하 우즈 랜드

7

다른 답변 중 어느 것도 만족스럽지 않은 경우 언제든지 빈 행을 만들고 CSS로 적절하게 스타일을 지정하여 투명하게 만들 수 있습니다.


왜 반대 투표입니까? 다른 답변은 문제가 있습니다. rpflo의 답변은 border-collapse를 사용하고 셀의 패딩을 확장하여 셀 사이에 간격을 만드는 대신 더 크게 보이도록 요구합니다. John Haugeland의 대답은 특정 행에 간격을 선택적으로 적용하는 것을 허용하지 않습니다. 계속할 수는 있지만이 답변은 다른 답변이 없었을 때 내 사용 사례에 적합한 옵션 중 하나입니다.
Flimm

2
CSS로 개별 행의 높이를 지정하는 익명 사용자의 반대 투표 방식은 테이블에 더미 콘텐츠를 추가하는 것보다 훨씬 우수합니다. 개별 행을 제어해야 할 가능성이 있습니다.
John Haugeland 2014-08-15

가짜 행은 또한 테이블 행이 테이블 행이 될 것으로 예상하는 도구를 혼동합니다 (예 : 비활성화 된 사용자를위한 중요한 접근성 도구, 내보내기 / 정렬 / 재 포맷 등을위한 일반적인 플러그인). 일반적으로 가짜 물건을 집어 넣는 대신 스타일을 사용하여 스타일을 제어하는 ​​데는 여러 가지 이유가 있습니다. 자세한 정보는 시맨틱 마크 업에 대해 읽어보십시오.
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-toppadding-bottomA의 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 오프 코스에서 열기 :)) : http://jsfiddle.net/zshmN/

편집 : 이것은 많은 사람들이 지적한 합법적이거나 올바른 해결책이 아니지만 옵션이없고 필요한 것이 있으면 IE9에서 작동합니다.

따라서 투표를 거부하는 모든 분들께 올바른 해결책도 알려주십시오.


3
이 접근 방식은 셀에 다른 차원의 데이터가 포함 된 경우 열의 자동 정렬을 방지합니다. 테이블 마크 업은 본질적으로 무의미합니다. 제공된 예제에서는 충분히 작동하지만 권장되는 기술은 아닙니다. 내가 의미하는 바를 확인하기 위해 셀의 텍스트를 변경하십시오.
verism 2013

안녕하세요 @verism, 죄송하지만 요점을 이해하지 못했습니다. 좀 더 설명해 주 시겠어요? 또는이 방법을 광범위하게 사용하고 실패한 시나리오를 처리하고 싶으 므로이 방법이 실패하는 바이올린을 제공 할 수 있습니다.
Sandeep Choudhary 2013

열에 대한 명확한 묘사가 없습니다. 이는 표 형식 데이터가 시각적 구조를 잃고 읽기가 더 어려워 짐을 의미합니다. jsfiddle.net/verism/zshmN/5
verism

@verism ya 이것은 하나의 문제이지만 고정 너비 열을 정의 할 수 있습니다. 나는 이것이 좋은 해결책이 아니라는 것을 알고 있지만 IE9에서 작동하는 다른 해결책을 찾지 못했습니다
Sandeep Choudhary

1
CSS 사양에 따라 플로팅 테이블 행이 합법적이지 않습니다. CSS2 섹션 17에서는 display : table-row 요소가 display : table-row-group, -header-group 또는 -footer-group 요소 내에 있어야합니다. 그러나 섹션 9에 따른 부동 알고리즘은 익명 블록 부모를 삽입합니다. 이는 테이블 행에 더 이상 합법적 인 상위 레이아웃이 없으며 브라우저가 수행 할 작업을 추측하고 있음을 의미합니다. 이것은 잘못된 것입니다.
John Haugeland 2014-08-27
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.