Estou tentando criar alguns HTML / CSS que podem colocar uma borda em torno de linhas específicas em uma tabela. Sim, eu sei que não devo usar tabelas para layout, mas ainda não conheço CSS suficiente para substituí-lo completamente.
De qualquer forma, tenho uma tabela com várias linhas e colunas, algumas mescladas com row e colspan, e gostaria de colocar uma borda simples em torno das partes da tabela. Atualmente, estou usando 4 classes CSS separadas (superior, inferior, esquerda, direita) que anexo às <td>
células que estão ao longo da parte superior, inferior, esquerda e direita da tabela, respectivamente.
.top {
border-top: thin solid;
border-color: black;
}
.bottom {
border-bottom: thin solid;
border-color: black;
}
.left {
border-left: thin solid;
border-color: black;
}
.right {
border-right: thin solid;
border-color: black;
}
<html>
<body>
<table cellspacing="0">
<tr>
<td>no border</td>
<td>no border here either</td>
</tr>
<tr>
<td class="top left">one</td>
<td class="top right">two</td>
</tr>
<tr>
<td class="bottom left">three</td>
<td class="bottom right">four</td>
</tr>
<tr>
<td colspan="2">once again no borders</td>
</tr>
<tr>
<td class="top bottom left right" colspan="2">hello</td>
</tr>
<tr>
<td colspan="2">world</td>
</tr>
</table>
</html>
Existe alguma maneira mais fácil de fazer o que eu quero? Tentei aplicar a parte superior e inferior de um, <tr>
mas não funcionou. (ps Eu sou novo em CSS, então provavelmente há uma solução realmente básica para isso que eu perdi.)
nota: eu preciso ter várias seções com borda. A idéia básica é ter vários clusters com bordas, cada um contendo várias linhas.
fonte
Respostas:
Que tal
tr {outline: thin solid black;}
? Funciona para mim em elementos tr ou tbody e parece ser compatível com a maioria dos navegadores, incluindo o IE 8+, mas não antes.fonte
Obrigado a todos que responderam! Eu tentei todas as soluções apresentadas aqui e fiz mais pesquisas na Internet em busca de outras soluções possíveis, e acho que encontrei uma que é promissora:
Resultado:
Em vez de ter que adicionar os
top
,bottom
,left
, eright
classes para cada<td>
, tudo o que tenho a fazer é adicionartop row
ao topo<tr>
,bottom row
ao fundo<tr>
, erow
a cada<tr>
no meio. Há algo de errado com esta solução? Há algum problema de plataforma cruzada que eu deva estar ciente?fonte
cellspacing
atributo está obsoleto no HTML5. Parece que o CSStable { border-collapse: collapse; border-spacing: 0; }
é o caminho a percorrer agora.Se você definir o
border-collapse
estilo comocollapse
na tabela pai, poderá estilizar otr
: (os estilos estão alinhados para demonstração)Resultado:
fonte
Eu estava apenas brincando de fazer isso também, e essa parecia ser a melhor opção para mim:
Observe que isso impedirá o uso de larguras de coluna fluidas / automáticas , pois as células não se alinham mais com as de outras linhas, mas a formatação de borda / cor ainda funciona bem. A solução é fornecer aos TR e TDs uma largura especificada (px ou%).
Obviamente, você pode fazer o seletor
tr.myClass
se quiser aplicá-lo apenas a determinadas linhas. Aparentementedisplay: table
, não funciona para o IE 6/7, no entanto, mas provavelmente existem outros hacks (hasLayout?) Que podem funcionar para eles. :-(fonte
Aqui está uma abordagem usando elementos tbody que podem ser a maneira de fazer isso. Você não pode definir a borda em um tbody (o mesmo que não pode em um tr), mas pode definir a cor do plano de fundo. Se o efeito que você deseja obter puder ser obtido com uma cor de plano de fundo nos grupos de linhas em vez de em uma borda, isso funcionará.
fonte
Agrupe linhas usando a
<tbody>
tag e aplique o estilo.E o css em style.css
fonte
A única outra maneira que posso pensar em fazer isso é colocar cada uma das linhas em que você precisa de uma borda em uma tabela aninhada. Isso facilitará a borda, mas potencialmente criará outros problemas de layout, você precisará definir manualmente a largura nas células da tabela, etc.
Sua abordagem pode muito bem ser a melhor, dependendo de outras exigências de layout, e a abordagem sugerida aqui é apenas uma alternativa possível.
fonte
Com base no seu requisito de que você deseja colocar uma borda em torno de um bloco arbitrário de células MxN, não há realmente nenhuma maneira mais fácil de fazer isso sem usar Javascript. Se suas células estiverem fixas, você poderá usar flutuadores, mas isso é problemático por outros motivos. o que você está fazendo pode ser entediante, mas tudo bem.
Ok, se você está interessado em uma solução Javascript, usando jQuery (minha abordagem preferida), você acaba com este pedaço de código bastante assustador:
Ficarei feliz em receber sugestões de maneiras mais fáceis de fazer isso ...
fonte
o truque é com a estrutura de tópicos, graças à resposta do enigment com poucas modificações
use esta classe
depois no HTML
e o resultado é esperança que isso ajude você
fonte
Uma maneira mais fácil é tornar a tabela um controle no servidor. Você pode usar algo semelhante a este:
fonte