为什么我的 UL sub-menu 以它的祖父母为背景?

Why is my UL sub-menu taking the background of it's grandparent?

我正在制作一个菜单,在小屏幕上我使用渐变作为背景。此 sub-menu 有 4 个级别,每个级别都有自己的颜色背景。但出于某种原因,我的第 4 级 sub-menu 正在采用第 2 级 sub-menu 的背景颜色(它是 grandparent),而不是它应该的颜色,即纯白色。太奇怪了,这个问题跳过了第三个sub-menu。我已经尝试了尽可能多的 work-arounds,甚至将 !important 添加到第 4 级 css 也没有解决它。下面是 jsFiddle 和代码。我错过了什么吗?

这是jsFiddle

CSS(适用于小屏幕)

   #navbar {
                background-color: #29568F !important;
        }

                .nav-tabs {
                display: inline-block;
                position: relative;
                width: 98.5%;
                background-color: #29568F;
                margin: 0px 0px;
                padding: 0px;
                list-style-type: none;
                color: white;
                text-decoration: none;
                text-shadow: 2px 2px #000000;
                font: 18px arial, verdana, sans-serif;
                border: 3px solid #29568F;
                }

                #menu-icon {
                    width: 200px;
                    display: block;
                    float: left;
                    text-align: left;
                    border: 0px;
                    border-bottom: 0px !important;
                }

                .nav-tabs > li:first-child span { /* This is #menu-icon */
                    border: 0px !important;
                    background: #29568F !important;
                }

                .menu-item {
                    display: none;
                }


                .nav-tabs li {
                    width: 100%;;
                    border-right: 0px;
                    clear: both;
                    list-style-type: none;
                }

                .nav-tabs li span {
                    display: block;
                    border: 0px !important;
                    padding: 10px 2.5% !important;
                    width: 95% !important;
                    position: relative !important;
                    top: 0px;
                    left: 0px;
                }

                .nav-tabs li span {
                    text-align: left;
                    border-bottom: 1px solid lightgrey !important;
                    background: linear-gradient(#29568F, #3399CC);
                }

                .nav-tabs > li > span:hover,
                .nav-tabs > li .open {
                    background: linear-gradient(#3399CC, #29568F);
                }

                /* -- Arrows -- */

                .nav-tabs .arrow-open {
                    content: url("/images/arrow-up.png");
                }
                .nav-tabs li .arrow-closed{
                    content: url("/images/arrow-down.png") !important;
                }

                /* --- 2nd level submenu -- */

                .sub-menu {
                    position: relative;
                    top: 0px;
                    left: 0px;
                    width: 100%;
                    clear: both;
                }

                .sub-menu > li {
                    position: relative;
                    left: 0px;
                }

                .sub-menu > li span {
                    left: 0px;
                    text-align: center;
                    background: linear-gradient(#99EEFF, #3399CC);
                }

                .sub-menu > li > span:hover,
                .sub-menu > li .open {
                    background: linear-gradient(#3399CC, #99EEFF);
                }

                /* -- 3rd level submenu -- */

                .drop-menu {
                    display: none;
                    clear: both;
                    width: 100%;
                    position: relative;
                    top: 0px;
                    left: 0px;
                }

                .drop-menu li span {
                    border: 0px;
                }

                .drop-menu > li > span {
                    border: 0px !important;
                    left: 0px;
                    text-align: left;
                    background: linear-gradient(#C9EAF3, #ffffff);
                }

                .drop-menu > li > span:hover,
                .drop-menu > li .open {
                    background: linear-gradient(#ffffff, #c9EAF3);
                }

                /* -- 4th level submenu -- */

                .slide-menu {
                    display: none;
                    background: #ffffff !important;
                    border: 0px;
                    width: 100%;
                    clear: both;
                    position: relative;
                    top: 0px;
                    left: 0px;
                    z-index: 300px;
                }

                .slide-menu li {
                    position: relative;
                    left: 0px !important;
                    width: 98%;
                    border: 0px !important;
                    text-align: center;
                }

                .slide-menu li span {
                    display: block !important;
                    position: relative;
                    left: 0px;
                    width: 100%;
                    border: 0px !important;
                }

HTML(示例代码查看结构)

<div id="navbar">
    <ul class="nav-tabs">
        <li id="menu-icon"><span><img src="/images/menu-icon.png">Menu</span></li>
        <li class="menu-item"><span>Dogs <div class="arrow-closed"></div></span>
            <ul class="sub-menu">
                <li><span>Meet the Breeds<div class="arrow-closed"></div></span>
                    <ul class="drop-menu">
                        <li><span>Sort A - Z <div class="arrow-closed"></div></span>
                            <ul class="slide-menu">
                                <li>Breeds A - F</li>
                                <li>Breeds G - L</li>
                                <li>Breeds M - R</li>
                                <li>Breeds S - Z</li>
                            </ul> <!-- close slide-menu -->
                        </li> <!-- close Drop-menu item -->
                   </ul> <!-- close drop-menu -->
               </li> <!-- close sub-menu item -->
           </ul> <!-- close sub-menu -->
       </li> <!-- close main menu item -->
  </ul> <!-- close main-menu -->
</div>

注意!

在为这个问题创建 jsFiddle 时,我意识到当我只包含小屏幕的 css 时,第 4 级菜单的背景应该是白色的。直到我包含了整个 CSS 代码,它才停止工作。这仍然没有意义,因为第 4 级背景在正常的大屏幕状态下工作。我不明白为什么要这样做,所以如果有人愿意为我梳理这个问题,我将非常感激。

更新!

我一直在搞乱 jsFiddle,我删除了所有 large-screen CSS 来尝试 de-bug 它。第四级菜单有一个白色的背景。行。所以我把第一级 CSS 加回去了,第四级背景搞砸了。去掉了,把2级CSS加进去,4级背景又乱了。但是,如果我为大屏幕添加第 3 或第 4 级 CSS,则第 4 级背景根本不会受到影响。所以问题出在第 1 级和第 2 级 CSS 的某个地方。但我不明白为什么。我没有任何继承它的 parent 的 css,代码的 none 根本不需要任何渐变。太奇怪了。

花了几分钟查看您的代码,我想我找到了问题所在。在您的第二个和第三个子菜单中,您将背景应用于 span 标签。但是在您的第 4 个菜单 ( .slidemenu ) 上,您将它直接应用于 ul。

删除背景:

Line: 416
.slide-menu

将背景添加到:

Line: 432
.slide-menu li

工作fiddle:jsfiddle