垂直对齐中心Flexbox

时间:2016-11-18 11:12:49

标签: html css flexbox

我试图将一堆不同高度的徽标垂直对齐。它们位于一个水平居中的列表中。

https://jsfiddle.net/mtcruere/8/



.container {
  width: 800px;
  margin: 20px auto;
}
ul {
  list-style: none;
  margin: 0;
  padding: 0;
  text-align: center;
}
li {
  display: inline-block;
  margin-left: 15px;
  margin-right: 15px;
}
li > div {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 105px;
}
img {
  max-width: 100%;
}

<div class="container">
  <ul>
    <li><div><img src="http://placehold.it/142x39"></div></li>
    <li><div><img src="http://placehold.it/181x87"></div></li>
    <li><div><img src="http://placehold.it/157x45"></div></li>
    <li><div><img src="http://placehold.it/161x35"></div></li>
    <li><div><img src="http://placehold.it/162x75"></div></li>
    <li><div><img src="http://placehold.it/186x85"></div></li>
    <li><div><img src="http://placehold.it/140x52"></div></li>
  </ul>
</div>
&#13;
&#13;
&#13;

我有什么想法可以解决这个问题吗?

6 个答案:

答案 0 :(得分:3)

也可以vertical-align: middle;元素使用li

li {
    display: inline-block;
    margin-left: 15px;
    margin-right: 15px;
    vertical-align: middle;
}

<强> DEMO

答案 1 :(得分:2)

vertical-align: middle;添加li这将使div成为中间

.container {
  width: 800px;
  margin: 20px auto;
}

ul {
	list-style: none;
	margin: 0;
	padding: 0;
	text-align: center;
}

li {
    display: inline-block;
	margin-left: 15px;
	margin-right: 15px;
    vertical-align: middle;
}

li > div {
	display: flex;
	justify-content: center;
	align-items: center;
	height: 105px;
}

img {
  max-width: 100%;
}
<div class="container">
  <ul>
    <li><div><img src="http://placehold.it/142x39"></div></li>
    <li><div><img src="http://placehold.it/181x87"></div></li>
    <li><div><img src="http://placehold.it/157x45"></div></li>
    <li><div><img src="http://placehold.it/161x35"></div></li>
    <li><div><img src="http://placehold.it/162x75"></div></li>
    <li><div><img src="http://placehold.it/186x85"></div></li>
    <li><div><img src="http://placehold.it/140x52"></div></li>
  </ul>
</div>

更多选项: -

vertical-align: top;添加li(也适用)这将使div处理垂直对齐

<强>解释: -

  

你在div中给了display: flex;(这就是为什么vertical-align: top;有效)。它照顾好了   垂直对齐中间。所以你不需要手动对齐它   li。默认情况下li需要vertical-align:baseline。所以要防止它   我们必须把它改成顶部(中间)

.container {
  width: 800px;
  margin: 20px auto;
}

ul {
	list-style: none;
	margin: 0;
	padding: 0;
	text-align: center;
}

li {
  display: inline-block;
	margin-left: 15px;
	margin-right: 15px;
    vertical-align: top;
}

li > div {
	display: flex;
	justify-content: center;
	align-items: center;
	height: 105px;
}

img {
  max-width: 100%;
}
<div class="container">
  <ul>
    <li><div><img src="http://placehold.it/142x39"></div></li>
    <li><div><img src="http://placehold.it/181x87"></div></li>
    <li><div><img src="http://placehold.it/157x45"></div></li>
    <li><div><img src="http://placehold.it/161x35"></div></li>
    <li><div><img src="http://placehold.it/162x75"></div></li>
    <li><div><img src="http://placehold.it/186x85"></div></li>
    <li><div><img src="http://placehold.it/140x52"></div></li>
  </ul>
</div>

答案 2 :(得分:1)

你只需要将这三个css属性添加到ul ... {align-items:center;辩解内容:中心; flex-wrap:wrap;}

.container {
  width: 800px;
  margin: 20px auto;
}
ul {
  list-style: none;
  margin: 0;
  padding: 0;
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
}
li {
  display: flex;
  margin-left: 15px;
  margin-right: 15px;
}
li > div {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 105px;
}
img {
  max-width: 100%;
}
<div class="container">
  <ul>
    <li><div><img src="http://placehold.it/142x39"></div></li>
    <li><div><img src="http://placehold.it/181x87"></div></li>
    <li><div><img src="http://placehold.it/157x45"></div></li>
    <li><div><img src="http://placehold.it/161x35"></div></li>
    <li><div><img src="http://placehold.it/162x75"></div></li>
    <li><div><img src="http://placehold.it/186x85"></div></li>
    <li><div><img src="http://placehold.it/140x52"></div></li>
  </ul>
</div>

答案 3 :(得分:0)

替换

li {
    display: inline-block; <<
    margin-left: 15px;
    margin-right: 15px;
}

li {
    display: block; <<
    margin-left: 15px;
    margin-right: 15px;
}

答案 4 :(得分:0)

与上面相比,您可以使用更简单的html结构来实现它。请考虑以下标记:

<ul class="container">
  <li><img src="http://placehold.it/161x35"></li>
  <li><img src="http://placehold.it/162x75"></li>
  ....
  ....
  <li><img src="http://placehold.it/162x75"></li>
</ul>

并使用以下样式进行其他调整:

ul {
  justify-content: center;
  flex-wrap: wrap;
  display: flex;
}
li {
  align-content: center;
  align-items: center;
  display: flex;
  height: 105px;
}

&#13;
&#13;
ul.container {
  justify-content: center;
  margin: 20px auto;
  list-style: none;
  flex-wrap: wrap;
  display: flex;
  max-width: 800px;
  padding: 0;
}
li {
  align-content: center;
  align-items: center;
  margin: 0 15px;
  display: flex;
  height: 105px;
}
img {
  max-width: 100%;
}
&#13;
<ul class="container">
  <li><img src="http://placehold.it/142x39"></li>
  <li><img src="http://placehold.it/181x87"></li>
  <li><img src="http://placehold.it/157x45"></li>
  <li><img src="http://placehold.it/161x35"></li>
  <li><img src="http://placehold.it/162x75"></li>
  <li><img src="http://placehold.it/186x85"></li>
  <li><img src="http://placehold.it/140x52"></li>
</ul>
&#13;
&#13;
&#13;

答案 5 :(得分:0)

你需要的只是代码Snippest

-fsanitize=bounds-stric
li{
  width : 200px;
  display : inline-block;
  vertical-align : middle;
  text-align	: center;
}