【问题标题】:Making a responsive collapsable navigation bar. I am having difficulty getting the Javascript to work on click制作响应式可折叠导航栏。我很难让 Javascript 在点击时工作
【发布时间】:2019-11-16 20:12:00
【问题描述】:

我正在为我的网站移动视图创建一个可折叠的导航栏。在移动视图中,我在右侧有一个带有徽标和图标的标题。然后,用户可以单击该图标来访问其他网站链接。

当我注释掉“不显示”时,它确实表明所有其他链接都在徽标和图标下方。我通过 W3C 代码验证器运行了我的 HTML、CSS 和 JavaScript,结果显示“没有显示错误”。我的 html 文件、CSS 文件和 JS 文件似乎都在适当的文件夹中。

HTML:

<!DOCTYPE html> 
<html lang='en'>
<head>
<meta charset='UTF-8' />
<title>Responsive Design</title>
<link rel='stylesheet' type="text/css" href='styles/styleresponsive.css' />
<script type="text/javascript" src="scripts/responsive.js"></script>
<script src="https://kit.fontawesome.com/01c3568935.js"></script>
</head>

<body>
<!-- There's nothing here! -->

<nav class="navbar">

    <span class="navbar-toggle" id="js-navbar-toggle">
            <i class="fas fa-bars"></i>
        </span>

    <a href="#" class="logo"> Logo<!-- <img src='images/stars.jpg' alt="logo" /> --> </a>

    <ul class="main-nav" id="js-menu">

        <li>
            <a href="#" class="nav-links1"><img src='images/stars.jpg' alt="Art" /></a>

        </li>

        <li>
            <a href="#" class="nav-links2"><img src='images/stars.jpg' alt="Code" /></a>
        </li>

        <li>
            <a href="#" class="nav-links3"><img src='images/stars.jpg' alt="Dogs" /></a>
        </li>

        <li>
            <a href="#" class="nav-links4"><img src='images/stars.jpg' alt="Contact" /></a>
        </li>

    </ul>

</nav>

CSS

/* So, testing for mobile, tablet, and desktop */

