Search code examples
htmlcssvertical-alignmentvertical-text

How to vertically center text when using the :before modifier in CSS?


This is another "how do I vertically center" question in HTML. This one is when using the :before modifier.

HTML

<div style="border: 1px solid blue">
  <div class="status-yellow">vertically center me</div>
</div>

CSS

.status-yellow {
    display: inline-block;
    padding: .35em .65em;
    font-size: .75em;
    font-weight: 400;
    line-height: 1;
    color: #000;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;
    text-transform: uppercase;
    background-color: #fff;
}

.status-yellow:before {
    display: inline-block;
    content:"\2022";
    margin-right: 0.5rem;
    color: yellow;
    font-size: 48px;
}

Here's a CodePen showing the issue

I have a div tag and I'm using the :before modifier to inject a bullet before the text. When the bullet increases in size, the vertical centering doesn't work. When the bullet is tiny (too tiny) it's all centered. I'm missing something. What am I missing?


Solution

  • You can use flexbox.

    .status-yellow {
        display: inline-block;
        padding: .35em .65em;
        font-size: .75em;
        font-weight: 400;
        line-height: 1;
        color: #000;
        text-align: center;
        white-space: nowrap;
        vertical-align: baseline;
        text-transform: uppercase;
        background-color: #fff;
        display:flex;
        align-items:center;/*for vertical align*/
        justify-content:center;/*for horizontal align*/
    }
    
    .status-yellow:before {
            display: inline-block;
            content:"\2022";
            margin-right: 0.5rem;
            color: yellow;
            font-size: 48px;
        }