Eu tenho dois divs lado a lado. Eu gostaria que a altura deles fosse a mesma e permanecesse a mesma se um deles fosse redimensionado. Mas não consigo descobrir isso. Ideias?
Para esclarecer minha pergunta confusa, eu gostaria que as duas caixas tivessem sempre o mesmo tamanho; portanto, se uma crescer porque o texto é colocado nela, a outra deverá crescer para corresponder à altura.
<div style="overflow: hidden">
<div style="border:1px solid #cccccc; float:left; padding-bottom:1000px; margin-bottom:-1000px">
Some content!<br/>
Some content!<br/>
Some content!<br/>
Some content!<br/>
Some content!<br/>
</div>
<div style="border:1px solid #cccccc; float:left; padding-bottom:1000px; margin-bottom:-1000px">
Some content!
</div>
</div>
html
css
html-table
flexbox
NibblyPig
fonte
fonte
Respostas:
Flexbox
Com o flexbox, é uma única declaração:
Podem ser necessários prefixos para navegadores mais antigos, consulte o suporte ao navegador .
fonte
flex-direction: column
: jsfiddle.net/sdsgW/1Este é um problema comum que muitos já encontraram, mas felizmente algumas mentes inteligentes como Ed Eliot em seu blog publicaram suas soluções on-line.
Basicamente, o que você faz é tornar as duas divs / colunas muito altas adicionando um
padding-bottom: 100%
e depois "enganar o navegador" para pensar que elas não são tão altas usandomargin-bottom: -100%
. É melhor explicado por Ed Eliot em seu blog, que também inclui muitos exemplos.fonte
padding: 7px 10px
, se apadding-bottom
propriedade estiver definida como 100%? (PSoverflow:hidden
também foi necessário para me norow
)Esta é uma área em que o CSS nunca teve realmente nenhuma solução - você deve usar
<table>
tags (ou falsificá-las usando osdisplay:table*
valores de CSS ), pois esse é o único lugar em que um “manter vários elementos da mesma altura” foi implementado.Isso funciona em todas as versões do Firefox, Chrome e Safari, Opera a partir da versão 8 e no IE a partir da versão 8.
fonte
table
vez detable-row
?width
para seus divs, a menos que você adicionedisplay: table
o elemento pai, o que atrapalhará as coisas.Usando jQuery
Usando o jQuery, você pode fazer isso em um script de uma linha super simples.
Usando CSS
Isso é um pouco mais interessante. A técnica é chamada Faux Columns . Mais ou menos, na verdade, você não define a altura real como a mesma, mas cria alguns elementos gráficos para que pareçam a mesma altura.
fonte
Estou surpreso que ninguém tenha mencionado a técnica (muito antiga, mas confiável) de Colunas Absolutas: http://24ways.org/2008/absolute-columns/
Na minha opinião, é muito superior às técnicas de Faux Columns e One True Layout.
A ideia geral é que um elemento com
position: absolute;
se posicione contra o elemento pai mais próximo que o possuaposition: relative;
. Em seguida, você estica uma coluna para preencher 100% de altura atribuindo atop: 0px;
ebottom: 0px;
(ou quaisquer pixels / porcentagens que você realmente precisa). Veja um exemplo:fonte
Você pode usar o plug-in Equal Heights do Jquery para realizar isso, esses plug-ins tornam todos os div exatamente da mesma altura que os outros. Se um deles cresce e o outro também cresce.
Aqui uma amostra de implementação
Aqui está o link
http://www.cssnewbie.com/equalheights-jquery-plugin/
fonte
Você pode usar colunas falsas .
Basicamente, ele usa uma imagem de plano de fundo em um DIV contendo para simular os dois DIVs de altura igual. O uso dessa técnica também permite adicionar sombras, cantos arredondados, bordas personalizadas ou outros padrões divertidos aos seus contêineres.
Só funciona com caixas de largura fixa.
Bem testado e funcionando corretamente em todos os navegadores.
fonte
Apenas localizei este tópico enquanto procurava por essa resposta. Acabei de criar uma pequena função jQuery, espero que ajude, funcione como um encanto:
JAVASCRIPT
HTML
fonte
O caminho da grade CSS
A maneira moderna de fazer isso (que também evita ter que declarar um
<div class="row"></div>
-wrapper a cada dois itens) seria fazer uso de uma grade CSS. Isso também oferece controle fácil sobre as lacunas entre as linhas / colunas do item.fonte
Esta pergunta foi feita há 6 anos, mas ainda vale a pena dar uma resposta simples com o layout do flexbox atualmente.
Basta adicionar o seguinte CSS ao pai
<div>
, ele funcionará.As duas primeiras linhas declaram que ele será exibido como flexbox. E
flex-direction: row
informa aos navegadores que seus filhos serão exibidos em colunas. Ealign-items: stretch
atenderá ao requisito de que todos os elementos filhos se estendam para a mesma altura em que um deles se torne mais alto.fonte
I'd like both boxes to always be the same size, so if one grows because text is placed into it, the other one should grow to match the height.
que não é mencionada na resposta aceita ... Acabei de concluir aqui. Talvez eu devesse ter comentado sobre a resposta aceita?align-items: stretch;
padrão do flex não é?Usar CSS Flexbox e min-height funcionaram para mim
Digamos que você tenha um contêiner com duas divs dentro e queira que essas duas divs tenham a mesma altura.
Você definiria ' display: flex ' no contêiner e também ' align-items: stretch '
Em seguida, basta dar à criança divs uma ' altura mínima ' de 100%
Veja o código abaixo
fonte
Se você não se importa que um dos
div
s seja um mestre e dite a altura para os dois,div
existe o seguinte:Violino
Não importa o que aconteça, a
div
direita expandirá ou esmagará e transbordará para corresponder à altura dadiv
esquerda.Ambos
div
devem ser filhos imediatos de um contêiner e precisam especificar suas larguras dentro dele.CSS relevante:
fonte
Eu gosto de usar pseudo elementos para conseguir isso. Você pode usá-lo como plano de fundo do conteúdo e deixá-los preencher o espaço.
Com essas abordagens, você pode definir margens entre colunas, bordas etc.
fonte
The Fiddle
HTML
CSS
fonte
Eu tentei quase todos os métodos mencionados acima, mas a solução flexbox não funcionará corretamente com o Safari e os métodos de layout de grade não funcionarão corretamente com versões mais antigas do IE.
Esta solução é adequada para todas as telas e é compatível com vários navegadores:
O método acima será igual à altura das células e, para telas menores como celular ou tablet, podemos usar o
@media
método mencionado acima.fonte
você pode usar o jQuery para conseguir isso facilmente.
CSS
jQuery
HTML
Você precisará incluir o jQuery
fonte
<div>
tiverem conteúdo dinâmico. A razão pela qual digo é que, se houver<div class="right">
mais conteúdo, o outro problema surgirá.Sei que já faz muito tempo, mas, de qualquer maneira, compartilho minha solução. Este é um truque do jQuery.
--- HTML
---- CSS
--- JQUERY
fonte
Este é um plugin jQuery que define a mesma altura para todos os elementos na mesma linha (verificando o offset.top do elemento). Portanto, se sua matriz jQuery contiver elementos de mais de uma linha (offset.top diferente), cada linha terá uma altura separada, com base no elemento com altura máxima nessa linha.
};
fonte
fonte
Eu estava tendo o mesmo problema, então criei essa pequena função usando o jquery, pois o jquery faz parte de todos os aplicativos da web atualmente.
Você pode chamar esta função no evento de página pronta
Espero que isso funcione pra você.
fonte
Recentemente me deparei com isso e realmente não gostei das soluções, então tentei experimentar.
.mydivclass {inline-block; vertical-align: middle; width: 33%;}
fonte
O que fiz aqui é alterar a altura para min-height e atribuí-lhe um valor fixo. se um deles estiver sendo redimensionado, o outro permanecerá na mesma altura. não tenho certeza se é isso que você quer
fonte