第八章 利用CSS制作导航栏

8.1 水平顶部导航栏

8.1.1 简单水平导航栏的设计与实现

1. 响应式设计

介绍: 响应式设计是指网页能够根据不同设备屏幕尺寸和分辨率自适应调整布局和样式,以确保在手机、平板和桌面等设备上都能提供良好的用户体验。

CSS实现:

@media (max-width: 768px) {
    .nav-menu {
        flex-direction: column;
        position: absolute;
        background-color: #333;
        width: 100%;
        top: 60px;
        left: 0;
        display: none;
    }

    .nav-item {
        text-align: center;
        margin: 10px 0;
    }

    .hamburger {
        display: block;
    }
}

这段代码使用媒体查询来调整导航栏的样式,当屏幕宽度小于768px时,导航菜单会垂直排列并默认隐藏,同时显示汉堡菜单按钮。

2. 汉堡菜单功能

介绍: 汉堡菜单(Hamburger Menu)是一个常见的移动设备导航图标,通常由三条横线组成,点击时可以展开或收起导航菜单。

HTML:

<button class="hamburger" onclick="toggleMenu()">☰</button>

CSS:

.hamburger {
    display: none;
    font-size: 24px;
    background: none;
    border: none;
    color: #fff;
    cursor: pointer;
}

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

JavaScript:

function toggleMenu() {
    const menu = document.querySelector('.nav-menu');
    menu.classList.toggle('active');
}

这段代码通过JavaScript控制导航菜单的显示和隐藏,点击汉堡菜单按钮时会切换.nav-menuactive类。

3. 悬停效果

介绍: 悬停效果是指当鼠标悬停在元素上时触发的视觉效果,可以提高用户的交互体验。

CSS实现:

.nav-link:hover {
    color: #a9a9a9;
}

这段代码使得导航链接在鼠标悬停时颜色变化,增加了视觉反馈。

4. 活动链接高亮

介绍: 活动链接高亮是指当前页面对应的导航链接会以不同的样式显示,帮助用户识别当前所在页面。

CSS实现:

.nav-link.active {
    color: #007bff;
    font-weight: bold;
}

这段代码使得当前页面的导航链接颜色变为蓝色并加粗。

额外功能

a. 下拉菜单

介绍: 下拉菜单允许用户通过点击一个导航项来展开更多的选项,适用于有多层次菜单的网站。

HTML:

<li class="nav-item">
    <a href="#" class="nav-link">Services</a>
    <ul class="dropdown-menu">
        <li><a href="#">Web Design</a></li>
        <li><a href="#">Development</a></li>
    </ul>
</li>

CSS:

.dropdown-menu {
    display: none;
    position: absolute;
    background-color: #333;
}

.dropdown-menu li {
    text-align: left;
    padding: 10px;
}

这段代码创建了一个简单的下拉菜单,当鼠标悬停在“Services”导航项上时显示。

b. 渐变背景

介绍: 渐变背景可以为网站添加更现代和吸引人的视觉效果。

CSS实现:

