
本文旨在解决使用HTML、CSS、Flexbox和JavaScript构建的响应式导航栏在屏幕尺寸缩小后,点击菜单图标无法展开的问题。通过将JavaScript代码从CSS文件中分离出来,并确保正确引入,可以有效地修复此问题,实现导航栏在移动端的正常显示和交互。
在构建响应式网站时,导航栏的正确显示和交互至关重要。当屏幕尺寸缩小,导航栏通常会折叠成一个菜单图标(通常是汉堡图标),点击该图标应该展开导航菜单。然而,有时会出现点击图标后菜单无法展开的问题。以下提供详细的解决方案。
根据提供的信息,问题在于当屏幕尺寸缩小,导航栏折叠为菜单图标后,点击该图标无法触发菜单的展开。这通常是由于以下原因造成的:
解决此问题的关键在于确保JavaScript代码能够正确地执行,并且能够正确地操作HTML元素。以下是详细的步骤:
立即学习“Java免费学习笔记(深入)”;
分离JavaScript代码: 将JavaScript代码从CSS文件中分离出来,创建一个独立的.js文件(例如script.js)。这是非常重要的一步,因为将JavaScript代码放在CSS中是不正确的做法,会导致代码无法执行。
let menu = document.querySelector("#menu-icon");
let navbar = document.querySelector(".navbar");
menu.addEventListener("click", function () {
    navbar.classList.toggle("active");
});
window.onscroll = () => {
    navbar.classList.remove("active");
};正确引入JavaScript文件: 在HTML文件的<head>标签或<body>标签的末尾,使用<script>标签引入JavaScript文件。确保src属性指向正确的JavaScript文件路径。建议将<script>标签放在</body>标签之前,以避免阻塞页面的渲染。
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Website for Foodies!</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link rel='stylesheet' type='text/css' media='screen' href='main.css'>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link
        href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;800&family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap"
        rel="stylesheet">
</head>
<body>
    <header>
        <a href="#" class="logo">Foods</a>
        <div class="bx bx-menu" id="menu-icon"></div>
        <!--class=" bx bx-menu" is responsible for icon from boxicon-->
        <ul class="navbar">
            <li><a href="#Home">Home</a></li>
            <li><a href="#About">About</a></li>
            <li><a href="#Menu">Menu</a></li>
            <li><a href="#Service">Service</a></li>
            <li><a href="#Contact">Contact</a></li>
        </ul>
    </header>
    <!--Home Starts-->
    <section class="Home" id="Home">
        <div class="Home-text">
            <h1>Website for Foodies</h1>
            <h2>Food The <br> Most Precious Things</h2>
            <a href="#" class="btn">Today's Menu</a>
        </div>
        <div class="Home-img">
            <img src="C:\Users\ADMIN\Desktop\YPROJ\img1.png">
        </div>
    </section>
    <!--About Starts-->
    <section class="About" id="About">
        <div class="About-img">
            <img src="C:\Users\ADMIN\Desktop\YPROJ\img2.png">
        </div>
        <div class="About-text">
            <span>About Us</span>
            <h2>We speak the good<br>Food Language</h2>
            <p>Dessert is a course that concludes a meal.The term dessert can apply to many sweets, such as biscuits,
                cakes, cookies, custards, gelatins, ice creams, pastries, pies, puddings, macaroons, sweet soups, tarts,
                and fruit salad.</p>
            <a href="#" class="btn">Learn More</a>
        </div>
    </section>
    <!--Menu Starts-->
    <section class="Menu" id="Menu">
        <div class="Heading">
            <span>Food Menu</span>
            <h2>Fresh taste and great Price</h2>
        </div>
        <div class="Menu-container">
            <div class="box">
                <div class="box-img">
                    <img src="C:\Users\ADMIN\Desktop\YPROJ\img3.png">
                </div>
                <h2>Cup Cake</h2>
                <h3>Tasty Dessert</h3>
                <span>Rs. 60</span>
                <i class='bx bxs-cart-alt'></i>
            </div>
            <div class="box">
                <div class="box-img">
                    <img src="C:\Users\ADMIN\Desktop\YPROJ\img5.png">
                </div>
                <h2>Cake</h2>
                <h3>Tasty Dessert</h3>
                <span>Rs. 600</span>
                <i class='bx bxs-cart-alt'></i>
            </div>
            <div class="box">
                <div class="box-img">
                    <img src="C:\Users\ADMIN\Desktop\YPROJ\img6.png">
                </div>
                <h2>Natural Ice-Cream</h2>
                <h3>Tasty Dessert</h3>
                <span>Rs. 160</span>
                <i class='bx bxs-cart-alt'></i>
            </div>
        </div>
    </section>
    <!--Service Starts-->
    <section class="Services" id="Services">
        <div class="Heading">
            <span>Services</span>
            <h2>We provide best quality food</h2>
        </div>
        <div class="Service-container">
            <div class="S-box">
                <img src="C:\Users\ADMIN\Desktop\YPROJ\My project.png">
                <h3>Order</h3>
                <p>A literal feast to your eyes. Order and eat till your taste buds burst. Made with freshest
                    ingredients present. Low sugar dessert available following your diet plan.</p>
            </div>
            <div class="S-box">
                <img src="C:\Users\ADMIN\Desktop\YPROJ\img7.png">
                <h3>Shipping</h3>
                <p>Fast delivery,Tracking available. Free Delivery!!!! on all the orders above Rs 500 and special
                    coupons for all the orders above Rs 1000.</p>
            </div>
            <div class="S-box">
                <img src="C:\Users\ADMIN\Desktop\YPROJ\img8.png">
                <h3>Delivery</h3>
                <p>Delivery Anytime! Anywhere! We believe to bring small happiness in every ocassion so we always
                    deliver on time.</p>
            </div>
        </div>
    </section>
    <!--Call to action-->
    <section class="cta">
        <h2>We make quality food<br>EVERYDAY!!!</h2>
        <a href="#" class="btn">Let's Talk</a>
    </section>
    <!--Footer Start-->
    <section id="Contact">
        <div class="Footer">
            <div class="Main">
                <div class="Col">
                    <h4>Menu Links</h4>
                    <ul>
                        <li><a href="#">Home</a></li>
                        <li><a href="#">About</a></li>
                        <li><a href="#">Menu</a></li>
                        <li><a href="#">Service</a></li>
                        <li><a href="#">Contact</a></li>
                    </ul>
                </div>
                <div class="Col">
                    <h4>Our Service</h4>
                    <ul>
                        <li><a href="#">Web Design</a></li>
                        <li><a href="#">Web Development</a></li>
                        <li><a href="#">Marketing</a></li>
                        <li><a href="#">Product Management</a></li>
                        <li><a href="#">Graphic Design</a></li>
                    </ul>
                </div>
                <div class="Col">
                    <h4>Information</h4>
                    <ul>
                        <li><a href="#">About us</a></li>
                        <li><a href="#">Delivery Information</a></li>
                        <li><a href="#">Privacy Policy</a></li>
                        <li><a href="#">Terms & Condition</a></li>
                    </ul>
                </div>
                <div class="Col">
                    <h4>Contact</h4>
                    <div class="Social">
                        <a href="#"><i class='bx bxl-facebook-circle'></i></a>
                        <a href="#"><i class='bx bxl-instagram-alt'></i></a>
                        <a href="#"><i class='bx bxl-twitter'></i></a>
                        <a href="#"><i class='bx bxl-youtube'></i></a>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <script type="text/javascript" src="js/script.js"></script>
