我如何使用 Materialize 创建一个带有居中对齐链接的导航栏?
How can i create a navbar with center aligned links using Materialize?
我正在尝试使用 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 上,链接的悬停行为和背景颜色只有下划线,
所以,我通过向我的 UL 元素添加以下转换解决了这个问题:
nav ul{
transform: translateX(32%);
webkit-transform: translateX(-32%);
}
由于我的链接占据了屏幕的三分之一左右,所以变换是将它们向左移动三分之一。
根据 material 设计指南,官方答案可能是导航栏 links 应该左对齐或右对齐,以指示功能: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 中,您正在欺骗 materialize 认为菜单是一个徽标,它将允许links 居中。
我相信这样的菜单会在足够小的屏幕上消失,并且可能不会按您希望的方式运行。
您可以改用material调整标签:
<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>
这样做的好处是每个 link 和宽度相等,但可能需要您做一些额外的样式设置,如果您关注移动设备,可能需要做更多的工作。
Materialize 在所有 nav ul li
元素上带有 float: left
。如果您尝试将它们与标准 Helper 居中,它将不起作用。因此,除了 text-align: center
之外,您还必须将 float
设置为 none
。但是,这将使所有按钮堆叠在一起;要解决这个问题,只需让 <li>
元素显示内联,让 <a>
元素显示内联块。
我建议这样创建一个新的 class:
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;
}
将标准 Materialise <nav>
组件与上面的 .nav-center
class 一起使用:
<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>
当我向导航栏添加下拉菜单时,删除浮动并将文本对齐设置为居中并不是我的最佳解决方案。一些下拉链接向左对齐,一些向中心对齐。我认为一个简单的解决方案是用 display: flex
和 justify-content: center
创建一个 class。我将它与 hide-on-med-and-down
class 一起放在 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>
我正在尝试使用 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 上,链接的悬停行为和背景颜色只有下划线,
所以,我通过向我的 UL 元素添加以下转换解决了这个问题:
nav ul{
transform: translateX(32%);
webkit-transform: translateX(-32%);
}
由于我的链接占据了屏幕的三分之一左右,所以变换是将它们向左移动三分之一。
根据 material 设计指南,官方答案可能是导航栏 links 应该左对齐或右对齐,以指示功能: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 中,您正在欺骗 materialize 认为菜单是一个徽标,它将允许links 居中。
我相信这样的菜单会在足够小的屏幕上消失,并且可能不会按您希望的方式运行。
您可以改用material调整标签:
<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>
这样做的好处是每个 link 和宽度相等,但可能需要您做一些额外的样式设置,如果您关注移动设备,可能需要做更多的工作。
Materialize 在所有 nav ul li
元素上带有 float: left
。如果您尝试将它们与标准 Helper 居中,它将不起作用。因此,除了 text-align: center
之外,您还必须将 float
设置为 none
。但是,这将使所有按钮堆叠在一起;要解决这个问题,只需让 <li>
元素显示内联,让 <a>
元素显示内联块。
我建议这样创建一个新的 class:
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;
}
将标准 Materialise <nav>
组件与上面的 .nav-center
class 一起使用:
<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>
当我向导航栏添加下拉菜单时,删除浮动并将文本对齐设置为居中并不是我的最佳解决方案。一些下拉链接向左对齐,一些向中心对齐。我认为一个简单的解决方案是用 display: flex
和 justify-content: center
创建一个 class。我将它与 hide-on-med-and-down
class 一起放在 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>