Tailwind CSS 响应式导航

相信小伙伴们在浏览绿叶网或其他官网时都会发现:在电脑上,导航链接是水平排开的;而到了手机上,链接会消失,取而代之的是一个 “汉堡按钮”。在这一节中,我们将手把手教大家如何实现这种企业级的响应式导航。

Tailwind CSS 响应式导航原理

在 Tailwind CSS 中,我们主要利用 Flex 布局 配合 “断点前缀(md:)” 来实现响应式导航。其中,一般需要遵循以下逻辑:

1. 移动端布局(默认状态)

  • 显示 LOGO 和一个 “菜单按钮”。
  • 导航链接列表默认设置为 hidden(隐藏)。

2. 桌面端布局(md: 触发)

  • 隐藏 “菜单按钮”:使用 md:hidden。
  • 显示导航链接列表:使用 md:flex(将隐藏状态覆盖为弹性布局)。

Tailwind CSS 响应式导航示例

接下来,我们通过一个简单的例子来讲解一下如何使用 Tailwind CSS 来实现响应式导航。

示例:响应式导航

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
</head>
<body class="bg-green-50 min-h-screen">
    <nav class="fixed top-0 left-0 z-50 flex w-full items-center justify-between px-6 py-4 bg-white/80 border-b border-emerald-100 shadow-sm backdrop-blur-md">
        <div class="text-2xl font-black text-emerald-600 cursor-pointer">
            绿叶网
        </div>
        <div class="hidden md:flex items-center space-x-8 text-emerald-900 font-bold">
            <a href="#" class="hover:text-emerald-500 transition-colors">教程</a>
            <a href="#" class="hover:text-emerald-500 transition-colors">手册</a>
            <a href="#" class="hover:text-emerald-500 transition-colors">课程</a>
            <button class="px-5 py-2 bg-emerald-500 text-white rounded-full hover:bg-emerald-600 transition-all cursor-pointer">
                开始学习
            </button>
        </div>
        <button id="menu-btn" class="flex md:hidden items-center justify-center w-10 h-10 text-emerald-600 bg-emerald-50 rounded-lg cursor-pointer">
            <svg class="w-6 h-6" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
                <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16m-7 6h7"></path>
            </svg>
        </button>
        <div id="mobile-menu" class="hidden md:hidden absolute top-full left-0 w-full p-6 bg-white border-b border-emerald-100 shadow-xl flex-col space-y-4">
            <a href="#" class="text-lg font-bold text-emerald-900">教程</a>
            <a href="#" class="text-lg font-bold text-emerald-900">手册</a>
            <a href="#" class="text-lg font-bold text-emerald-900">课程</a>
            <hr class="border-emerald-50">
            <button class="w-full py-3 bg-emerald-500 text-white font-bold rounded-xl">立即登录</button>
        </div>
    </nav>
    <script>
        const btn = document.getElementById("menu-btn");
        const menu = document.getElementById("mobile-menu");
        btn.addEventListener("click", () => {
            // 简单的显隐切换逻辑
            menu.classList.toggle("hidden");
            menu.classList.toggle("flex");
        });
    </script>
</body>
</html>

当浏览器窗口比较大时,页面效果如下图 1 所示。当浏览器窗口比较小时,页面效果如下图 2 所示。

Tailwind CSS 实现响应式导航(1)

Tailwind CSS 实现响应式导航(2)

分析:

在这个例子中,我们使用了几个非常关键的技巧:

  • 响应式切换(md:):桌面端链接列表使用了 hidden md:flex,意味着它默认是隐藏的,只有当屏幕宽度达到 768px 时才以 Flex 布局展示。相反,菜单按钮使用了 md:hidden,在电脑端会自动消失。
  • 定位与层次:导航栏使用了 fixed top-0 z-50。这样可以保证无论用户如何滚动页面,导航栏始终固定在最顶部,且不会被其他内容遮挡。
  • 视觉细节:我们加入了 bg-white/80 和 backdrop-blur-md。这种半透明毛玻璃质感是现代高级 UI 的标配,能极大地提升绿叶网的品牌高级感。

常见问题

1. 在手机端中,下拉菜单被下方内容遮挡了怎么办呢?

小伙伴们可以仔细观察上面例子,我们在手机菜单上使用了 absolute top-full,这样可以使得菜单绝对定位,并紧紧贴着导航栏的底部展开。

同时我们还给外层导航栏设置了极高的层级(如 z-50),这样就能确保它始终浮在所有页面内容之上。在实际开发中,我们千万不要漏掉这两个关键类名!

2. 不使用 JavaScript 也可以实现菜单切换吗?

可以的。我们可以通过使用 HTML 的 <input type="checkbox"> 配合 Tailwind 的 peer 修饰符,来实现纯 CSS 的菜单切换。

但在实际企业级开发中,为了更好的交互反馈(比如点击页面其他空白区域自动关闭菜单),通常还是推荐使用类似上面那样的 JavaScript。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号