【问题标题】:How to horizontally align a ul element to center如何将ul元素水平对齐到中心
【发布时间】:2013-01-08 17:48:40
【问题描述】:

我无法将 ul 中包含的菜单与其容器的水平中心对齐。该怎么做?

查看live demo of the menu on jsFiddle

<li><a href="aboutus.php">AboutUs</a>
    <ul class="sub">
        <li><a href="aboutsquare.php">About Square Innovations</a></li>
        <li><a href="ourvision.php">Our Vision</a></li>
        <li><a href="ourmission.php">Our Mission</a></li>
        <li><a href="trainerprofiles.php">Trainer Profiles</a></li>
        <li><a href="funclass.php">Fun In Our ClassRooms</a></li>
    </ul>
</li>

【问题讨论】:

    标签: html css alignment html-lists


    【解决方案1】:

    您可以将ul 元素作为页面流中的内联级元素进行寻址,同时保留其块级特征(使用inline-block 显示值)——应用此功能后,它可以简单地在其内部对齐像任何内联元素一样的容器,使用text-align

    要实现这一点,请添加以下规则:

    #container {
        text-align: center;
    }
    ul {
        display: inline-block;
    }
    

    这是updated demo

    参考


    免责声明:inline-block 的支持有些有限不!它现在实际上已经很宽了,请参阅compatibility table on caniuse.com

    【讨论】:

      【解决方案2】:

      只要菜单保持在一行,就有一个非常简洁、完全跨浏览器和动态的“技巧”来实现这一点。这里解释得很好:http://matthewjamestaylor.com/blog/beautiful-css-centered-menus-no-hacks-full-cross-browser-support

      根据我的经验,旧版浏览器通常不支持针对此问题的内联块。老实说,我从不使用它。我总是选择 Matthew James Taylor 描述的聪明方法。

      编辑: 根据要求,我将简要介绍该技术。 您的 html 应该看起来像一个正常的链接列表,周围有一个额外的包装 div。像这样的:

      <div class="menu-wrapper">
        <ul>
          <li><a ...>link</a></li>
          <li><a ...>link</a></li>
          <li><a ...>link</a></li>
        </ul>
      </div>
      

      现在剩下的就是 CSS 工作了。步骤如下:

      • 将包装器向左浮动,并为其设置 100% 的宽度,使其占据整个视口宽度
      • ulli 都浮动到左侧,不要给它们任何宽度以使其适应内容。
      • ul 一个position: relativeleft: 50%。这将使它的左边缘移动到其父级的中心,这意味着视口的中心。
      • 最后你应该给你的li 一个position: relativeleft: -50%。这将使它们移过父ul 的左边缘,并使li 列表的中心与父ul 的左边缘对齐。由于我们在上一步中将该边缘设置为视口的中心,因此菜单现在有效地居中。

      正如我之前所说,感谢 Matthew James Taylor,请务必查看 his thorough explanation。他制作的图纸更容易理解。

      编辑
      根据要求,我设置了一个小小提琴来演示该技术: http://jsfiddle.net/fDmCQ/

      【讨论】:

      • 您当然是正确的。 (旧)IE 将无法呈现 inline-block 元素。这是一篇很棒的文章,请描述基本逻辑或在你的答案中包含亮点以使其独立。
      • @Eliran 很高兴你喜欢它。我接受了您的建议并改进了我的答案。我期待有一天我们不再需要支持旧的 IE 版本(或者根本不需要 IE,如果由我决定的话)! ;-)
      • 你能给我一个小提琴的例子吗??
      • @krishna 我试图在我的 iPad 上做一个小提琴(我不推荐)并将链接放在我的答案中。如果您需要任何进一步的解释,请随时询问!
      【解决方案3】:

      &lt;ul&gt; 的边距更改为0 auto 并为其指定宽度(~575px 或更大)。

      jsFiddle example

       ul {
           font-family: Arial, Verdana;
           font-size: 14px;
           margin: 0 auto;
           padding: 0;
           width:600px;
           list-style: none;
           text-align: center;
       }
      

      【讨论】:

      • 这需要为ul 元素添加一个明确的宽度,使其变得僵硬。如果您添加更多列表项怎么办?
      • 投反对票是怎么回事?这个答案是否无用或不正确?
      猜你喜欢
      • 2013-06-01
      • 2018-04-10
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多