使用具有计数器活动css类的菜单栏。我需要菜单栏居中,下拉菜单位于正确的列表项下。我可以得到一个或另一个但不能同时工作。菜单栏会更改大小,因此在其上放置静态边距将不起作用。菜单栏应该是这样的,但它不是居中的。
当我从#mainmenu ul li {}移除浮动时,会发生这种情况。它现在居中,但属于用户名的项目都向左移动。
为什么会这样?我该如何解决这个问题?
HTML:
<div id="mainmenu">
<?php
if(Yii::app()->user->name)
$display_name = Yii::app()->user->name;
if(strlen($display_name) > 11){
$display_name = substr($display_name,0,9);
$display_name =$display_name.'...';
}
?>
<?php $this->widget('zii.widgets.CMenu',array(
'items'=>array(
array('label'=>'Home', 'url'=>array('/site/index')),
array('label'=>'My Tickets', 'url'=>array('/ticket/mytickets'), 'visible'=>!Yii::app()->user->isGuest),
array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
array('label'=>'Contact', 'url'=>array('/site/contact')),
array('label'=>'Schools', 'url'=>array('/school'), 'visible'=>Yii::app()->user->id == 'admin'),
array('label'=>'Teams', 'url'=>array('/team'), 'visible'=>Yii::app()->user->id == 'admin'),
array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Games', 'url'=>array('/game'), 'visible'=>Yii::app()->user->id == 'admin'),
array('label'=>'Users', 'url'=>array('/user'), 'visible'=>Yii::app()->user->id == 'admin'),
array('label'=>'Tickets', 'url'=>array('/ticket'), 'visible'=>Yii::app()->user->id == 'admin'),
array('label'=>'Team Placement', 'url'=>array('/tournamentresults'), 'visible'=>Yii::app()->user->id == 'admin'),
array('label'=>$display_name, 'url'=>array('#'), 'visible'=>!Yii::app()->user->isGuest,
'items' => array(
array('label'=>'Edit User', 'url'=>array('/company/index')),
array('label'=>'Log-out', 'url'=>array('/site/logout'))
),
),
),
)); ?>
</div><!-- mainmenu -->
生成的HTML代码:
<div id="mainmenu">
<ul id="yw0">
<li class="active"><a href="/index.php/site/index">Home</a></li>
<li><a href="/index.php/ticket/mytickets">My Tickets</a></li>
<li><a href="/index.php/site/page?view=about">About</a></li>
<li><a href="/index.php/site/contact">Contact</a></li>
<li><a href="/index.php/site/#">SirRahal</a>
<ul>
<li><a href="/index.php/company/index">Edit User</a></li>
<li><a href="/index.php/site/logout">Log-out</a></li>
</ul>
</li>
</ul>
</div>
CSS代码:
#mainmenu
{
height:33px;
margin: auto;
text-align:center;
}
#mainmenu ul li
{
display: inline;
float: left;
margin: auto;
}
#mainmenu ul li a
{
color: #fbf3e1;
font-size:14px;
padding-top:5px;
padding-bottom:5px;
width:217px;
background: #33332c;
}
#mainmenu ul li ul {
display: none;
position: absolute;
margin-left: -20px;
}
#mainmenu ul li:hover > ul {
display: block;
}
#mainmenu ul li a:hover, #mainmenu ul li.active a
{
color: #f5921e;
border-bottom: solid 5px #f5921e;
text-decoration:none;
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;
}
答案 0 :(得分:1)
在我看来,构建CSS下拉菜单/弹出菜单的最大关键是在absolute positioned
元素中使用relative positioned
元素以及在何处使用它们。更重要的是要了解这两种定位方案如何相互关联。完成后,您可以构建各种下拉/弹出菜单。
您需要将position: relative
设置为您的所有菜单li
,无论它们是否包含子菜单。除非您开始使用top, right, bottom, left
CSS属性,否则这样做不会影响其位置。
.menu li {
position: relative;
}
现在,您需要将菜单中ul
的孩子的所有li
的位置设置为position: absolute
。我们也不希望他们立即展示,因此请将其隐藏display: none
。
.menu li > ul {
display: none;
position: absolute;
}
相对于绝对定位元素的包含元素应用位置有助于包含绝对定位元素。不仅如此,绝对定位元素将基于相对定位的父元素定位,这正是我们想要的。设置top: 0
和left: 0
会导致ul
的{{1}}孩子在同一个左上角的位置开始,因为它的左上角是父元素手角。
到目前为止,我提供的两条规则是CSS中下拉/弹出菜单的基本构建块。
从现在开始,这将完全取决于您的设计目标,以及您需要添加到CSS中的其他内容。
我(大部分)会在剩下的时间里使用通用代码,希望自己和他人可以建立基本原则来获得自己的特定结果。这就是说我将基于你提供的代码来完成剩下的代码。一些表面样式如边框将被忽略,您可以稍后添加。
<强> HTML 强>
以下是我要使用的HTML。根据需要添加锚元素。
li
<ul class="menu">
<li>One</li>
<li>Two
<ul>
<li>Sub Two A</li>
<li>Sub Two B</li>
</ul>
</li>
<li>Three</li>
</ul>
来执行此操作。float: left
执行此操作,这很好,我将使用<a>
。li
**请参阅以下版本的LI ANSWER **
由于您使用的是固定宽度导航元素,因此您可以使用.menu li {
float: left;
position: relative;
text-align: center;
width: 100px;
}
将导航置于中心位置。 使用margin: 0 auto
左边和右边的边距来设置元素的中心需要设置宽度!只需加上顶级auto
的全宽,然后你就可以了拥有你的宽度你需要使导航居中。不要忘记在宽度计算中包括任何填充,边距,边框等。
我的示例使用宽度为li
的三个li
。
100px
现在我们将定位子菜单.menu {
width: 300px; /* width of the 3 li */
margin: 0 auto; /* centers ul when width is specified */
}
。
ul
,您需要将子菜单top
向下推到包含ul
的高度。我假设25px是li
的高度。li
,您希望它与包含left
的边缘相同,因此请使用0。li
现在,当父.menu li > ul {
display: none;
left: 0;
position: absolute;
top: 25px;
}
悬停时,让我们显示子菜单ul
。
li
<强> CSS 强>
最终的CSS。
.menu li:hover > ul {
display: block;
}
这是一个jsFiddle,其中包含一些基本样式,将它们整合在一起。
你去吧! CSS下拉/弹出菜单的入门读物。像往常一样,您的需求需要对我提供的内容进行一些修改或补充。如果您了解基础知识,那么您将在开发更深入,更强大的解决方案方面取得长足进展。<强> **编辑** 强>
注意到导航中的.menu {
width: 300px; /* width of the 3 li */
margin: 0 auto; /* centers ul when width is specified */
}
.menu li {
float: left;
line-height: 25px; /* assumed height of li */
position: relative;
text-align: center;
width: 100px;
}
.menu li > ul {
display: none;
left: 0;
position: absolute;
top: 25px;
}
.menu li:hover > ul {
display: block;
}
变量号为li
。在适当的地方进行更改。它是相对定位与百分比位置的组合。
.menu {
float: left;
position: relative;
left: 50%;
}
.menu li {
float: left;
line-height: 25px; /* assumed height of li */
position: relative;
right: 50%;
text-align: center;
width: 100px;
}
/* undo the right positioning for submenu li so it aligns properly */
.menu li > ul li {
right: auto;
}
以下是更新的jsFiddle。
答案 1 :(得分:0)
使用LI
元素替换你的A
元素,将这样的CSS替换为这样:
body {
width:100%;
}
#mainmenu {
display: block;
width:100%;
}
#mainmenu ul {
width:100%;
}
#mainmenu ul li {
display: inline-block;
position:relative;
margin: auto;
width:19%;
background: #33332c;
padding-top:5px;
padding-bottom:5px;
}
#mainmenu ul li a {
color: #fbf3e1;
font-size:14px;
}
#mainmenu ul li ul {
display: none;
position: absolute;
}
#mainmenu ul li:hover > ul {
display: block;
width:auto;
position:absolute;
top:30px;
left:0;
background: #33332c;
padding:10px;
}
#mainmenu ul li:hover > ul li {
display: block;
width:150px;
height:auto;
}
#mainmenu ul li a:hover, #mainmenu ul li.active a {
color: #f5921e;
border-bottom: solid 5px #f5921e;
text-decoration:none;
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;
}
您可能需要进行一些额外的调整,但是您有基本的