【问题标题】:CSS3 Navigation submenu is not inheriting its classCSS3 导航子菜单未继承其类
【发布时间】:2014-09-05 16:15:12
【问题描述】:

我一直在使用 CSS3 试图真正理解它,但我无法让子菜单导航的行为正确。请参阅http://jsfiddle.net/jllcpp04/9Jpd6/7/ 获取工作示例。子菜单上仍然有项目符号,并且没有弹出到右侧。这是动态菜单的一部分,其宽度将根据将出现的办公室(基于用户配置文件)而变化。我不希望为 div 位置设置顶部/右侧/左侧/底部。我也无法弄清楚为什么 derivnav 没有覆盖嵌套的子菜单。

我的 HTML 代码:

 <div class="main_nav">
        <ul class="nav">
            <li><a href="#">Home</a>
            </li>
            <li>
                <div class="submenu"><a href="#" class="drop">Office</a>

                    <div class="subnav">
                         <h3>Near You</h3>

                        <ul>
                            <li>
                                <div class="deriv"><a href="#" class="dropr">New York</a>

                                    <div class="derivnav">
                                        <ul>
                                            <li><a href="#">Upper West Side</a>
                                            </li>
                                            <li><a href="#">Upper East Side</a>
                                            </li>
                                            <li><a href="#">Lower West Side</a>
                                            </li>
                                            <li><a href="#">Wallstreet</a>
                                            </li>
                                        </ul>
                                    </div>
                                </div>
                            </li>
                        </ul>
                         <h3>Not Near You</h3>

                        <ul>
                            <li><a href="#">chicago</a>
                            </li>
                            <li><a href="#">philadelphia</a>
                            </li>
                            <li><a href="#">san francisco</a>
                            </li>
                        </ul>
                    </div>
                </div>
            </li>
        </ul>

组件 CSS:

@charset"utf-8";

/* CSS Document */
 .main_nav {
    width:56%;
    text-align:center;
    float:left;
    display:inline-block;
}
.nav {
    list-style:none;
    height:43px;
    white-space:nowrap;
    margin: 0px auto 10px auto;
    min-width:775px;
    text-align:left;
}
.nav h3 {
    font-size:14px;
    margin:7px 0 14px 4px;
    padding-bottom:7px;
    border-bottom:1px solid #888888;
}
.nav h4 {
    font-size:12px;
    margin:7px 0 14px 4px;
    padding-bottom:7px;
    border-bottom:1px solid #888888;
}
.nav > li {
    border:none;
    text-transform:uppercase;
    float:left;
    position:relative;
    margin:5px 3px 5px 2px;
    padding:auto;
}
.nav li {
    font-family:Arial, Helvetica, sans-serif;
    font-size:14px;
    color: #333333;
    outline:0;
    text-decoration:none;
    padding-left:10px;
}
.nav li:hover > a, .nav li:hover > p {
    color:#cccc66;
}
.nav li .drop {
    padding-right:15px;
    background:url("drop-nonsel.png") no-repeat right 4px;
}
.nav li:hover .drop, .nav li .drop:hover {
    background:url("drop-sel.png") no-repeat right 4px;
}
.nav .subnav {
    float:left;
    position:absolute;
    text-align:left;
    padding:5px;
    margin: 5px 5px 5px 0;
    border:1px solid #CCC;
    border-top:none;
    white-space:nowrap;
    /* Gradient background */
    background:#FFFFFF;
    /* Rounded Corners */
    -moz-border-radius: 0px 5px 5px 5px;
    -webkit-border-radius: 0px 5px 5px 5px;
    border-radius: 0px 5px 5px 5px;
    opacity:0;
    transition:visibility 0s linear 0.2s, opacity 0.2s linear;
    visibility:hidden;
}
.nav .submenu:hover .subnav, .nav li .subnav:hover {
    top:auto;
    opacity:1;
    visibility:visible;
}
.nav .subnav > ul {
    padding:2px;
    margin:0 0 12px 0;
}
.nav .subnav > li {
    list-style:none;
    border-bottom:thin;
    font-size:12px;
    line-height:24px;
    position:relative;
    text-shadow: 1px 1px 1px #ffffff;
    padding:0;
    margin:0;
    float:none;
    text-align:left;
}
.nav .subnav > li:last-chid {
    border-bottom:none;
}
.deriv li .dropr {
    padding-right:10px;
    background:url("drop-right-nonsel.png") no-repeat right 6px;
}
.deriv li:hover .dropr, .deriv li .dropr:hover {
    background:url("drop-right-sel.png") no-repeat right 6px;
}
.subnav .derivnav {
    float:right;
    position:absolute;
    text-align:left;
    right:-150px;
    padding:5px;
    margin: 5px 5px 5px 0;
    border:1px solid #CCC;
    border-left:none;
    white-space:nowrap;
    /* Gradient background */
    background:#FFFFFF;
    /* Rounded Corners */
    -moz-border-radius: 0px 5px 5px 5px;
    -webkit-border-radius: 0px 5px 5px 5px;
    border-radius: 0px 5px 5px 5px;
    opacity:0;
    transition:visibility 0s linear 0.3s, opacity 0.3s linear;
    visibility:hidden;
}
.subnav .derivnav > li {
    list-style:none;
    border-bottom:thin;
    font-size:12px;
    line-height:24px;
    position:relative;
    text-shadow: 1px 1px 1px #ffffff;
    padding:0;
    margin:0;
    float:none;
    text-align:left;
}
.subnav li .deriv:hover .derivnav, .subnav li .derivnav:hover {
    top:auto;
    opacity:1;
    visibility:visible;
}
.derivnav ul {
    padding:2px;
    margin:0 0 12px 0;
}
.derivnav li {
    list-style:none;
    border-bottom:thin;
    font-size:12px;
    line-height:24px;
    position:relative;
    text-shadow: 1px 1px 1px #ffffff;
    padding:0;
    margin:0;
    float:none;
    text-align:left;
}

