Como adicionar raio de borda na linha da tabela

108

Alguém sabe estilizar tr como gostamos?

Eu usei border-collapse na tabela, depois que tr's podem exibir borda sólida de 1px que eu indiquei.

No entanto, quando tentei -moz-border-radius, não funcionou. Mesmo a margem simples não funciona.

Henson
fonte

Respostas:

221

Você só pode aplicar border-radius a td, não tr ou table. Eu resolvi isso para tabelas de cantos arredondados usando estes estilos:

table { border-collapse: separate; }
td { border: solid 1px #000; }
tr:first-child td:first-child { border-top-left-radius: 10px; }
tr:first-child td:last-child { border-top-right-radius: 10px; }
tr:last-child td:first-child { border-bottom-left-radius: 10px; }
tr:last-child td:last-child { border-bottom-right-radius: 10px; }

Certifique-se de fornecer todos os prefixos do fornecedor. Aqui está um exemplo disso em ação .

a sombra do zur
fonte
Certo. Se você quiser cantos arredondados no IE, terá que usar imagens e marcações estranhas.
theazureshadow
6
@Henson: Não, porque CSS3 não é compatível com o IE <9, no entanto, você pode usar CSS3PIE para fazê-lo funcionar no IE, incluindo o IE6: css3pie.com
Sarfraz
31
Aviso: se você omitir border-collapse: separate;, isso não funcionará.
Kevin Borders
@KevinBorders que está incorreto, pelo menos no Chrome v39. Tive problemas para fazer isso funcionar quando apliquei a cor de fundo na própria mesa. Aparentemente, deve estar nos elementos tr ou td.
Big McLargeHuge
1
separateé necessário para o Chrome 44.
Hugh Guiney
38

Espaçamento real entre linhas

Este é um tópico antigo, mas percebi ler os comentários do OP em outras respostas que o objetivo original aparentemente era ter border-radiusnas linhas e lacunas entre as linhas. Não parece que as soluções atuais façam exatamente isso. A resposta de theazureshadow está indo na direção certa, mas parece precisar de um pouco mais.

Para os interessados nisso , aqui está um violino que separa as linhas e aplica o raio a cada linha. (NOTA: Atualmente, o Firefox tem um bug na exibição / recorte background-colornos raios da borda .)

O código é o seguinte (e como o zureshadow observou, para suporte de navegador anterior, os vários prefixos de fornecedor para border-radiusnecessidade adicionados).

table { 
    border-collapse: separate; 
    border-spacing: 0 10px; 
    margin-top: -10px; /* correct offset on first border spacing if desired */
}
td {
    border: solid 1px #000;
    border-style: solid none;
    padding: 10px;
    background-color: cyan;
}
td:first-child {
    border-left-style: solid;
    border-top-left-radius: 10px; 
    border-bottom-left-radius: 10px;
}
td:last-child {
    border-right-style: solid;
    border-bottom-right-radius: 10px; 
    border-top-right-radius: 10px; 
}
ScottS
fonte
3
Muito melhor do que a resposta acima.
Exzile de
12

Informação de bônus: border-radiusnão tem efeito em mesas com border-collapse: collapse;e borda definida em td's. E não importa se border-radiusé definido em table, trou td-É ignorado.

http://jsfiddle.net/Exe3g/

Ronni Egeriis Persson
fonte
O jsfiddle tem cantos arredondados no Firefox.
Jukka K. Korpela
4
@ JukkaK.Korpela Sim, se o colapso da fronteira: colapso; não estiver definido, clique no botão de alternância e veja a mágica acontecer.
Ronni Egeriis Persson
3

O elemento tr honra o raio da borda. Pode usar html puro e css, sem javascript.

Link JSFiddle: http://jsfiddle.net/pflies/zL08hqp1/10/

tr {
    border: 0;
    display: block;
    margin: 5px;
}
.solid {
    border: 2px red solid;
    border-radius: 10px;
}
.dotted {
    border: 2px green dotted;
    border-radius: 10px;
}
.dashed {
    border: 2px blue dashed;
    border-radius: 10px;
}

td {
    padding: 5px;
}
<table>
    <tr>
        <td>01</td>
        <td>02</td>
        <td>03</td>
        <td>04</td>
        <td>05</td>
        <td>06</td>
    </tr>
    <tr class='dotted'>
        <td>07</td>
        <td>08</td>
        <td>09</td>
        <td>10</td>
        <td>11</td>
        <td>12</td>
    </tr>
    <tr class='solid'>
        <td>13</td>
        <td>14</td>
        <td>15</td>
        <td>16</td>
        <td>17</td>
        <td>18</td>
    </tr>
    <tr class='dotted'>
        <td>19</td>
        <td>20</td>
        <td>21</td>
        <td>22</td>
        <td>23</td>
        <td>24</td>
    </tr>
    <tr class='dashed'>
        <td>25</td>
        <td>26</td>
        <td>27</td>
        <td>28</td>
        <td>29</td>
        <td>30</td>
    </tr>
</table>

happyfunball
fonte
4
Alterar a propriedade de exibição do TR para "bloquear" provavelmente bagunçará o layout da tabela. Em particular, se sua tabela tiver várias linhas contendo vários comprimentos de conteúdo, as células da tabela não serão alinhadas.
Jess de
2

Acho que derrubar suas fronteiras é a coisa errada a fazer neste caso. Colapsá-los significa basicamente que a fronteira entre duas células vizinhas torna-se compartilhada. Isso significa que não está claro em qual direção ele deve fazer a curva, dado um raio.

Em vez disso, você pode atribuir um raio de borda aos dois cantos esquerdos do primeiro TD e aos dois cantos direitos do último. Você pode usar seletores first-childe last-childconforme sugerido por thezureshadow, mas eles podem ser mal suportados por versões anteriores do IE. Pode ser mais fácil apenas definir classes, como .first-columne .last-columnpara servir a esse propósito.

levik
fonte
Recolho a borda para que o tr possa exibir o estilo que dou. Vou tentar o método da aula. mas e a margem? Tentei usar espaçamento de borda para exibir as margens entre as linhas, mas essa não é a melhor maneira de fazer isso, eu acredito ...
Henson
Não pode haver margens entre as linhas se elas compartilham uma borda - é quando a borda é recolhida. Presumo que o que você está tentando fazer é fazer com que seus TRs tenham uma cor de fundo com cantos arredondados. Se for assim,
retirá
na verdade, a questão mais urgente é exibir a margem entre as linhas com bordas. A fronteira não precisa necessariamente ter cantos arredondados
Henson
2

De acordo com o Opera, o padrão CSS3 não define o uso de border-radiusem TDs. Minha experiência é que o Firefox e o Chrome suportam, mas o Opera não (não sei sobre o IE). A solução alternativa é envolver o conteúdo td em um div e, em seguida, aplicar o border-radiusao div.

Raio
fonte
2

Não tentando tirar nenhum crédito aqui, todo o crédito vai para @theazureshadow por sua resposta, mas eu pessoalmente tive que adaptá-lo para uma tabela que tem alguns em <th>vez de <td>para as células da primeira linha.

Só estou postando a versão modificada aqui caso alguns de vocês queiram usar a solução do @theazureshadow, mas como eu, tenho algumas <th>no primeiro <tr>. A classe "reportTable" só deve ser aplicada à própria tabela:

table.reportTable {
    border-collapse: separate;
    border-spacing: 0;
}

table.reportTable td {
    border: solid gray 1px;
    border-style: solid none none solid;
    padding: 10px;
}

table.reportTable td:last-child {
    border-right: solid gray 1px;
}

table.reportTable tr:last-child td{
    border-bottom: solid gray 1px;
}

table.reportTable th{
    border: solid gray 1px;
    border-style: solid none none solid;
    padding: 10px;
}

table.reportTable th:last-child{
    border-right: solid gray 1px;
    border-top-right-radius: 10px;
}

table.reportTable th:first-child{
    border-top-left-radius: 10px;
}

table.reportTable tr:last-child td:first-child{
    border-bottom-left-radius: 10px;
}   

table.reportTable tr:last-child td:last-child{
    border-bottom-right-radius: 10px;
}

Sinta-se à vontade para ajustar os preenchimentos, raios, etc. para atender às suas necessidades. Espero que ajude as pessoas!

Mathieu Turcotte
fonte
1

Descobri que adicionar border-radius a tabelas, trs e tds não parece funcionar 100% nas versões mais recentes do Chrome, FF e IE. Em vez disso, envolvo a mesa com um div e coloco o raio da borda sobre ela.

<div class="tableWrapper">
  <table>
    <tr><td>Content</td></tr>
  <table>
</div>

.tableWrapper {
  border-radius: 4px;
  overflow: hidden;
}

Se sua mesa não estiver width: 100%, você pode fazer sua embalagem float: left, mas lembre-se de limpá-la.

ScubaSteve
fonte
solução simples e elegante
ufk
1

Use o colapso da borda: separado; e espaçamento entre bordas: 0; mas use apenas border-right e border-bottom para os tds, com border-top aplicado ao th e border-left aplicado apenas a tr td: nth-child (1).

Você pode então aplicar raio de borda aos tds de canto (usando nth-child para encontrá-los)

https://jsfiddle.net/j4wm1f29/

<table>
  <tr>
    <th>title 1</th>
    <th>title 2</th>
    <th>title 3</th>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
</table>
table {
  border-collapse: seperate;
  border-spacing: 0;
}

tr th,
tr td {
  padding: 20px;
  border-right: 1px solid #000;
  border-bottom: 1px solid #000;
}

tr th {
  border-top: 1px solid #000;
}

tr td:nth-child(1),
tr th:nth-child(1) {
  border-left: 1px solid #000;
}

/* border radius */
tr th:nth-child(1) {
  border-radius: 10px 0 0 0;
}

tr th:nth-last-child(1) {
  border-radius: 0 10px 0 0;
}

tr:nth-last-child(1) td:nth-child(1) {
  border-radius: 0 0 0 10px;
}

tr:nth-last-child(1) td:nth-last-child(1) {
  border-radius: 0 0 10px 0;
}
John Fotios
fonte
0

Ou use box-shadow se a tabela tiver recolhido

Siviy
fonte
0

Todas as respostas são muito longas. A maneira mais fácil de adicionar border radius a um elemento de tabela que aceita border como uma propriedade é criando border radius com overflow: hidden.

border: xStyle xColor xSize;
border-collapse: collapse;
border-radius: 1em;
overflow: hidden;
E Alexis MT
fonte
@ypresto a resposta principal de #theazureshadow menciona que o raio da borda não funciona para tr, mas a razão para isso é porque você não pode nem mesmo aplicar uma borda a ele, mas a tabela funciona :( Não sei por que, mas essa resposta é de 2013 .
E Alexis MT