Eu tenho o seguinte código:
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell colspan2">Cell</div>
</div>
</div>
<style>
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
}
.colspan2 {
/* What to do here? */
}
</style>
Bem direto. Como adiciono um colspan (ou o equivalente a colspan) para elementos com display: table-cell
?
display: table-cell
.Respostas:
Pelo que eu sei, a falta de colspan / rowspan é apenas uma das limitações do
display:table
. Veja esta postagem:http://www.onenaught.com/posts/201/use-css-displaytable-for-layout
fonte
Como o OP não determina explicitamente que a solução deve ser CSS puro, serei teimoso e apresentarei minha solução alternativa que descobri hoje, especialmente porque é muito mais elegante do que ter uma mesa dentro de outra.
O exemplo é igual a <table> com duas células por linha e duas linhas, onde a célula na segunda linha é um td com
colspan="2"
.Eu testei isso com Iceweasel 20, Firefox 23 e IE 10.
Ação ao vivo (demonstração) aqui .
EDIT: Eu ajustei o código para ser mais fácil de imprimir, pois eles deixam as cores de fundo fora por padrão. Eu também criei o rowspan-demo , inspirado na resposta tardia aqui.
fonte
<div class="cell"></div>
funciona (pelo menos com Firefox). Com este design, você precisa preencher com célula (s) vazia (s). Por exemplo, se você tivesse que a célula 7 fosse colspan = 3 e a célula 8 fosse normal, então você precisaria de duas células vazias entre as células 7 e 8. A menos que você projetasse algo diferente (margens? Div personalizado único?) . Além disso, a largura de 100 px e 5 células torna as coisas complicadas, porque as palavras se estendem às células css, as configurações de estouro não parecem fazer diferença. Você também precisa recalcularwidth
paradiv.colspan>div>div
.div.colspan{border-left:1px solid red}
. Ele precisa ser colocado em algum lugar abaixo da regra que define div.colspan sem borda, ou será anulado.Uma solução mais simples que funciona para mim no Chrome 30:
Colspan pode ser emulado usando em
display: table
vez dedisplay: table-row
para as linhas:A única armadilha é que as células de linhas empilhadas não se alinham verticalmente, pois são de tabelas diferentes.
fonte
Se você está procurando uma maneira CSS direta de simular um colspan, você pode usar
display: table-caption
.fonte
Basta usar um
table
.as tabelas são desaprovadas quando usadas para fins de layout.
Isso parece dados tabulares (linhas / colunas de dados). Portanto, eu recomendaria usar um
table
.Veja minha resposta a esta pergunta para mais informações:
criando a mesma coisa com divs como tabelas
fonte
tr
/td
spam não é o html mais bonito, mas é esse o único motivo? Todo mundo diz que as tabelas não foram "feitas" para serem usadas para formatação, mas o html em si não "foi feito" para fazer metade das coisas que consideramos aceitáveis pelos padrões atuais, incluindo aplicativos da web.Esta é uma maneira de dividir colunas em CSS que usei para minha situação.
https://jsfiddle.net/mb8npttu/
fonte
.colspan
comwhite-space: nowrap;
para obter o resultado que eu queria, mas funcionou muito bem.Existe uma solução para fazer o colspan a largura de toda a tabela. Você não pode usar esta técnica para espalhar uma parte da tabela.
Código:
Explicação:
Usamos a posição absoluta no colspan para torná-lo a largura total da tabela. A própria mesa precisa de uma posição relativa. Fazemos uso de uma dummycell para manter a altura das linhas, a posição absoluta não segue o fluxo do documento.
É claro que você também pode usar o flexbox e a grade para resolver esse problema atualmente.
fonte
CSS
HTML
Código
fonte
Isso pode ser feito apenas com CSS puro e centralizando o texto no colspan "falso".
O truque é definir as linhas para
position:relative
, em seguida, colocar "divs vazios"row
onde você deseja fazer ocolspan
(eles devem terheight
para funcionar), definircell
onde o conteúdo está comodisplay:grid
e, finalmente, aplicarposition:absolute
ao elemento dentro da célula (e centralize-a como você centralizaria qualquer outro elemento absoluto).fonte
Usando as classes div e atributos CSS apropriados, você pode imitar os efeitos desejados de colspan e rowspan.
Aqui está o CSS
Aqui está o exemplo de HTML
Pelo que estou vendo nas perguntas e na maioria das respostas, as pessoas parecem esquecer que em qualquer div que esteja agindo como uma "célula de tabela", você pode inserir outro div que esteja agindo como uma tabela incorporada e iniciar o processo sobre.
*** Não é glamoroso, mas funciona para quem procura esse tipo de formatação e quer evitar as TABELAS. Se for para DATA LAYOUT, TABLEs ainda funcionam em HTML5.
Esperançosamente, isso ajudará alguém.
fonte
<table>
- apenas que as pessoas devem evitar usá-lo para formatação visual . Usá-lo para exibir dados estruturados é onde ele deve ser usado , a menos que algo mais (como<ul>
um mero exemplo) se ajuste melhor à tarefa. Em segundo lugar, cara, 4 mesas. Você traz uma questão interessante para a mesa (rowspan), mas sua resposta clama por ser usada<table>
. Tenho que ver como minha solução funciona aqui ...Você pode definir a posição do conteúdo do colspan como "relativo" e a linha como "absoluta" assim:
fonte
Você não pode conseguir isso no momento.
AFAIK, isso seria coberto pelas tabelas CSS , uma especificação que parece estar atualmente no estado de "trabalho em andamento".
fonte
Você pode tentar esta solução, onde você pode encontrar como aplicar o colspan usando div https://codepen.io/pkachhia/pen/JyWMxY
HTML:
CSS:
fonte
Mesmo que esta seja uma questão antiga, gostaria de compartilhar minha solução para este problema.
Aqui está um violino . Não é realmente um intervalo e a solução é um pouco hacky, mas é útil em algumas situações. Testado no Chrome 46, Firefox 31 e IE 11.
No meu caso, tive que apresentar alguns dados não tabulares de forma tabular, mantendo a largura das colunas e dando título às subseções dos dados.
fonte
Use tabelas aninhadas para aninhar extensões de coluna ...
Ou use 2 tabelas onde a extensão da coluna cobre toda a linha ...
fonte