【发布时间】:2017-01-20 06:54:31
【问题描述】:
我正在尝试使用 flexbox 并排放置三个元素,但 align-self 属性没有任何效果。我没有在父级 (#subnav-cont) 上使用 space-around 或 space-between,因为每个元素都需要单独定位,因为最左边的元素 (#site-logo) 并不总是存在。
回顾一下,#site-logo 应该位于最左侧(当存在时),#site-links 应该相对于其父级居中,#nav-social 应该位于最远-对。
演示:http://codepen.io/ourcore/pen/jyBNzZ
#subnav {
z-index: 99999999;
width: 100%;
overflow: auto;
font-size: 1.1rem;
background-color: yellow;
}
#subnav #subnav-cont {
display: flex;
margin: 0 auto;
padding: 0 1.5%;
max-width: 1280px;
background-color: red;
}
#subnav #subnav-cont #site-logo {
align-self: flex-start;
padding: 10px 0;
height: 50px;
}
#subnav #subnav-cont #site-logo img {
display: inline-block;
margin: 0;
padding: 0;
height: 30px;
}
#subnav #subnav-cont > ul li {
display: inline-block;
padding: 0 20px;
height: 50px;
font-size: 1em;
line-height: 50px;
white-space: nowrap;
}
#subnav #subnav-cont #nav-links {
align-self: center;
}
#subnav #subnav-cont #nav-social {
align-self: flex-end;
}
#subnav #subnav-cont #nav-social li {
padding: 0 5px;
}
<nav id="subnav">
<div id="subnav-cont">
<div id="site-logo">
<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png">
</div>
<ul id="nav-links">
<li>
<a href="#" class="subnav-link">Link</a>
</li>
<li>
<a href="#" class="subnav-link">Link</a>
</li>
<li>
<a href="#" class="subnav-link">Link</a>
</li>
<li>
<a href="#" class="subnav-link">Link</a>
</li>
</ul>
<ul id="nav-social">
<li>
<a href="#" class="icon-facebook">Facebook</a>
</li>
<li>
<a href="#" class="icon-twitter">Twitter</a>
</li>
<li>
<a href="#" class="icon-instagram">Instagram</a>
</li>
</ul>
</div>
</nav>
【问题讨论】:
-
为每个元素添加宽度。
-
@MikeMcCaughan 这个声明,因为最左边的元素(#site-logo)并不总是存在。使它不是那个问题的欺骗
-
所以,像往常一样,当某些东西被提议为重复时,编辑问题以更清楚地说明为什么它不是重复是一个好主意......我已经为未来的读者做了这个。
-
现在我很惊讶....如何接受的答案使得
#site-links应该相对于其父级居中, ???