테이블에서 두 행 사이의 공간?


754

CSS를 통해 가능합니까?

노력하고있어

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

아무 소용이 없습니다. 어쩌면 내가 뭔가 잘못하고 있습니까?


브라우저 란 무엇이며 코드 스 니펫 (html / css)을 제공 할 수 있습니까?
Patrick Desjardins

잘 알고 있듯이 ff3을 사용하고 있습니다. 즉, 아마도 규칙을 지원하지만 지금은 ff3에서 수정하려고합니다. 나는 지금까지 간격과 패딩을 시도했지만 운이 없었습니다. productlistingitem은 기본 테이블입니다. <table class = "productListingItem"border = "0"cellpadding = "10"cellspacing = "0"> <tr> <tr> <td class = "dragItem">
Marin

1
때문에 어쩌면 그것은이다 border-spacing과 관련된 속성입니다 table하지가 tr. 시도하십시오 table.classname {border-spacing:5em}. Note:! DOCTYPE이 지정된 경우 IE8은 테두리 간격 속성을 지원합니다.
Varun Natraaj

테두리가 없을 때 줄 높이를 사용합니다.
Leah

답변:


523

td요소에 패딩을 사용해야 합니다. 이와 같은 것이 트릭을 수행해야합니다. 물론 하단 패딩 대신 상단 패딩을 사용하여 동일한 결과를 얻을 수 있습니다.

아래 CSS 코드에서보다 큼 기호는 패딩이 td하위 tr요소 인 클래스 에만 적용되는 요소 에만 적용됨을 의미합니다 spaceUnder. 이렇게하면 중첩 테이블을 사용할 수 있습니다. (예제 코드에서 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 : 공백은 일반적으로 빈 공간을 나타내며 특히 흰색은 아닙니다. 행 사이의 공간을 채색하려면 td 요소의 CSS <code> border-bottom </ code> 속성을 ​​사용하십시오. 아마도 1px 테두리로만 올바르게 렌더링됩니다. 우아하지는 않지만 또 다른 해결책은 빈 행을 사용하는 것입니다.
Jan Aagaard 2019

18
@ Jan : 예, 정확히 내 요점 ... 행 사이 에 투명한 빈 공간 을 두는 것은 매우 어렵습니다 . 귀하의 솔루션은 어떤 경우에는 도움이되지만 그 문제를 해결하지는 못합니다. 빈 테이블 행을 삽입하면 작동하지만 문제가 있습니다. bottom-border투명 힘으로 설정도 작동하지만, 나는 확실히 그것이 얼마나 크로스 브라우저 호환 아니에요.
Simon East


387

부모 테이블에서 설정을 시도하십시오.

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

테두리 선언을 추가하고 원하는 효과를 얻을 수 있는지 확인하십시오. 그러나 IE는 "분리 된 경계"모델을 지원하지 않습니다.


5
예, IE 7이 지원하지 않는 것을 제외 하고는 이 방법 이상적입니다. 브라우저 지원은 다음을 참조하십시오 quirksmode.org/css/tables.html
사이먼 동

7
또한 테이블의 모든 행에 대한 간격을 제어하므로 개별 행에 대해 행 간격을 설정할 수 없습니다 (OP가 달성하려는 것일 수 있음).
Simon East

1
이것은 Chrome과 Firefox간에 일치하지 않습니다. 당신이있는 경우 theadtbody, 그것은 이중 렌더링 border-spacing크롬에서, 그 사이 (그러나 파이어 폭스에서 하나 하나).
Camilo Martin

91
이것은 실제 답변이며, border-spacing: 0 1em행 사이의 간격을 얻도록 특별히 설정 되었습니다.
igneosaur

1
@igneosaur 나는 당신이 말한 것을 시도했지만 첫 번째 행뿐만 아니라 모든 행 사이에 간격을 추가했습니다. 작동하는 jsfiddle을 제공 할 수 있습니까?
user3281466

184

데이터가있는 id 앨범이있는 테이블이 있습니다 ... trs와 tds를 생략했습니다.

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

CSS에서 :

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

15
이것은 나를 위해 잘 작동했습니다. 경계 간격의 첫 번째 인수는 셀 사이의 가로 간격이고 두 번째 인수는 세로 간격입니다.

좋은 오래된 HTML이 작업을 수행 할 수 있다면 멋진 CSS에 의해 항상 필요한 것은 아닙니다 :)
luator


"tbody"내부의 tr에만 적용 할 수 있습니까?
제이슨

129

테이블 뒤에 배경 이미지가 있기 때문에 흰색 패딩으로 가짜가 작동하지 않습니다. 각 내용 행 사이에 빈 행을 넣는 것을 선택했습니다.

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

그런 다음 CSS를 사용하여 스페이서 행에 특정 높이와 투명한 배경을 제공하십시오.


3
이것은 아마도 더 융통성이 있다고 생각합니다. 공간이 필요할 때 (동적으로 생성 된 페이지) 항상 제어 할 수는 없습니다.
Stefan Kendall

