我喜欢jQuery UI的东西!
我喜欢导航菜单,但我似乎无法将其水平化。我必须要错过一些很好的东西。
任何人都知道如何更改CSS?我尝试了这个,但它适用于旧版本并且不起作用,因为不再“清楚”以使它们彼此重叠。
相关CSS:
.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
.ui-menu .ui-state-disabled a { cursor: default; }
感谢您的帮助!
答案 0 :(得分:28)
我很钦佩将菜单转换为菜单栏的所有这些努力因为我讨厌试图破解CSS。只是觉得我在干涉我无法理解的力量!我认为在menubar branch of jquery ui添加菜单栏文件要容易得多。
下载了完整的jquery ui css捆绑文件在我的文档的头部,我把包含所有内容的jquery ui css文件(我目前在版本1.9.x上),然后是从menubar branch of jquery ui下载的菜单栏小部件的特定CSS文件
<link type="text/css" href="css/jquery-ui.css" rel="stylesheet" />
<link type="text/css" href="css/jquery.ui.menubar.css" rel="stylesheet" />
不要忘记带有jQuery UI使用的所有小图标的images文件夹需要与jquery-ui.css文件位于同一文件夹中。
然后在我身体的最后:
<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.9.0.custom.min.js"></script>
<script type="text/javascript" src="js/menubar/jquery.ui.menubar.js"></script>
这是jQuery的最新版本的副本,然后是jQuery UI文件的副本,然后是从menubar branch of jquery ui下载的菜单栏模块
菜单栏CSS文件令人耳目一新:
.ui-menubar { list-style: none; margin: 0; padding-left: 0; }
.ui-menubar-item { float: left; }
.ui-menubar .ui-button { float: left; font-weight: normal; border-top-width: 0 !important; border-bottom-width: 0 !important; margin: 0; outline: none; }
.ui-menubar .ui-menubar-link { border-right: 1px dashed transparent; border-left: 1px dashed transparent; }
.ui-menubar .ui-menu { width: 200px; position: absolute; z-index: 9999; font-weight: normal; }
但是菜单栏的JavaScript文件是328行 - 这里引用的时间太长了。有了它,你可以像这个例子一样调用menubar():
$("#menu").menubar({
autoExpand: true,
menuIcon: true,
buttons: true,
select: select
});
正如我所说,我钦佩所有试图破解菜单对象将其变成水平条的尝试,但我发现它们都缺少水平菜单栏的某些标准功能。我不知道为什么这个小部件还没有与jQuery UI捆绑在一起,但可能还有一些错误需要解决。例如,我在IE 7 Quirks模式下尝试过,定位很奇怪,但在Firefox,Safari和IE 8 +中看起来很棒。
答案 1 :(得分:23)
你可以这样做:
/* Clearfix for the menu */
.ui-menu:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
并设置:
.ui-menu .ui-menu-item {
display: inline-block;
float: left;
margin: 0;
padding: 0;
width: auto;
}
答案 2 :(得分:15)
这篇文章激发了我尝试jQuery ui菜单的灵感。
<ul id="nav">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a>
<ul>
<li><a href="#">Item 3-1</a>
<ul>
<li><a href="#">Item 3-11</a></li>
<li><a href="#">Item 3-12</a></li>
<li><a href="#">Item 3-13</a></li>
</ul>
</li>
<li><a href="#">Item 3-2</a></li>
<li><a href="#">Item 3-3</a></li>
<li><a href="#">Item 3-4</a></li>
<li><a href="#">Item 3-5</a></li>
</ul>
</li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
.ui-menu {
overflow: hidden;
}
.ui-menu .ui-menu {
overflow: visible !important;
}
.ui-menu > li {
float: left;
display: block;
width: auto !important;
}
.ui-menu ul li {
display:block;
float:none;
}
.ui-menu ul li ul {
left:120px !important;
width:100%;
}
.ui-menu ul li ul li {
width:auto;
}
.ui-menu ul li ul li a {
float:left;
}
.ui-menu > li {
margin: 5px 5px !important;
padding: 0 0 !important;
}
.ui-menu > li > a {
float: left;
display: block;
clear: both;
overflow: hidden;
}
.ui-menu .ui-menu-icon {
margin-top: 0.3em !important;
}
.ui-menu .ui-menu .ui-menu li {
float: left;
display: block;
}
$( "#nav" ).menu({position: {at: "left bottom"}});
<ul id="nav">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a>
<ul>
<li><a href="#">Item 3-1</a>
<ul>
<li><a href="#">Item 3-11</a></li>
<li><a href="#">Item 3-12</a></li>
<li><a href="#">Item 3-13</a></li>
</ul>
</li>
<li><a href="#">Item 3-2</a></li>
<li><a href="#">Item 3-3</a></li>
<li><a href="#">Item 3-4</a></li>
<li><a href="#">Item 3-5</a></li>
</ul>
</li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
.ui-menu .ui-menu-item {
display: inline-block;
float: left;
margin: 0;
padding: 0;
width: auto;
}
.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
.ui-menu .ui-state-disabled a { cursor: default; }
.ui-menu:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
$( "#nav" ).menu({position: {at: "left bottom"}});
答案 3 :(得分:5)
我花了3天的时间寻找一个jquery UI和CSS解决方案,我合并了一些我看到的代码,修复了一些,最后(沿着其他代码)我可以让它工作!
http://jsfiddle.net/Moatilliatta/97m6ty1a/
<ul id="nav" class="testnav">
<li><a class="clk" href="#">Item 1</a></li>
<li><a class="clk" href="#">Item 2</a></li>
<li><a class="clk" href="#">Item 3</a>
<ul class="sub-menu">
<li><a href="#">Item 3-1</a>
<ul class="sub-menu">
<li><a href="#">Item 3-11</a></li>
<li><a href="#">Item 3-12</a>
<ul>
<li><a href="#">Item 3-111</a></li>
<li><a href="#">Item 3-112</a>
<ul>
<li><a href="#">Item 3-1111</a></li>
<li><a href="#">Item 3-1112</a></li>
<li><a href="#">Item 3-1113</a>
<ul>
<li><a href="#">Item 3-11131</a></li>
<li><a href="#">Item 3-11132</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Item 3-113</a></li>
</ul>
</li>
<li><a href="#">Item 3-13</a></li>
</ul>
</li>
<li><a href="#">Item 3-2</a>
<ul>
<li><a href="#."> Item 3-21 </a></li>
<li><a href="#."> Item 3-22 </a></li>
<li><a href="#."> Item 3-23 </a></li>
</ul>
</li>
<li><a href="#">Item 3-3</a></li>
<li><a href="#">Item 3-4</a></li>
<li><a href="#">Item 3-5</a></li>
</ul>
</li>
<li><a class="clk" href="#">Item 4</a>
<ul class="sub-menu">
<li><a href="#">Item 4-1</a>
<ul class="sub-menu">
<li><a href="#."> Item 4-11 </a></li>
<li><a href="#."> Item 4-12 </a></li>
<li><a href="#."> Item 4-13 </a>
<ul>
<li><a href="#."> Item 4-131 </a></li>
<li><a href="#."> Item 4-132 </a></li>
<li><a href="#."> Item 4-133 </a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Item 4-2</a></li>
<li><a href="#">Item 4-3</a></li>
</ul>
</li>
<li><a class="clk" href="#">Item 5</a></li>
</ul>
的javascript
$(document).ready(function(){
var menu = "#nav";
var position = {my: "left top", at: "left bottom"};
$(menu).menu({
position: position,
blur: function() {
$(this).menu("option", "position", position);
},
focus: function(e, ui) {
if ($(menu).get(0) !== $(ui).get(0).item.parent().get(0)) {
$(this).menu("option", "position", {my: "left top", at: "right top"});
}
}
}); });
CSS
.ui-menu {width: auto;}.ui-menu:after {content: ".";display: block;clear: both;visibility: hidden;line-height: 0;height: 0;}.ui-menu .ui-menu-item {display: inline-block;margin: 0;padding: 0;width: auto;}#nav{text-align: center;font-size: 12px;}#nav li {display: inline-block;}#nav li a span.ui-icon-carat-1-e {float:right;position:static;margin-top:2px;width:16px;height:16px;background:url(https://www.drupal.org/files/issues/ui-icons-222222-256x240.png) no-repeat -64px -16px;}#nav li ul li {width: 120px;border-bottom: 1px solid #ccc;}#nav li ul {width: 120px; }.ui-menu .ui-menu-item li a span.ui-icon-carat-1-e {background:url(https://www.drupal.org/files/issues/ui-icons-222222-256x240.png) no-repeat -32px -16px !important;
答案 4 :(得分:4)
添加到Mihalis Bagos的答案。我最终做了以下事情:
<style>
.ui-menu{
z-index: 1000;
}
#menubar-layout-container > .ui-menu:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
#menubar-layout-container > .ui-menu > .ui-menu-item {
display: inline-block;
float: left;
margin: 0;
padding: 0;
width: auto;
}
.ui-menu .ui-menu-icon{
display: none;
}
</style>
这使顶级菜单水平,但任何子菜单都是垂直的。
我不得不删除图标,因为这会弄乱布局
子菜单定位似乎也存在问题。
答案 5 :(得分:4)
当您将鼠标悬停在主要水平菜单上的某个主题上时,只需将jquery-ui菜单视为垂直下拉菜单即可。这样,您的主菜单上的每个主题都有一个单独的jquery ui菜单。水平的主菜单只是一个浮动的集合:左边的div包含在一个mainmenu div中。然后使用悬停并悬停以弹出每个菜单。
$('.mainmenuitem').hover(
function(){
$(this).addClass('ui-state-focus');
$(this).addClass('ui-corner-all');
$(this).addClass('ui-state-hover');
$(this).addClass('ui-state-active');
$(this).addClass('mainmenuhighlighted');
// trigger submenu
var position=$(this).offset();
posleft=position.left;
postop=position.top;
submenu=$(this).attr('submenu');
showSubmenu(posleft,postop,submenu);
},
function(){
$(this).removeClass('ui-state-focus');
$(this).removeClass('ui-corner-all');
$(this).removeClass('ui-state-hover');
$(this).removeClass('ui-state-active');
$(this).removeClass('mainmenuhighlighted');
// remove submenu
$('.submenu').hide();
}
);
showSubmenu函数很简单 - 它只是定位子菜单并显示它。
function showSubmenu(left,top,submenu){
var tPosX=left;
var tPosY=top+28;
$('#'+submenu).css({left:tPosX, top:tPosY,position:'absolute'});
$('#'+submenu).show();
}
然后,您需要确保子光标在光标位于其上时可见,并在您离开时消失(这应该在您的document.ready函数中。
$('.submenu').hover(
function(){
$(this).show();
},
function(){
$(this).hide();
}
);
另外,请不要忘记在document.ready功能
中隐藏您的子菜单$(".submenu" ).hide();
请参阅此处的完整代码
答案 6 :(得分:3)
我是stackoverflow的新手,所以请你好:) 然而转向水平jQuery ui菜单的问题,我能设法解决问题的唯一方法(参考this)是设置:
#nav li {width: auto; clear: none; float: left}
#nav ul li {width: auto; clear: none; float:none}
答案 7 :(得分:2)
变化:
.ui-menu .ui-menu-item {
margin: 0;
padding: 0;
zoom: 1;
width: 100%;
}
为:
.ui-menu .ui-menu-item {
margin: 0;
padding: 0;
zoom: 1;
width: auto;
float:left;
}
应该让你开始。
答案 8 :(得分:2)
我知道这是一个旧线程,但我正在深入研究jQuery UI源代码,并建立在Rowan的答案上 更接近我一直在寻找的东西。只有我需要胡萝卜,因为我觉得有一个视觉指示器很重要 可能的子菜单。从查看源代码(.js和.css)我想出了这个允许胡萝卜 可以看到没有弄乱设计(高度),并且还允许菜单在父项下面垂直显示。
在jquery-ui.js中搜索以找到$.widget( "ui.menu")
并将帖子更改为:
position: {
my: "center top",
at: "center bottom"
}
在你的CSS中添加:
#nav > .ui-menu:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
#nav > .ui-menu > .ui-menu-item {
display: inline-block;
float: left;
margin: 0;
padding: 3px;
width: auto;
}
.ui-menu .ui-menu-item a {
padding: 0;
}
.ui-menu .ui-menu-icon{
position: relative;
left: 1px;
top: 6px;
}
结束结果将是一个水平的jQuery UI菜单,子菜单显示在父菜单项下面。
答案 9 :(得分:1)
我找到的最佳选择是名为 jMenu 的插件。
主要:http://www.myjqueryplugins.com/jquery-plugin/jmenu
演示:http://demos.myjqueryplugins.com/jmenu/
GitHub:https://github.com/alpixel/jMenu
截图:
答案 10 :(得分:0)
要获得具有垂直下拉列表的水平导航栏,请使用表和无序列表的组合。
1级项目由表格单元格表示,后续级别由无序列表表示。
子菜单的定位是一个问题。默认设置是让它们直接显示在旁边,但是当在顶级项目上时,它会遮挡水平导航栏中的后续项目。将它们显示在下面对于单个下拉菜单是可以的,但是如果下面有第二个级别,则第二个级别会遮挡第一个级别的其余部分。解决方案是将菜单打开到下方并稍微向右,请参阅菜单调用中的“位置”选项。
<style type="text/css">
#trJMenu td { white-space: nowrap; width: auto; }
#trJMenu li { white-space: nowrap; width: auto; }
</style>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$("#trJMenu").menu( { position: { my: "left top", at: "center bottom" } } );
});
</script>
<table>
<tr id='trJMenu'>
<td>
<a href='#'>Timesheets</a>
<ul>
<li><a href='#'>Labour</a></li>
<li><a href='#'>Chargeout Report</a></li>
</ul>
</td>
<td>
<a href='#'>Activity Management</a>
<ul>
<li><a href='#'>Activities</a></li>
<li><a href='#'>Proposals</a></li>
</ul>
</td>
</tr>
</table>