【问题标题】:Mobile Nav Javascript Not Working移动导航 Javascript 不起作用
【发布时间】:2018-01-11 09:54:13
【问题描述】:

我在这里有点初学者,在 FreeCodeCamp 上做练习。在从事 Portfolio Site 项目时,我尝试通过 ws3schools 的一些代码向网站添加一个 Javascript 响应式移动导航。

导航显示正常,但单击它没有任何反应。这是我的 CodePen,我做了什么阻止它在点击时弹出导航链接? https://codepen.io/colum1225/pen/xLwMJG

这是导航条码:

<!-- HTML -->

<div class="topnav" id="myTopnav">
  <h3>Brandon Ray</h3>
  <a href="#contact">Contact</a>
  <a href="#about">About</a>
  <a href="#portfolio">Portfolio</a>
  <a href="javascript:void(0);" class="icon" onclick="myFunction()">&#9776;</a>
</div>

<!-- CSS -->

.topnav {
  background-color: #2C8597;
  overflow: hidden;
  width: 100%;
  position: fixed;
  z-index: 9;
}

.topnav h3 {
  float: left;
  color: #f2f2f2;
  font-family: sans-serif;
  font-size: 1.5em;
  padding-left: 30px;
  letter-spacing: .04em;
  font-weight: 500;
}

.topnav a {
  float: right;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 27px 30px 27px 30px;
  text-decoration: none;
  font-size: 1.25em;
  font-family: sans-serif;
}

.topnav a:hover {
  background-color: #ddd;
  color: black;
  transition: .5s;
}

.topnav a:active {
  background-color: #ddd;
  color: black;
}

.topnav .icon {
  display: none;
  font-size: 1.3em;
}


@media screen and (max-width: 640px) {
  .topnav a {display: none;}
  .topnav .icon {
    float: right;
    display: block;
    color: white;
    margin-right: 30px;
  }
}

@media screen and (max-width: 640px) {
  topnav.responsive {position: relative;}
  topnav.responsive a.icon {
    position: absolute;
    right: 0;
    top: 0;
  }

  topnav.responsive a {
    float: none;
    display: block;
    text-align: right;
  }
}

<!-- JS -->

function myFunction() {
  var x = document.getElementById("myTopnav");
    if (x.className === "topnav") {
        x.className += " responsive";
    } else {
        x.className = "topnav";
    }

}

【问题讨论】:

    标签: javascript css responsive nav


    【解决方案1】:

    到目前为止做得很好。

    您的 topnav 类选择器前面缺少一个点,用于您的 .responsive 规则。请参阅下面的固定 CSS,

    @media screen and (max-width: 640px) {
      .topnav.responsive {position: relative;}
      .topnav.responsive a.icon {
        position: absolute;
        right: 0;
        top: 0;
      }
    
      .topnav.responsive a {
        float: none;
        display: block;
        text-align: right;
      }
    }
    

    修复重叠

    要修复第一个移动导航下拉菜单项与菜单图标重叠的问题,请尝试将margin-top 添加到第一个菜单项。一个好的边距大小是菜单的高度 (82px)。

    这条规则如下所示,

      .topnav.responsive a:first-of-type {
        margin-top: 82px;
      }
    

    将此规则包含在您的其他 .topnav.responsive 规则中(第 ~77 行)。

    【讨论】:

    • 知道是这样的。非常感谢!
    • 很高兴为您提供帮助。如果您觉得我的回答直接解决了您原帖中的问题,请考虑将其标记为已接受的答案,以便其他面临相同问题的人可以快速参考答案。
    【解决方案2】:

    在您的 css 中,您需要在 topnav 之前添加一个句点:

    @media screen and (max-width: 640px) {
        .topnav.responsive {position: relative;}
        .topnav.responsive a.icon {
            position: absolute;
            right: 0;
            top: 0;
        }
    
        .topnav.responsive a {
            float: none;
            display: block;
            text-align: right;
        }
    }
    

    或者您可以完全删除 topnav 部分,只保留 responsive 部分。

    定位修正:

    将图标位置改回相对位置并将图标放在导航顶部:

    HTML

    <div class="topnav" id="myTopnav">
          <h3>Brandon Ray</h3>
          <a href="javascript:void(0);" class="icon" onclick="myFunction()">&#9776;</a>
          <a href="#contact">Contact</a>
          <a href="#about">About</a>
          <a href="#portfolio">Portfolio</a>  
        </div>
    

    CSS

    .topnav.responsive a.icon {
        position: relative;
        right: 0;
        top: 0;
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2018-09-02
      • 2020-08-22
      • 2013-08-21
      • 1970-01-01
      • 2015-07-01
      • 2015-10-27
      相关资源
      最近更新 更多