响应式导航栏的问题

时间:2016-11-17 20:35:52

标签: javascript html css

我一直在尝试构建一个响应式导航栏。我正在使用包含<nav><img>元素的<ul>元素。我已经设置了媒体查询,以便在调整屏幕大小时,使用<li>属性隐藏一些display: none元素。单击菜单图标时会出现问题。它应该显示隐藏的菜单项,但它不会。 有人可以看看fiddle并告诉我我做错了什么吗? 提前谢谢。

更新
对不起,我还在学习绳索。如果我做错了什么而不是立刻贬低我,你可以给我指示吗?谢谢。
这是我的代码:

function myFunction() {
    var x = document.getElementById("myNav");
    if (x.className === "nav") {
        x.className += " responsive";
    } else {
        x.className = "nav";
    }
}
    
   
body {
    background-image: url("home/pexels-photo-4.jpg");
    background-repeat: no-repeat;
    background-size: cover;    
    background-attachment: fixed;
}

.header {   
    background-color: rgba(0,0,0,0.6);    
}

.logo {
    width: 150px;
    height: 110px;
    margin-left: 50px;
}

.nav {  
    float: right;
    padding-top: 50px;  
    margin-right: 50px;
}

.nav li { 
    float: left;
    padding: 0 10px;   
}

.nav li a {
    color: #fff;   
    text-decoration: none;
    font-family: "Raleway";
    font-size: 16px;  
    font-weight: 600;   
}

ul.nav li a:hover,
ul.nav li a:focus {
    background-color: transparent;  
    color:#fff;
}

ul.nav a:hover:before, 
ul.nav li a:focus:before {
    width:100%;
    background:#fff; 
}

ul.nav a:before {
    content:'';
    height:2px;
    width:0;
    position:absolute;
    top:auto;
    right:auto;
    bottom:0;
    left:50%;
    -webkit-transform:translate3d(-50%,0,0);
    transform:translate3d(-50%,0,0);
    -webkit-transition:.4s;
    transition: .4s; 
}

.nav li.icon {
    display: none;
}

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

    .nav li:not(:first-child) {
        display: none;
    }
    .nav li.icon {
        float: right;
        display: inline-block;
    }
}  

@media screen and (max-width:765px) {
    ul.nav .responsive {
        position: relative;
    }
    ul.nav .responsive li.icon {
        position: absolute;
        right: 0;
        top: 0;   
    }
    ul.nav .responsive li {   
        float: none;
        display: inline;
    }
    ul.nav .responsive li a {
        display: block;
        text-align: left;
    }
}

@media screen and (max-width: 500px) {
    .nav {
        padding-top: 20px; 
    }
    .nav li a {
        font-size: 14px; 
    }

    .logo {
        margin: 0;
        width: 110px;
        height: 70px;
    }
}
<nav class="header">
  <img class="logo" src="images/logos/marcon logo white on trans copy 2.png">        
  <ul class="nav" id="myNav">
    <li><a href="#"><span class="glyphicon glyphicon-home" aria-label="Home"></span></a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Portfolio</a></li>
    <li><a href="#">Contact</a></li>
    <li class="icon">
      <a href="#" onclick="myFunction()">&#9776;</a>
    </li>
  </ul>  
</nav>

2 个答案:

答案 0 :(得分:1)

问题出在CSS中。你写了

ul.nav .responsive li

但是由于你的函数给了带有“nav”类的ul元素的“响应”类,你需要摆脱空间来声明它是ul元素同时具有“nav”和“响应”类:

ul.nav.responsive li

答案 1 :(得分:-1)

对于初学者,您的HTML中有一个额外的结束正文标记。我会添加一个事件监听器来定位您的徽标点击,然后添加功能toggleBody,它允许您在单击徽标时打开和关闭导航。你的问题很模糊,但我明白的是,当你点击徽标时,你希望这个事件发生。

document.getElementsByClassName('logo').addEvenetListener('click', toggleBoy)
      function toggleBody() { 
        var showElements = this.querySelectorAll('.nav')[0];
             if(showElements.style.display === 'none') {
                 showElements.style.display = 'block';
             }else{
                 showElements.style.display = 'none';
             }