CSS垂直对齐浮动div

时间:2012-02-24 12:39:19

标签: html css

我有一个div(#wrapper),包含2个并排的div。

我希望右边的div垂直对齐。我在我的主包装上尝试了vertical-align:middle,但是它没有用。这让我抓狂!

希望有人可以提供帮助。

http://cssdesk.com/LWFhW

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;}

6 个答案:

答案 0 :(得分:66)

浮动元素没有运气。他们不服从垂直对齐,

你需要,display:inline-block代替:

http://cssdesk.com/2VMg8

提防


小心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


CSS

#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/

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;
}

答案 3 :(得分:2)

一种可能的解决方案是使包装div flexcenter指定的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高度......我不知道这对你是否有问题。

http://cssdesk.com/kyPhC