【问题标题】:Vertical alignment on a tags with Flexbox list items带有 Flexbox 列表项的标签上的垂直对齐
【发布时间】:2017-04-04 18:07:07
【问题描述】:
我在一些列表框中有一些可变长度的文本,这会导致不匹配,因为标签中的文本没有垂直对齐。
我已经尝试了各种 flexbox 选项以及标准的垂直对齐,但都无济于事。
有什么想法可以让 Flexbox 中的 a 标签内的文本居中吗?我已将 Inspect Element 中的 CSS 元素添加到 Plunker,因此并非所有 lpart 都是相关的,但您会明白的。
https://plnkr.co/edit/EAwV0OtXg7Z8mSsHQoho?p=preview
.mobile-buttons > ul.side-list {
display:flex;
justify-content: space-around;
align-self:center;
flex-wrap:wrap;
text-align: center;
list-style: none;
margin-left: 0;
margin-bottom: 1.938em;
margin: 0.937em 0 0.937em 0;
}
.mobile-buttons > ul.side-list li {
display: inline-flex;
background: none;
list-style: none;
margin: 0;
padding: 0;
font-size: 0.913em;
line-height: 1.538;
}
.mobile-buttons .blue-bg {
margin-bottom: 10px;
max-width: 150px;
min-height: 17px;
min-width: 150px;
font-size: 1em;
min-height: 17px;
height: 40px;
text-decoration: none;
font-weight: bold;
display: inline-block;
min-height: 17px;
padding: 27px 2px 27px;
text-align: center;
color: #fff;
line-height: 1.15em;
top: 1px;
position: relative;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.btn, a.btn {
text-decoration: none;
font-weight: bold;
display: inline-block;
min-height: 17px;
max-width: 180px;
min-width: 180px;
padding: 27px 2px 27px;
text-align: center;
color: #fff;
line-height: 1.15em;
top: 1px;
position: relative;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.blue-bg {
border: #1D5FD5 1px solid;
text-shadow: #0a39c2 0 1px 0;
box-shadow: inset 0px 1px 1px 0px #8aa2e2, 0px 1px 2px 0 #696b6b;
background: linear-gradient(to bottom, #4089e9 0%,#1d5fd5 100%);
}
<section class="mobile-buttons lines-bg clearfix row">
<ul class="side-list">
<li><a href="/link1" class="btn blue-bg">The First Menu</a></li>
<li><a href="/link2" class="btn blue-bg">Long Description on Second Menu</a></li>
<li><a href="/link3" class="btn blue-bg">Short 3rd Menu</a></li>
<li><a href="/link4" class="btn blue-bg">Extra description on fourth menu option</a></li>
</ul>
</section>
【问题讨论】:
标签:
html
css
flexbox
vertical-alignment
【解决方案1】:
您可以在.mobile-buttons .blue-bg 中使用display:flex:
.mobile-buttons > ul.side-list {
display:flex;
justify-content: space-around;
align-self:center;
flex-wrap:wrap;
text-align: center;
list-style: none;
margin-left: 0;
margin-bottom: 1.938em;
margin: 0.937em 0 0.937em 0;
}
.mobile-buttons > ul.side-list li {
display: inline-flex;
background: none;
list-style: none;
margin: 0;
padding: 0;
font-size: 0.913em;
line-height: 1.538;
}
.mobile-buttons .blue-bg {
margin-bottom: 10px;
max-width: 150px;
min-height: 17px;
min-width: 150px;
font-size: 1em;
min-height: 17px;
height: 40px;
text-decoration: none;
font-weight: bold;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
min-height: 17px;
padding: 27px 2px 27px;
text-align: center;
color: #fff;
line-height: 1.15em;
top: 1px;
position: relative;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
justify-content: center;
align-items: center;
}
.btn, a.btn {
text-decoration: none;
font-weight: bold;
display: inline-block;
min-height: 17px;
max-width: 180px;
min-width: 180px;
padding: 27px 2px 27px;
text-align: center;
color: #fff;
line-height: 1.15em;
top: 1px;
position: relative;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.blue-bg {
border: #1D5FD5 1px solid;
text-shadow: #0a39c2 0 1px 0;
box-shadow: inset 0px 1px 1px 0px #8aa2e2, 0px 1px 2px 0 #696b6b;
background: linear-gradient(to bottom, #4089e9 0%,#1d5fd5 100%);
}
<section class="mobile-buttons lines-bg clearfix row">
<ul class="side-list">
<li><a href="/link1" class="btn blue-bg">The First Menu</a></li>
<li><a href="/link2" class="btn blue-bg">Long Description on Second Menu</a></li>
<li><a href="/link3" class="btn blue-bg">Short 3rd Menu</a></li>
<li><a href="/link4" class="btn blue-bg">Extra description on fourth menu option</a></li>
</ul>
</section>
【解决方案2】:
许多不需要的代码和重复。请改写如下。
可以使用 CSS Flexbox 对带有 Flexbox 列表项的标签进行垂直对齐
这是通过设置实现的
.mobile-buttons .blue-bg {
display: flex;
justify-content: center;
align-items: center;
}
.mobile-buttons>ul.side-list {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
list-style: none;
margin: 0.937em 1.938em 0;
}
.mobile-buttons>ul.side-list li {
font-size: 0.913em;
line-height: 1.538;
}
.mobile-buttons .btn {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 10px;
max-width: 150px;
min-width: 150px;
min-height: 17px;
height: 40px;
padding: 27px 2px 27px;
}
.mobile-buttons .blue-bg {
font-size: 1em;
font-weight: bold;
color: #fff;
line-height: 1.15em;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
border: #1D5FD5 1px solid;
text-shadow: #0a39c2 0 1px 0;
box-shadow: inset 0px 1px 1px 0px #8aa2e2, 0px 1px 2px 0 #696b6b;
background: linear-gradient(to bottom, #4089e9 0%, #1d5fd5 100%);
}
.btn,
a.btn {
text-decoration: none;
text-align: center;
}
<section class="mobile-buttons lines-bg clearfix row">
<ul class="side-list">
<li><a href="/link1" class="btn blue-bg">The First Menu</a></li>
<li><a href="/link2" class="btn blue-bg">Long Description on Second Menu</a></li>
<li><a href="/link3" class="btn blue-bg">Short 3rd Menu</a></li>
<li><a href="/link4" class="btn blue-bg">Extra description on fourth menu option</a></li>
</ul>
</section>