css二级菜单样式如何设置

html-css05

css二级菜单样式如何设置,第1张

代码粘贴的太复杂;

先给你分析一下原理:二级菜单没有在没有hover属性的情况下是隐藏的所以需要display:none,当鼠标hover的时候二级菜单才会列出来,这是纯css可以实现的;

知道上面的原理之后,下面比较容易实现具体看例子:

HTML代码:

<ul>

<li><a href="">一级菜单</a></li>

<li><a href="">一级菜单</a>

<ul class="drop-ul">

<li ><a href="">二级菜单</a></li>

</ul>

</li>

</ul>

CSS代码:

ul li ul.drop-ul{ display: noneposition:relative }/*正常情况下隐藏*/

ul li:hover ul.drop-ul li{display: block} /*当鼠标放上去二级菜单li 显示出来*/

/*这个时候你会发现二级菜单显示的位置可能不对可以使用position属性*/

ul li:hover ul.drop-ul li{position:absolute}

/*通过top right left 调整位置,根据实际情况调整背景颜色,字体颜色等,细节东西*/

此时可能会发现会二级菜单出现有那么一点点的生硬;没关系配合jquery实现缓慢展现效果

$(document).ready(function() {

if($(window).width() > 768) {

$('ul li').hover(

function() {

$('ul', this).stop().slideDown(200)

  },

function() {

     $('ul', this).stop().slideUp(200)

   }

)

}

})

注意不知道jquery的新手使用记住先加载Jquery.min.js文件,放在此段js前面;

<html>

<head>

<title>简易的JS+CSS树状二级菜单tree丨芯晴网页特效丨CsrCode.Cn</title>

<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8">

<script language="JavaScript" type="text/JavaScript">

function showhide_obj(obj,icon)

{

obj=document.getElementById(obj)

icon=document.getElementById(icon)

if (obj.style.display=="none")

{

//指定文档中的对象为div,仅适用于IE

div_list = document.getElementsByTagName("div")

for (i=0i<div_list.lengthi ++)

{

thisDiv = div_list[i]

if(thisDiv.id.indexOf("title")!=-1)//当文档div中的id含有list时,与charAt类似

{

//循环把所有菜单链接都隐藏起来

thisDiv.style.display="none"

icon.innerHTML = "+"

}

}

myfont=document.getElementsByTagName("font")

for(i=0i<myfont.lengthi++)

{

thisfont = myfont[i]

}

icon.innerHTML="-"

obj.style.display=""//只显示当前链接

}

else

{

//当前对象是打开的,就关闭它

icon.innerHTML="+"

obj.style.display="none"

}

}

function show_this(obj)

{

obj=document.getElementById(obj)

if (obj.id==obj.id)

{

blinkicon=document.getElementsByTagName("font")

for(x=0x<blinkicon.lengthx++)

{

if( blinkicon[x].id.indexOf("select")!=-1 &&obj.id!=obj )

{

blinkicon[x].innerHTML=" "

}

}

obj.innerHTML=">"

}

else

{

obj.innerHTML=" "

}

}

//-->

</script>

<style type="text/css">

span{ width:100pxHeight:25pxmargin-left:15px}

font{font-weight:bold}

