09 一个响应式的导航菜单

一个响应式的导航菜单,它将包括汉堡菜单图标用于移动设备,并且具有平滑的过渡效果和动画。

HTML结构 (navbar.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>响应式导航菜单</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <nav class="navbar">
        <div class="brand-title">品牌Logo</div>
        <a href="#" class="toggle-button">
            <span class="bar"></span>
            <span class="bar"></span>
            <span class="bar"></span>
        </a>
        <div class="navbar-links">
            <ul>
                <li><a href="#">首页</a></li>
                <li><a href="#">服务</a></li>
                <li><a href="#">产品</a></li>
                <li><a href="#">关于我们</a></li>
                <li><a href="#">联系方式</a></li>
            </ul>
        </div>
    </nav>

    <section class="content">
        <h1>欢迎来到我的网站</h1>
        <p>这里是一些介绍性的内容...</p>
    </section>
</body>
</html>

CSS样式 (styles.css)

body, html {
    margin: 0;
    padding: 0;
    font-family: Arial, sans-serif;
}

.navbar {
    background: #333;
    color: #fff;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 20px;
}

.brand-title {
    font-size: 1.5em;
    font-weight: bold;
}

.navbar-links ul {
    list-style: none;
}

.navbar-links li {
    display: inline-block;
    padding: 0 15px;
}

.navbar-links li a {
    color: #fff;
    text-decoration: none;
    transition: color 0.3s ease;
}

.navbar-links li a:hover {
    color: #ddd;
}

.toggle-button {
    display: none;
    cursor: pointer;
}

.toggle-button .bar {
    display: block;
    width: 25px;
    height: 3px;
    margin: 5px auto;
    -webkit-transition: all 0.3s;
    transition: all 0.3s;
    background-color: #fff;
}

@media (max-width: 768px) {
    .toggle-button {
        display: block;
    }

    .navbar-links {
        display: none;
        width: 100%;
        flex-direction: column;
        align-items: center;
    }

    .navbar-links ul {
        flex-direction: column;
        width: 100%;
    }

    .navbar-links li {
        text-align: center;
        padding: 10px;
    }

    .navbar-links li a {
        display: block;
    }

    .navbar-links.active {
        display: flex;
    }
}

@keyframes slideIn {
    0% {
        opacity: 0;
        transform: translateY(-100%);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}

.content {
    padding: 20px;
    animation: slideIn 0.5s ease;
}

/* 汉堡菜单动画 */
.toggle-button.active .bar:nth-child(1) {
    -webkit-transform: rotate(-45deg) translate(-4px, 6px);
    transform: rotate(-45deg) translate(-4px, 6px);
}

.toggle-button.active .bar:nth-child(2) {
    opacity: 0;
}

.toggle-button.active .bar:nth-child(3) {
    -webkit-transform: rotate(45deg) translate(-4px, -8px);
    transform: rotate(45deg) translate(-4px, -8px);
}

JavaScript交互 (script.js)

const toggleButton = document.querySelector('.toggle-button');
const navbarLinks = document.querySelector('.navbar-links');

toggleButton.addEventListener('click', () => {
    toggleButton.classList.toggle('active');
    navbarLinks.classList.toggle('active');
});

代码解释:

  • 基本布局.navbar定义了导航栏的基本样式和布局。
  • 品牌标题和链接.brand-title.navbar-links定义了品牌标题和导航链接的样式。
  • 汉堡菜单.toggle-button定义了汉堡菜单的样式和行为。当点击时,它会切换类名.active,从而触发CSS动画。
  • 响应式设计:使用媒体查询为移动设备调整导航栏的布局,显示汉堡菜单并隐藏常规导航链接。
  • CSS动画@keyframes slideIn定义了一个简单的滑动进入动画,用于内容部分的动画效果。
  • JavaScript交互:通过点击汉堡菜单图标,切换导航链接的显示和隐藏。

这个案例演示了如何使用HTML、CSS和JavaScript创建一个响应式的导航菜单,其中包括汉堡菜单图标和平滑的过渡效果。通过这个案例,你可以了解如何实现响应式设计和基本的DOM操作。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用CSS的@media查询来实现响应式导航栏。以下是一个简单的实现方案: 1. HTML结构 ```html <nav class="navbar"> <a href="#" class="logo">Logo</a> <ul class="menu"> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Services</a></li> <li><a href="#">Contact</a></li> </ul> <div class="toggle"></div> </nav> ``` 其中,`navbar`是导航栏容器,`logo`是Logo,`menu`是菜单列表,`toggle`是用于显示隐藏菜单的按钮。 2. CSS样式 ```css /* 默认样式 */ .navbar { display: flex; align-items: center; justify-content: space-between; padding: 20px; background-color: #333; color: #fff; } .logo { font-size: 24px; font-weight: bold; text-decoration: none; color: #fff; } .menu { display: flex; list-style: none; margin: 0; padding: 0; } .menu li { margin-right: 20px; } .menu a { text-decoration: none; color: #fff; } .toggle { display: none; } /* 响应式样式 */ @media (max-width: 768px) { .menu { display: none; flex-direction: column; position: absolute; top: 100%; left: 0; right: 0; background-color: #333; padding: 20px; } .menu li { margin-right: 0; margin-bottom: 10px; } .toggle { display: block; position: absolute; top: 20px; right: 20px; width: 30px; height: 30px; background-color: #fff; cursor: pointer; } .toggle:before { content: '\f0c9'; font-family: FontAwesome; font-size: 16px; color: #333; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } /* 显示菜单列表 */ .menu.show { display: flex; } } ``` 这里使用了@media查询来设置在屏幕宽度小于等于768px时的样式。通过设置菜单列表的`display`属性为`none`来隐藏菜单,同时设置菜单列表的样式,使用绝对定位和设置`top`、`left`、`right`等属性来实现菜单列表的定位。另外,使用了一个带有图标的按钮来控制菜单列表的显示和隐藏。 3. JavaScript代码 ```javascript const toggleBtn = document.querySelector('.toggle'); const menu = document.querySelector('.menu'); toggleBtn.addEventListener('click', () => { menu.classList.toggle('show'); }); ``` 这里使用JavaScript来控制菜单列表的显示和隐藏,通过为菜单列表添加或删除`show`类来实现。 以上就是一个简单的使用@media查询实现响应式导航栏的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值