【问题标题】:How can i create a navbar with center aligned links using Materialize?如何使用 Materialize 创建具有居中对齐链接的导航栏?
【发布时间】:2016-08-15 22:43:17
【问题描述】:

我正在尝试使用 materialize 构建一个顶部有导航栏的 1 页垂直滚动网站,现在,materialize 只有类可以左右对齐链接,徽标可以居中对齐,但链接本身不能,

我一直在向 UL 和包装器 div 添加中心对齐和中心类,并且尝试使用网格但没有成功,这是我的代码:

HTML

   <div class="navbar-fixed"  >
    <nav id="nav_f" class="transparent z-depth-0" role="navigation" >
        <div class="container">



            <div class="nav-wrapper"  >

             <div class="row s12">

            <div>
                  <ul class="hide-on-med-and-down navbar " >
                      <li><a id="desk-about-us" href="#about-us">ABOUT US</a></li>
                      <li><a href="#how-it-works">HOW IT WORKS</a></li>
                      <li><a href="#comments">COMMENTS</a></li>
                  </ul>
                </div>
              </div>

                <ul id="nav-mobile" class="side-nav side-nav-menu ">
                    <li><a href="#about-us">ABOUT US</a></li>
                    <li><a href="#how-it-works">HOW IT WORKS</a></li>
                    <li><a href="#comments">COMMENTS</a></li>
                </ul>
            <a href="#" data-activates="nav-mobile" class="button-collapse right"><i class="material-icons">menu</i></a>
            </div>

       </div>
    </nav>
</div>

在我的 CSS 中,链接的悬停行为和背景颜色只有一个下划线,

【问题讨论】:

  • 有什么问题?

标签: html css materialize


【解决方案1】:

Materialize 在所有 nav ul li 元素上都带有一个 float: left。如果您尝试使用标准 Helper 将它们居中,它将无法正常工作。因此,除了text-align: center,您还必须将float 设置为none。但是,这会使您的所有按钮相互堆叠;要解决这个问题,只需让&lt;li&gt; 元素内联显示,&lt;a&gt; 元素显示内联块。

我建议这样创建一个新类:

nav.nav-center ul {
    text-align: center;
}
nav.nav-center ul li {
    display: inline;
    float: none;
}
nav.nav-center ul li a {
    display: inline-block;
}

将标准 Materialize &lt;nav&gt; 组件与上面的 .nav-center 类一起使用:

<nav class="nav-center" role="navigation">
    <div class="nav-wrapper container">
        <ul>
            <li><a href="/about">About</a></li>
            <li><a href="/contact">Contact</a></li>
            <li><a href="/help">Help</a></li>
        </ul>
    </div>
</nav>

【讨论】:

    【解决方案2】:

    官方回答可能是导航栏链接应该左对齐或右对齐,以指示功能,根据材料设计指南:https://material.google.com/layout/structure.html#structure-app-bar

    但是,您可以通过一种有点 hacky 的方式来解决这个问题:

    <div class="naxbar-fixed">
        <nav>   
            <div class="brand-logo center">
                <ul>
                    <li class="active"><a href="/page1">page1</a></li>
                    <li><a href="/page2">page2</a></li>
                </ul>
            </div>
        </nav>
    </div>
    

    通过将您的导航栏包装在一个带有品牌标志和中心类的 div 中,您正在欺骗物化,认为菜单是一个标志,并且它将允许链接居中。

    我相信这样的菜单会在足够小的屏幕上消失,并且可能不会按照您希望的方式运行。

    您可以改用具体化选项卡:

    <div class="naxbar-fixed">
        <nav>
            <div class="white-text">
                <ul class="tabs center" style="width:20em;">
                    <li class="tab col s6 active>
                        <a href="/page1">page1a>
                    </li>
                    <li class="tab col s6">
                        <a href="/page2">page2</a>
                    </li>
                </ul>
            </div>
        </nav>
    </div>
    

    这具有为每个链接提供相同宽度的优点,但可能需要您做一些额外的样式,如果您关心移动设备,可能需要更多的工作。

    【讨论】:

      【解决方案3】:

      所以,我通过将以下转换添加到我的 UL 元素来解决这个问题:

      nav ul{
        transform: translateX(32%);
        webkit-transform: translateX(-32%);
      }
      

      由于我的链接占据了大约 1 3rd 的屏幕,因此转换是将它们向左移动 1 3rd。

      【讨论】:

        【解决方案4】:

        当我在导航中添加下拉菜单时,移除浮动并将 text-align 设置为居中并不是最佳解决方案。一些下拉链接左对齐,一些居中。我认为一个简单的解决方案是使用display: flexjustify-content: center 创建一个类。我将它与hide-on-med-and-down 类一起放在ul 中,这样居中就不会影响移动菜单按钮的位置。

        document.addEventListener('DOMContentLoaded', function() {
            var elems = document.querySelectorAll('.sidenav');
            var instances = M.Sidenav.init(elems, {});
            var elems = document.querySelectorAll('.dropdown-trigger');
            var instances = M.Dropdown.init(elems, {
                coverTrigger: false
            });
        });
        .nav-center {
          display:flex;
          justify-content: center;
        }
        <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet"/>
        
        <!-- Dropdown Content -->
        <ul id="dropdown1" class="dropdown-content">
          <li><a href="#!">one</a></li>
          <li><a href="#!">two</a></li>
          <li><a href="#!">three</a></li>
        </ul>
        <!-- Navbar  -->
        <nav>
          <div class="nav-wrapper">
                <ul class="nav-center">
                  <li><a href="#">Link</a></li>
                  <!-- Dropdown Trigger -->
                  <li><a class="dropdown-trigger" href="#!" data-target="dropdown1">Dropdown</a></li>
                  <li><a href="#">Link</a></li>
                  <li><a href="#">Link</a></li>
                  <li><a href="#">Link</a></li>
                </ul>
          </div>
        </nav>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-21
          • 2019-03-27
          • 2013-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多