我搜索了很多帖子和论坛,因为我认为这可能是一个基本的东西,但没有找到它所以问这里,我想要做的是添加滚动条,如果高度超过一定的限制,让我们说如果菜单项超过3.
我创建了一个jsfiddle http://jsfiddle.net/euSWB/
如果您无法访问它,那么这里是HTML和CSS HTML
CSS
#mnav { margin-left: -30px; margin-right: -30px; } #mnav li { float: left; list-style: none; } #mnav li a, #mnav li a:link, #mnav li a:visited { text-decoration: none; } #mnav li a:hover, #mnav li a:active { text-decoration: none; } #mnav li:hover, #mnav li.sfhover { position: static; } #mnav li ul { display: block; z-index: 9999; position: absolute; left: -999em; width: 400px; margin: 0px; border: 1px solid #ddd; } #mnav li:hover ul, #mnav li.sfhover ul { left: auto; } #mnav li ul li a, #mnav li ul li a:link, #mnav li ul li a:visited { display: block; margin: 0; text-decoration: none; z-index: 9999; border-bottom: 1px dotted #ccc; width: 500px; } #mnav li ul li a:hover, #mnav li ul li a:active { display: block; margin: 0; text-decoration: none; }
Joeytje50.. 16
我对原始样式表进行了一些调整,现在它将显示滚动条,但仅当它超过3个列表项的高度时(在这种情况下为63像素).这是最终的CSS代码:
#mnav { margin-left: -30px; margin-right: -30px; } #mnav li { float: left; list-style: none; margin:0 10px;/*Keeping 10px space between each nav element*/ } #mnav li a,/*These can all be merged into a single style*/ #mnav li a:link, #mnav li a:visited, #mnav li a:hover, #mnav li a:active { text-decoration: none; } #mnav li ul { display: none;/*This is the default state.*/ z-index: 9999; position: absolute; width: 400px; max-height:63px;/*The important part*/ overflow-y:auto;/*Also...*/ overflow-x:hidden;/*And the end of the important part*/ margin: 0px; padding-left:5px;/*Removing the large whitespace to the left of list items*/ border: 1px solid #ddd; } #mnav li:hover ul, #mnav li.sfhover ul { display:block;/*This is the hovered state*/ } #mnav li ul li a, #mnav li ul li a:link, #mnav li ul li a:visited { display: block; margin: 0; text-decoration: none; z-index: 9999; border-bottom: 1px dotted #ccc; width:400px; } #mnav li ul li a:hover, #mnav li ul li a:active { display: block; margin: 0; text-decoration: none; }
这是它的演示.出于演示目的,我还将2个额外元素插入到 Home和 SQL Server与Oracle项目中.如果列表项少于3个, Home项将显示弹出窗口的行为方式.
要解释每个更改的位,首先是实际执行操作的代码:
定义max-height
to 63将使ul在低于63px的情况下正常运行,但如果超过该值,则会溢出并显示滚动条.如果要显示更多项目,只需将其max-height
增加到所需高度即可.目前每件商品的高度为21px,所以我用它来获得3件商品的63px.
由于溢出应该只显示垂直方向的滚动条,只overflow-y:auto;
应该在那里,并overflow-x:hidden
防止水平方向的滚动条.
然后是我做出的其他一般性改变:
我在项目之间添加了20px的边距(元素两边各10px),使列表在这里看起来更好一些.您可能想要应用自己的风格,这仅适用于此演示.
我已经将你的隐藏技术改为"将它推-999em
到左边"以隐藏它display:none
.这样做更好,因为display:none
不会在搜索引擎中呈现的元素,所以这将有助于这些情况.总的来说,我认为隐藏的东西display:none
比将它从屏幕上移开更好,而它实际上仍然存在
我已经删除了左侧的填充,ul
因为它看起来非常糟糕.如果您没有将它用于虚线/编号列表,则无需默认填充.
考虑到你对Zachary Carter的答案的评论,这也应该有效,因为如果你定义max-height
210px(10项),这将不会显示一个巨大的白盒子.
我对原始样式表进行了一些调整,现在它将显示滚动条,但仅当它超过3个列表项的高度时(在这种情况下为63像素).这是最终的CSS代码:
#mnav { margin-left: -30px; margin-right: -30px; } #mnav li { float: left; list-style: none; margin:0 10px;/*Keeping 10px space between each nav element*/ } #mnav li a,/*These can all be merged into a single style*/ #mnav li a:link, #mnav li a:visited, #mnav li a:hover, #mnav li a:active { text-decoration: none; } #mnav li ul { display: none;/*This is the default state.*/ z-index: 9999; position: absolute; width: 400px; max-height:63px;/*The important part*/ overflow-y:auto;/*Also...*/ overflow-x:hidden;/*And the end of the important part*/ margin: 0px; padding-left:5px;/*Removing the large whitespace to the left of list items*/ border: 1px solid #ddd; } #mnav li:hover ul, #mnav li.sfhover ul { display:block;/*This is the hovered state*/ } #mnav li ul li a, #mnav li ul li a:link, #mnav li ul li a:visited { display: block; margin: 0; text-decoration: none; z-index: 9999; border-bottom: 1px dotted #ccc; width:400px; } #mnav li ul li a:hover, #mnav li ul li a:active { display: block; margin: 0; text-decoration: none; }
这是它的演示.出于演示目的,我还将2个额外<li>
元素插入到 Home和 SQL Server与Oracle项目中.如果列表项少于3个, Home项将显示弹出窗口的行为方式.
要解释每个更改的位,首先是实际执行操作的代码:
定义max-height
to 63将使ul在低于63px的情况下正常运行,但如果超过该值,则会溢出并显示滚动条.如果要显示更多项目,只需将其max-height
增加到所需高度即可.目前每件商品的高度为21px,所以我用它来获得3件商品的63px.
由于溢出应该只显示垂直方向的滚动条,只overflow-y:auto;
应该在那里,并overflow-x:hidden
防止水平方向的滚动条.
然后是我做出的其他一般性改变:
我在项目之间添加了20px的边距(元素两边各10px),使列表在这里看起来更好一些.您可能想要应用自己的风格,这仅适用于此演示.
我已经将你的隐藏技术改为"将它推-999em
到左边"以隐藏它display:none
.这样做更好,因为display:none
不会在搜索引擎中呈现的元素,所以这将有助于这些情况.总的来说,我认为隐藏的东西display:none
比将它从屏幕上移开更好,而它实际上仍然存在
我已经删除了左侧的填充,ul
因为它看起来非常糟糕.如果您没有将它用于虚线/编号列表,则无需默认填充.
考虑到你对Zachary Carter的答案的评论,这也应该有效,因为如果你定义max-height
210px(10项),这将不会显示一个巨大的白盒子.