Considere o seguinte código :
#wrapper {
width: 500px;
border: 1px solid black;
}
#first {
width: 300px;
border: 1px solid red;
}
#second {
border: 1px solid green;
}
<div id="wrapper">
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
<div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
Gostaria que as duas divs estivessem próximas uma da outra dentro da div do wrapper. Nesse caso, a altura da div verde deve determinar a altura do invólucro.
Como eu consegui isso via CSS?
#wrapper { display: flex; }
Respostas:
Flutue um ou ambos os divs internos.
Flutuando uma div:
ou, se você flutuar os dois, precisará incentivar a div do wrapper a conter os dois filhos flutuados, ou ele achará que está vazio e não colocará a borda ao redor deles
Flutuando ambas as divs:
fonte
overflow:auto
o # wrapper para que o tamanho ainda se adapte ao tamanho do conteúdo. (Sem a necessidade de um clear: both elemento)overflow: hidden
faz um ótimo trabalho aqui! No entanto, ainda é meio mágico para mim. Eu pensei queoverflow: hidden
deveria esconder o conteúdo se ele não couber no seu contêiner. Mas aqui o comportamento é um pouco diferente. Você poderia elaborar isso, por favor?overflow
propriedade limpará as flutuações tanto na vertical quanto na horizontal, e é por isso que, no meu primeiro exemplo,#second
não precisa de uma margem esquerda, a propriedade overflow funciona desde que o valor não sejavisible
.. Prefiro ocultar ao automático para aqueles que apenas os cenários são necessários. uma barra de rolagem não é gerada por acidente (o que é automático), de qualquer forma, não haverá conteúdo oculto em um cenário como esse, pois só ficará oculto se sair da sua largura de 500 px, mas enquanto não houver conteúdo em altura envoltório dentro da largura como normal .. nenhuma ocultação;)Tendo dois divs,
você também pode usar a
display
propriedade:Exemplo de jsFiddle aqui .
Se
div1
exceder uma certa altura,div2
será colocado próximo àdiv1
parte inferior. Para resolver isso, usevertical-align:top;
ondiv2
.Exemplo de jsFiddle aqui .
fonte
div
s são feitos,inline
você deve manter espaços, novas linhas etc. entre eles em seu HTML. Caso contrário, os navegadores renderizarão um espaço entre eles. Veja este violino : você não consegue manter os doisdiv
na mesma linha, a menos que coloque as etiquetas deles sem nada no meio.Você pode sentar elementos próximos um do outro usando a propriedade float CSS:
Você precisaria se certificar de que a div do wrapper permita a flutuação em termos de largura, e as margens etc estejam definidas corretamente.
fonte
Tente usar o modelo flexbox. É fácil e curto de escrever.
Live Jsfiddle
CSS:
direção padrão é linha. Assim, alinha-se um ao lado do outro dentro do #wrapper. Mas não há suporte para o IE9 ou menos que as versões
fonte
flex
. Obrigado!aqui está a solução:
sua demo atualizada;
http://jsfiddle.net/dqC8t/1/
fonte
overflow: auto;
, ainda funciona. Você poderia dar um exemplo onde é necessário?margin: 0 0 0 302px;
porque depende dissowidth: 300px;
. Mas, obrigada mesmo assim !!Opção 1
Use
float:left
nos doisdiv
elementos e defina uma% de largura para os dois elementos div com uma largura total combinada de 100%.Usar
box-sizing: border-box;
nos elementos div flutuantes. O valor border-box força o preenchimento e as bordas na largura e altura, em vez de expandi-lo.Use clearfix no
<div id="wrapper">
para limpar os elementos filho flutuantes que farão com que a div do wrapper seja dimensionada para a altura correta.http://jsfiddle.net/dqC8t/3381/
opção 2
Usar
position:absolute
em um elemento e uma largura fixa no outro elemento.Adicionar posição: relativo ao
<div id="wrapper">
elemento para fazer com que os elementos filhos se posicionem absolutamente no<div id="wrapper">
elemento.http://jsfiddle.net/dqC8t/3382/
Opção 3
Use
display:inline-block
nos doisdiv
elementos e defina uma% de largura para os dois elementos div com uma largura total combinada de 100%.E novamente (igual ao
float:left
exemplo) usebox-sizing: border-box;
nos elementos div. O valor border-box força o preenchimento e as bordas na largura e altura, em vez de expandi-lo.NOTA: os elementos de bloco embutido podem ter problemas de espaçamento, pois são afetados por espaços na marcação HTML. Mais informações aqui: https://css-tricks.com/fighting-the-space-between-inline-block-elements/
http://jsfiddle.net/dqC8t/3383/
Uma opção final seria usar a nova opção de exibição denominada flex, mas observe que a compatibilidade do navegador pode entrar em ação:
http://caniuse.com/#feat=flexbox
http://www.sketchingwithcss.com/samplechapter/cheatsheet.html
fonte
float
não flutue meu barco.inline-block
pedras. (Desculpe.)Tente usar as alterações de código abaixo para colocar duas divs uma na frente da outra
Link JSFiddle
fonte
É muito fácil - você pode fazer da maneira mais difícil
ou a maneira mais fácil
Também existem milhões de outras maneiras.
Mas eu apenas com o caminho mais fácil. Também gostaria de dizer que muitas das respostas aqui estão incorretas. Mas as duas maneiras que mostrei pelo menos funcionam no HTML 5.
fonte
Esta é a resposta CSS3 correta. Espero que isso ajude você de alguma forma agora: D Eu realmente recomendo que você leia o livro: https://www.amazon.com/Book-CSS3-Developers-Future-Design/dp/1593272863 Na verdade, eu fiz essa solução ao ler este livro agora . : D
fonte
Adicione
float:left;
propriedade em ambas as divs.Adicione
display:inline-block;
propriedade.Adicione
display:flex;
propriedade na div pai.fonte
Minha abordagem:
CSS:
fonte
fonte
Na interface do usuário do material e react.js, você pode usar a grade
fonte