【问题标题】:Vertical align link text in a percentage height list在百分比高度列表中垂直对齐链接文本
【发布时间】:2016-05-14 17:54:03
【问题描述】:

我想在<li> 列表中垂直对齐链接文本。我尝试了几种方法,但找不到解决方案。我必须保持百分比高度。

我的代码示例版本:https://jsfiddle.net/kr0mf4oe/3/

div#html {
  height: 500px;
}
div#main {
  display: block;
  height: 100%;
  background-color: blue;
}
ul#list {
  height: 100%;
  background-color: green;
}
ul#list>li {
  height: 20%;
  border-width: 2px;
  border-bottom: 2px white solid;
}
li>a {
  height: 100%;
  display: block;
  text-align: center;
}
<div id="html">
  <div id="main">
    <ul id="list">
      <li class="leaf1">
        <a href="http://stackoverflow.com">text1</a>
      </li>
      <li class="leaf2">
        <a href="http://stackoverflow.com">text2</a>
      </li>
      <li class="leaf3">
        <a href="http://stackoverflow.com">text3</a>
      </li>
      <li class="leaf4">
        <a href="http://stackoverflow.com">text4</a>
      </li>
      <li class="leaf5">
        <a href="http://stackoverflow.com">text5</a>
      </li>
    </ul>
  </div>
</div>

【问题讨论】:

    标签: css height vertical-alignment


    【解决方案1】:

    您可以使用 CSS 表格 + 表格单元格。由于 table-cell 具有vertical-align 功能。

    ul#list>li {
      display: table;
      width: 100%;
    }
    ul#list>li>a {
      display: table-cell;
      vertical-align: middle;
    }
    

    div#html {
      height: 500px;
    }
    div#main {
      display: block;
      height: 100%;
      background-color: blue;
    }
    ul#list {
      height: 100%;
      background-color: green;
      list-style: none; /*added*/
      padding-left: 0; /*added*/
    }
    ul#list>li {
      height: 20%;
      border-width: 2px;
      border-bottom: 2px white solid;
      display: table; /*added*/
      width: 100%; /*added*/
    }
    ul#list>li>a {
      height: 100%;
      text-align: center;
      display: table-cell; /*added*/
      vertical-align: middle; /*added*/
    }
    <div id="html">
      <div id="main">
        <ul id="list">
          <li class="leaf1">
            <a href="http://stackoverflow.com">text1</a>
          </li>
          <li class="leaf2">
            <a href="http://stackoverflow.com">text2</a>
          </li>
          <li class="leaf3">
            <a href="http://stackoverflow.com">text3</a>
          </li>
          <li class="leaf4">
            <a href="http://stackoverflow.com">text4</a>
          </li>
          <li class="leaf5">
            <a href="http://stackoverflow.com">text5</a>
          </li>
        </ul>
      </div>
    </div>

    您也可以使用 CSS3 flexboxjustify-content:center 用于水平居中,align-items:center 用于垂直居中。

    ul#list>li>a {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    

    div#html {
      height: 500px;
    }
    div#main {
      display: block;
      height: 100%;
      background-color: blue;
    }
    ul#list {
      height: 100%;
      background-color: green;
      list-style: none; /*added*/
      padding-left: 0; /*added*/
    }
    ul#list>li {
      height: 20%;
      border-width: 2px;
      border-bottom: 2px white solid;
    }
    ul#list>li>a {
      height: 100%;
      display: flex; /*added*/
      justify-content: center; /*added*/
      align-items: center; /*added*/
    }
    <div id="html">
      <div id="main">
        <ul id="list">
          <li class="leaf1">
            <a href="http://stackoverflow.com">text1</a>
          </li>
          <li class="leaf2">
            <a href="http://stackoverflow.com">text2</a>
          </li>
          <li class="leaf3">
            <a href="http://stackoverflow.com">text3</a>
          </li>
          <li class="leaf4">
            <a href="http://stackoverflow.com">text4</a>
          </li>
          <li class="leaf5">
            <a href="http://stackoverflow.com">text5</a>
          </li>
        </ul>
      </div>
    </div>

    【讨论】:

      【解决方案2】:

      如果不想使用表格,也可以这样:

      div#html{
        height:500px;
      }
      
      div#main{
        display:block;
        height:100%;
        background-color:blue;
      }
      
      ul#list{
        height:100%;
        background-color:green;
      }
      
      ul#list>li{
        height:20%;
        border-width: 2px;
        border-bottom: 2px white solid;
        position: relative; /* new */
      }
      
      li>a{
        height:100%;
        display:block;
        text-align:center;
      }
      li>a>span{ /* new */
        position: absolute;
        width: 100%;
        left: 0;
        top: 50%;
        -webkit-transform: translateY(-50%);
      }
      <div id="html">
        <div id="main">
          <ul id="list">
            <li class="leaf1">
            <a href="http://stackoverflow.com"><span>text1<br />text1.1</span></a> <!-- wrap your text in a span -->
            </li>
            <li class="leaf2">
              <a href="http://stackoverflow.com"><span>text2</span></a>
            </li>
            <li class="leaf3">
              <a href="http://stackoverflow.com"><span>text3</span></a>
            </li>
            <li class="leaf4">
              <a href="http://stackoverflow.com"><span>text4</span></a>
            </li>
            <li class="leaf5">
              <a href="http://stackoverflow.com"><span>text5</span></a>
            </li>
          </ul>
        </div>
      </div>

      【讨论】:

        【解决方案3】:

        您是否希望文本在作为列表元素的绿色框内垂直对齐?如果是这样:

        告诉&lt;li&gt; 显示为表格,然后你可以告诉其中的&lt;a&gt; 垂直对齐,因此将 li>a 的 CSS 拆分为 2 个标签,如下所示:

        li{
          height:100%;
          width: 100%;
          display:table;
          text-align:center;
          padding-top: 20px;
        }
        li a {
          display: table-cell;
          vertical-align: middle;
        }
        

        【讨论】:

          猜你喜欢
          • 2010-11-06
          • 2011-09-15
          • 1970-01-01
          • 2014-11-09
          • 2014-10-30
          • 1970-01-01
          • 2016-08-05
          • 2013-08-02
          • 1970-01-01
          相关资源
          最近更新 更多