Edit - Título original: Existe uma forma alternativa para alcançar border-collapse:collapse
no CSS
(a fim de ter, uma mesa de canto arredondado desmoronou)?
Como acontece que o simples recolhimento das bordas da tabela não resolve o problema raiz, atualizei o título para refletir melhor a discussão.
Estou tentando fazer uma tabela com cantos arredondados usando a CSS3
border-radius
propriedade Os estilos de tabela que estou usando são mais ou menos assim:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
Aqui está o problema. Também quero definir a border-collapse:collapse
propriedade e, quando isso estiver definido, border-radius
não funcionará mais. Existe uma maneira baseada em CSS em que eu possa obter o mesmo efeito que border-collapse:collapse
sem realmente usá-lo?
Editar% s:
Criei uma página simples para demonstrar o problema aqui (apenas Firefox / Safari).
Parece que grande parte do problema é que definir a mesa com cantos arredondados não afeta os cantos dos td
elementos dos cantos . Se a tabela tivesse apenas uma cor, isso não seria um problema, pois eu poderia fazer os td
cantos superior e inferior arredondados para a primeira e a última linha, respectivamente. No entanto, estou usando diferentes cores de plano de fundo na tabela para diferenciar os títulos e as faixas, para que os td
elementos internos também mostrem seus cantos arredondados.
Resumo das soluções propostas:
Cercar a mesa com outro elemento com cantos arredondados não funciona porque os cantos quadrados da mesa "vazam".
A especificação da largura da borda como 0 não reduz a tabela.
Os td
cantos inferiores ainda ficam quadrados depois de definir o espaçamento entre células como zero.
Usar JavaScript - funciona evitando o problema.
Soluções possíveis:
As tabelas são geradas em PHP, então eu poderia aplicar uma classe diferente a cada um dos th / tds externos e estilizar cada canto separadamente. Prefiro não fazer isso, já que não é muito elegante e um pouco trabalhoso aplicar a várias tabelas, por isso, mantenha as sugestões.
A possível solução 2 é usar JavaScript (jQuery, especificamente) para estilizar os cantos. Essa solução também funciona, mas ainda não é exatamente o que estou procurando (sei que sou exigente). Eu tenho duas reservas:
- este é um site muito leve e eu gostaria de manter o JavaScript o mínimo possível
- parte do apelo que o uso do raio da borda tem para mim é degradação graciosa e aprimoramento progressivo. Usando o raio da borda para todos os cantos arredondados, espero ter um site consistentemente arredondado em navegadores compatíveis com CSS3 e um site consistentemente quadrado em outros (estou olhando para você, IE).
Sei que tentar fazer isso com CSS3 hoje pode parecer desnecessário, mas tenho minhas razões. Gostaria também de salientar que esse problema é resultado da especificação w3c, e não do suporte ao CSS3, portanto qualquer solução ainda será relevante e útil quando o CSS3 tiver um suporte mais amplo.
fonte
Respostas:
Eu descobri. Você apenas precisa usar alguns seletores especiais.
O problema de arredondar os cantos da mesa era que os elementos td também não eram arredondados. Você pode resolver isso fazendo algo assim:
Agora tudo gira adequadamente, exceto que ainda há a questão de
border-collapse: collapse
quebrar tudo.Uma solução alternativa é adicionar
border-spacing: 0
e deixar o padrãoborder-collapse: separate
na tabela.fonte
border-spacing: 0;
como estilo de borda?border-spacing: 0;
como Ramon recomendo corrigi-lo para mim. Certifique-se de adicionar os estilosborder-radius
eborder-spacing
aos elementos<th>
ou<td>
, não<thead>
ou<tbody>
.border-spacing: 0; border-collapse: separate;
O método a seguir funciona (testado no Chrome) usando um
box-shadow
com uma propagação em1px
vez de uma borda "real".fonte
Se você deseja uma solução somente CSS (não é necessário definir
cellspacing=0
no HTML) que permita bordas de 1px (o que você não pode fazer com aborder-spacing: 0
solução), prefiro fazer o seguinte:border-right
eborder-bottom
para as células da sua tabela (td
eth
)border-top
border-left
first-child
elast-child
, arredonde os cantos apropriados para as células da tabela nos quatro cantos.Veja uma demonstração aqui.
Dado o seguinte HTML:
Veja o exemplo abaixo:
fonte
table.Info
turma tem a ver com alguma coisa?Você já tentou usar em
table{border-spacing: 0}
vez detable{border-collapse: collapse}
???fonte
border-spacing: 0
é que você não pode ter uma borda de 1px, certo? Porque as bordas se empilham em vez de desmoronar.border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;
rendi exatamente o que eu precisava.Você provavelmente terá que colocar outro elemento ao redor da mesa e estilizá-lo com uma borda arredondada.
O rascunho de trabalho especifica que
border-radius
não se aplica aos elementos da tabela quando o valor deborder-collapse
écollapse
.fonte
overflow:hidden;
Como Ian disse, a solução é aninhar a tabela dentro de uma div e configurá-la assim:
Com
overflow:hidden
, os cantos quadrados não sangrarão pela div.fonte
overflow: hidden
qualquer popover / dica de ferramenta será cortado pelas dimensões do wrapper.Que eu saiba, a única maneira de fazer isso seria modificar todas as células da seguinte maneira:
E então, para colocar a borda na parte inferior e na parte de trás
:last-child
não é válido no ie6, mas se você estiver usandoborder-radius
, presumo que você não se importa.EDITAR:
Depois de examinar sua página de exemplo, parece que você poderá solucionar isso com espaçamento e preenchimento de células.
As bordas cinzas grossas que você vê são realmente o plano de fundo da tabela (você pode ver isso claramente se alterar a cor da borda para vermelho). Se você definir o espaçamento das células como zero (ou equivalente :),
td, th { margin:0; }
as "bordas" cinzas desaparecerão.EDIT 2:
Não consigo encontrar uma maneira de fazer isso com apenas uma tabela. Se você alterar a linha do cabeçalho para uma tabela aninhada, poderá conseguir o efeito desejado, mas será mais trabalhoso e não dinâmico.
fonte
Eu tentei uma solução alternativa usando os pseudo-elementos
:before
e:after
nothead th:first-child
ethead th:last-child
Em combinação com a embalagem da mesa com um
<div class="radius borderCCC">
veja jsFiddle
Funciona para mim no chrome (13.0.782.215) Deixe-me saber se isso funciona para você em outros navegadores.
fonte
Na verdade, você pode adicionar seu
table
interior adiv
como seu invólucro. e atribua estesCSS
códigos ao wrapper:fonte
As respostas dadas só funcionam quando não há bordas ao redor da mesa, o que é muito limitante!
Eu tenho uma macro no SASS para fazer isso, que apoia plenamente externa e as bordas internas, obtendo o mesmo estilo que o colapso da borda: colapso sem realmente especificá-lo.
Testado em FF / IE8 / Safari / Chrome.
Oferece boas bordas arredondadas em CSS puro em todos os navegadores, exceto o IE8 (degrada normalmente), pois o IE8 não suporta o raio da borda :(
Alguns navegadores mais antigos podem exigir prefixos de fornecedores para trabalhar
border-radius
, portanto, fique à vontade para adicionar esses prefixos ao seu código, conforme necessário.Esta resposta não é a mais curta - mas funciona.
Para aplicar esse estilo, basta alterar sua
tag para o seguinte:
e inclua os estilos CSS acima em seu HTML.
Espero que isto ajude.
fonte
border-radius
.Para uma tabela com borda e rolagem, use isso (substitua variáveis,
$
textos iniciais)Se você usar
thead
,tfoot
outh
, basta substituirtr:first-child
etr-last-child
etd
com eles.HTML:
fonte
Eu tive o mesmo problema. remova
border-collapse
completamente e use:cellspacing="0" cellpadding="0"
no documento html. exemplo:fonte
Acabei de escrever um conjunto louco de CSS para isso que parece funcionar perfeitamente:
fonte
Solução com colapso de borda: separado para tabela e exibição: tabela em linha para tbody e thead.
fonte
Eu sou novo em HTML e CSS e também estava procurando uma solução para isso, aqui o que encontro.
Eu tento, adivinhe o que funciona :)
fonte
Encontrei esta resposta depois de encontrar o mesmo problema, mas achei muito simples: basta dar um estouro na tabela: hidden
Não há necessidade de um elemento de embalagem. É verdade que não sei se isso funcionaria há 7 anos quando a pergunta foi feita inicialmente, mas funciona agora.
fonte
Mesa com cantos arredondados e células delimitadas. Usando @Ramon Tayag solução .
A chave é usar
border-spacing: 0
como ele aponta.Solução usando SCSS .
fonte
Eu comecei a experimentar com "display" e eu achei que:
border-radius
,border
,margin
,padding
, em umtable
são exibidos com:Por exemplo
Mas precisamos definir uma
width
de cada colunafonte
Aqui está um exemplo recente de como implementar uma tabela com cantos arredondados em http://medialoot.com/preview/css-ui-kit/demo.html . É baseado nos seletores especiais sugeridos por Joel Potter acima. Como você pode ver, também inclui alguma mágica para deixar o IE um pouco feliz. Inclui alguns estilos extras para alternar a cor das linhas:
fonte
Aqui está uma maneira:
Ou
fonte
Eu sempre faço dessa maneira usando Sass
fonte
border-collapse: collapse
ativado.border-collapse: collapse
. Perdoe novamente, esperarei sua atualização.Até agora, a melhor solução vem da sua própria solução e é assim:
fonte
O raio da borda agora é oficialmente suportado. Portanto, em todos os exemplos acima, você pode soltar o prefixo "-moz-".
Outro truque é usar a mesma cor para as linhas superior e inferior da borda. Com todas as três cores iguais, ela se mistura e se parece com uma mesa perfeitamente arredondada, embora não seja fisicamente.
fonte