我有一个div(#wrapper),包含2个并排的div。
我希望右边的div垂直对齐。我在我的主包装上尝试了vertical-align:middle,但是它没有用。这让我抓狂!
希望有人可以提供帮助。
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;}
答案 0 :(得分:66)
浮动元素没有运气。他们不服从垂直对齐,
你需要,display:inline-block
代替:
小心display: inline-block;
,因为它将元素之间的空白区域解释为真正的空白区域。它并没有像display: block
那样忽略它。
我推荐这个:
将包含元素的font-size
设置为0
(零)并将font-size
重置为所需的值,如此
ul {
margin: 0;
padding: 0;
list-style: none;
font-size: 0;
}
ul > li {
font-size: 12px;
}
在此处观看演示:http://codepen.io/HerrSerker/pen/mslay
#wrapper{
width:400px;
height:auto;
border:1px solid green;
vertical-align: middle;
font-size: 0;
}
#left-div{
width:40px;
border:1px solid blue;
display: inline-block;
font-size: initial;
/* IE 7 hack */
*zoom:1;
*display: inline;
vertical-align: middle;
}
#right-div{
width:336px;
border:1px solid red;
display: inline-block;
font-size: initial;
/* IE 7 hack */
*zoom:1;
*display: inline;
vertical-align: middle;
}
答案 1 :(得分:20)
您可以使用显示表和显示表格单元格轻松完成此操作。
#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;
}
编辑:实际上很快就在CSS Desk上乱搞了你 - http://cssdesk.com/RXghg
另一个编辑:使用Flexbox。这会有效,但它已经过时了 - 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;
}
答案 2 :(得分:11)
我意识到这是一个古老的问题,但我认为将浮点垂直对齐问题的解决方案发布会很有用。
通过在您想要浮动的内容周围创建一个包装器,您可以使用:: after或:: before伪选择器在包装器中垂直对齐您的内容。您可以根据需要调整该内容的大小,而不会影响对齐。唯一的问题是包装器必须填充其容器的100%高度。
http://jsfiddle.net/jmdrury/J53SJ/
<div class="container">
<span class="floater">
<span class="centered">floated</span>
</span>
<h1>some text</h1>
</div>
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;
}
答案 3 :(得分:2)
一种可能的解决方案是使包装div
flex
按center
指定的arrActions: Array<Item> = [{ url: 'http://1.com', data: '5' },
{ url: 'http://2.com', data: '6' },
{ url: 'http://3.com', data: '7' }];
对齐。
答案 4 :(得分:1)
我尽力避免使用浮点数...但是-必要时,我使用以下几行垂直对齐中间位置:
position: relative;
top: 50%;
transform: translateY(-50%);
答案 5 :(得分:-1)
我修改的唯一缺点是你有一个设定的div高度......我不知道这对你是否有问题。