需要从w3school示例的响应顶级菜单(汉堡包)解释

时间:2018-06-15 02:16:46

标签: javascript html css responsive

我正在研究如何使用vanilla JavaScript创建响应式(汉堡包)菜单栏。这是来自W3Schools的代码,我通常理解这个概念,因为它们提供了解释。然而,这个例子抛弃了我,我有3个部分,我没有得到它。我很感激澄清。

  1. 在CSS中,为什么.topnav.responsive之间没有空格?没有响应应该追随。topnav?当我在两个类之间放置空格时,结果显示不同。同样适用于a.icon。为什么a和.icon之间没有空格?

  2. 我在Stack Overflow上读到了这个含义javascript:void(0);,但我仍然没有得到它,因为它的含义似乎是普遍的。

  3. x.className += " responsive";是否正在创建一个名为responsive的新类?

  4. 非常感谢你。

    
    
    function myFunction() {
        var x = document.getElementById("myTopnav");
        if (x.className === "topnav") {
            x.className += " responsive";
        } else {
            x.className = "topnav";
        }
    }
    
    body {
      margin: 0;
      font-family: Arial, Helvetica, sans-serif;
    }
    
    .topnav {
      overflow: hidden;
      background-color: #333;
    }
    
    .topnav a {
      float: left;
      display: block;
      color: #f2f2f2;
      text-align: center;
      padding: 14px 16px;
      text-decoration: none;
      font-size: 17px;
    }
    
    .topnav a:hover {
      background-color: #ddd;
      color: black;
    }
    
    .active {
      background-color: #4CAF50;
      color: white;
    }
    
    .topnav .icon {
      display: none;
    }
    
    @media screen and (max-width: 600px) {
      .topnav a {
        display: none;
      }
      .topnav a.icon {
        float: right;
        display: block;
      }
    }
    
    @media screen and (max-width: 600px) {
      .topnav.responsive {
        position: relative;
      }
      .topnav.responsive .icon {
        position: absolute;
        right: 0;
        top: 0;
      }
      .topnav.responsive a {
        float: none;
        display: block;
        text-align: left;
      }
    }
    
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <div class="topnav" id="myTopnav">
      <a href="#home" class="active">Home</a>
      <a href="#news">News</a>
      <a href="#contact">Contact</a>
      <a href="#about">About</a>
      <a href="javascript:void(0);" class="icon" onclick="myFunction()">
        <i class="fa fa-bars"></i>
      </a>
    </div>
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:2)

好的,只是在这里回答你的问题:

  1. .topnav.responsive之间没有空格意味着它将选择具有两个类名的元素。如果在中间添加空格,则会选择具有responsive类名称的所有(如果有)元素,其中父项(或祖父项,或祖父项,或祖父项)具有{{1}类名。
  2. 基本上,topnav表示&#34;什么都不做&#34;。 javascript:void(0);部分表示以下部分以javascript编码,javascript:是一个不执行任何操作的语句,并在javascript中返回undefined。
  3. void(0)x.className += " responsive";类名称添加到x元素。如果responsive的类名为x,则在此行之后,它将具有两个类名,与topnav CSS选择器匹配。
  4. 希望这能帮到你!