内联 li 中的垂直对齐文本

Vertical align text inside inline li

我正在尝试创建一个自我调整的水平菜单,并希望在显示为 inlineli 中垂直对齐文本。目前,文本粘在顶部。我所有的尝试都失败了。请参阅下面的标记。

#nav 
    {
        display: inline-table;
        padding: 0;
        margin-top: 10em;
        margin-bottom: 10em;
    }

    #nav > li
    {
        display: inline;
        float: left;
        height: 8em;
        width: 8em;
        padding: 0px 5px;
        font-size: 1.5em;
        color: #0a547c;
    }

    #nav > li:hover
    {
        background-color: blue;
        cursor: pointer;
    }
<div style="text-align: center; height: 30em;">
    <ul id="nav">
        <li onclick="window.open('myLink1', '_self');">Text A</li>
        <li onclick="window.open('myLink2', '_self');">Text B</li>
    </ul>
</div>

我不想使用 line-height 因为文本可能会换行。

vertical-align 在这种情况下应该可以帮助你,而 float 正在打破这种行为。

    #nav 
    {
        display: table;
        padding: 0;
        margin-top: 10em;
        margin-bottom: 10em;
    }

    #nav > li
    {
        display: table-cell;
        vertical-align: middle;
        height: 8em;
        width: 8em;
        padding: 0px 5px;
        font-size: 1.5em;
        color: #0a547c;
    }

    #nav > li:hover
    {
        background-color: blue;
        cursor: pointer;
    }
<div style="text-align: center; height: 30em;">
    <ul id="nav">
        <li onclick="window.open('myLink1', '_self');">Text A</li>
        <li onclick="window.open('myLink2', '_self');">Text B</li>
    </ul>
</div>

使用 float,我认为您应该将 display:inline: 更改为 display:flex:,并使用 align-items:center; 将它们垂直放置在中间。他们用 span 将文本包裹起来,以便您可以更轻松地控制文本样式。

#nav 
    {
        display: inline-table;
        padding: 0;
        margin-top:0;
        margin-bottom: 10em;
    }

    #nav > li
    {
        display:flex;
        align-items:center;
        float: left;
        height: 8em;
        width: 8em;
        padding: 0px 5px;
        font-size: 1.5em;
        color: #0a547c;
        text-align:center;
    }
    #nav>li>span{
      vertical-align:middle;
      display:block;
      width:100%;
    }

    #nav > li:hover
    {
        background-color: blue;
        cursor: pointer;
    }
<div style="text-align: center; height: 30em;">
    <ul id="nav">
        <li onclick="window.open('myLink1', '_self');"><span>Text A</span></li>
        <li onclick="window.open('myLink2', '_self');"><span>Text B</span></li>
    </ul>
</div>