Eu tenho 2 divs: um no lado esquerdo e outro no lado direito da minha página. O lado esquerdo tem largura fixa e eu quero que o lado direito preencha o espaço restante.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
fonte
fonte
Respostas:
Isso parece realizar o que você está buscando.
fonte
O problema que encontrei com a resposta de Boushley é que, se a coluna da direita for maior que a esquerda, ela apenas se enrolará à esquerda e continuará preenchendo todo o espaço. Este não é o comportamento que eu estava procurando. Depois de pesquisar várias soluções, encontrei um tutorial (agora o link está esgotado) sobre a criação de três páginas de coluna.
O autor oferece três maneiras diferentes, uma largura fixa, uma com três colunas variáveis e outra com colunas externas fixas e uma largura variável média. Muito mais elegante e eficaz do que outros exemplos que encontrei. Melhorou significativamente minha compreensão do layout CSS.
Basicamente, no caso simples acima, flutue a primeira coluna à esquerda e forneça uma largura fixa. Em seguida, forneça à coluna da direita uma margem esquerda um pouco mais larga que a primeira coluna. É isso aí. Feito. Código de Ala Boushley:
Aqui está uma demonstração em Stack Snippets & jsFiddle
Com o exemplo de Boushley, a coluna da esquerda mantém a outra coluna à direita. Assim que a coluna da esquerda termina, a direita começa a preencher todo o espaço novamente. Aqui a coluna da direita simplesmente se alinha mais na página e a coluna da esquerda ocupa sua grande margem de gordura. Não são necessárias interações de fluxo.
fonte
A solução vem da propriedade de exibição.
Basicamente, você precisa fazer as duas divs agirem como células da tabela. Portanto, em vez de usar
float:left
, você precisará usar asdisplay:table-cell
duas divs e, para a largura dinâmica div, você também precisará definirwidth:auto;
. As duas divs devem ser colocadas em um contêiner de 100% de largura com adisplay:table
propriedadeAqui está o css:
E o HTML:
IMPORTANTE: Para o Internet Explorer, você precisa especificar a propriedade float na div dinâmica da largura, caso contrário, o espaço não será preenchido.
Espero que isso resolva seu problema. Se você quiser, pode ler o artigo completo que escrevi sobre isso no meu blog .
fonte
Atualmente, você deve usar o
flexbox
método (pode ser adaptado a todos os navegadores com um prefixo de navegador).Mais informações: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
fonte
Como essa é uma pergunta bastante popular, estou inclinado a compartilhar uma boa solução usando o BFC.
Exemplo de Codepen do seguinte aqui .
Nesse caso,
overflow: auto
dispara o comportamento do contexto e faz com que o elemento certo se expanda apenas para a largura restante disponível e, naturalmente, se expande para a largura total se.left
desaparecer. Um truque altamente útil e limpo para muitos layouts de interface do usuário, mas talvez seja difícil entender o "por que funciona" primeiro.fonte
auto
pode desencadear isso, dependendo do seu conteúdo. Você também pode usar qualquer outro valor de estouro para obter o mesmo efeito;hidden
pode funcionar melhor para o seu caso.Se você não precisar de compatibilidade com versões mais antigas de determinados navegadores (IE
108 ou menos, por exemplo), poderá usar acalc()
função CSS:fonte
A resposta de @ Boushley foi a mais próxima, no entanto, há um problema não abordado que foi apontado. A div direita ocupa toda a largura do navegador; o conteúdo assume a largura esperada. Para ver melhor este problema:
http://jsfiddle.net/79hpS/
O conteúdo está no local correto (no Firefox), no entanto, a largura está incorreta. Quando os elementos filhos começam a herdar a largura (por exemplo, a tabela com
width: 100%
), eles recebem uma largura igual à do navegador, fazendo com que eles ultrapassem o lado direito da página e criem uma barra de rolagem horizontal (no Firefox) ou não flutuem e sejam pressionados ( em cromo).Você pode corrigir isso facilmente adicionando
overflow: hidden
à coluna da direita. Isso fornece a largura correta para o conteúdo e a div. Além disso, a tabela receberá a largura correta e preencherá a largura restante disponível.Tentei algumas das outras soluções acima, elas não funcionavam totalmente com certos casos extremos e eram complicadas demais para justificá-las. Isso funciona e é simples.
Se houver algum problema ou preocupação, fique à vontade para criá-los.
fonte
overflow: hidden
realmente corrige isso, obrigado. (A resposta marcada está errado BTW comoright
realmente leva todo o espaço disponível no pai, você pode ver isso em todos os navegadores ao inspecionar elementos)overflow: hidden
coloca a coluna da direita em seu próprio contexto de formatação de bloco. Os elementos de bloco ocupam todo o espaço horizontal disponível para eles. Veja: developer.mozilla.org/pt-BR/docs/Web/Guide/CSS/…overflow:xxx
atributo é a chave. Como você diz, ele deixa#right
de se expandir por baixo#left
. Resolve muito bem um problema que eu estava tendo com o redimensionamento da interface do usuário do jQuery - com#right
set com um atributo overflow e#left
redimensionável, você tem um limite móvel simples. Veja jsfiddle.net/kmbro/khr77h0t .Aqui está uma pequena correção para a solução aceita, que evita que a coluna da direita caia na coluna da esquerda. Substituído
width: 100%;
poroverflow: hidden;
uma solução complicada, se alguém não soubesse.http://jsfiddle.net/MHeqG/2600/
[edit] Verifique também um exemplo para o layout de três colunas: http://jsfiddle.net/MHeqG/3148/
fonte
Se você estiver tentando preencher o espaço restante em uma caixa flexível entre 2 itens, adicione a seguinte classe a uma div vazia entre os 2 que você deseja separar:
fonte
Usar
display:flex
fonte
A resposta de Boushley parece ser o melhor caminho a seguir para organizar isso usando carros alegóricos. No entanto, não é sem seus problemas. A flutuação aninhada no elemento expandido não estará disponível para você; isso vai quebrar a página.
O método mostrado basicamente "finge" quando se trata do elemento de expansão - na verdade, ele não está flutuando, está apenas tocando junto com os elementos flutuados de largura fixa usando suas margens.
O problema então é exatamente isso: o elemento de expansão não é flutuado. Se você tentar flutuar aninhado dentro do elemento de expansão, esses itens flutuantes "aninhados" não serão realmente aninhados; quando você tenta colocar um
clear: both;
item flutuante "aninhado" em seus itens flutuantes, você também limpa os carros alegóricos de nível superior.Então, para usar a solução de Boushley, gostaria de acrescentar que você deve colocar uma div como a seguinte: .fakeFloat {height: 100%; largura: 100%; flutuar: esquerda; } e coloque isso diretamente dentro da div expandida; todo o conteúdo da div expandida deve estar dentro desse elemento fakeFloat.
Por esse motivo, eu recomendaria o uso de tabelas nesse caso específico. Os elementos flutuantes realmente não foram projetados para fazer a expansão que você deseja, enquanto a solução que usa uma tabela é trivial. Geralmente, é argumentado que flutuar é mais apropriado para layouts, não para tabelas .. mas você não está usando flutuação aqui de qualquer maneira, está fingindo - e isso meio que derrota o objetivo do argumento estilístico para esse caso específico, em minha humilde opinião.
fonte
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85Tentei as soluções acima para uma esquerda líquida e uma direita fixa, mas nenhuma delas funcionou (sei que a pergunta é inversa, mas acho que isso é relevante). Aqui está o que funcionou:
fonte
Eu tive um problema semelhante e encontrei a solução aqui: https://stackoverflow.com/a/16909141/3934886
A solução é para uma div central fixa e colunas laterais líquidas.
Se você deseja uma coluna esquerda fixa, basta alterar a fórmula de acordo.
fonte
Você pode usar as propriedades CSS da grade, é a maneira mais clara, limpa e intuitiva de estruturar suas caixas.
fonte
Eu me pergunto que ninguém usou
position: absolute
composition: relative
Portanto, outra solução seria:
HTML
CSS
Exemplo de Jsfiddle
fonte
/ * * css * /
/ * * html * /
fonte
Eu tenho uma solução muito simples para isso! // HTML
// CSS
Link: http://jsfiddle.net/MHeqG/
fonte
Eu tive um problema semelhante e criei o seguinte, que funcionou bem
CSS:
HTML:
Este método não quebra quando a janela é reduzida, mas expande automaticamente a área 'conteúdo'. Ele manterá uma largura estática para o menu do site (à esquerda).
E para demonstração da caixa de conteúdo com expansão automática e da caixa vertical esquerda (menu do site):
https://jsfiddle.net/tidan/332a6qte/
fonte
Tente adicionar posição
relative
, removerwidth
efloat
propriedades do lado direito, depois adicioneleft
eright
propriedade com0
valor.Além disso, você pode adicionar uma
margin left
regra com o valor baseado na largura do elemento esquerdo (+ alguns pixels se precisar de espaço entre eles) para manter sua posição.Este exemplo está funcionando para mim:
fonte
Tente isso. Funcionou para mim.
fonte
Estou trabalhando nesse problema há dois dias e tenho uma solução que pode funcionar para você e qualquer outra pessoa tentando fazer uma largura fixa responsiva esquerda e fazer com que o lado direito preencha o restante da tela sem envolver o lado esquerdo. A intenção que assumo é tornar a página responsiva em navegadores e dispositivos móveis.
Aqui está o código
Aqui está o meu violino que pode funcionar tanto para você quanto para mim. https://jsfiddle.net/Larry_Robertson/62LLjapm/
fonte
Regras para itens e contêineres;
Use espaço em branco: nowrap; para textos nos últimos itens por sua desestruturação.
Item X% | Item Y% | Item Z%
Comprimento total sempre = 100%!
E se
então
Item X = 70%
O item X é dominante (os primeiros itens são dominantes no layout da tabela CSS)!
Experimente o conteúdo máximo; propriedade para div inside para espalhar div no container:
}
fonte
A solução mais fácil é usar margem. Isso também será responsivo!
fonte
A solução mais simples é tornar a largura da div esquerda igual a 100% - a largura da div direita mais qualquer margem entre elas.
https://codepen.io/tamjk/pen/dybqKBN
fonte
Corri para o mesmo problema, tentando o layout de alguns controles jqueryUI . Embora a filosofia comum agora seja "use em
DIV
vez deTABLE
", descobri que, no meu caso, usar TABLE funcionava muito melhor. Em particular, se você precisar de um alinhamento direto entre os dois elementos (por exemplo, centralização vertical, centralização horizontal etc.), as opções disponíveis em TABLE fornecem controles simples e intuitivos para isso.Aqui está a minha solução:
fonte
<font>
,<b>
, etc. HTML evoluiu passado que se concentrar menos na apresentação.overflow
.display:table
para obter a aparência desejada de dados não tabulares é limpo. Forçar dados não tabulares como colunas de página ou controles de formulário em tabelas HTML para controlar o layout não é limpo.