Eu quero um layout div de duas colunas, onde cada um pode ter largura variável, por exemplo
div {
float: left;
}
.second {
background: #ccc;
}
<div>Tree</div>
<div class="second">View</div>
Eu quero que a div 'view' se expanda para toda a largura disponível após a div 'tree' preencher o espaço necessário.
Atualmente, minha div 'view' é redimensionada para o conteúdo que ela contém. Também será bom se ambas as divs ocuparem toda a altura.
Isenção de responsabilidade não duplicada:
- Expanda div para a largura máxima quando float: left estiver definido, pois o esquerdo tem uma largura fixa.
- Ajuda com div - faça div caber na largura restante porque eu preciso de duas colunas alinhadas à esquerda
html
css
multiple-columns
Anurag Uniyal
fonte
fonte
overflow hidden
Respostas:
A solução para isso é realmente muito fácil, mas nem um pouco óbvia. Você precisa acionar algo chamado "contexto de formatação de bloco" (BFC), que interage com os flutuadores de uma maneira específica.
Apenas pegue a segunda div, remova a bóia e dê-a
overflow:hidden
em seu lugar. Qualquer valor de estouro diferente de visível faz com que o bloco em que está definido se torne um BFC. Os BFCs não permitem que carros alegóricos descendentes os escapem, nem permitem que carros alegóricos / ancestrais os invadam. O efeito líquido aqui é que a div flutuada fará o que quiser, então a segunda div será um bloco comum, ocupando toda a largura disponível, exceto a ocupada pela flutuação .Isso deve funcionar em todos os navegadores atuais, embora você precise acionar o hasLayout no IE6 e 7. Não consigo me lembrar.
Demonstrações:
fonte
Acabei de descobrir a mágica das caixas flexíveis (display: flex). Tente o seguinte:
As caixas flexíveis me dão o controle que eu gostaria que o css tivesse há 15 anos. Está finalmente aqui! Mais informações: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
fonte
flex-grow: 100;
vez deflex-grow: 1;
?flex-grow:10
e então eu definiria # comoflex-grow: 90
# seria 10% da largura da linha e #b seria 90% da largura da linha. Se nenhum outro elemento tiver um estilo de largura flexível, não importa tecnicamente o que você coloca.Solução Flexbox
É para isso que serve a
flex-grow
propriedade.Nota: Adicione prefixos de fornecedor flex, se necessário pelos navegadores suportados .
fonte
Este seria um bom exemplo de algo que é trivial para fazer com tabelas e difícil (se não impossível, pelo menos no sentido entre navegadores) com CSS.
Se as duas colunas tivessem largura fixa, isso seria fácil.
Se uma das colunas tivesse largura fixa, isso seria um pouco mais difícil, mas totalmente factível.
Com as duas colunas de largura variável, IMHO, você precisa apenas usar uma tabela de duas colunas.
fonte
display:none;
Ao mesmo tempo em que, o máximo possível, é 100% responsivo em uma escala móvel, às vezes é melhor mudar completamente o design para um celular usando a sensação da tela de toque e estilo do botão.Confira esta solução
fonte
Use
calc
:O problema disso é que todas as larguras devem ser explicitamente definidas, como um valor (px e em funcionam bem) ou como uma porcentagem de algo explicitamente definido.
fonte
Aqui, isso pode ajudar ...
fonte
<div class="clear" style="clear: both; height: 1px; overflow: hidden; font-size:0pt; margin-top: -1px;"></div>
Não entendo por que as pessoas estão dispostas a trabalhar tanto para encontrar uma solução de CSS puro para layouts colunares simples que são TÃO FÁCIL usando a
TABLE
tag antiga .Todos os navegadores ainda têm a lógica do layout da tabela ... Talvez me chame de dinossauro, mas eu digo: deixe-o ajudá-lo.
Muito menos arriscado em termos de compatibilidade entre navegadores também.
fonte
media-queries
colocar as duas colunas uma acima da outra em pequenos dispositivos, é impossível com atable
tag antiga . Para que isso funcione, você precisa aplicarCSS
estilos de tabela. Portanto, hoje em dia é melhor resolver issoCSS
se você quiser um layout responsivo para qualquer tamanho de tela.Se a largura da outra coluna for fixa, que tal usar a
calc
função CSS para todos os navegadores comuns :Dessa forma, a largura da segunda linha será calculada (ou seja, a largura restante) e aplicada de forma responsiva.
fonte
css-grid
. Também funciona com oposition: fixed
que torna tudo em torno de escolha perfeita! Obrigado!fonte
Você pode tentar o CSS Grid Layout .
fonte
flex-grow - define a capacidade de um item flex crescer, se necessário. Ele aceita um valor sem unidade que serve como proporção. Ele determina qual quantidade de espaço disponível dentro do contêiner flexível o item deve ocupar.
Se todos os itens tiverem o crescimento flexível definido como 1, o espaço restante no contêiner será distribuído igualmente a todos os filhos. Se um dos filhos tiver um valor 2, o espaço restante ocupará o dobro do espaço que os outros (ou tentará, pelo menos). Veja mais aqui
fonte
Uma implementação ligeiramente diferente,
Dois painéis div (conteúdo + extra), lado a lado,
content panel
se expandem seextra panel
não estiver presente.jsfiddle: http://jsfiddle.net/qLTMf/1722/
fonte
Pat - Você está certo. É por isso que essa solução satisfaria tanto os "dinossauros" quanto os contemporâneos. :)
fonte
Você pode usar a biblioteca CSS do W3 que contém uma classe chamada
rest
que faz exatamente isso:Não se esqueça de vincular a biblioteca CSS nas páginas da página
header
:Aqui está a demonstração oficial: W3 School Tryit Editor
fonte
Não tenho certeza se essa é a resposta que você espera, mas por que você não define a largura da Árvore como 'automática' e a largura da 'Visualização' como 100%?
fonte
Dê uma olhada nas estruturas de layout CSS disponíveis. Eu recomendaria Simpl ou, a estrutura Blueprint, um pouco mais complexa.
Se você estiver usando o Simpl (que envolve a importação de apenas um arquivo simpl.css ), você pode fazer o seguinte:
, para um layout 50-50, ou:
, para um 25-75.
É simples assim.
fonte
Obrigado pelo plug do Simpl.css!
lembre-se de agrupar todas as suas colunas da
ColumnWrapper
mesma forma.Estou prestes a lançar a versão 1.0 do Simpl.css, então ajude a espalhar a palavra!
fonte
Eu escrevi uma função javascript que chamo de jQuery $ (document) .ready (). Isso analisará todos os filhos da div pai e atualizará apenas o filho mais correto.
html
javascript
fonte
Isso é bastante fácil usando o flexbox. Veja o trecho abaixo. Adicionei um contêiner de invólucro para controlar o fluxo e definir uma altura global. Também foram adicionadas bordas para identificar os elementos. Observe que os divs agora também se expandem para a altura total, conforme necessário. Os prefixos do fornecedor devem ser usados para o flexbox em um cenário do mundo real, pois ainda não é totalmente suportado.
Desenvolvi uma ferramenta gratuita para entender e projetar layouts usando o flexbox. Confira aqui: http://algid.com/Flex-Designer
fonte
stretch
porque é o valor padrão e não há necessidade de fazer o recipiente flexível elemento filho assimdisplay:flex
é inútil para os elementos internosSe as duas larguras são de tamanho variável, por que você não calcula a largura com algum script ou lado do servidor?
<div style="width: <=% getTreeWidth() %>">Tree</div>
fonte