【问题标题】:Horizontal navigation to vertical responsive navigation, responsive navigation top level has too much height and last next level navigation disappears水平导航到垂直响应式导航,响应式导航顶层高度过高,最后一个下一级导航消失
【发布时间】:2016-02-03 18:57:02
【问题描述】:

我已将水平导航转换为垂直响应式导航,但是当您通过单击“菜单”打开响应式导航顶层 (ul li) 时,ul li 的高度过高(请参阅顶层下方的灰色区域)并且下一层的最后一个菜单点消失 (菜单 1 应该有 7 个子级菜单点 ul li ul li a's,菜单 2 应该有 5,菜单 3 应该有 3)。

我发现这与桌面版本中的以下 CSS 有关,但不知道如何解决该问题:

            ul.topNav li ul {
            display: none;
            **position: absolute;
            top: 2.3rem;**
            background-color: rgb(245, 245, 245);
        }

尝试了很多,但没有成功。您可以在下面找到所有代码和使其运行的链接并查看结果。不要忘记在 320 到 979 像素之间调整窗口大小,并可能重新加载以确保它正常工作。

function init() {

                var ww = document.body.clientWidth;
                var mobileLayout = ww <= 1024;

                if (mobileLayout) {
                    /* show topNav */
                    $("#menuIcon").click(function () {
                        $("#topNavResp").fadeToggle(100);
                        });
                        /* show topNav second level and close all others */
                        $('.topNavLi').on('click', function (event) {
                            event.preventDefault();
                            $(this).next('ul').slideToggle();

                            $(this).parent().siblings().children().next().slideUp();
                            return false;
                        });

                    } else {
                        alert('please reduce/shrink your window and reload');
                    }
                }
            html {
                font-size: 15px;
                background-color: rgba(227, 227, 227, 1);
            }
            ol, ul, li {
                list-style-type: none;
            }
            a {
                text-decoration: none;
            }

            /* ------------------- TOP NAV BAR ------------------------------------------ */

            #headerNavBar {
                width: 100%;
                height: 2.4rem;
                line-height: 2.4rem;
                display: block;
                background-color: #D3D3D3;
                *zoom: 1;
            }

            ul.topNav {
                float: right;
                width: 75%;
                height: 2.3rem;
                position: relative;
                z-index: 10;
            }
            ul.topNav > li {
                line-height: 2.3rem;
                float: left;
                width: auto;
                position: relative;
            }

            ul.topNav li a.topNavLi {
                height: 2.3rem;
                float: left;
                padding: 0 10.3%;
            }
            ul.topNav li a:hover.topNavLi,
            ul.topNav li:active a.topNavLi,
            ul.topNav li:hover a.topNavLi {
                    border-bottom: 0.13rem solid #e23427;
                    color: #e23427;
            }

            /* ------------------- TOP NAV 2nd LEVEL------------------------------------- */

            ul.topNav li ul {
                display: none;
                position: absolute;
                top: 2.3rem;
                background-color: rgb(245, 245, 245);
            }
            ul.topNav li ul li {
                float: none;
                display: block;
            }
            ul.topNav li ul li a {
                display: block;
                color: #231f20;
            }
            ul.topNav li ul li:hover,
            ul.topNav li ul li:active {
                    background-color: rgb(227, 33, 33);
            }
            ul.topNav li ul li:hover a,
            ul.topNav li ul li:active a {
                    color: #fff;
            }
            /**************************************************************************** */
            /**************************************************************************** */
            @media only screen and (min-width: 320px) and (max-width: 979px)
            {
                body {
                    width: 95%;
                    margin: 0 auto;
                }
                #wrapper {
                    width: 100%;
                }    
                #pageHead {
                    width: 100%;
                }

                /* ------------------- NAVI Responsive  --------------------------------- */
                #headerNavBar {
                    height: 2.9rem;
                    line-height: 2.9rem;
                    position: relative;
                }

                #menuIcon {
                    display: block;
                    position: absolute;
                    top: 0;
                    right: 0;
                    padding: 0.3rem 1rem 0 0;
                }         
                ul.topNav {
                    display: none;
                    float: none;
                    width: 100%;
                    position: absolute;
                    top: 2.9rem;
                }
                .topNav > li {
                    width: 100% !important;
                    background-color: #D3D3D3;
                    display: block;
                    position: static;
                    border-bottom: 1px solid #FFF;
                }
                ul#topNavResp.topNav li a.topNavLi,
                ul#topNavResp.topNav li ul li a {
                    width: 100%;
                }
                ul.topNav li a:hover.topNavLi,
                ul.topNav li:active a.topNavLi,
                ul.topNav li:hover a.topNavLi {
                border: none;
                }
            /* ------------------- TOP NAV Responsive 2nd LEVEL ------------------------- */
                ul.topNav li ul {
                    display: none;
                    width: 100%;
                    position: static;
                    padding-left: 10.3%;
                    background-color: rgb(245, 245, 245);
                }
                ul.topNav li ul li {
                    width: 100%;
                }
            }
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>
    <body onload="init();">
        <div id="wrapper">
            <div id="pageHead">

                <nav id="headerNavBar">                 

                    <a href="#" id="menuIcon">MENU</a>
                 

                    <ul class="topNav" id="topNavResp">
                        <li>
                            <a href="#" class="topNavLi">Menu 1</a>
                            <ul>
                                <li><a href="#">11111</a></li>
                                <li><a href="#">22222</a></li>
                                <li><a href="#">33333</a></li>
                                <li><a href="#">44444</a></li>
                                <li><a href="#">55555</a></li>
                                <li><a href="#">66666</a></li>
                                <li><a href="#">77777</a></li>
                            </ul>
                        </li> 
                        <li>
                            <a href="#" class="topNavLi">Menu 2</a>
                            <ul>
                                <li><a href="#">11111</a></li>
                                <li><a href="#">22222</a></li>
                                <li><a href="#">33333</a></li>
                                <li><a href="#">44444</a></li>
                                <li><a href="#">55555</a></li>
                            </ul>
                        </li> 
                        <li>
                            <a href="#" class="topNavLi">Menu 3</a>
                            <ul>
                                <li><a href="#">11111</a></li>
                                <li><a href="#">22222</a></li>
                                <li><a href="#">33333</a></li>
                            </ul>
                        </li>

                    </ul>

                </nav><!-- end topNav -->
            </div>
 
        </div><!-- end wrapper -->

    </body>