*{
margin: 0; 
padding: 0; 
box-sizing: border-box;
}

 /* Mobile Styles */

 @media only screen and (max-width: 400px) {

body{
    background-color: #F09A9D; /* Red */
}
/* Here is where that Navigation bar gets tricky */

.navbar {
    font-size: 18px; 
    background-color: #5995DA; 
    width: 100%; 
}

.navbar-toggle {
    position: absolute;
    top: 10px; 
    right: 20px; 
    cursor: pointer;
    font-size: 24px; 
}

/* Hide the menu so it's not visible by default */

.main-nav {
    list-style-type: none; /* Specifies the type of list-item marker */
    /* display: none; /* Not displayed */
} 

/* Styles the navigation links & logo */

.nav-links1,
.nav-links2,
.nav-links3,
.nav-links4,
.logo {
    text-decoration: none; 
/*  list-style-type: none; /* Removes the default list text underline */
}

/* Styles the list */

.main-nav li {
    text-align: center; /* Aligns text center */
    margin: 15px auto;
    height: 100px; 
}

.logo {
    display: inline-block; 
    font-size: 22px; 
    margin-top: 10px; 
    margin-left: 20px; 
    height: 100px; 
}

.active {
    display: block; 
} 

JS

/* Now lets make this responsive with JS */

let mainNav = document.getElementById("js-menu"); 

let navBarToggle = document.getElementById("js-navbar-toggle"); 

navBarToggle.addEventListener("click", function () {

    mainNav.classList.toggle("active");

});

我希望能够单击图标并将其他导航链接“折叠”。相反,这个导航栏似乎停滞不前。

Demo image

编辑:奇怪的是,当我测试我的原始代码和 codepen 上建议的编辑代码时,它可以工作。当我使用 firefox 和 Safari 开发人员检查器对其进行测试时,它不起作用。在 Safari JavaScript 控制台上,它显示 Stars 图像的“不允许加载本地资源”。这是怎么回事?

编辑二:在没有 stars.jpg 的情况下尝试过。只是让每个链接看起来像

"<li>
          <a href="#" class="nav-links1">Art<!--<img src='images/stars.jpg' alt="Art"/> --></a>
        </li>"

“测试”它。

在 Safari JavaScript 控制台中,它显示“TypeError: null is not an object (evalating 'navBarToggle.addEventListener')

在 FireFox JavaScript 控制台中,它显示“TypeError: navBarToggle is null”

如果此代码可以在 codepen 上运行,为什么当我尝试从自己的计算机打开文件时它似乎不起作用?

【问题讨论】:

    标签: javascript html css flexbox frontend


    【解决方案1】:

    欢迎来到 SO :)

    我想我明白问题所在了。问题是.main-nav 的规则仍然适用,即使您切换了.active 类。

    可能有很多不同的方法来解决这个问题。但解决此问题的一种简单方法是改用 .mobile-inactive 类。默认情况下,导航菜单以此类开头。当用户点击您的切换 #js-navbar-toggle 时,您会切换它。

    在移动规则(媒体查询)中,我更新了您的 .main-Nav CSS 规则并为名为 .inactive 的类添加了一个新规则。您可以删除 .active 规则,因为它将不再被使用:

    所以你的导航菜单应该是

    <ul class="main-nav mobile-inactive" id="js-menu">
    

    HTML 的其余部分保持不变。

    更新的 CSS:

    /* So, testing for mobile, tablet, and desktop */
    
    {
    margin: 0; 
    padding: 0; 
    box-sizing: border-box;
    }
    
     /* Mobile Styles */
    
     @media only screen and (max-width: 400px) {
    
    body{
        background-color: #F09A9D; /* Red */
    }
    /* Here is where that Navigation bar gets tricky */
    
    .navbar {
        font-size: 18px; 
        background-color: #5995DA; 
        width: 100%; 
    }
    
    .navbar-toggle {
        position: absolute;
        top: 10px; 
        right: 20px; 
        cursor: pointer;
        font-size: 24px; 
    }
    
    /* Hide the menu so it's not visible by default */
    
    .main-nav {
        list-style-type: none; /* Specifies the type of list-item marker */
    
    } 
    
    /* Styles the navigation links & logo */
    
    .nav-links1,
    .nav-links2,
    .nav-links3,
    .nav-links4,
    .logo {
        text-decoration: none; 
    /*  list-style-type: none; /* Removes the default list text underline */
    }
    
    /* Styles the list */
    
    .main-nav li {
        text-align: center; /* Aligns text center */
        margin: 15px auto;
        height: 100px; 
    }
    
    .logo {
        display: inline-block; 
        font-size: 22px; 
        margin-top: 10px; 
        margin-left: 20px; 
        height: 100px; 
    }
    
    .mobile-inactive {
        display: none; 
    } 
    

    更新的javascript:

    /* Now lets make this responsive with JS */
    
    let mainNav = document.getElementById("js-menu"); 
    
    let navBarToggle = document.getElementById("js-navbar-toggle"); 
    
    navBarToggle.addEventListener("click", function () {
    
        mainNav.classList.toggle("mobile-inactive");
    
    });
    

    【讨论】:

    • 谢谢!我进行了您建议的更新,并跟踪了 html 和 css 与 JavaScript 文件的关系。奇怪的是,它似乎仍然不起作用。
    • 我的文件存储如下:桌面->网页设计->投资组合。我的 html 文件在我的投资组合文件和我的 JS 文件的副本中。我的 JS 文件也在“脚本”文件中,我的 css 在作品集的“样式”文件中。
    • 这是我在标题中的内容: 响应式设计 <link rel="stylesheet" type="text/css" href="styles/styleresponsive.css"> <script type="text/javascript" src="responsive.js"></script>kit.fontawesome.com/01c3568935.js"></script>
    • 奇怪的是,当我在代码笔上使用我编辑的代码时,它会起作用。当我在笔记本电脑上使用我编辑的代码时,它不会。我正在使用 FireFox Inspector 工具测试移动视图。为 FireFox 启用了 JavaScript。
    • 如果出现错误,很可能是文件名拼写错误或文件放错了地方。
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 2019-09-10
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2019-05-27
    相关资源
    最近更新 更多