使用css实现一个响应式汉堡包菜单

<!DOCTYPE html>
<html lang="zh">
<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">我的网站</div>
        <button class="hamburger">
            <span></span>
            <span></span>
            <span></span>
        </button>
        <ul class="nav-links">
            <li><a href="#">博客</a></li>
            <li><a href="#">分类</a></li>
            <li><a href="#">标签</a></li>
            <li><a href="#">个人主页</a></li>
        </ul>
    </nav>
    <script src="script.js"></script>
</body>
</html> 
/* 重置所有元素的默认样式 */
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

/* 导航栏主容器样式 */
.navbar{
    background-color: #333;
    padding: 1rem;
    display: flex;                  /* 使用flex布局 */
    justify-content: space-between; /* 两端对齐 */
    align-items: center;           /* 垂直居中 */
    color: white;
    font-size: 1.5rem;
    font-weight: bold;
}

/* 导航链接列表样式 */
.nav-links{
    display: flex;                 /* 水平排列菜单项 */
    list-style: none;             /* 移除列表默认样式 */
    gap: 2rem;                    /* 设置菜单项间距 */
}

/* 导航链接样式 */
.nav-links a{
    color: white;
    text-decoration: none;        /* 移除下划线 */
    font-size: 1.1rem;
}

/* 汉堡菜单按钮样式 */
.hamburger{
    display: none;                /* 默认隐藏汉堡按钮 */
    flex-direction: column;       /* 垂直排列三条线 */
    gap: 6px;                    /* 设置线条间距 */
    background: none;
    border: none;
    cursor: pointer;
    padding: 4px;
}

/* 汉堡菜单按钮的线条样式 */
.hamburger span{
    width: 30px;
    height: 3px;
    background-color: white;
    display: block;
    transition: all 0.3s ease;    /* 添加过渡动画 */
}

/* 移动端适配样式 (屏幕宽度 ≤ 768px) */
@media (max-width: 768px){
    /* 显示汉堡菜单按钮 */
    .hamburger{
        display: flex;
    }

    /* 移动端导航菜单样式 */
    .nav-links{
        display: flex;
        opacity: 0;               /* 初始状态完全透明 */
        transform: translateY(-20px); /* 初始位置向上偏移 */
        flex-direction: column;   /* 垂直排列菜单项 */
        position: absolute;       /* 绝对定位 */
        top: 70px;               /* 距顶部距离 */
        left: 0;
        right: 0;                /* 左右边距为0,实现全宽 */
        background-color: #333;
        padding: 1rem;
        gap: 1rem;
        pointer-events: none;     /* 禁用鼠标事件 */
        transition: all 0.3s ease; /* 添加过渡动画 */
    }

    /* 菜单展开时的样式 */
    .nav-links.active{
        opacity: 1;              /* 完全显示 */
        transform: translateY(0); /* 回到原位置 */
        pointer-events: auto;     /* 启用鼠标事件 */
    }
}

document.addEventListener('DOMContentLoaded', () => {
    const hamburger = document.querySelector('.hamburger');
    const navLinks = document.querySelector('.nav-links');

    hamburger.addEventListener('click', () => {
        navLinks.classList.toggle('active');
    });
}); 
posted @ 2024-11-25 12:33  林汉州win  阅读(1)  评论(0编辑  收藏  举报