I'm trying to position three elements side-by-side using flexbox, but the align-self
properties are having no effect. I'm not using space-around
or space-between
on the parent (#subnav-cont
) because each element needs to be positioned individually since the far-left element (#site-logo
) is not always present.
To recap, #site-logo
should sit on the far-left (when present), #site-links
should be centered in relation to its parent, and #nav-social
should sit on the far-right.
Demo: 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>