垂直对齐LI内部的浮动DIV内的项目

时间:2014-09-29 08:13:04

标签: html css vertical-alignment susy

我的列表中包含div

<ul>
    <li>
        <div class="date">today</div>
        <div class="desc">lorem ipsum</div>
        <div class="action">
            <p>
                <a class="button">X</a>
            </p>
        </div>
    </li>
    <li>....</li>
    <li>....</li>
</ul>

如何在div.action中垂直对齐a.button?

该列表的CSS是使用Susy生成的,CSS看起来像这样:

ul {
  list-style: none outside none;
}
li {
  margin-left: 12.766%;
  margin-right: 12.766%;
  margin-bottom: 10px;
  background-color: #eee;
  display: block;
}
li:after {
  clear: both;
  content: "";
  display: table;
}

.date {
  float: left;
  margin-right: 2.12766%;
  width: 10.6383%;
}
.desc {
  float: left;
  margin-right: 2.12766%;
  width: 74.4681%;
}

.action {
  float: right;
  text-align: center;
  margin-right: 0;
  width: 10.6383%;
}

我不知道LI的高度,因为&#34; desc&#34;文字可以是任何长度。

以下是codepen.io上的代码 - &gt; http://codepen.io/anon/pen/CFhos

3 个答案:

答案 0 :(得分:1)

Flexbox几乎可以对齐任何东西 - 甚至浮动的元素......

只需将以下规则添加到li

即可
display: flex;
align-items: center; /*align vertical */

<强> Updated CODEPEN

答案 1 :(得分:1)

您可以设置按钮的样式以完成此操作:

.button{
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

此处示例: http://jsfiddle.net/4amdxtq8/

答案 2 :(得分:0)

你可以不用浮动来做到这一点:

ul {
  list-style: none outside none;
}
li {
  display: table;
  margin-left: 12.766%;
  margin-right: 12.766%;
  margin-bottom: 10px;
  background-color: #eee;
}
p {
  display: table-cell;
  margin: 0;
  padding: 0;
}
li:after {
  clear: both;
  content: "";
  display: table;
}

.date {
  display: table-cell;
  vertical-align: middle;
  margin-right: 2.12766%;
  width: 10.6383%;
}
.desc {
  display: table-cell;
  vertical-align: middle;
  margin-right: 2.12766%;
  width: 74.4681%;
}

.action {
  display: table-cell;
  vertical-align: middle;
  margin-right: 0;
  width: 10.6383%;
}

http://codepen.io/anon/pen/yxhkA