我采用了复杂的 Accordion 菜单设计,并将 HTML 和 CSS 减少到尽可能基本和干净的程度。
http://soflorealty.com/menu/menu.html
1) “AAA - 展开”菜单链接以指定的“高度:75px”展开。这意味着我必须计算每个顶级菜单项的组合子菜单“li”列表项的总高度。 有没有办法只指定我想要展开的顶级菜单项,而不必确定所需的展开高度大小?
2) “CCC - 无子菜单”菜单项链接到外部页面(不展开子菜单),因此它只能在文本本身上单击。 但是,对于其他子菜单链接,整个“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;
}
最佳答案
1) 你可以通过定义 max-height: number 来做到这一点(和动画);和 height:auto 在结束状态而不是用 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 替换为标签并将其 for 属性设置为隐藏的复选框。你可以像这样使用 :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 & :after。
2) 区别在于子菜单项有 display:block 并且 padding 是直接给它们的,而不是给它的容器。
设置它,它将起作用:
#acdnmenu div.topItem a {
display: block;
margin: -8px -8px -8px -24px;
padding: 8px 8px 8px 24px;
}
关于CSS Accordion 菜单 - 如何扩展和超链接 <div>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567262/