10
CSS 지원이 거의 존재하지 않고 대부분의 레이아웃에 테이블이 사용 된 90 년대를 생각 나게합니다. 그래도 다른 "답변"이 실제로 테이블 행 사이에 공간 만드는 측면에서 더 나쁘지 않기 때문에 여전히 +1을주고 있습니다.
미로

@labyrinth 90 년대 이후 많은 변화가 없었습니다. HTML에 관해서는 모든 것이 훨씬 강력하고 복잡해졌습니다.
maaartinus

73

Mozilla 개발자 네트워크에서 :

경계 간격 CSS 속성은 인접한 셀의 경계 사이의 거리를 지정합니다 (분리 된 경계 모델에만 해당). 이는 프리젠 테이션 HTML의 cellspacing 속성과 동일 하지만 선택적인 두 번째 값을 사용하여 수평 및 수직 간격을 다르게 설정할 수 있습니다.

마지막 부분은 종종 감독됩니다. 예:

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

최신 정보

이제 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

그것은 작동하지만 의미 적으로 올바르지 않습니다 (세퍼레이터 행은 다른 행과 같은 데이터가있는 실제 행이 아닙니다. 화면 판독기 또는 기타 보조 장치를 사용하는 사람들뿐만 아니라 색인 작성 목적 및 큰 차이는 없지만 웹 사이트를 개발할 때 다시 머리에 두는 것이 좋습니다. :)
Justus Romijn

실제로 테이블을 나타 내기 위해 테이블을 사용하는 경우에도 마찬가지입니다. 그가 테이블 형식으로 데이터를 표시하는 방법으로 테이블을 사용하는 경우 위의 두 줄에 간격을 추가하는 대신 두 항목 사이의 간격을 나타내는 행을 삽입하는 것이 더 합리적이라고 주장합니다. 사용자가 원하는 것은 두 줄 사이에 공간을 추가하고 한 줄 내의 요소 크기를 늘리지 않기 때문에 줄 아래에 있습니다.
Paul Taylor

53

구분자 행을 추가하려고 할 수 있습니다.

html :

<tr class="separator" />

CSS :

table tr.separator { height: 10px; }

7
IE의 경우 본문이없는 tr은 인식되지 않습니다. 더미 td 태그도 추가하십시오.
Nap

문제는 HTML5에서 W3C 유효성 검사기 가 "테이블 행의 너비가 0 열이며 첫 번째 행에서 설정 한 열 수보다 적습니다"라는 오류를 표시한다는 것입니다.
David Grayson

좋아, 나는 또 다른 <tr>, <td> 및 <p>를 추가하고 p-tag의 가시성을 hidden으로 설정했습니다 .. 작동합니다. :-)
Jeppe

47

테이블 셀의 여백을 변경할 수 없습니다. 그러나 패딩을 변경할 수 있습니다. TD의 패딩을 변경하면 셀이 더 커지고 패딩이 증가한 텍스트를 옆으로 밀어냅니다. 그러나 경계선이있는 경우 여전히 원하는 것이 아닙니다.


그래, 패딩 때문에, 국경 아래로 밀어 버린다 border-bottompadding-bottom경계가 패딩 아래된다는 것을 의미합니다.
Dan Dascalescu

21

border-collapse : 개별 속성 (기본값)과 border-spacing 속성을 살펴보십시오 .

먼저 border-collapse분리 해야 하며 border-spacing으로 열과 행 사이간격을 정의 할 수 있습니다 .

이 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 테스트)


이것은 적어도 파이어 폭스에서 이상한 수직 정렬 문제를
일으킨다

20

border-collapse: separate;테이블 에 설정해야 합니다. 대부분의 브라우저 기본 스타일 시트는에서 시작하여 border-collapse: collapse;테두리 간격을 줄입니다.

또한, 국경 간격은 다음에 간다 TD는 없습니다 TR.

시험:

<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
국경 간격은 또한 테이블이 아닌 테이블을위한 것입니다
silversky

4
감사. 나는 이전에 의견 수정에 감사했지만 내 스타일을 변경하고 프로세스에서 코드를 깨 뜨리려는 지나치게 편집자는 내 말 감사를 제거했습니다. 이제 편집 할 수없는 곳에 넣었습니다.
John Haugeland

18

표에서 선 높이 를 사용할 수 있습니다 .

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

당신은 정확하지만 텍스트도 좋지 않은 줄 높이를 얻습니다. 나는 당신이 coleman을보아야한다고 생각합니다! 그는 훌륭한 해결책을 가지고 있습니다
Waqas Tahir


11

너무 늦게 대답 :)

tr요소에 float를 적용 하면 marginattribute를 사용 하여 두 행 사이에 간격을 둘 수 있습니다 .

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

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

12
그것은 무섭다. 이것이 실제로하는 일은 행 displayblock대한 속성을 설정하는 것 입니다. 이렇게하면 행에 여백이 생길 수 있습니다. 세로 여백 " 적용 대상 : 테이블 캡션, 테이블 및 인라인 테이블 이외의 테이블 표시 유형이있는 요소를 제외한 모든 요소 " 이후 table-row그 예외 중 하나가 아닌, 다음 그것을 계산하지 않습니다. 당신은 아마 그렇게함으로써 동일한 효과를 얻을 수 tr {display:block;}있지만 복잡한 테이블에서 이러한 방법 중 하나를 사용하는 것에주의해야합니다. 예상 한 결과를 얻지 못할 수 있습니다.
sholsinger

