Eu tenho um pequeno problema peculiar que estou resolvendo usando um table
, veja abaixo. Basicamente, quero que dois divs ocupem 100% da largura disponível, mas ocupem apenas o espaço vertical necessário (o que não é tão óbvio na imagem). Os dois devem sempre ter exatamente a mesma altura com uma pequena linha entre eles, como mostrado.
(fonte: pici.se )
Isso tudo é muito fácil de usar table
, o que estou fazendo atualmente. No entanto, não estou muito interessado na solução, visto que semanticamente esta não é realmente uma tabela.
html
css
html-table
Deniz Dogan
fonte
fonte
Respostas:
Você pode obter colunas de altura igual em CSS aplicando preenchimento inferior de uma grande quantidade, margem negativa inferior da mesma quantidade e circundando as colunas com um div que possui overflow oculto. Centralizar o texto verticalmente é um pouco mais complicado, mas deve ajudá-lo no processo.
Acho que vale a pena mencionar que
a resposta anterior de streetpc tem html inválido, o doctype é XHTML e existem aspas simples em torno dos atributos. Também vale a pena notar quevocê não precisa de um elemento extra comclear
on para limpar os flutuadores internos do contêiner. Se você usar overflow hidden, isso limpará os floats em todos os navegadores não-IE e, em seguida, apenas adicionar algo para fornecer hasLayout, como largura ou zoom: 1 fará com que o IE limpe seus floats internos.Eu testei isso em todos os navegadores modernos FF3 + Opera9 + Chrome Safari 3+ e IE6 / 7/8. Pode parecer um truque feio, mas funciona bem e eu o uso muito na produção.
Eu espero que isso ajude.
fonte
É ano de 2012 + n, por isso, se você já não se preocupam com IE6 / 7,
display:table
,display:table-row
edisplay:table-cell
trabalho em todos os navegadores modernos:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/
Atualização 2016-06-17: Se você acha que chegou a hora
display:flex
, dê uma olhada no Flexbox Froggy .fonte
display: flex
?Você deve usar o flexbox para fazer isso. Não é compatível com IE8 e IE9 e apenas com o prefixo -ms no IE10, mas todos os outros navegadores o suportam. Para prefixos de fornecedores, você também deve usar autoprefixer .
fonte
você pode fazer isso funcionar com js:
fonte
Este é um problema clássico em CSS. Não há realmente uma solução para isso.
Este artigo de A List Apart é uma boa leitura sobre esse problema. Ele usa uma técnica chamada "colunas falsas", baseada em ter uma imagem de fundo ladrilhada verticalmente no elemento que contém as colunas que cria a ilusão de colunas de comprimento igual. Como está no invólucro dos elementos flutuantes, é tão longo quanto o elemento mais longo.
Os editores A List Apart têm esta observação sobre o artigo:
A técnica requer designs de largura completamente estáticos que não funcionam bem com layouts líquidos e técnicas de design responsivo que são populares hoje em sites de dispositivos cruzados. Para sites de largura estática, no entanto, é uma opção confiável.
fonte
Tive problema semelhante e na minha opinião a melhor opção é usar um pouco de javascript ou jquery.
Você pode fazer com que os divs desejados tenham a mesma altura obtendo o maior valor de div e aplicando esse valor a todos os outros divs. Se você tiver muitos divs e muitas soluções, sugiro escrever um código js com pouco avanço para descobrir qual de todos os divs é o mais alto e, em seguida, usar seu valor.
Com jquery e 2 divs é muito simples, aqui está o código de exemplo:
$('.smaller-div').css('height',$('.higher-div').css('height'));
E para o final, há uma última coisa. O enchimento (superior e inferior) deve ser o mesmo! Se um tiver um preenchimento maior, você precisará eliminar a diferença de preenchimento.
fonte
Pelo que eu sei, você não pode fazer isso usando as implementações atuais de CSS. Para fazer duas colunas de altura igual, você precisa de JS.
fonte
Isso funciona para mim no IE 7, FF 3.5, Chrome 3b, Safari 4 (Windows).
Também funciona no IE 6 se você remover o comentário do div mais claro na parte inferior. Edit : como Natalie Downe disse, você pode simplesmente adicionar
width: 100%;
em#container
vez disso.Não conheço uma maneira CSS de centralizar verticalmente o texto no div certo se o div não for de altura fixa. Se for, você pode definir o
line-height
com o mesmo valor da altura do div e colocar um div interno contendo seu texto comdisplay: inline; line-height: 110%
.fonte
Usando Javascript, você pode fazer com que as duas tags div tenham a mesma altura. O div menor será ajustado para ter a mesma altura que a tag div mais alta usando o código mostrado abaixo:
Com "esquerda" e "direita" sendo os id das tags div.
fonte
Usando a propriedade css -> display: table-cell
fonte
Usando JS, use
data-same-height="group_name"
em todos os elementos que deseja que tenham a mesma altura .O exemplo: https://jsfiddle.net/eoom2b82/
O código:
fonte
Eu precisava fazer algo semelhante, aqui está minha implementação. Para recapitular o propósito, é que 2 elementos ocupem a largura de um determinado contêiner pai e a altura seja tão alta quanto o necessário. Basicamente, a altura é igual à altura máxima da maior quantidade de conteúdo, mas o outro recipiente está nivelado.
html
css
fonte
Vários anos atrás, a
float
propriedade costumava resolver esse problema com atable
abordagem usandodisplay: table;
edisplay: table-row;
edisplay: table-cell;
.Mas agora com a propriedade flex, você pode resolvê-lo com 3 linhas de código:
display: flex;
eflex-wrap: wrap;
eflex: 1 0 50%;
1 0 50%
são osflex
valores que atribuímos a:flex-grow flex-shrink flex-basis
respectivamente. É um atalho relativamente novo no flexbox para evitar digitá-los individualmente. Eu espero que isto ajude alguém lá forafonte