Eu tenho um div (#wrapper) contendo 2 divs lado a lado.
Eu gostaria que a div direita fosse alinhada verticalmente. Tentei o alinhamento vertical: meio no meu wrapper principal, mas não está funcionando. Isso está me deixando louco!
Espero que alguém possa ajudar.
HTML:
<div id="wrapper">
<div id="left-div">
<ul>
<li>One</li>
<li>Two</li>
</ul>
</div>
<div id="right-div">
Here some text...
</div>
</div>
CSS:
#wrapper{
width:400px;
float:left;
height:auto;
border:1px solid purple;}
#left-div{
width:40px;
border:1px solid blue;
float:left;}
#right-div{
width:350px;
border:1px solid red;
float:left;}
ul{
list-style-type: none;
padding:0;
margin:0;}
inline-block
faz com que se comporte como um inlineimg
que tem oalign
atributo definido)Você pode fazer isso facilmente com display table e display table-cell.
#wrapper { width: 400px; float: left; height: auto; display: table; border: 1px solid green; } #right-div { width: 356px; border: 1px solid red; display: table-cell; vertical-align: middle; }
EDIT: Na verdade, mexeu rapidamente no CSS Desk para você - http://cssdesk.com/RXghg
OUTRA EDIÇÃO: Use o Flexbox. Isso funcionará, mas está bastante desatualizado - http://www.cssdesk.com/davf5
#wrapper { display: flex; align-items: center; border:1px solid green; } #left-div { border:1px solid blue; } #right-div { border:1px solid red; }
fonte
Sei que essa é uma questão antiga, mas achei que seria útil postar uma solução para o problema do alinhamento vertical do flutuador.
Ao criar um invólucro em torno do conteúdo que deseja flutuar, você pode usar os pseudo seletores :: after ou :: before para alinhar verticalmente seu conteúdo dentro do invólucro. Você pode ajustar o tamanho desse conteúdo o quanto quiser, sem afetar o alinhamento. O único problema é que a embalagem deve preencher 100% da altura de seu recipiente.
http://jsfiddle.net/jmdrury/J53SJ/
HTML
<div class="container"> <span class="floater"> <span class="centered">floated</span> </span> <h1>some text</h1> </div>
CSS
div { border:1px solid red; height:100px; width:100%; vertical-align:middle; display:inline-block; box-sizing: border-box; } .floater { float:right; display:inline-block; height:100%; box-sizing: border-box; } .centered { border:1px solid blue; height: 30px; vertical-align:middle; display:inline-block; box-sizing: border-box; } h1 { margin:0; vertical-align:middle; display:inline-block; box-sizing: border-box; } .container:after, .floater:after, .centered:after, h1:after { height:100%; content:''; font-size:0; vertical-align:middle; display:inline-block; box-sizing: border-box; }
fonte
centered
classe e limpar muitas coisas redundantes daquele CSS, ele ainda faz o alinhamento vertical muito bem, com apenas (desculpe a perda de formatação! ...):div { border:1px solid red; height:100px; } .floater { float:right; height:100%; } h1 { vertical-align:middle; } .container:after, .floater:after, .centered:after { height:100%; content:''; font-size:0; vertical-align:middle; display:inline-block; }
Uma possível solução é fazer um wrapper
div
flex
com itens alinhadoscenter
conforme especificado em https://spin.atomicobject.com/2016/06/18/vertically-center-floated-elements-flexbox/ .fonte
Eu faço o meu melhor para evitar o uso de flutuadores ... mas - quando necessário, eu alinho verticalmente ao meio usando as seguintes linhas:
position: relative; top: 50%; transform: translateY(-50%);
fonte
A única queda das minhas modificações é que você tem uma altura div definida ... Não sei se isso é um problema para você ou não.
http://cssdesk.com/kyPhC
fonte