CSS 셀 여백


96

내 HTML 문서에는 두 개의 열과 여러 행이있는 테이블이 있습니다. CSS로 첫 번째 열과 두 번째 열 사이의 공간을 어떻게 늘릴 수 있습니까? "margin-right : 10px;"를 적용 해 보았습니다. 왼쪽에있는 각 셀에 적용되지만 효과는 없습니다.


여기에 새로 업데이트 된 좋은 CSS 솔루션이 있습니다. stackoverflow.com/a/21551008/2827823
Ason

답변:


91

이것을 첫 번째에 적용하십시오 <td>.

padding-right:10px;

HTML 예 :

<table>
   <tr>
      <td style="padding-right:10px">data</td>
      <td>more data</td>
   </tr>
</table>

12
그것에 훨씬 더 좋은 방법은 국경 붕괴를 사용하는 것입니다 : 별도의
Gaurav Ramanan

21
누군가가 위의 설명을 복사 / 붙여 넣기 한 경우에 대비해 위 주석은 다음과 같아야합니다 border-collapse: separate( separate위 의 철자에 오타가 있음 )
Tony DiNitto

1
또한 테두리 사이의 간격을 정의하려면 다음을 사용해야합니다.border-spacing: 5px;
Sølve Tornøe

border-spacing또한 행 사이에 공간을 추가합니다. 안타깝게도 수직 및 수평 간격에 대한 별도의 속성이 없습니다.
Lee Blake

border-spacing두 개의 인수를 취합니다. 하나는 수평이고 다른 하나는 수직입니다.
OldTinfoil

152

경고 한 마디 : padding-right특정 (시각적) 문제를 해결할 수는 있지만 테이블 셀 사이 에 간격을 추가하는 올바른 방법은 아닙니다 . 무엇 padding-right셀 위해하는 것은 대부분의 다른 요소에 대해 무엇을 유사합니다 : 그것은 공간을 추가 셀. 셀에 테두리 나 배경색 또는 게임을 방해하는 다른 것이 없으면 셀 사이의 공간을 설정하는 효과를 모방 할 수 있지만 그렇지 않은 경우에는 그렇지 않습니다.

누군가 언급했듯이 테이블 셀에 대한 여백 사양은 무시됩니다.

CSS 2.1 사양 – 표 – 표 내용의 시각적 레이아웃

내부 테이블 요소는 내용과 테두리가있는 직사각형 상자를 생성합니다. 셀에도 패딩이 있습니다. 내부 테이블 요소에는 여백이 없습니다.

그렇다면 "올바른"방법은 무엇입니까? cellspacing테이블 의 속성 을 바꾸려는 경우 border-spacing( border-collapse비활성화 됨)이 대체입니다. 그러나 셀당 "여백"이 필요한 경우 CSS를 사용하여 어떻게 올바르게 달성 할 수 있는지 잘 모르겠습니다. 내가 생각할 수있는 유일한 해킹 padding은 위와 같이 사용 하고 셀 스타일 (배경색, 테두리 등)을 피하고 대신 셀 내부의 컨테이너 DIV를 사용하여 이러한 스타일을 구현하는 것입니다.

저는 CSS 전문가가 아니므로 위의 내용이 틀릴 수도 있습니다 (알아두면 좋을 것입니다! 저도 표 셀 여백 CSS 솔루션을 원합니다).

건배!


패딩에는 훌륭하지만 마진은 어떻습니까? 테두리가있는 셀 외부에 공백을 추가하고 싶습니다. 여백 CSS는 셀에 영향을 미치지 않는 것 같습니다.
Levitikon

1
Levitikon, 맞습니다-여백은 위의 이유로 작동하지 않습니다. 원하는 것을 얻을 수있는 유일한 방법 인 AFAIK는 셀의 내용을 DIV로 감싸고 셀이 아닌 해당 DIV에 여백 테두리를 추가하는 것입니다.
라비

오래 전에 CSS 솔루션을 게시했습니다 (오늘 업데이트 됨) : stackoverflow.com/a/21551008/2827823
Ason


14

이 작업이 상당히 뒤늦다는 것을 알고 있지만 기록을 위해 CSS 선택기를 사용하여이를 수행 할 수도 있습니다 (인라인 스타일이 필요하지 않음).이 CSS는 모든 행의 첫 번째 열에 패딩을 적용합니다.

table > tr > td:first-child { padding-right:10px }

그리고 이것은 CSS가 아닌 HTML이 될 것입니다! :

<table><tr><td>data</td><td>more data</td></tr></table>

이것은 특히 CSS로 많은 특정 서식을 수행해야하는 경우 훨씬 더 우아한 마크 업을 허용합니다.


14

