HTML 테이블 행에 테두리 제공, <tr>


90

이 테이블 행을 경계까지 가능 <tr>하나 대신, 개별 셀에 테두리를주는 이동에 <td>같은,

<table cellpadding="0" cellspacing="0" width="100%" style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>

이것은 주어진 주위에 테두리를 제공 <tr>하지만 개별 셀 주위에 테두리가 필요합니다.

<tr>한 번에 국경을 넘길 수 있습니까 ?

→ jsFiddle

답변:


121

요소 border에 속성을 설정할 수 tr있지만 CSS 2.1 사양에 따르면 이러한 속성은 분리 된 테두리 모델에 영향을주지 않으며 브라우저에서 기본값이되는 경향이 있습니다. 참고 : 17.6.1 경계 분리 모델 . 합니다 ( 초기 값은 border-collapse이다 separateCSS 2.1에 따라, 일부 브라우저는로 설정 기본값 에 대한 table. 어쨌든 순 효과는 당신이하지 않는 한 명시 적으로보고 특정 거의 모든 브라우저에서 경계를 구분 얻을 것입니다 collapse.)

따라서 축소 테두리를 사용해야합니다. 예:

<style>
table { border-collapse: collapse; }
tr:nth-child(3) { border: solid thin; }
</style>

1
@Robert Siemer 이것이 행 주위에 테두리를 두는 것은 사실이지만 "border-collapse : collapse"도 필요합니다. 이러한 방식으로 cellpadding 속성을 사용하여 열 간격을 지정할 수 없습니다. 아래 csmckelvey의 답변에 사용되는 outline 속성은 테이블 모양을 더 잘 제어하고 정확히 동일한 목표를 달성합니다. 목표를 달성하기 위해 불필요하게 기능을 제한하므로 허용되는 답변이되어서는 안됩니다.
me_

70

물론! 그냥 사용

<tr style="outline: thin solid">

당신이 좋아하는 행. 여기에 바이올린이 있습니다.

물론 사람들이 언급했듯이 ID, 클래스 또는 원하는 경우 다른 방법을 통해이를 수행 할 수 있습니다.


2
<tr>은 요소가 아닌 컨테이너 여야하므로 그의 스타일을 통해 자식의 형식을 지정하는 것은 작동하더라도 의미론 측면에서 올바르지 않습니다.
Itay Gal

1
Google Chrome 및 Internet Explorer는 테두리를 표시 <tr>하지만 Mozilla Fire Fox는 테두리를 표시하지 않습니다.
Tiny

outline대신을 사용해보십시오 border. 호환성을 수정해야합니다. Chrome atm 만 가지고있어서 테스트 할 수 없습니다.
takendarkk

4
외곽선은 테두리가 아닙니다.
Jukka K. Korpela

2
완벽하게 이해할 수 있습니다. 이 사이트는 사람들에게 나의 담당자 : 최고의 답변을 제공에 관한 것입니다
takendarkk을

16

예. 내 답변 DEMO를 업데이트했습니다.

table td {
    border-top: thin solid; 
    border-bottom: thin solid;
}

table td:first-child {
     border-left: thin solid;
}

table td:last-child {
     border-right: thin solid;
}

하나만 스타일링하고 싶다면 <tr>클래스로 할 수 있습니다 : Second DEMO


Internet Explorer가 싫어하는 last-child것 같습니다 (지원하지 않는 것 같습니다).
Tiny

@Tiny 어떤 IE 버전을 지원 하시겠습니까? 버전 9+는 첫 번째 자식과 마지막 자식을 지원합니다.
Itay Gal

Internet Explorer 8이지만 걱정할 필요는 없습니다. :)
Tiny

<tr> 스타일링이 아니라 <td> 스타일링입니다.
Robert Siemer 2014 년

5

CSS 클래스를 사용하십시오.

tr.border{
    outline: thin solid;
}

다음과 같이 사용하십시오.

<tr class="border">...</tr>

2

tr 요소의 box-shadow 속성을 테두리의 대체로 사용할 수 있습니다. 플러스로 동일한 요소의 border-radius 속성이 상자 그림자에도 적용됩니다.

box-shadow: 0px 0px 0px 1px rgb(0, 0, 0);

이것은 스타일링에 대한 제어를 훨씬 더 많이 제공합니다 outline. 더 높은 답변이어야합니다.
Jacob Stamm

1

왼쪽 셀 :

style="border-style:solid;border-width: 1px 0px 1px 1px;"

중간 세포 :

style="border-style:solid;border-width: 1px 0px 1px 0px;"

오른쪽 셀 :

style="border-style:solid;border-width: 1px 1px 1px 0px;"

0

<table cellpadding="0" cellspacing="0" width="100%" style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>


답변에 의견을 추가하고 변경 한 사항을 설명해 주시겠습니까?
franiis

0

테두리 간격 추가 : 0rem 0.5rem; 하단에 각 셀 (td, th) 항목에 대한 공간을 만들고 셀 사이에 공간을 두지 않습니다.

    table.app-table{
        border-collapse: separate;
        border-spacing: 0rem 0.5rem;
    }
    table.app-table thead tr.border-row the,
    table.app-table tbody tr.border-row td,
    table.app-table tbody tr.border-row th{
        border-top: 1px solid #EAEAEA;
        border-bottom: 1px solid #EAEAEA;
        vertical-align: middle;
        white-space: nowrap;
        font-size: 0.875rem;
    }

    table.app-table thead tr.border-row th:first-child,
    table.app-table tbody tr.border-row td:first-child{
        border-left: 1px solid #EAEAEA;
    }

    table.app-table thead tr.border-row th:last-child,
    table.app-table tbody tr.border-row td:last-child{
        border-right: 1px solid #EAEAEA;
    }

-2

오랫동안 이것으로 싸운 후 나는 놀랍도록 간단한 대답은 테이블의 모든 행을 같은 수의 셀로 채우기 위해 테이블을 빈 셀로 채우는 것입니다 (분명히 colspan을 고려). 컴퓨터에서 생성 된 HTML을 사용하면 정렬이 매우 간단하고 복잡한 해결 방법과의 싸움을 피할 수 있습니다. 그림은 다음과 같습니다.

<h3>Table borders belong to cells, and aren't present if there is no cell</h3>
<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>


<h3>Simple solution, artificially insert empty cells</h3>

<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only<td><td>
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only<td>
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.