무섭지 만 효과가있었습니다. ie7은 아니지만 테이블에서 직접 셀 간격은 ie7에서 작동합니다.
Liko

부동 행은 좋은 해결책이 아닙니다. 특히 페이지가 행 너비의 2 배보다 큰 경우. width 속성을 두 태그 모두에 추가
AndreaCi

11

행 사이 간격의 환영을 만들려면 배경색을 행에 적용한 다음 흰색으로 두꺼운 테두리를 만들어 "공간"을 만듭니다. :)

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

9

표에 간격을 두는 올바른 방법은 셀 패딩과 셀 간격을 사용하는 것입니다.

<table cellpadding="4">

5
CSS를 통해이 작업을 수행 할 수 있습니다. CSS가 더 "정확하다"고 말합니다 (스타일이 더 우아하고 마크 업에서 CSS로 이동하면 대역폭이 절약됩니다).
Camilo Martin

2
대역폭을 절약하지 않습니다. 나는 실제로 더 많이 사용합니다. 이를 위해 스타일 시트를 추가하지 않는다고 가정하면이 테이블에 선택기와 ID 또는 이름을 추가해야합니다. 그것은 더 많은 바이트입니다.
majinnaibu

9

비슷한 문제로 어려움을 겪고있는 동안 나는 이것을 우연히 발견했습니다. Varun Natraaj의 답변이 매우 유용하다는 것을 알았지 만 대신 투명한 테두리를 사용합니다.

td { border: 1em solid transparent; }

투명한 테두리에는 여전히 너비가 있습니다.


6

2015 년 최신 브라우저에서 작동합니다. 간단한 솔루션. 투명하게 작동하지는 않지만 Thoronwen의 답변과 달리 모든 크기로 투명하게 렌더링 할 수는 없습니다.

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

3

간단히 말해서 div공진 영역 td과의 다음과 같은 스타일을 설정합니다 div:

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

2

나는 이것이 오래된 스레드에 대한 답변이며 요청 된 솔루션이 아닐 수도 있지만 제안 된 모든 솔루션이 필요한 것을 수행하지는 않지만이 솔루션은 나를 위해 일했습니다.

하나는 배경색이 있고 다른 하나는 테두리 색이있는 2 개의 표 셀이 있습니다. 위의 솔루션은 경계를 제거하므로 오른쪽의 셀이 공중에 떠있는 것처럼 보입니다. 속임수를 썼는지 솔루션은 교체하는 것이 었습니다 table, tr그리고 tddiv의 및 해당 클래스와 표가 될 것이다 div id="table_replacer", 그럴 필요가있을 것입니다 div class="tr_replacer"및 TD는 것 div class="td_replacer"(변경 분명히 물론 된 div 태그를 닫는)

내 문제에 대한 해결책을 얻으려면 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 패턴 및 스타일 tr {display : block;}을 사용하는 것과 같습니다. 문제점 : td 요소가 테이블 너비로 렌더링되지 않고 tr 내에서 왼쪽으로 떠오므로 테이블이 다르게 보입니다. 즉, 모든 행의 td 요소가 더 이상 수직으로 정렬되지 않습니다.
Andreas Stankewitz

0

<td /> 요소를 <div /> 요소로 채우고 원하는 div에 여백을 적용 할 수 있습니다. 행 사이의 시각적 공간을 위해 <tr /> 요소에서 반복되는 배경 이미지를 사용할 수 있습니다. (이것은 내가 방금 사용한 솔루션이며 더 이상 테스트하지는 않았지만 IE6 및 FireFox 3에서 모두 작동하는 것으로 보입니다.)

또한 <td /> 내에 <div />를 넣도록 서버 코드를 수정하려는 경우 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블록을 원하는 행의 모든 ​​셀 상단에 붙이고 앞에 간격을 둡니다. 이 블록은 기존 테두리와 겹치도록 셀에서 약간 튀어 나와서 숨 깁니다. 이 블록들은 상단과 하단 테두리가 함께 끼워져 있습니다. 상단 테두리는 간격을 형성하고 하단 테두리는 셀의 원래 상단 테두리 모양을 재현합니다.

셀뿐만 아니라 테이블 자체 주위에 테두리가있는 경우 '블록'의 가로 -ve 여백을 추가로 늘려야합니다. 따라서 4px 표 테두리의 경우 대신 다음을 사용하십시오.

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

그리고 테이블 border-collapse:separate대신을 사용 하는 경우 border-collapse:collapse(a) 전체 테이블 테두리 너비를 사용해야합니다.

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 */

이 기술은 원하는 경우 .gapafter 버전에 쉽게 적용되거나 행 간격 대신 수직 (열) 간격을 만들 수 있습니다.

다음은 실제로 볼 수있는 코드 펜입니다. 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.