</body>
</html>检查HTML结构和CSS选择器: 确保HTML结构正确,并且JavaScript代码中使用的CSS选择器能够正确地找到对应的HTML元素。例如,确保#menu-icon和.navbar这两个选择器能够正确地选中菜单图标和导航栏元素。
<header>
    <a href="#" class="logo">Foods</a>
    <div class="bx bx-menu" id="menu-icon"></div>
    <ul class="navbar">
        <li><a href="#Home">Home</a></li>
        <li><a href="#About">About</a></li>
        <li><a href="#Menu">Menu</a></li>
        <li><a href="#Service">Service</a></li>
        <li><a href="#Contact">Contact</a></li>
    </ul>
</header>检查CSS媒体查询: 确保CSS媒体查询正确地控制了导航栏在不同屏幕尺寸下的显示方式。特别要注意菜单图标的显示和隐藏,以及导航栏的展开和折叠。
@media (max-width:1140px) {
    #menu-icon {
        display: initial;
        color: var(--text-color);
    }
    header .navbar {
        position: absolute;
        top: -400px;
        left: 0;
        right: 0;
        display: flex;
        flex-direction: column;
        text-align: center;
        background: #2b2640;
        transition: .3s;
    }
    header .navbar.active {
        top: 70px;
    }
    .navbar a {
        padding: 1.5rem;
        display: block;
    }
}调试JavaScript代码: 使用浏览器的开发者工具调试JavaScript代码,查看是否有语法错误、逻辑错误或运行时错误。可以使用console.log()语句在控制台中输出变量的值,以便了解代码的执行情况。
let menu = document.querySelector("#menu-icon");
let navbar = document.querySelector(".navbar");
console.log("Menu icon:", menu);
console.log("Navbar:", navbar);
menu.addEventListener("click", function () {
    console.log("Menu icon clicked!");
    navbar.classList.toggle("active");
});
window.onscroll = () => {
    navbar.classList.remove("active");
};以下是完整的HTML、CSS和JavaScript代码示例,展示了如何正确地实现响应式导航栏菜单的展开和折叠。
HTML (index.html):
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Website for Foodies!</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link rel='stylesheet' type='text/css' media='screen' href='main.css'>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link
        href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;800&family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap"
        rel="stylesheet">