</html>

【问题讨论】:

    标签: css navigation


    【解决方案1】:

    改变规则:

    @media only screen and (max-width: 979px) and (min-width: 320px){ ul.topNav li ul { ... position: inherit; } }

    收件人:

    @media only screen and (max-width: 979px) and (min-width: 320px){ ul.topNav li ul { ... position: static; } }

    【讨论】:

    • 你好道格拉斯! :-) 感谢您的提示!它稍微解决了这个问题。我添加了更多颜色(如原始颜色)以显示我们现在遇到的问题:现在第一级似乎几乎是正确的 - 当“活动”时它仍然“失去”背景颜色 - 但第一个子级菜单条目太高并且覆盖/覆盖了第一级导航条目。
    • 解决了一个问题:第一个子级菜单条目现在太高,覆盖/覆盖了第一级导航条目。我添加了以下内容: ul.topNav li ul li { /*new*/ height: auto; /*新*/ 溢出:隐藏;但是我怎样才能保持第一级菜单项的背景颜色呢?
    • 您好,第一个问题用float: none解决了。 ul#topNavResp.topNav li a.topNavLi,ul#topNavResp.topNav li ul li a {float: none}。但是,要在没有 :hover 的情况下保持背景,有必要使用诸如输入单选或复选框之类的东西(没有 JS)。见:codepen.io/CesarGabriel/pen/tLDwH
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多