Estou usando o Bootstrap. Como posso criar três colunas da mesma altura?
Aqui está uma captura de tela do problema. Gostaria que as colunas azuis e vermelhas tivessem a mesma altura que a coluna amarela.
Aqui está o código:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
<div class="col-xs-4 panel" style="background-color: red">
some content
</div>
<div class="col-xs-4 panel" style="background-color: yellow">
catz
<img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
</div>
<div class="col-xs-4 panel" style="background-color: blue">
some more content
</div>
</div>
</div>
css
twitter-bootstrap
Richard
fonte
fonte
.row
está faltandoflex-wrap: wrap;
. Aqui está um exemplo de que trabalhar com a capacidade de resposta: codepen.io/bootstrapped/details/RrabNeRespostas:
Solução 4 usando o Bootstrap 4
O Bootstrap 4 usa o Flexbox, portanto não há necessidade de CSS extra.
Demo
Solução 1 usando margens negativas (não quebra a capacidade de resposta)
Demo
Solução 2 usando a tabela
Demo
Solução 3 usando flex adicionada em agosto de 2015. Os comentários publicados antes disso não se aplicam a esta solução.
Demo
fonte
flex-wrap: wrap;
ao terceiro exemplo para ativar a capacidade de resposta. Você também vai querer adicionar display: flex; direção flexível: coluna; para a classe da coluna. Se você usar o .row e não uma classe personalizada, precisará fornecer um substituto para navegadores mais antigos, alterando a flexibilidade da tela. Aqui está um exemploAtualização 2020
Melhor abordagem para o Bootstap 3.x - usando CSS flexbox (e requer CSS mínimo).
Exemplo de flexbox de mesma altura de inicialização
Para aplicar apenas a mesma caixa flexível da altura em pontos de interrupção específicos (responsivos), use uma consulta de mídia. Por exemplo, aqui está
sm
(768px) e superior:Essa solução também funciona bem para várias linhas (quebra de coluna):
https://www.bootply.com/gCEXzPMehZ
Outras soluções alternativas
Essas opções serão recomendadas por outros, mas não são uma boa ideia para o design responsivo. Isso funciona apenas para layouts de linha única simples sem quebra de coluna.
1) Usando enormes margens negativas e preenchimento
2) Usando display: célula de tabela (esta solução também afeta a grade responsiva, portanto, uma consulta @media pode ser usada apenas para aplicar a
table
exibição em telas mais largas antes que as colunas se empilhem verticalmente)Bootstrap 4
Agora, o Flexbox é usado por padrão no Bootstrap 4, portanto, não é necessário que o CSS extra crie colunas de altura igual: http://www.codeply.com/go/IJYRI4LPwU
Exemplo:
fonte
Não é necessário JavaScript. Basta adicionar a classe
.row-eq-height
à sua existente.row
da seguinte maneira:Dica: se você tiver mais de 12 colunas em sua linha, a grade de autoinicialização não conseguirá agrupá-la. Portanto, adicione um novo a
div.row.row-eq-height
cada 12 colunas.Dica: pode ser necessário adicionar
para o seu html
fonte
Para responder sua pergunta, é tudo o que você precisa: veja a demonstração responsiva completa com o css prefixado :
Para adicionar suporte ao conteúdo em miniatura, flexione-o em colunas flexíveis como a captura de tela acima, adicione-o também ... Observe que você também pode fazer isso com painéis:
Embora o flexbox não funcione no IE9 e abaixo, você pode usar a demonstração com um fallback usando tags condicionais com algo como grades javascript como um polyfill:
Quanto aos outros dois exemplos da resposta aceita ... A demonstração da tabela é uma ideia decente, mas está sendo implementada incorretamente. A aplicação específica desse CSS nas classes de coluna de autoinicialização sem dúvida quebrará completamente a estrutura da grade. Você deve usar um seletor personalizado para um e dois estilos de tabelas não devem ser aplicados com
[class*='col-']
larguras definidas. Este método deve ser usado SOMENTE se você quiser colunas de altura e largura iguais. Não se destina a outros layouts e NÃO é responsivo. No entanto, podemos torná-lo substituto em monitores móveis ...Por fim, a primeira demonstração da resposta aceita, que implementa uma versão do único layout verdadeiro, é uma boa opção para algumas situações, mas não é adequada para colunas de autoinicialização. A razão para isso é que todas as colunas se expandem para a altura do contêiner. Portanto, isso também interromperá a capacidade de resposta, pois as colunas não estão se expandindo para os elementos próximos a elas, mas para todo o contêiner. Esse método também não permitirá que você aplique margens inferiores às linhas por mais tempo e também causará outros problemas ao longo do caminho, como rolagem para tags de ancoragem.
Para obter o código completo, consulte o Codepen, que prefixa automaticamente o código do flexbox.
fonte
row:after, row:before
ter display: table set que aparentemente o Safari não gosta.Você mostra apenas uma linha para que seu caso de uso possa ser limitado a isso. Caso você tenha várias linhas, este plugin - github Javascript-grids - funciona perfeitamente! Faz com que cada painel se expanda para o painel mais alto, dando a cada linha potencialmente uma altura diferente com base no painel mais alto dessa linha. É uma solução jquery vs. css, mas queria recomendá-la como uma abordagem alternativa.
fonte
Se você quiser fazer isso funcionar em qualquer navegador, use javascript:
fonte
.ready()
não é a hora certa para chamá-la - ela deve ser chamada #.load()
window.onload = function() {...function content above...}
vez disso. Isso funciona melhor.Tentei várias sugestões feitas neste tópico e em outras páginas, mas nenhuma solução funcionou 100% em todos os navegadores.
Então, experimentei bastante tempo e criei isso. Uma solução completa para colunas Bootstrap Equal Height com a ajuda do flexbox com apenas 1 classe. Isso funciona nos principais navegadores IE10 +.
CSS:
HTML:
Para oferecer suporte a ainda mais versões do IE, você pode, por exemplo, usar https://github.com/liabru/jquery-match-height e direcionar todas as colunas filho de
.equal-cols
. Como isso:Sem esse polyfill, as colunas se comportarão como as colunas normais do Bootstrap, o que é um bom retorno.
fonte
Você também pode usar o inline-flex, que funciona muito bem e pode ser um pouco mais limpo do que modificar todos os elementos de linha com CSS.
Para o meu projeto, eu queria que todas as linhas cujos elementos filhos tivessem bordas da mesma altura para que as bordas parecessem irregulares. Para isso, criei uma classe css simples.
fonte
De:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
fonte
solução jquery atrevida, se alguém estiver interessado. Apenas certifique-se de que todas as suas colunas tenham um nome de classe comum ... funcione responsivamente também se você o vincular a $ (window) .resize
Uso
Nota: Este post foi editado de acordo com o comentário do @Chris, indicando que o código foi definido apenas como a última altura mais alta na
$.each()
funçãofonte
Algumas das respostas anteriores explicam como tornar os divs a mesma altura, mas o problema é que, quando a largura é muito estreita, os divs não se acumulam; portanto, você pode implementar suas respostas com uma parte extra. Para cada um, você pode usar o nome CSS fornecido aqui, além da classe de linha que você usa, portanto, a div deve ser assim se você sempre quiser que as divs fiquem próximas uma da outra:
Para todas as telas:
Para quando você quiser usar o sm:
Para quando você quiser md:
Para quando você quiser usar o lg:
EDITAR Com base em um comentário, existe de fato uma solução mais simples, mas você precisa fornecer informações da coluna da maior largura desejada para todos os tamanhos até xs (por exemplo
<div class="col-md-3 col-sm-4 col-xs-12">
:fonte
flex-wrap: wrap;
e não precisar de todos os separados ... a menos que você os queira especificamente.Estou surpreso por não encontrar uma solução interessante aqui no final de 2018. Fui em frente e descobri uma solução Bootstrap 3 usando flexbox.
Exemplo limpo e simples:
HTML
CSS
Ver demonstração de trabalho: http://jsfiddle.net/5kmtfrny/
fonte
Sei que estou muito atrasado, mas agora você pode usar o atributo de estilo "altura mínima" para atingir seu objetivo.
fonte
Se alguém usando o bootstrap 4 e procurando colunas com a mesma altura, use
row-eq-height
para parent divRef: http://getbootstrap.com.vn/examples/equal-height-columns/
fonte
aqui está minha solução (CSS compilado):
Portanto, seu código seria semelhante a:
Basicamente, este é o mesmo sistema que você usa com
.col-*
classes com essa diferença que você precisa para aplicar.row-*
classes à própria linha.Com
.row-sm-eq
colunas serão empilhadas nas telas XS. Se você não precisar que eles estejam empilhados em qualquer tela, poderá usar.row-xs-eq
.A versão do SASS que realmente usamos:
Demonstração ao vivo
Nota: misturar
.col-xs-12
e.col-xs-6
dentro de uma única linha não funcionaria corretamente.fonte
border-spacing
e margens negativas.Há um problema com o uso da solução 1 ao aplicá-lo apenas na coluna de linhas. Gostaria de melhorar a Solução 1.
(Desculpe, não posso comentar a resposta de Popnoodles. Não tenho reputação suficiente)
fonte
Melhor por aí:
Reflexo do Github - Documentos
Funciona com bootstrap
Atualizar:
fonte
Aqui está o meu método, usei o flex com algumas alterações na consulta de mídia.
em seguida, adicionaram as classes aos pais necessárias.
Estou usando pontos de interrupção responsivos porque o fluxo geralmente dificulta a natureza responsiva padrão de autoinicialização.
fonte
Eu uso essa solução super fácil com
clearfix
, que não tem efeitos colaterais.Aqui está um exemplo no AngularJS:
E mais um exemplo no PHP:
fonte
Para aqueles que procuram uma solução rápida e fácil - se você tiver um conjunto relativamente consistente de conteúdo de bloco, defina uma altura mínima na div um pouco maior que o maior bloco pode ser mais fácil de implementar.
fonte
onde .container-height é a classe de estilo que deve ser adicionada a um elemento com estilo .row, no qual todos os seus filhos .col * têm a mesma altura.
A aplicação desses estilos somente a um .row específico (com a altura do recipiente., Como no exemplo) também evita aplicar a margem e o excesso de preenchimento a todos os .col *.
fonte
Procurei uma solução para o mesmo problema e encontrei uma que funcionava !! - com quase nenhum código extra ..
consulte https://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27 para obter uma boa dissucção e com a resposta que você deseja na parte inferior, com um link.
https://www.codeply.com/go/EskIjvun4B
esta foi a maneira correta de responder a mim ... uma citação: ... 3 - Use o flexbox (melhor!)
A partir de 2017, a melhor (e mais fácil) maneira de criar colunas de altura igual em um design responsivo é usar o flexbox CSS3.
e simplesmente use:
fonte
Exemplo:
https://jsfiddle.net/b9chris/njcnex83/embedded/result/
Adaptado de várias respostas aqui. As respostas baseadas no flexbox são o caminho certo quando o IE8 e o 9 estão mortos, e o Android 2.x está morto, mas isso não é verdade em 2015 e provavelmente não será em 2016. O IE8 e 9 ainda compõem 4- 6% de uso, dependendo de como você avalia, e para muitos usuários corporativos é muito pior. http://caniuse.com/#feat=flexbox
O truque
display: table
,display: table-cell
é mais compatível com versões anteriores - e uma grande coisa é o único problema sério de compatibilidade é um problema do Safari em que ele forçabox-sizing: border-box
, algo já aplicado às suas tags Bootstrap. http://caniuse.com/#feat=css-tableObviamente, você pode adicionar mais aulas que fazem coisas semelhantes, como
.equal-height-md
. Eu os vinculei a divs para o pequeno benefício de desempenho em meu uso restrito, mas você pode remover a tag para torná-la mais generalizada como o restante do Bootstrap.Observe que o jsfiddle aqui usa CSS e, portanto, as coisas que Less forneceria de outra forma são codificadas no exemplo vinculado. Por exemplo, @ screen-sm-min foi substituído pelo que Less inseriria - 768px.
fonte
Se fizer sentido no seu contexto, você pode simplesmente adicionar uma div de 12 colunas vazia após cada intervalo, que atua como um divisor que abraça a parte inferior da célula mais alta da sua linha.
Espero que isto ajude!
fonte
Pensei em acrescentar que a resposta dada pelo Dr.Flink também pode ser aplicada a um
form-horizontal
bloco do Bootstrap 3 - o que pode ser muito útil se você quiser usar cores de fundo para cada célula. Para que isso funcione para formulários de autoinicialização, você precisará agrupar o conteúdo do formulário, que serve apenas para replicar uma estrutura semelhante a uma tabela.O exemplo abaixo também fornece o CSS, que demonstra uma consulta de mídia adicional, que permite ao Bootstrap 3 simplesmente assumir o controle e fazer o que é normal nas telas menores. Isso também funciona no IE8 +.
Exemplo:
fonte
Tente fazer isso através da caixa flexível
JSFiddle ao vivo - https://jsfiddle.net/grinmax_/spsn4fnq/
fonte
Então, sim, o Bootstrap 4 torna todas as colunas em uma linha com a mesma altura; no entanto, se você estiver criando uma borda em torno do conteúdo dentro da linha, poderá achar que parece que as colunas não têm alturas iguais!
Quando me inscrevi
height: 100%
no elemento dentro da coluna, descobri que perdi minha margem.Minha solução é usar preenchimento na div do col (em vez de uma margem no elemento interno). Igual a:
O exemplo de código acima usa o Bootstrap 4.1 para criar um conjunto de nove caixas com uma borda
fonte
HTML
CSS
JS
fonte
19/03/2019
** Solução de altura igual ao Bootstrap 4 **
Utilitários de inicialização / flex para altura igual
Exemplo ao vivo no Codepen
Altura igual por classe de bootstrap com div principal fixo
height
oumin-height
Mostrar snippet de código
fonte
Você pode quebrar as colunas dentro de uma div
fonte