</head>
<body>
    <header>
        <a href="#" class="logo">Foods</a>
        <div class="bx bx-menu" id="menu-icon"></div>
        <!--class=" bx bx-menu" is responsible for icon from boxicon-->
        <ul class="navbar">
            <li><a href="#Home">Home</a></li>
            <li><a href="#About">About</a></li>
            <li><a href="#Menu">Menu</a></li>
            <li><a href="#Service">Service</a></li>
            <li><a href="#Contact">Contact</a></li>
        </ul>
    </header>
    <!--Home Starts-->
    <section class="Home" id="Home">
        <div class="Home-text">
            <h1>Website for Foodies</h1>
            <h2>Food The <br> Most Precious Things</h2>
            <a href="#" class="btn">Today's Menu</a>
        </div>
        <div class="Home-img">
            <img src="C:\Users\ADMIN\Desktop\YPROJ\img1.png">
        </div>
    </section>
    <!--About Starts-->
    <section class="About" id="About">
        <div class="About-img">
            <img src="C:\Users\ADMIN\Desktop\YPROJ\img2.png">
        </div>
        <div class="About-text">
            <span>About Us</span>
            <h2>We speak the good<br>Food Language</h2>
            <p>Dessert is a course that concludes a meal.The term dessert can apply to many sweets, such as biscuits,
                cakes, cookies, custards, gelatins, ice creams, pastries, pies, puddings, macaroons, sweet soups, tarts,
                and fruit salad.</p>
            <a href="#" class="btn">Learn More</a>
        </div>
    </section>
    <!--Menu Starts-->
    <section class="Menu" id="Menu">
        <div class="Heading">
            <span>Food Menu</span>
            <h2>Fresh taste and great Price</h2>
        </div>
        <div class="Menu-container">
            <div class="box">
                <div class="box-img">
                    <img src="C:\Users\ADMIN\Desktop\YPROJ\img3.png">
                </div>
                <h2>Cup Cake</h2>
                <h3>Tasty Dessert</h3>
                <span>Rs. 60</span>
                <i class='bx bxs-cart-alt'></i>
            </div>
            <div class="box">
                <div class="box-img">
                    <img src="C:\Users\ADMIN\Desktop\YPROJ\img5.png">
                </div>
                <h2>Cake</h2>
                <h3>Tasty Dessert</h3>
                <span>Rs. 600</span>
                <i class='bx bxs-cart-alt'></i>
            </div>
            <div class="box">
                <div class="box-img">
                    <img src="C:\Users\ADMIN\Desktop\YPROJ\img6.png">
                </div>
                <h2>Natural Ice-Cream</h2>
                <h3>Tasty Dessert</h3>
                <span>Rs. 160</span>
                <i class='bx bxs-cart-alt'></i>
            </div>
        </div>
    </section>
    <!--Service Starts-->
    <section class="Services" id="Services">
        <div class="Heading">
            <span>Services</span>
            <h2>We provide best quality food</h2>
        </div>
        <div class="Service-container">
            <div class="S-box">
                <img src="C:\Users\ADMIN\Desktop\YPROJ\My project.png">
                <h3>Order</h3>
                <p>A literal feast to your eyes. Order and eat till your taste buds burst. Made with freshest
                    ingredients present. Low sugar dessert available following your diet plan.</p>
            </div>
            <div class="S-box">
                <img src="C:\Users\ADMIN\Desktop\YPROJ\img7.png">
                <h3>Shipping</h3>
                <p>Fast delivery,Tracking available. Free Delivery!!!! on all the orders above Rs 500 and special
                    coupons for all the orders above Rs 1000.</p>
            </div>
            <div class="S-box">
                <img src="C:\Users\ADMIN\Desktop\YPROJ\img8.png">
                <h3>Delivery</h3>
                <p>Delivery Anytime! Anywhere! We believe to bring small happiness in every ocassion so we always
                    deliver on time.</p>
            </div>
        </div>
    </section>
    <!--Call to action-->
    <section class="cta">
        <h2>We make quality food<br>EVERYDAY!!!</h2>
        <a href="#" class="btn">Let's Talk</a>
    </section>
    <!--Footer Start-->
    <section id="Contact">
        <div class="Footer">
            <div class="Main">
                <div class="Col">
                    <h4>Menu Links</h4>
                    <ul>
                        <li><a href="#">Home</a></li>
                        <li><a href="#">About</a></li>
                        <li><a href="#">Menu</a></li>
                        <li><a href="#">Service</a></li>
                        <li><a href="#">Contact</a></li>
                    </ul>
                </div>
                <div class="Col">
                    <h4>Our Service</h4>
                    <ul>
                        <li><a href="#">Web Design</a></li>
                        <li><a href="#">Web Development</a></li>
                        <li><a href="#">Marketing</a></li>
                        <li><a href="#">Product Management</a></li>
                        <li><a href="#">Graphic Design</a></li>
                    </ul>
                </div>
                <div class="Col">
                    <h4>Information</h4>
                    <ul>
                        <li><a href="#">About us</a></li>
                        <li><a href="#">Delivery Information</a></li>
                        <li><a href="#">Privacy Policy</a></li>
                        <li><a href="#">Terms & Condition</a></li>
                    </ul>
                </div>
                <div class="Col">
                    <h4>Contact</h4>
                    <div class="Social">
                        <a href="#"><i class='bx bxl-facebook-circle'></i></a>
                        <a href="#"><i class='bx bxl-instagram-alt'></i></a>
                        <a href="#"><i class='bx bxl-twitter'></i></a>
                        <a href="#"><i class='bx bxl-youtube'></i></a>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <script type="text/javascript" src="js/script.js"></script>
