【问题标题】:CSS Menu: Fill Total Area Equally, Vertically-Centered textCSS 菜单:相等地填充总区域,垂直居中的文本
【发布时间】:2014-02-22 06:05:39
【问题描述】:

我正在尝试创建一个简单的 CSS 菜单。以下是限制条件:

  1. 填充父容器宽度的 100%
  2. 父容器具有基于百分比的宽度
  3. 让每个按钮都等宽
  4. 让整个按钮都可点击(即锚标记展开以填充整个 li 标记)
  5. 动态生成按钮宽度。
  6. 让文本在菜单中心垂直对齐
  7. 我们可以放心地假设只有 3 个菜单项。 (让它适用于 N 个项目会很好,但不是必需的)。

这里是html:

<ul>
    <li><a href="#">Item 1</a></li>
    <li><a href="#">Item 2</a></li>
    <li><a href="#">Item 3</a></li> 
</ul>

这是我的尝试,每个都有自己的失败。

  1. http://jsfiddle.net/QzYAr/266/(宽度不表示为 %)

    ul {
        width: 600px;
        display: table;
        table-layout: fixed; 
        background: #EEE;
    }
    
    li {
        float: left;
        border: 1px dotted red;
    }
    
    a {
        display: table-cell;
        height: 50px;
        vertical-align: middle;
        text-align: center;
        width: 150px;
        border: 1px dotted green;
    }
    
  2. http://jsfiddle.net/RzeK2/(锚标签未填满高度)

    ul {
        width: 80%;
        display: table;
        table-layout: fixed; 
        background: #EEE;
    
    }
    
    li {
        float: left;
        border: 1px dotted red;
    }
    
    a {
        display: table-cell;
        height: 50px;
        vertical-align: middle;
        text-align: center;
        width: 150px; /*this is the part that needs work?*/
        border: 1px dotted green;
    }
    
  3. http://jsfiddle.net/XsLHY/(锚标签文本不垂直居中)

    ul {
        width: 80%;
        display: table;
        table-layout: fixed; 
        background: #EEE;
    
    }
    
    li {
        display: table-cell;
        width: 33%;
        height: 50px;
        vertical-align: middle;
        text-align: center;
        border: 1px dotted red;
    }
    
    a {
        display: block;
        border: 1px dotted green;
        height: 50px;
    }
    
  4. http://jsfiddle.net/w55Lg/ [以下两个答案的建议](如果文本换行会创建丑陋的按钮,并且其他按钮现在不是全高)

    same as three, plus:
    a {
        line-height: 50px;
    }
    

【问题讨论】:

    标签: html css


    【解决方案1】:

    试试这个:

    ul {
        width: 80%;
        background: #EEE;
    
    }
    li {
        width:33.33333333%;
        float:left;
    }
    a{
        display:block;
        text-align:center;
        height:50px;
        line-height:50px;
    }
    a:hover {
        background:red;
    }
    

    演示:http://jsfiddle.net/QzYAr/267/

    编辑:如果您有更长的文本,您可以将其包装在 &lt;span&gt; 标记内并添加此 CSS:

    ul span{
        display:inline-block; vertical-align:middle;
        line-height:14px;
    }
    

    【讨论】:

    • 除了设置 line-height 有什么解决办法吗?如果按钮中的文本换行,这会产生错误的状态。
    • Antonis:请给出答案,我会接受。它仍然存在一个理论上的问题(如果文本真的很长,内容会中断),但这个理论问题不在我的用例范围内。谢谢!
    • Joshua,不客气,但菜单项文本可以多长时间?!我认为 span 解决方案涵盖了 99% 的情况!
    【解决方案2】:

    使用小提琴 #2,更新版本:http://jsfiddle.net/XsLHY/1/

    您只需将匹配的行高添加到li 作为a 的高度。

    CSS

        ul {
            width: 80%;
            display: table;
            table-layout: fixed; 
            background: #EEE;
    
        }
    
        li {
            display: table-cell;
            width: 33%;
            height: 50px;
            vertical-align: middle;
            text-align: center;
            border: 1px dotted red;
            line-height: 50px;
        }
    
        a {
            display: block;
            border: 1px dotted green;
            height: 50px;
        }
    

    【讨论】:

    • 除了设置 line-height 有什么解决办法吗?如果按钮中的文本换行,这会产生错误的状态。
    • 如果您没有设置li line-heighta height,它也会在小提琴中为我居中。
    • DrCord:我相信这是我在问题中的第二个例子。如果是这样,这意味着锚标签没有垂直填充 li。
    【解决方案3】:

    这可以使用:

    display: flex;
    

    http://jsfiddle.net/XsLHY/3/

    【讨论】:

      【解决方案4】:

      http://jsfiddle.net/LD2w4/

      要解决锚问题,您可以切换顺序,因此&lt;a&gt; 包装&lt;li&gt; 而不是相反:

      <ul>
          <a href="#"><li>Item 1</li></a>
          <a href="#"><li>Item 2</li></a>
          <a href="#"><li>Item 3</li></a> 
      </ul>
      

      【讨论】:

      • 这不是一个好主意,也不能解决整个问题。
      • 我也做不到。 ul 是由我的 CMS (wordpress) 生成的。
      • 为什么这是个坏主意?
      猜你喜欢
      • 2013-03-27
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2011-09-06
      • 2013-05-25
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多