body,td{font-family:Verdana, Arial, Helvetica, sans-seriffont-size:12pxcolor:#000000}

div{cursor:defaultborder-top:1px solid gray border-left:1px solid gray border-right:1px solid graybackground-color:#F6F6F6 width:200px}

pre{background-color:#FFFFF1border:1px solid graycolor:bluefont-family:verdanaArialpadding:20px}

</style>

</head>

<body>

<div style="line-height:25px" onClick="showhide_obj('title1','icon1')"><font id='icon1'>+</font>网站设置</div>

<div id="title1" style="background-color:#fffff3line-height:22pxdisplay:none">

<span id="menu1_1" onMouseOver="this.style.backgroundColor='blue'" onMouseOut="this.style.backgroundColor=''" onclick="show_this('select1_1')"><font id='select1_1'></font>

<a href="/" target="_blank">后台首页</a></span></font><br />

<span id="menu1_2" onclick="show_this('select1_2')"><font id='select1_2'></font><a href="/" target="_blank">网站设置</a></span></font><br />

<span id="menu1_3" onclick="show_this('select1_3')"><font id='select1_3'></font><a href="/" target="_blank">过滤设置</a></span></font><br />

</div>

<div style="line-height:25px" onClick="showhide_obj('title2','icon2')"><font id='icon2'>+</font>内容管理</div>

<div id="title2" style="background-color:#fffff3line-height:22pxdisplay:none">

<span id="menu2_1" onclick="show_this('select2_1')"><font id='select2_1'></font><a href="/" target="_blank">添加内容</a></span></font><br />

<span id="menu2_2" onclick="show_this('select2_2')"><font id='select2_2'></font><a href="/" target="_blank">管理内容</a></span></font><br />

<span id="menu2_3" onclick="show_this('select2_3')"><font id='select2_3'></font><a href="/" target="_blank">内容搜索</a></span></font><br />

</div>

<div style="line-height:25px" onClick="showhide_obj('title3','icon3')"><font id='icon3'>+</font>栏目管理</div>

<div id="title3" style="background-color:#fffff3line-height:22pxdisplay:none">

<span id=menu3_1 onclick="show_this('select3_1')"><font id='select3_1'></font>添加栏目</span></font><br />

<span id=menu3_2 onclick="show_this('select3_2')"><font id='select3_2'></font>管理栏目</span></font><br />

</div>

<div style="line-height:25px" onClick="showhide_obj('title4','icon4')"><font id='icon4'>+</font>其他设置</div>

<div id="title4" style="background-color:#fffff3line-height:22pxdisplay:none">

<span id=menu4_1 onclick="show_this('select4_1')"><font id='select4_1'></font>系统信息</span></font><br />

<span id=menu4_2 onclick="show_this('select4_2')"><font id='select4_2'></font>联系方式</span></font><br />

<span id=menu4_3 onclick="show_this('select4_3')"><font id='select4_3'></font>备案信息</span></font><br />

</div>

</body>

</html>

<p align="center">本特效由 <a href="http://www.CsrCode.cn">芯晴网页特效</a>丨CsrCode.Cn 收集于互联网,只为兴趣与学习交流,不作商业用途。</p>

先占位。

left:-999em:

em是一个相对长度单位,它是相对于当前对象内文本的字体尺寸。如当前行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

left是定位中的一个属性,就是说当前对象的最左边位置相对于父对象(父对象没有定义相对定位时则为body)左边位置的距离。这里取很大的999em是为了将ul放在一个不在父对象可视区域的位置,从而达到隐藏的目的。

至于修改二级菜单的位置,见下面代码中的注释。

javascript意思如下:

function menuFix() {

// 获取id为nav这个标签下的所有li标签,

var sfEls = document.getElementById("nav").getElementsByTagName("li")

// 循环为前面得到的每个li标签绑定事件

for (var i=0i<sfEls.lengthi++) {

sfEls[i].onmouseover=function() {// 绑定鼠标经过事件,在鼠标经过此li时触发此方法并执行此函数

//this.className就是当前循环到的这个li的class属性值

//这句代码的意思就是当这个li的class属性值为空的时候,给它的class值加上一个值sfhover

//也就是说,假设li的class="",则鼠标经过时调用这段代码,它的class值就变成了class="sfhover"

//当class的值不为空的时候,就给这个li的class值加上一个空格,再加上sfhover

//因为当li的class不为空,说明它本身已经有一个class值,要再添加一个样式,应该用空格隔开

//所以就是先加一个空格,再加sfhover,例如li的class="a",则执行这段代码后就成了class="a sfhover"

// 下面几个方法中的代码和这个代码的处理是一样的,就不做说明了。

this.className+=(this.className.length>0? " ": "") + "sfhover"

}

sfEls[i].onMouseDown=function() {//给当前li添加鼠标按下事件,当鼠标在这个li上按下的时候触发这个事件并执行此函数

this.className+=(this.className.length>0? " ": "") + "sfhover"

}

sfEls[i].onMouseUp=function() {//给当前li添加鼠标放开事件,即原本鼠标是按下状态,松开鼠标后触发此事件并执行此函数

this.className+=(this.className.length>0? " ": "") + "sfhover"

}

sfEls[i].onmouseout=function() {// 给当前li添加鼠标移开事件,即原本鼠标在这个li上,鼠标从这个li的范围移开时触发此事件并执行此方法

//这个处理和前面的不一样,它的意思是,取到当前li原来的class属性值,将这个属性值中的所有sfhover都替换成空字符串,也就相当于去掉所有sfhover

//假定经过前面一系列事件后,这个li的class="a sfhover sfhover",经过这个函数后,它的class就会变回class="a"

this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),

"")

}

}

}

window.onload=menuFix

在html里添加一个ul就可以用了,添加规则如下。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

</HEAD>

<script type=text/javascript><!--//--><![CDATA[//><!--

function menuFix() {

var sfEls = document.getElementById("nav").getElementsByTagName("li")

for (var i=0i<sfEls.lengthi++) {

sfEls[i].onmouseover=function() {

this.className+=(this.className.length>0? " ": "") + "sfhover"

}

sfEls[i].onMouseDown=function() {

this.className+=(this.className.length>0? " ": "") + "sfhover"

}

sfEls[i].onMouseUp=function() {

this.className+=(this.className.length>0? " ": "") + "sfhover"

}

sfEls[i].onmouseout=function() {

this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),

"")

}

}

}

window.onload=menuFix

//--><!]]></script>

<style>

#nav {line-height: 30px list-style-type: nonebackground:#F00}

#nav a {display: blockwidth: 80pxtext-align:center}

#nav a:link {color:#F00text-decoration:none}

#nav a:visited {color:#F00text-decoration:none}

#nav a:hover {color:#F00text-decoration:nonefont-weight:bold}

#nav li {float: leftwidth: 80pxbackground:#CCC}

#nav li a:hover{background:#999}

#nav li ul {line-height: 27px list-style-type: nonetext-align:leftleft: -999emwidth: 180pxposition: absolutebackground-color:black}/*我给它加了个背景色*/

#nav li ul li{float: leftwidth: 100pxbackground: #F6F6F6}

#nav li ul a{display: blockwidth: 100pxtext-align:leftpadding-left:24px}

#nav li ul a:link {color:#666text-decoration:none}

#nav li ul a:visited {color:#666text-decoration:none}

#nav li ul a:hover {color:#F3F3F3text-decoration:nonefont-weight:normalbackground:#C00}

#nav li:hover ul {left: autodisplay:block}/*修改这个left的值可以修改位置,大概改为-40px可以喝顶级菜单左对齐,你也可以换成其他数字,比如-30px、-20px等*/

#nav li.sfhover ul {left: autodisplay:block}/*这个left的值和上一个一样就行了*/

</style>

<BODY>

<ul id="nav">

<li>

<a href="#">test</a>

<ul>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</ul>

</li>

<li>

<a href="#">test</a>

<ul>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</ul>

</li>

<li>

<a href="#">test</a>

<ul>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</ul>

</li>

<li>

<a href="#">test</a>

<ul>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</li><a href="#">test2</a></li>

</ul>

</li>

</ul>

</BODY>

</HTML>