</body>
</html>CSS (main.css):
* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
    scroll-behavior: smooth;
    font-family: 'Poppins', sans-serif;
    list-style: none;
    text-decoration: none;
}
:root {
    /* global variables */
    --main-color: #ff702a;
    --text-color: #fff;
    --background-color: #1e1c2a;
    --big-font: 5rem;
    --h2-font: 2.15rem;
    --p-font: 0.9rem;
}
*::selection {
    background: var(--main-color);
    color: #fff;
}
body {
    color: var(--text-color);
    background: var(--background-color);
}
header {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 1000;
    /*z-index defines stack order of element*/
    display: flex;
    align-items: center;
    /*controls space around cross axis*/
    justify-content: space-between;
    /*controls space around main axis*/
    padding: 30px 170px;
    background: var(--background-color);
}
.logo {
    color: var(--main-color);
    font-weight: 600;
    font-size: 2.2rem;
}
.navbar {
    display: flex;
}
.navbar li a {
    color: var(--text-color);
    font-size: 1.1rem;
    padding: 10px 20px;
    font-weight: 500;
}
.navbar li a:hover {
    color: var(--main-color);
    transition: .4s;
}
#menu-icon {
    font-size: 2rem;
    cursor: pointer;
    display: none;
}
section {
    padding: 70px 17%;
}
.Home {
    width: 100%;
    min-height: 90vh;
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    grid-gap: 1.5rem;
    align-items: center;
}
.Home-img img {
    max-width: 100%;
    width: 600px;
    height: auto;
}
.Home-text h1 {
    font-size: 3.5rem;
    color: var(--main-color);
    padding-top: 100px;
}
.Home-text h2 {
    font-size: var(--h2-font);
    margin: 1rem 0 2rem;
}
.btn {
    display: inline-block;
    padding: 10px 20px;
    background: var(--main-color);
    color: #fff;
    border-radius: 0.5rem;
}
.btn:hover {
    transform: scale(1.2) translateY(10px);
    transition: .4s;
}
.About {
    display: grid;
    grid-template-columns: repeat(2, 2fr);
    /*space separated tracklist*/
    grid-gap: 1.5rem;
    text-align: center;
}
.About-img img {
    max-width: 100%;
    width: 400px;
    height: auto;
}
.About-text span {
    color: var(--main-color);
    font-weight: 600;
}
.About-text h2 {
    font-size: var(--h2-font);
}
.About-text p {
    margin: 0.8rem 0 1.8rem;
    line-height: 1.7;
}
.Heading {
    text-align: center;
}
.Heading span {
    color: var(--main-color);
    font-weight: 600;
}
.Heading h2 {
    font-size: var(--h2-font);
}
.Menu-container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, auto));
    grid-gap: 1.5rem;
    align-items: center;
}
.box {
    position: relative;
    margin-top: 4rem;
    height: auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: #feeee7;
    padding: 20px;
    border-radius: 0.5rem;
}
.box-img {
    width: 220px;
    height: 220px;
}
.box-img img {
    width: 100%;
    height: 100%;
}
.box h2 {
    font-size: 1.3rem;
    color: var(--background-color);
}
.box h3 {
    color: var(--background-color);
    font-size: 1rem;
    font-weight: 400;
    margin: 4px 0 10px;
}
.box span {
    font-size以上就是修复HTML、CSS和JavaScript响应式导航栏菜单无法打开的问题的详细内容,更多请关注php中文网其它相关文章!
                        
                        HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号