The source of the problem is align-content here:
.centerContainer { display: flex; justify-content: space-between; align-items: center; align-content: center; <-- causing the problem flex-direction: row; flex-wrap: wrap; }
When you indicate that the lines in a flexible container are centered, it collapses all the excess space by packing all the lines in the center of the container. What align-content: center does.
So, your counter pseudo-element, which browsers consider an element of flexibility , should not move to the top of the container. The specified align-self: flex-start should not reach your goal, because the element is limited to a centered flexible line along with its brothers and sisters.
Therefore, Firefox has this right in terms of compliance with specifications.
Chrome, as it often happens (see here and here ), appears to be factoring in the logical behavior of the user to improve the user experience (they call this intervention ).
In any case, as soon as you remove align-content: center , the default stretch takes over, and your bending elements can move freely around the entire height of the container.
.tiles { display: flex; flex-wrap: wrap; justify-content: center; align-items: strech; align-content: strech; flex-grow: 1; flex-shrink: 1; flex-basis: strech; } .tiles.level1 { flex-direction: column; flex-grow: 0; width: 600px; height: 300px; counter-reset: tileNum; } .tiles.level2 { flex-direction: row; } .tiles.level3 { flex-direction: row; } .tiles .title { align-self: center; font-size: 42px; } .tile { border: 1px solid black; background-color: white; width: 1px; flex-grow: 1; flex-shrink: 1; flex-basis: auto; font-size: 24px; } .centerContainer { display: flex; justify-content: space-between; align-items: center; flex-direction: row; flex-wrap: wrap; } .centerContent { } .tile:before { counter-increment: tileNum; content: counter(tileNum); align-self: flex-start; flex-grow: 0; font-size: 16px; } .tile:after { content: ' '; align-self: flex-end; flex-grow: 0; font-size: 16px; } .brand { text-decoration: underline; font-variant: small-caps; }
<section class="section static"> <div class="tiles level1"> <span class="title"> <span class="brand">So</span>mething </span> <div class="tiles level2"> <div class="tiles level3"> <span class="tile t1 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> <span class="tile t2 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> </div> <div class="tiles level3"> <span class="tile t3 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> <span class="tile t4 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> </div> </div> <div class="tiles level2"> <div class="tiles level3"> <span class="tile t5 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> <span class="tile t6 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> </div> <div class="tiles level3"> <span class="tile t7 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> <span class="tile t8 centerContainer"><span class="centerContent"><span class="brand">So</span>mething</span> </span> </div> </div> </div> </section>
jsFiddle demo
See this post for a more detailed explanation:
source share