.navbar {
    background: linear-gradient(135deg, #6e45e2 0%, #88d3ce 100%);
}

这段代码为导航栏添加了一个从紫色到蓝色的渐变背景。

c. 动画效果

介绍: 动画效果可以提升网站的交互性和吸引力,例如在导航链接上添加渐变效果。

CSS实现:

.nav-link {
    position: relative;
    transition: color 0.3s ease;
}

.nav-link::before {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 2px;
    background: #007bff;
    transform: scaleX(0);
    transition: transform 0.3s ease;
}

.nav-link:hover::before {
    transform: scaleX(1);
}

这段代码为导航链接添加了一个渐变的下划线动画效果。

通过这些功能和代码示例,你可以创建一个功能丰富、视觉效果出众的水平导航栏。你可以根据需要进一步自定义样式和功能。

我们将上述功能整合到一个HTML页面中,并使用内嵌的<style>标签来包含CSS样式。这里是一个完整的示例,包括响应式设计、汉堡菜单功能、悬停效果、活动链接高亮、品牌Logo和搜索框。

完整的HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple Horizontal Navigation Bar</title>
    <style>
        /* 重置基本样式 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        /* 导航栏样式 */
        .navbar {
            background-color: #333;
            color: #fff;
            height: 60px;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        /* 导航栏容器样式 */
        .navbar-container {
            width: 100%;
            max-width: 1200px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        /* Logo样式 */
        .navbar-logo {
            font-size: 24px;
            font-weight: bold;
            color: #fff;
            text-decoration: none;
        }

        /* 导航菜单样式 */
        .nav-menu {
            display: flex;
            list-style: none;
        }

        /* 导航项样式 */
        .nav-item {
            margin: 0 15px;
        }

        /* 导航链接样式 */
        .nav-link {
            color: #fff;
            text-decoration: none;
            font-size: 18px;
            transition: color 0.3s ease;
        }

        /* 悬停效果 */
        .nav-link:hover {
            color: #a9a9a9;
        }

        /* 活动链接高亮 */
        .nav-link.active {
            color: #007bff;
            font-weight: bold;
        }

        /* 汉堡菜单样式 */
        .hamburger {
            display: none;
            font-size: 24px;
            background: none;
            border: none;
            color: #fff;
            cursor: pointer;
        }

        /* 搜索框样式 */
        .search-container {
            display: flex;
            align-items: center;
            margin-left: 20px;
        }

        .search-container input {
            padding: 5px;
            border: 1px solid #ccc;
            border-radius: 4px;
        }

        .search-container button {
            background: none;
            border: none;
            color: #fff;
            cursor: pointer;
        }

        /* 响应式设计 */
        @media (max-width: 768px) {
            .nav-menu {
                flex-direction: column;
                position: absolute;
                background-color: #333;
                width: 100%;
                top: 60px;
                left: 0;
                display: none;
            }

            .nav-item {
                text-align: center;
                margin: 10px 0;
            }

            .hamburger {
                display: block;
            }

            .search-container {
                display: none;
            }
        }
    </style>
</head>
<body>

<nav class="navbar">
    <div class="navbar-container">
        <a href="#" class="navbar-logo">MyWebsite</a>
        <ul class="nav-menu">
            <li class="nav-item">
                <a href="#home" class="nav-link active">Home</a>
            </li>
            <li class="nav-item">
                <a href="#services" class="nav-link">Services</a>
            </li>
            <li class="nav-item">
                <a href="#about" class="nav-link">About</a>
            </li>
            <li class="nav-item">
                <a href="#contact" class="nav-link">Contact</a>
            </li>
        </ul>
        <div class="search-container">
            <input type="text" placeholder="Search..." name="search">
            <button type="submit">🔍</button>
        </div>
        <button class="hamburger" onclick="toggleMenu()">☰</button>
    </div>
</nav>

<script>
    function toggleMenu() {
        const menu = document.querySelector('.nav-menu');
        menu.classList.toggle('active');
    }
</script>

</body>
</html>

说明

  1. 内嵌CSS:所有CSS样式都放在<style>标签内,这样可以确保样式直接应用于HTML页面。
  2. 响应式设计:通过媒体查询,当屏幕宽度小于768px时,导航菜单会垂直排列并默认隐藏,同时显示汉堡菜单按钮。
  3. 汉堡菜单功能:点击汉堡菜单按钮会切换.nav-menuactive类,从而显示或隐藏导航菜单。
  4. 悬停效果:导航链接在鼠标悬停时颜色变化。
  5. 活动链接高亮:为当前页面的链接添加active类,使其颜色和字体加粗,突出显示。
  6. 品牌Logo:设置品牌Logo的字体大小、颜色和无下划线。
  7. 搜索框:在导航栏中添加搜索框,方便用户快速搜索网站内容。

这个示例提供了一个完整的水平导航栏实现,包括响应式设计和汉堡菜单功能,适用于不同设备和屏幕尺寸。你可以根据需要进一步自定义样式和功能。

8.1.2 下拉子菜单导航栏的设计与实现

基本功能和事件

  1. 鼠标悬停显示下拉菜单

    • 功能:当用户将鼠标悬停在导航项上时,显示下拉子菜单。
    • 事件:使用mouseover事件来触发下拉菜单的显示。
    • 代码示例
      item.addEventListener('mouseover', function () {
          let dropdown = this.querySelector('.dropdown-menu');
          if (dropdown) {
              dropdown.classList.add('active');
          }
      });
  2. 鼠标移出隐藏下拉菜单

    • 功能:当用户将鼠标从导航项移开时,隐藏下拉子菜单。
    • 事件:使用mouseout事件来触发下拉菜单的隐藏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值