안타깝게도 여백은 개별 셀에서 작동하지 않지만 사이에 공백을 두려는 두 셀 사이에 추가 열을 추가 할 수 있습니다. 또 다른 옵션은 배경과 동일한 색상의 테두리를 사용하는 것입니다.


테두리는 패딩과 동일한 문제가있는 것 같습니다. 경계 외부가 아닌 셀 내용과 경계 사이에 공간을 추가합니다.
stewbasic

11

간단하게 할 수 있습니다.

<html>
<table>
    <tr>
        <td>one</td>
        <td width="10px"></td>
        <td>two</td>
    </tr>
</table>
</html>

CSS가 필요하지 않습니다. :)이 10px가 공간입니다.


이 일 저를 생각 나게 좋은, 단순하고 효과적인 덕분입니다
헤이든 Thring

8
이것은 구조와 스타일을 분리하는 좋은 방법이 아닙니다. CSS가 필요한지 여부는 아닙니다. CSS는 이와 같은 용도로 사용해야합니다.
Simon Robb 2013 년

<td style = "width : 10px;"> </ td>가 아니어야합니다.
Rune Jeppesen

1
가장 간단한 솔루션이 가장 좋습니다. 인라인 스타일 방법도 좋은 :)입니다
MrTrebor

내 특정 사례에서 작동합니다. 아주 창의적인. 감사합니다
Phan Van Linh

7

시도해보십시오 padding-right. margin셀 사이 에 's 를 넣을 수 없습니다 .

<table>
   <tr>
      <td style="padding-right: 10px;">one</td>
      <td>two</td>
   </tr>
</table>

4

사용 국경 붕괴 : 분리; 테이블의 측면이 아닌 테이블 셀 사이에 여백 만 필요하기 때문에 나를 위해 작동하지 않았습니다.

다음 해결책을 찾았습니다.

- CSS

.tableDiv{
    display: table;
}

.cellSeperator {
    display: table-cell;
    width: 20px;
}

.cell1 {
    display: table-cell;
    width: 200px;
}

.cell2 {
    display: table-cell;
    width: 50px;
}

- HTML

<div class="tableDiv">
    <div class="cell1"></div>
    <div class="cellSeperator"></div>
    <div class="cell2"></div>
</div>

4

이 솔루션의 작업은 td'모두 그 필요성이야 borderpadding스타일링에 대한합니다.
(Chrome 32, IE 11, Firefox 25에서 테스트 됨)

CSS:
table {border-collapse: separate; border-spacing:0; }   /*  separate needed      */
td { display: inline-block; width: 33% }  /*  Firefox need inline-block + width  */
td { position: relative }                 /*  needed to make td move             */
td { left: 10px; }                        /*  push all 10px                      */
td:first-child { left: 0px; }             /*  move back first 10px               */
td:nth-child(3) { left: 20px; }           /*  push 3:rd another extra 10px       */

/*  to support older browsers we need a class on the td's we want to push
    td.col1 { left: 0px; }
    td.col2 { left: 10px; }
    td.col3 { left: 20px; }
*/

HTML:
<table>
    <tr>
        <td class='col1'>Player</td>
        <td class='col2'>Result</td>
        <td class='col3'>Average</td>
    </tr>
</table>

2016 년 업데이트

Firefox는 이제 inline-block세트 없이 지원합니다.width

table {border-collapse: separate; border-spacing:0; }
td { position: relative; padding: 5px; }
td { left: 10px; }
td:first-child { left: 0px; }
td:nth-child(3) { left: 20px; }
td { border: 1px solid gray; }


/* CSS table */
.table {display: table; }
.tr { display: table-row; }
.td { display: table-cell; }

.table { border-collapse: separate; border-spacing:0; }
.td { position: relative; padding: 5px; }
.td { left: 10px; }
.td:first-child { left: 0px; }
.td:nth-child(3) { left: 20px; }
.td { border: 1px solid gray; }
<table>
  <tr>
    <td>Player</td>
    <td>Result</td>
    <td>Average</td>
  </tr>
</table>

<div class="table">
  <div class="tr">
    <div class="td">Player</div>
    <div class="td">Result</div>
    <div class="td">Average</div>
  </div>
</div>


이것은 div로 만들어진 css 테이블 (display : table *)에서도 작동했습니다.
Necreaux 2015

2

그런 식으로 셀의 개별 열을 구분할 수 없습니다. 제 생각에 가장 좋은 방법은 style='padding-left:10px'두 번째 열에 를 추가하고 내부 div 또는 요소에 스타일을 적용하는 것입니다. 이렇게하면 더 큰 공간의 환상을 얻을 수 있습니다.


2

표의 너비를 제어 할 수있는 경우 모든 표 셀에 왼쪽 여백을 삽입하고 전체 표에 왼쪽 여백을 음수로 삽입합니다.

