Atribuindo uma borda a uma linha da tabela HTML, <tr>

92

É possível delimitar uma linha da tabela de <tr>uma vez em vez de delimitar células individuais, <td>como

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

Isso fornece uma borda ao redor do dado, <tr>mas requer uma borda ao redor das células individuais.

Podemos dar uma fronteira de uma <tr>só vez?

→ jsFiddle

Minúsculo
fonte

Respostas:

124

Você pode definir borderpropriedades em um trelemento, mas de acordo com a especificação CSS 2.1, tais propriedades não têm efeito no modelo de bordas separadas, que tende a ser o padrão em navegadores. Ref .: 17.6.1 O modelo de bordas separadas . (O valor inicial de border-collapseestá de separateacordo com CSS 2.1, e alguns navegadores também o definem como valor padrão para table. O efeito líquido de qualquer maneira é que você obtém bordas separadas em quase todos os navegadores, a menos que você especifique explicitamente collapse.)

Portanto, você precisa usar bordas retraídas. Exemplo:

<style>
table { border-collapse: collapse; }
tr:nth-child(3) { border: solid thin; }
</style>
Jukka K. Korpela
fonte
1
@Robert Siemer Embora seja verdade que isso coloque uma borda em torno das linhas, também requer "colapso da borda: colapso". As colunas não podem ser espaçadas usando a propriedade cellpadding dessa maneira. A propriedade de contorno usada na resposta de csmckelvey abaixo fornece maior controle sobre a aparência da tabela e atinge exatamente o mesmo objetivo. Essa não deve ser a resposta aceita, pois limita desnecessariamente a funcionalidade para atingir o objetivo.
me_
70

Absolutamente! Apenas use

<tr style="outline: thin solid">

em qualquer linha que você gosta. Aqui está um violino .

Claro, como as pessoas mencionaram, você pode fazer isso por meio de um id, ou classe, ou algum outro meio, se desejar.

takendarkk
fonte
2
<tr> deve ser um contêiner, não um elemento, portanto, formatar seu filho por meio de seu estilo não é correto em termos de semântica, mesmo que funcione.
Itay Gal
1
O Google Chrome e o Internet Explorer mostram uma borda ao redor de um, <tr>mas o Mozilla Fire Fox não mostra uma borda.
Tiny
Tente usar em outlinevez de border. Isso deve corrigir a compatibilidade. Eu só tenho o Chrome atm, então não posso testá-lo.
takendarkk 01 de
4
O contorno não é fronteira.
Jukka K. Korpela
2
Perfeitamente compreensível. Este site é sobre como dar às pessoas as melhores respostas, não ao meu representante :)
takendarkk
16

Sim. Eu atualizei minha resposta 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;
}

Se você quiser estilizar apenas um, <tr>pode fazê-lo com uma classe: Segundo DEMO

Itay Gal
fonte
Parece que o Internet Explorer não gosta last-child(parece não ser compatível).
Tiny
@Tiny qual versão do IE você deseja oferecer suporte? A versão 9+ é compatível com primeiro e último filho.
Itay Gal
É o Internet Explorer 8, mas não se preocupe com isso :)
Tiny
Você não está estilizando <tr>, você está estilizando <td>.
Robert Siemer,
5

Faça uso de classes CSS:

tr.border{
    outline: thin solid;
}

e usá-lo como:

<tr class="border">...</tr>
Fanie Reynders
fonte
2

Você pode usar a propriedade box-shadow em um elemento tr como um subtítulo para uma borda. Como um sinal de adição, qualquer propriedade de raio de borda no mesmo elemento também se aplicará à sombra da caixa.

box-shadow: 0px 0px 0px 1px rgb(0, 0, 0);
Richard Bonneau
fonte
Isso oferece muito mais controle sobre o estilo do outlineque. Deve ser uma resposta mais elevada.
Jacob Stamm
1

Célula esquerda:

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

célula (s) média (s):

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

célula certa:

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

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

Malik
fonte
Você poderia adicionar um comentário à sua resposta e explicar o que você mudou?
franiis
0

adicionando espaçamento de borda: 0rem 0,5 rem; cria um espaço para cada célula (td, th) itens em sua parte inferior, sem deixar espaço entre as células

    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;
    }
Message Akunna
fonte
-2

Depois de lutar com isso por um longo tempo, concluí que a resposta espetacularmente simples é apenas preencher a tabela com células vazias para preencher todas as linhas da tabela com o mesmo número de células (levando o colspan em conta, obviamente). Com HTML gerado por computador, isso é muito simples de organizar e evita conflitos com soluções alternativas complexas. A ilustração segue:

<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>
David Crowe
fonte