vertically align text within a fixed height div using flex
this can be used to make text align nicely while still keeping the same layout.
the example below shows how you can set the height of the containing element and still have the text aligned center to that element. so if you had a layout that required the top of the element height to be fixed for some reason, the text still looks ok, unless the text still overflows that element in length.
If the text does still overflow you could then use something like text-overflow ellipsis to clip the additional text with css.
An example of how this can be used to fix a layout would be using the following:
Set a height on the title element, and then use the flex center on the text, and this should then no longer break the layout.
set the height of all of the titles to the longest title height.
and then move it up a bit, and apply the truncate and the flex center. and check how it looks.
so now after applying the height and the flex alignment the items look like this
you can see how the item #3 does not push down the bottom element. so its good for a title of quite a long length.
here are the css changes to get the above changes
change to the margin on top, and then adding the text to still align left, and then center everything else. so it will vertically align to the center of the div.
HTML
<div class='vert-text short-title'>short title</div>
<div class='vert-text long-title'>long title long title long title long title long title long title long title</div>
<h3>Game Top Title</h3>
<p>double line centered and left aligned text, so still fit in the element and not be aligned to the top.</p>
<div class='game-top-title-main'>
[@title]
</div>
CSS
.vert-text {
height:100px;
padding:20px;
width:300px;
border:1px solid #000;
border-radius:3px;
display: flex;
justify-content: center;
align-items: center;
}
/* before the flex changes */
.game-top-title-main {
color: #FFF;
font-size: 20px;
font-weight: bold;
margin-top: 22px;
border-bottom: 1px solid rgba(250,250,250,.125);
padding-bottom: 10px;
line-height: 1.1;
height:55px;
}
/* after the flex changes */
.game-top-title-main {
color: #FFF;
font-size: 20px;
font-weight: bold;
margin-top: 15px;
border-bottom: 1px solid rgba(250,250,250,.125);
padding-bottom: 10px;
line-height: 1.1;
height: 55px;
display: flex;
justify-content: left;
align-items: center;
text-align: left;
}
Game Top Title
double line centered and left aligned text, so still fit in the element and not be aligned to the top.