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

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>

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.


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


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>

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

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

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>


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

-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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.