Eu tenho algo assim:
<div style="width:100px;float:left">menu</div>
<div style="float:left">content</div>
ambos os flutuadores são necessários. Quero que o div de conteúdo preencha toda a tela, menos os 100px do menu. Se eu não usar float, o div se expande exatamente como deveria. Mas como faço para definir isso quando float está definido? Se eu usar algo como
style=width:100%
então, o div de conteúdo obtém o tamanho do pai, que é o corpo ou outro div que também experimentei e, portanto, é claro que não se encaixa direito no menu e é mostrado abaixo.
A maneira com mais compatibilidade cruzada que encontrei de fazer isso não é muito óbvia. Você precisa remover o flutuador da segunda coluna e aplicar
overflow:hidden
a ele. Embora isso pareça estar ocultando qualquer conteúdo que saia do div, ele realmente força o div a permanecer dentro de seu pai.Usando seu código, este é um exemplo de como isso poderia ser feito:
Espero que isso seja útil para alguém com esse problema, é o que eu achei que funciona melhor para o site que eu estava construindo, depois de tentar ajustá-lo a outras resoluções. Infelizmente, isso não funcionará se você incluir um flutuante à direita
div
após o conteúdo também, se alguém souber uma boa maneira de fazer isso funcionar, com boa compatibilidade com o IE, ficaria muito feliz em saber.Nova e melhor opção usando
display: flex;
Agora que o modelo Flexbox está amplamente implementado, eu realmente recomendo usá-lo, pois permite muito mais
flex
flexibilidade com o layout. Aqui está uma coluna simples de duas colunas como a original:E aqui está uma coluna de três colunas com uma coluna central de largura flexível!
fonte
Solução sem fixar o tamanho em sua margem
+1 para Merkuro, mas se o tamanho do flutuador mudar, sua margem fixa falhará. Se você usar o CSS acima à direita,
div
ele mudará de tamanho com a mudança de tamanho no flutuador esquerdo. É um pouco mais flexível assim. Verifique o violino aqui: http://jsfiddle.net/9ZHBK/144/fonte
overflow: hidden
eoverflow auto
resultam no mesmo comportamento. Eu também acho que as pessoas apreciam o Fiddle.Os elementos flutuantes são retirados do layout de fluxo normal e os elementos de bloco, como DIVs, não ocupam mais a largura de seu pai. As regras mudam nesta situação. Em vez de reinventar a roda, verifique este site para obter algumas soluções possíveis para criar o layout de duas colunas que você procura: http://www.maxdesign.com.au/presentation/page_layouts/
Especificamente, o "Layout de duas colunas líquidas".
Felicidades!
fonte
Esta é uma solução atualizada para HTML 5 se alguém estiver interessado e não gostar de "flutuar".
A tabela funciona muito bem neste caso, pois você pode definir a largura fixa da tabela e da célula da tabela.
http://jsfiddle.net/EAEKc/596/ código-fonte original de @merkuro
fonte
este uso pode resolver seu problema.
fonte
E com base na
merkuro
solução de, se quiser maximizar o da esquerda, você deve usar:Não foi testado no IE, então pode parecer quebrado no IE.
fonte
A resposta aceita pode funcionar, mas não gosto da ideia de margens sobrepostas. Em HTML5, você faria isso com
display: flex;
. É uma solução limpa. Basta definir a largura de um elemento eflex-grow: 1;
do elemento dinâmico. Uma versão editada do fiddle merkuros: https://jsfiddle.net/EAEKc/1499/fonte
Olá, há uma maneira fácil com o método oculto de estouro no elemento certo.
fonte
Isso pode funcionar:
fonte