CSS手风琴菜单 - 如何扩展和超链接<div> </div>

时间:2014-05-09 14:34:19

标签: css menu accordion jquery-ui-accordion horizontal-accordion

我采用了复杂的手风琴菜单设计,并将HTML和CSS简化为尽可能基本和干净。

http://soflorealty.com/menu/menu.html

1)“AAA - Expanded”菜单链接扩展为指定的“height:75px”。这意味着我必须计算每个顶级菜单项的组合子菜单“li”列表项的总高度。 有没有办法只指定我想扩展哪个顶级菜单项而无需确定所需的扩展高度?

2)“CCC - No SubMenu”菜单项链接到外部页面(不扩展子菜单),因此只能在TEXT本身上单击。 但是,使用其他子菜单链接,整个“li”标签都是可点击的。我找不到为什么不是“CCC”的情况。 我想让整个DIV标签可以点击。有什么想法吗?

<div id="acdnmenu">
    <ul class="top">

        <li><div class="topItem"><div class="arrowImage"></div>AAA - Expanded</div>
            <ul style="height: 75px;" c="1">
                <li><a href="http://www.Google.com">Google</a></li>
                <li><a href="http://www.Yahoo.com">Yahoo</a></li>
                <li><a href="http://www.Bing.com">Bing</a></li>
            </ul></li>

        <li><div class="topItem"><div class="arrowImage"></div>BBB - News</div>
            <ul>
                <li><a href="http://www.cnn.com">CNN</a></li>
                <li><a href="http://www.msnbc.com">MSNBC</a></li>
                <li><a href="http://www.foxnews.com">Fox News</a></li>
                    <li><div class="sub1"><div class="arrowImage"></div>More News</div>
                        <ul>
                            <li><a href="http://www.worldnews.com">World</a></li>
                            <li><a href="http://www.finance.com">Finance</a></li>
                            <li><a href="http://www.sports.com">Sports</a></li>
                            <li><a href="http://www.health.com">Health</a></li>
                        </ul></li>
                    </ul></li>

        <li><div class="topItem"><a href="http://www.soflorealty.com">CCC - No SubMenu</a></div></li>
    </ul>
</div>



#acdnmenu {
    width: 240px; 
    height: 390px; 
    background-color: rgb(119, 119, 119); 
}
#acdnmenu ul.top {
    padding-left: 0;
    border: 1px solid #000;
    visibility: visible;
}

#acdnmenu .topItem {
    background: #3A332C url(bg.jpg) repeat-x 0 0;
    padding: 8px;
    padding-left: 24px;
}
#acdnmenu li {
    font: normal 12px Verdana;
    color: #A98;
    display: block;
}
#acdnmenu ul ul {
    background: #484037;
    padding-left: 0px;
    line-height: 24px;
}
#acdnmenu ul ul ul {background: #655A4E}
#acdnmenu ul ul li {text-indent: 8px}
#acdnmenu ul ul ul li {text-indent: 16px}

/* Top List Item with no subMenu */
#acdnmenu div.topItem a {
    color: inherit;
    text-decoration:none;
}
#acdnmenu div:hover {
    color:#CBA;
    text-decoration:none;   
}

/* Sub Menu */
#acdnmenu ul ul a, #acdnmenu .sub1 {
    color:#CBA;
    padding:5px; padding-left:24px;
    text-decoration:none;
    background:none; 
}

2 个答案:

答案 0 :(得分:0)

1)您可以通过定义max-height:number来执行此操作(和动画);和height:在结束状态下自动,而不是用js设置动画。

像这样:

.sub{
    height:0;
    max-height:0;
    transition:all 0.3s ease; /* Just a catch all statement for animating them */
}

.sub.open {
    height:auto;
    max-height:250px;
}

如果子菜单高度差异很大,最好为它们定义不同的最大高度,因为如果子菜单太短,动画会发生得太快。


如果你能负担得起不支持IE8及以下版本,你甚至可以进一步简化它并删除js以触发它们,方法是隐藏复选框并用标签替换.topItem并将其属性设置为隐藏的复选框。你可以使用:checked伪类来监听事件,如下所示:

 .sub-menu {
    height:0;
    max-height:0;
    transition:all 0.3s ease; /* Just a catch all statement for animating them */
}

input[type="checkbox"]:checked + .sub-menu{
    height:auto;
    max-height:250px;
}

我要做的另一件事就是删除箭头的html并使用:before&amp; :改为之后。


2)区别在于子菜单项有display:block,并且直接给它们填充,而不是它的容器。

设置它并且它将起作用:

#acdnmenu div.topItem a {
    display: block;
    margin: -8px -8px -8px -24px;
    padding: 8px 8px 8px 24px;
}

答案 1 :(得分:-1)

试试这个:

.topItem a{
    display: block;
    width: 100%;
    height: 100%
}