table {
    margin-left: -20px;
    width: 720px;
}

table td {
    padding-left: 20px;
}

표의 너비에는 패딩 / 여백 너비가 포함되어야합니다. 위의 예를 예로 들어 테이블의 시각적 너비는 700px가됩니다.

표 셀에 테두리를 사용하는 경우 이것은 최상의 솔루션이 아닙니다.


2

해결책

이 문제를 해결하는 가장 좋은 방법은 시행 착오를 조합하고 이전에 작성된 내용을 읽는 것입니다.

http://jsfiddle.net/MG4hD/


보시다시피 꽤 까다로운 일이 진행 중입니다 ...하지만 이것을 좋아 보이게하는 주요 키커는 다음과 같습니다.

부모 요소 (UL) : 국경 붕괴 : 분리; 테두리 간격 : .25em; 여백-왼쪽 : -.25em;
CHILD ELEMENTS (LI) : 디스플레이 : 테이블 셀; 수직 정렬 : 중간;

HTML

<ul>
<li><span class="large">3</span>yr</li>
<li>in<br>stall</li>
<li><span class="large">9</span>x<span class="large">5</span></li>
<li>on<br>site</li>
<li>globe</li>
<li>back<br>to hp</li>
</ul>

CSS

ul { border: none !important; border-collapse: separate; border-spacing: .25em; margin: 0 0 0 -.25em; }
li { background: #767676 !important; display: table-cell; vertical-align: middle; position: relative; border-radius: 5px 0; text-align: center; color: white; padding: 0 !important; font-size: .65em; width: 4em; height: 3em; padding: .25em !important; line-height: .9; text-transform: uppercase; }

1

여백 대신 테두리를 설정하는 Cian의 솔루션에 따라 배경과 색상이 일치하지 않도록 테두리 색상을 투명으로 설정할 수 있음을 발견했습니다. FF17, IE9, Chrome v23에서 작동합니다. 실제 테두리가 필요하지 않으면 괜찮은 솔루션처럼 보입니다.


1

<!DOCTYPE html>
<html>
<head>
<style>
table{
border-spacing: 16px 4px;
}

 td {
    border: 1px solid black;
}
</style>
</head>
<body>

<table style="width:100%">
  <tr>
    <td>Jill</td>
    <td>Smith</td>		
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>		
    <td>94</td>
  </tr>
  <tr>
    <td>John</td>
    <td>Doe</td>		
    <td>80</td>
  </tr>
</table>

</body>
</html>

패딩을 사용하는 것은 올바른 방법이 아니며 모양이 변경 될 수 있지만 원하는 것이 아닙니다. 이렇게하면 문제가 해결 될 수 있습니다.


이 솔루션은 이미 게시되었으며 동일한 내용을 말하는 2 개의 답변이 필요하지 않습니다.
Ason

1

둘 다 사용할 수 있습니다.

padding-right:10px;

padding-right:10%;

그러나 % 와 함께 사용하는 것이 좋습니다 .


1
내가 upvoted,하지만 당신은 설명 수도 그것을 사용하는 것이 좋습니다%
Mawg는 분석 재개 모니카 말한다

1
일반적으로 %는 반응 형을 만드는 데 사용됩니다.
Muhammad Awais

1
플러스 하나-대답을 편집하여 그렇게 말할 수 있습니까? 당신이 :-) 더 나은, 반응 형 디자인에 대해 뭔가에 대한 링크를 추가하려면하지 veryone 누가 .. 코멘트를 읽을 수있는 읽기
Mawg는 분석 재개 모니카 말한다

1

패딩이 작동하지 않는 경우 다른 해결 방법은 추가 열을 추가하고을 사용하여 너비를 통해 여백을 설정하는 것 <colgroup>입니다. 위의 패딩 솔루션 중 어느 것도 셀 테두리 자체에 여백을 주려고 할 때 저에게 효과가 없었으며 이것이 결국 문제를 해결했습니다.

<table>
  <colgroup>
    <col>
    <col width="20px">
    <col>
  </colgroup>
  <tr>
     <td>data</td>
     <td></td>
     <td>more data</td>
   </tr>
</table>

두 번째 및 세 번째 열이 단일 열로 표시되도록 : nth-child를 사용하여 표 셀의 테두리 스타일을 지정합니다.

table tr td:nth-child(2) { border: 1px solid black; border-right:0; }
table tr td:nth-child(3) { border: 1px solid black; border-left:0; }

그것은 대답이 아니라 문제를 가리는 것입니다. 아무도 제대로 수행하여 작업을 수행하는 방법을 배울 것
Mawg는 분석 재개 모니카 말한다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.