导航栏html代码

打开任意一个网站,导航l代第一眼看到的导航l代往往不是内容,而是导航l代顶部那条横贯屏幕的导航栏。它可能只有几个词——“首页”“产品”“关于”——但少了它,导航l代用户就像走进一家没有指示牌的导航l代商场,茫然四顾。导航l代导航栏的导航l代html代码,核心其实就三样东西:一个容器、导航l代一组链接、导航l代一套布局规则。导航l代下面这段代码,导航l代你复制到编辑器里就能跑:

<nav class="navbar"> <div class="logo">Brand</div> <ul class="nav-links"> <li><a href="#">首页</a></li> <li><a href="#">产品</a></li> <li><a href="#">关于</a></li> </ul> </nav>

别小看这几行。导航l代<nav>标签是导航l代html5才有的语义化元素,以前大家清一色用<div id="nav">。导航l代语义化的导航l代好处是屏幕阅读器能识别,搜索引擎也更容易理解页面结构。我见过不少老项目还在用div堆导航,改起来倒也不难,但新项目没理由不用<nav>。

结构搭好之后,浏览器默认会把<ul>里的<li>竖着排,每个前面还带个小圆点。这显然不是我们要的横向导航。最直接的解决办法是给.nav-links加两行css:

.nav-links {  display: flex; list-style: none; gap: 24px; }

display: flex让子元素横过来,list-style: none去掉圆点,gap控制间距。这三板斧下去,基本形状就出来了。有人喜欢用float: left,那是十年前的做法,现在用flex不仅代码少,对齐和响应式处理也方便得多。

链接的样式值得单独说。默认的蓝色下划线实在谈不上美观。text-decoration: none去掉下划线,color换成深灰或品牌色,再加个hover效果——比如底部出现一条短横线——用户体验立刻不一样。我习惯给链接加padding: 8px 0,这样点击区域更大,手指在手机上也不容易点错。

导航栏的定位方式是个分水岭。普通文档流里,导航栏跟着页面滚动,用户往下翻就看不见了。改成position: sticky; top: 0;,它就会吸附在顶部,始终可见。这个属性兼容性已经很好,除了ie——但2024年了,谁还管ie。如果想让导航栏固定在顶部不随滚动消失,用position: fixed,不过记得给body加个padding-top,否则内容会被导航栏盖住一截。

响应式是绕不开的。桌面端横向排列的导航,到了手机屏幕上挤成一团。常见的做法是加个汉堡菜单按钮,点击展开收起。html结构上多加一个<button class="menu-toggle">,css里用媒体查询控制:屏幕宽度小于768px时,隐藏.nav-links,显示按钮;点击按钮后给.nav-links加上.active类,让它以纵向列表的形式出现。javascript只需要一行事件监听:

document.querySelector('.menu-toggle') .addEventListener('click', () => {  document.querySelector('.nav-links').classList.toggle('active'); });

有个细节容易翻车:<ul>默认有margin和padding,不同浏览器还不一样。我一般直接margin: 0; padding: 0;清零,省得后面调对齐时莫名其妙偏了几像素。另外<a>标签是行内元素,设宽高不生效,要么改成inline-block,要么在flex布局里它自动变成flex item,宽高就有效了。

最后说个实际项目里的坑。导航栏里的logo如果用<img>,记得设height而不是width,让宽度自适应。反过来设宽度的话,图片比例一乱,logo就变形了。还有,导航链接的文字别用图片代替,seo不友好,用户放大页面还会糊。纯文本加css字体,清晰又轻量。

导航栏的代码量不大,但每一个属性都影响最终呈现。写完之后在浏览器里缩放到手机尺寸试试,再开个无痕窗口看看缓存有没有捣乱——这些笨办法,比任何教程都管用。