我已经玩了几天了,似乎无法弄清楚。我的 CSS3 验证了,我的 html 代码也验证了。有什么想法吗?

谢谢! 乔恩

【问题讨论】:

  • 小细节先,如果你像here这样在CSS中添加li{ list-style-type: none; },那么项目符号就会消失。
  • 我试过了,它奏效了,但是当我查看类继承时 - 子菜单 derivnav 没有被继承,这就是问题所在!谢谢你的第一步!
  • 你能不能为你想要完成的结果做一个小图>
  • webdesignerwall.com/demo/css3-dropdown-menu/… 其中第三个子菜单显示在右侧

标签: html css navbar submenu


【解决方案1】:

我加DEMO

.nav li a {
    font-family:Arial, Helvetica, sans-serif;
    font-size:14px;
    color: #333333;
    outline:0;
    text-decoration:none;
    padding-left:10px;
}

【讨论】:

    【解决方案2】:

    当我从这两行中删除 &gt; 标记时,它对我有用:

    旧版

    .nav .subnav > li {
    
    .nav .subnav > li:last-chid {
    

    新版本

    .nav .subnav li {
    
    .nav .subnav li:last-child {
    

    CSS 选择器中的&gt; 表示所选元素必须是前一个元素的直接子元素,而不仅仅是最近的后代。在您的标记中,.subnav 是 div,而不是 ul。 li 元素之前根本没有被选中,所以你的样式从未被应用。

    如果您需要将.subnav 列表样式与.deriv 样式完全分开,您可以像这样使用&gt; 运算符:

    备用

    .nav .subnav > ul > li {
    

    My fork of the DEMO

    【讨论】:

    • 因此使用该演示 - 子菜单(第 3 级)不会出现在 div 旁边。 jsfiddle.net/jllcpp04/MJpG5/8 是我删除正确位置限定符时发生的情况的一个示例。有没有办法让它出现在右边?
    • 这里:jsfiddle.net/amullins/MJpG5/10,我删除了 float:right 并调整了 right 属性以将其滑回。我不知道这是否是添加多个菜单项的正确解决方案。我还删除了.subnav 的右上角舍入和.deriv 的左下角舍入。
    • 谢谢!这非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多