【问题标题】:Making navigation overlay disappear when pages clicked单击页面时使导航覆盖消失
【发布时间】:2015-07-02 13:27:44
【问题描述】:

我使用的是 CSS 导航覆盖菜单,代码如下

当您点击导航菜单并选择您要转到的页面时,叠加层会停留并且不会消失..

如果我将它链接到另一个 html 页面,它可以正常工作,但是由于我的所有页面都在一个页面上,所以我通过 href 将它链接到像 (href="#about") 这样的 div

知道单击导航页面后如何使覆盖菜单隐藏吗?

非常感谢您的帮助,谢谢


    <nav id="menu">

        <input type="checkbox" id="toggle-nav"/>
        <label id="toggle-nav-label" for="toggle-nav"></label>

        <div class="box">
    <ul>
        <li><a href="#about">About</a></li>
        <li><a href="#services">Services</a></li>
        <li><a href="#projects">Work</a></li>
        <li><a href="#contact">Contact</a></li>
    </ul>
        </div>
    </nav>



a { text-decoration: none; }
    a:hover { text-decoration: underline; }

    li { list-style: none; }


    #menu .box {
        position: fixed;
        text-align: center;
        overflow: hidden;
        z-index: -1;
        opacity: 0;
        width: 100%;
        height: 100%;
        left: 0px;
        top: 0px;
        background: black;
        -webkit-transition: all 0.3s ease-in-out; 
        -moz-transition: all 0.3s ease-in-out; 
        -o-transition: all 0.3s ease-in-out; 
        transition: all 0.3s ease-in-out;
    }

    #menu ul {
        position: relative;
        top: 20%;
        -webkit-transform: scale(2);
        -moz-transform: scale(2);
        -ms-transform: scale(2);
        transform: scale(2);
        -webkit-transition: all 0.3s ease-in-out; 
        -moz-transition: all 0.3s ease-in-out; 
        -o-transition: all 0.3s ease-in-out; 
        transition: all 0.3s ease-in-out;
    }

    #menu li { 
        margin: 60px;
    }

    #menu li a {
        border-radius: 3px;
        padding: 15px;
        border: 1px solid transparent;
        text-decoration: none;
        font-family: 'Montserrat', sans-serif;
        font-size: 18px;
        color: #fff;
        -webkit-transition: all 0.2s ease-in-out; 
        -moz-transition: all 0.2s ease-in-out; 
        -o-transition: all 0.2s ease-in-out; 
        transition: all 0.2s ease-in-out;
    }

    #menu li a:hover { border-color: #fff; }

    #menu li a i { 
        margin-right: 5px; 
        font-size: 24px;
    }

    #toggle-nav-label {
        color: black;
        text-align: center;
        line-height: 30px;
        font-size: 30px;
        display: block;
        cursor: pointer;
        position: relative;
        z-index: 500;
        width: 30px;
        height: 30px;
        border-radius: 5px;
    }

    #toggle-nav { display: none; }

    #toggle-nav:checked ~ .box { 
        opacity: 1;
        z-index: 400;
    }

    #toggle-nav:checked ~ .box ul {
        -webkit-transform: scale(1);
        -moz-transform: scale(1);
        -ms-transform: scale(1);
        transform: scale(1);
    }

    #toggle-nav:checked ~ #toggle-nav-label { 
        color: white;
        position: fixed;
    }

【问题讨论】:

  • 小改进?抱歉,当您阅读该问题时,我正在编辑该问题,因为我没有将任何代码放在那里
  • 对不起,这是对我的编辑的评论..
  • 您可能想添加一个演示。或者在标签中添加一些文本或图标,以便我们在尝试运行代码时可以看到一些东西。
  • codepen 那是那里的演示
  • 感谢您的演示。我已经更新了我的答案和 codepen 以反映您的需求。

标签: html css drop-down-menu overlay nav


【解决方案1】:

最简单的答案是使用 javascript 简单地取消选中复选框......但这有点违背了复选框黑客的目的,不是吗。除了让用户再次单击标签以关闭菜单之外,我想不出其他方法。有点毁了你想要的效果。如果没有更好的办法,这里有一个快速的 javascript 解决方案:

window.onload = function() {

 // Add a listener for any clicks on the menu
 document.getElementById('menu').addEventListener('click', function(edit) {
    var targetName = event.target.tagName;

    // Make sure that the element being clicked is a link or an icon
    if (targetName !== 'A' && targetName !== 'I') {
      return;
    }
    // Uncheck the checkbox
    document.getElementById('toggle-nav').checked = false;
  });
}

还有一个codepen。如果您想允许用户通过单击任何位置来关闭菜单,您可以将&amp;&amp; targetName !== 'DIV' 添加到 if 语句中。希望它有所帮助,或者有人想出更好的方法,因为就我个人而言,我很想找到一种仅使用 CSS 的方法。


编辑

修复了使用 targetName 的 JS 代码。添加了对图标的支持。修复了 codepen 演示以匹配 OP 演示。


编辑 2

发现跨浏览器错误。通过在函数参数中包含事件来修复 Firefox。

【讨论】:

  • 如果我将所有页面放在单独的 html 页面上而不是在同一页面上的不同 div 上会更容易.. 尝试了该代码并使用它,但在涉及到时我并不擅长爪哇:/
  • 我的错,我提供了错误的代码。我正在从我最近的一个项目中编辑它(主要是简化)并删除了一些我没有修复的东西。我更新了它,它现在应该可以正常工作了。
  • 你先生..天才!我花了一整天的时间试图做到这一点,你已经完美地解决了我的问题
  • 我做了一些调整,并通过单击codepen demo 的任意选项添加了关闭菜单。很高兴它对你有用。尽管如此,找到一个 CSS 版本还是很棒的。
  • 意识到我没有测试跨浏览器支持(它是 javascript,我为什么要担心这个?)。很高兴我测试了。修复了 Firefox 的代码。显然,默认情况下,Firefox 不会传入事件对象,但其他主要浏览器(Chrome、IE11、Safari 和 Opera……是的,我测试过 Opera)。很高兴知道这一点,因为我一直在使用此代码并且会完全终止对 Firefox 的支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多