当前位置: 首页 > 知识库问答 >
问题:

非画布导航:如何使一个二级菜单滑到第一级菜单的顶部而不覆盖正文文本?

鲁城
2023-03-14

我的任务是使一个两级离帆布导航菜单,有主导航菜单。每个“第1级”导航项目都有一个包含内容的子导航飞出。虽然我已经解决了大部分问题,但有一个要求让我感到沮丧。该要求是能够使副导航从右侧飞出“滑入”。

下面是我在JS Fiddle中的代码:http://jsfidle.net/tangst/cca42qd6/
或者在代码后面运行嵌入的代码段。

注意:您的浏览器视区必须小于979px,因为此菜单只能在较小的视区看到。

null

$(document).ready(function () {
    $(".masthead-nav-burgericon").on("click", function (event) {
        $(".masthead-nav-burgericon").toggleClass("open");
        $("body").toggleClass("is-offcanvas");
        $(".masthead-nav-list").addClass("is-visible");

        event.preventDefault();
    });

    $(".masthead-channel-link").on("click", function (event) {
        var $mastheadFlyout = $(this).parent(".masthead-nav-channel").children(".masthead-flyout"),
            $mastheadNav = $(".masthead-nav-list");

        if ($mastheadFlyout.hasClass("is-visible")) {
            $mastheadFlyout.removeClass("is-visible");
            $mastheadNav.removeClass("is-covered");
        } else {
            $mastheadFlyout.addClass("is-visible");
            $mastheadNav.addClass("is-covered");
        }

        event.preventDefault();
    });
});
/* Micro clearfix */
 .cf:before, .cf:after {
    content:" ";
    display: table;
}
.cf:after {
    clear: both;
}
.masthead-wrapper {
    position: relative;
}
.masthead-wrapper * {
    box-sizing: border-box;
}
#masthead .masthead-wrapper ul, .masthead-wrapper ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
}
@media only screen and (max-width: 979px) {
    /* BEGIN - Off-canvas styles */
    body {
        left: 0;
        -webkit-transform: translateX(0);
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        transform: translateX(0);
        -webkit-transition: -webkit-transform 500ms ease;
        -moz-transition: -moz-transform 500ms ease;
        transition: transform 500ms ease;
    }
    body.is-offcanvas {
        left: 0;
        overflow-x: hidden;
        -webkit-transform: translateX(70%);
        -moz-transform: translateX(70%);
        -ms-transform: translateX(70%);
        transform: translateX(70%);
        -webkit-transition: -webkit-transform 500ms ease;
        -moz-transition: -moz-transform 500ms ease;
        transition: transform 500ms ease;
    }
    .masthead-nav-list {
        border: 1px solid #ccc;
        position: absolute;
        left: -9999px;
    }
    .masthead-nav-list.is-visible {
        height: 500px;
        left: -250px;
        top: 0;
        width: 250px;
    }
    .masthead-nav-list.is-covered {
    }
    /* END - Off-canvas styles */
    .masthead-flyout {
        border: 1px solid #f00;
        background-color: #ffffff;
        height: 1000px;
        left: 100%;
        position: absolute;
        top: 0;
        -webkit-transform: translateX(0);
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        transform: translateX(0);
        -webkit-transition: -webkit-transform 500ms ease;
        -moz-transition: -moz-transform 500ms ease;
        transition: transform 500ms ease;
        width: 200px;
    }
    .masthead-flyout.is-visible {
        overflow-x: hidden;
        overflow-y: auto;
        -webkit-transform: translateX(-100%);
        -moz-transform: translateX(-100%);
        -ms-transform: translateX(-100%);
        transform: translateX(-100%);
        -webkit-transition: -webkit-transform 500ms ease;
        -moz-transition: -moz-transform 500ms ease;
        transition: transform 500ms ease;
    }
    /* This does not flex because it's a small, fixed icon */
    .masthead-nav-burgericon-wrapper {
        width: 50px;
    }
    .masthead-nav-burgericon {
        width: 50px;
        height: 30px;
        position: relative;
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        transform: rotate(0deg);
        -webkit-transition: .5s ease-in-out;
        -moz-transition: .5s ease-in-out;
        transition: .5s ease-in-out;
        cursor: pointer;
    }
    .masthead-nav-burgericon span {
        background: #000000;
        border-radius: 2px;
        height: 5px;
        left: 5px;
        opacity: 1;
        position: absolute;
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        transform: rotate(0deg);
        -webkit-transition: .25s ease-in-out;
        -moz-transition: .25s ease-in-out;
        transition: .25s ease-in-out;
        width: 25px;
    }
    .masthead-nav-burgericon span:nth-child(1) {
        top: 2px;
    }
    .masthead-nav-burgericon span:nth-child(2) {
        top: 12px;
    }
    .masthead-nav-burgericon span:nth-child(3) {
        top: 22px;
    }
    .masthead-nav-mobile-sitelogo-wrapper .masthead-nav-burgericon span:nth-child(1) {
        top: 12px;
        -webkit-transform: rotate(135deg);
        -moz-transform: rotate(135deg);
        -o-transform: rotate(135deg);
        transform: rotate(135deg);
    }
    .masthead-nav-mobile-sitelogo-wrapper .masthead-nav-burgericon span:nth-child(2) {
        top: 12px;
        -webkit-transform: rotate(-135deg);
        -moz-transform: rotate(-135deg);
        -o-transform: rotate(-135deg);
        transform: rotate(-135deg);
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<body>
    <div>
        <header id="masthead" class="masthead-wrapper">
            <nav class="masthead-nav">
                <div class="masthead-nav-burgericon-wrapper">
                    <div class="masthead-nav-burgericon">	<span></span>
	<span></span>
	<span></span>

                    </div>
                </div>
                <ul class="masthead-nav-list">
                    <li class="masthead-nav-mobile-sitelogo-wrapper">
                        <div class="masthead-nav-closeicon">
                            <div class="masthead-nav-burgericon">	<span></span>
	<span></span>

                            </div>
                        </div>
                    </li>
                    <li class="masthead-nav-channel masthead-channel-az">	<a href="#" class="masthead-channel-link">Level 1 Nav</a>

                        <div class="masthead-flyout masthead-flyout-nav">
                            <div class="masthead-flyout-col">
                                <div class="masthead-conditions-wrapper cf">
                                    <div class="masthead-conditions-header-wrapper cf">Level 1 Sub-Nav (Contents): This should be hidden until you click the "Nav" link. This sub-nav should not be covering the main content (Lorem Ipsum) below.</div>
                                </div>
                            </div>
                        </div>
                    </li>
                </ul>
            </nav>
        </header>
    </div>
    <div>
        <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
    </div>
</body>

null

点击“Hamburger”图标,“LOREM IPSUM”正文文本将向右移动(这是所希望的行为)。然后,你会看到带有灰色边框的“1级导航”。此外,您还会看到带有红色边框的“Level 1 Sub-Nav”div。“Level 1 sub-nav”飞出覆盖了“LOREM IPSUM”正文。那是不正确的行为。这个“1级副导航”的飞出不应该完全掩盖正文。应该是隐形的。

当您单击“Level 1 NAV”链接时,您将看到使用CSS transformTranslateX()属性将子NAV弹出滑到左侧。在正确的情况下,子导航从正文的左边缘边界滑入;子导航一开始并不掩盖正文。

我能够使此工作的唯一方法是在.masthead-flyout类上应用display:none,然后在用户单击“Level 1 sub-nav”链接时对其应用display:block,但这会否定translatex()动画。

那么,我如何保持子导航不掩盖正文文本,并创建子导航滑入效果呢?

共有1个答案

南宫森
2023-03-14

.masthead-flyout呈现在其父级边界之外,您可以将overflow:hidden添加到父级。我认为这是最小的改变,以达到效果。

    .masthead-nav-list {
        border: 1px solid #ccc;
        position: absolute;
        left: -9999px;
        overflow:hidden;/*add this*/
    }
 类似资料:
  • 我对编码还不熟悉,希望有人能帮助我理解哪里出了问题。我在从导航栏项目获取模式卡弹出窗口以触发时遇到问题。到目前为止,我所尝试的一切都会触发顶部菜单项的模态。下拉列表中的每个导航栏项都有一个指向模式卡的链接<提前感谢您的帮助!!

  • 本文向大家介绍JavaScript实现简单的二级导航菜单实例,包括了JavaScript实现简单的二级导航菜单实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript实现简单的二级导航菜单的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 导航设置 (店铺导航能够有效帮助粉丝跳转到各个关键页面,是整个店铺的“指南针”) 1.导航列表显示项包括导航名称、链接地址、所属类型、是否显示、创建时间、排序、单个导航的修改和删除操作。其中,点击每个导航名称,会在浏览器新标签页中打开前台对应的页面。点击修改,可以设置的信息包括:导航名称、排序号、链接地址、是否新窗口打开、是否显示、导航图标。** 2.添加导航栏所设置的信息包括:导航名称、排序号、

  • 我们在学校的一个项目上出了点问题。我们正在尝试做一个电子商务网站和前端,我们想尝试bootstrap 4。但我们似乎不能去任何低于2级,任何建议都是欢迎的。我试着研究了不同的问题,但没有一个解决方案是有效的。 null null

  • 本文向大家介绍JS 实现导航菜单中的二级下拉菜单的几种方式,包括了JS 实现导航菜单中的二级下拉菜单的几种方式的使用技巧和注意事项,需要的朋友参考一下 最近整理了, JS 实现导航菜单中的二级下拉菜单的三种方式,便于项目中应用。  如何实现导航菜单栏中的二级下拉菜单?   我们在淘宝、搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片。 但是如何实现类似的图片呢?实际上,我们有至少

  • 本文向大家介绍一个炫酷的Bootstrap导航菜单,包括了一个炫酷的Bootstrap导航菜单的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Bootstrap导航菜单的具体代码,供大家参考,具体内容如下 效果图: 点击菜单的箭头有点小问题,后面改,不是很影响。 CSS代码: 如果大家还想深入学习,可以点击这里进行学习,再为大家附3个精彩的专题: Bootstrap学习教程 Boot