论坛首页 Web前端技术论坛

css箭头菜单

浏览 16601 次
锁定老帖子 主题:css箭头菜单
精华帖 (4) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-01-07   最后修改:2011-01-10
CSS

最近公司要对已有的产品进行升级,希望改变一下导航菜单的展现方式。于是,在网上搜索了一下,感觉带箭头的导航菜单方式不错,于是就模仿着写了一个,其实很简单。不废话了,看代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery.js"></script>
<title>Menu</title>


<style type="text/css">
ul, li { 
	list-style-type:none; 
	padding:0; 
	margin:0; 
} 

#menu { 
	border:1px solid #dedede; 
	height:35px; 
	background:url(bg_out.gif) repeat-x;
} 

#menu li { 
	float:left; 
	line-height:35px; 
	padding-left: 10px;
	padding-right: 15px;
} 

#menu li div {
	height: 100%;
	width: 100%;
}

.li_out {
	background:url(arrow_out.gif) no-repeat right center;
}

.li_over {
	cursor:hand;
	background:url(arrow_over.gif) no-repeat right center;
	color:white;
}

.div_over {
	background: url(bg_over.gif) repeat-x;
	margin-left: -10px;
	padding-left: 10px;
}
</style>
<script type="text/javascript">
	$(document).ready(function(){
		$("#menu").children("li").hover(
			function(){
				$(this).addClass("li_over");
				$(this).children("div").addClass("div_over");
			},
			function(){
				$(this).removeClass("li_over");
				$(this).children("div").removeClass("div_over");
			}
		);
	});
</script>

</head>

<body>

	<ul id="menu"> 
		<li class="li_out"><div>Home</div></li> 
		<li class="li_out"><div>Equipment File</div></li> 
		<li class="li_out"><div>Sparepart Account</div></li> 
		<li class="li_out"><div>Maintenance Management</div></li> 
		<li class="li_out"><div>System</div></li> 
	</ul>


</body>
</html>

 

 效果显示如下:


 
 附件中是整个实现的代码。

 

 

2011-01-08修改:

今天和同事交流了一下,发现了更好的实现效果。感谢同事marker提出的建议和改进的帮助。

 

箭头样式导航菜单2.rar是marker提供的实现效果(注意,菜单栏在浏览器中是右对齐的),如图


箭头样式导航菜单3.rar是我改进后的另一种实现效果(注意,菜单栏在浏览器中是左对齐的),如图


大家给看看,是否还有bug没有测试到?欢迎指出,在此先谢谢!

 

  • 大小: 3.6 KB
  • 大小: 3.4 KB
  • 大小: 3.2 KB
   发表时间:2011-01-08  
我找样的东西好久了!
0 请登录后投票
   发表时间:2011-01-10  
不错 很好的效果  谢谢分享!
0 请登录后投票
   发表时间:2011-01-10  
很实用,与传统别具一格
0 请登录后投票
   发表时间:2011-01-10  
不知道你在没有在Opera上测试过,Opera中对padding的处理总是常出问题
0 请登录后投票
   发表时间:2011-01-11  
mouseover,一共改变三张图片,很简单的思路啊
0 请登录后投票
   发表时间:2011-01-11  
rainsilence 写道
mouseover,一共改变三张图片,很简单的思路啊

 

实现起来确实很简单,重点不是mouseover,而是padding和margin与background的组合使用。

0 请登录后投票
   发表时间:2011-01-11  
jorneyR 写道
不知道你在没有在Opera上测试过,Opera中对padding的处理总是常出问题

 

在Opera上测试过,确实还有一点bug。当第一次将鼠标移动到一个题目上时,没有任何效果,并且左右两侧的箭头消失了。

 

哎!头疼,费了半天劲没有解决!

0 请登录后投票
   发表时间:2011-01-11  
把LZ的代码改了一下,图片也换了一下,呵呵~

确实是挺好玩的~

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery.js"></script>
<title>Menu</title>


<style type="text/css">
*{ margin:0; padding:0;}
#menu{
    clear:both;
    height:1%;
    overflow:hidden;
    margin:50px;
    list-style:none;
    background:#d2d2d2;
}
#menu li {
	float:left;
	line-height:30px;
	overflow:hidden;
    display:inline;
}
#menu li a{
    text-decoration:none;
    float:left;
    display:inline;
    padding:0 5px;
}
#menu li a:hover{
    background:url(bg_over.gif) repeat-x left center;
}
#menu li.separator{
    width:8px;
    height:30px;
    padding:0;
}
#menu li.separator a, #menu li.separator a:hover{
    background:url(arrow_out.gif) no-repeat right center;
    height:30px;
    width:8px;
    padding:0;
}
#menu li.hover-before a, #menu li.hover-before a:hover{
    background-image:url(arrow_next_over.gif);
}
#menu li.hover-after a, #menu li.hover-after a:hover{
    background-image:url(arrow_over.gif);
}
</style>
<script type="text/javascript">
jQuery(function($){
    var objMenu = $('#menu');
    $('li', objMenu)
        .after('<li class="separator"><a href="#">&nbsp;</a></li>')
        .hover(function(){
            var self = $(this);
            $('.separator').removeClass('hover-before hover-after');
            self.prev('.separator').addClass('hover-before');
            self.next('.separator').addClass('hover-after');
        },function(){
            var self = $(this);
            self.prev('.separator').removeClass('hover-before');
            self.next('.separator').removeClass('hover-after');
        });
});
</script>

</head>

<body>
  <div>
  <div id="menu-content">
	<ul id="menu">
		<li><a href="#">System</a></li>
		<li><a href="#">Maintenance Management</a></li>
		<li><a href="#">Sparepart Account</a></li>
		<li><a href="#">Equipment File</a></li>
		<li><a href="#">Home</a></li>
	</ul>
  </div>
  </div>
</body>
</html>
  • 大小: 529 Bytes
  • 大小: 606 Bytes
  • 大小: 514 Bytes
  • 大小: 59 Bytes
  • 大小: 59 Bytes
0 请登录后投票
   发表时间:2011-01-11   最后修改:2011-01-11
仔细看下效果,通过现象看本质,问题并没有上边的那么复杂,箭头的方向是一致的,鼠标经过的样式也比较固定,背景为纯色。在现在的前提下没必要搬出大车轮子来用,无非是一些末端的遮盖,简单的css即可实现以上的需求。如下:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title>meun</title>
    <style type="text/css">
        html, body, div{
            margin: 0;
            padding: 0;
        }
        .menu{
            float: left;
            padding: 0 20px 0 0;
            _padding: 0 29px 0 0;
            background: #D2D2D2;
            font-size: 0;
        }
        .menu a{
            display: inline-block;
            height: 32px;
            padding: 0 9px 0 0;
            background: url(bg.png) no-repeat right 0;
            color: #333;
            font-size: 12px;
            line-height: 32px;
            text-decoration: none;
        }
        .menu a span{
            display: block;
            padding: 0 10px 0 15px;
        }
        .menu a:hover{
            background: url(bg.png) no-repeat right -35px;
            color: #FFF;
        }
        .menu a:hover span{
            background: #888;
        }
    </style>
</head>
<body>
	<div class="menu">
        <a class="home" href="#"><span>HOME</span></a>
        <a href="#"><span>NEWS1</span></a>
        <a href="#"><span>NEWS2</span></a>
        <a href="#"><span>NEWS3</span></a>
        <a href="#"><span>NEWS4</span></a>
        <a href="#"><span>NEWS5</span></a>
    </div>
</body>
</html>


这是第一种效果的实现,第二种的效果也不难,html结构同第一种的,仅需要稍微调整下css即可了,如下:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title>menu</title>
    <style type="text/css">
        html, body, div{
            margin: 0;
            padding: 0;
        }
        .menu{
            float: left;
            padding: 0 20px 0 0;
            _padding: 0 29px 0 0;
            background: #D2D2D2;
            font-size: 0;
        }
        .menu a{
            display: inline-block;
            height: 32px;
            margin: 0 -9px 0 0;
            padding: 0 9px 0 0;
            background: url(bg.png) no-repeat right 0;
            color: #333;
            font-size: 12px;
            line-height: 32px;
            text-decoration: none;
        }
        .menu a span{
            display: block;
            padding: 0 10px 0 20px;
        }
        .menu a:hover{
            background: url(bg.png) no-repeat right -35px;
            color: #FFF;
        }
        .menu a:hover span{
            background: #888 url(bg.png) no-repeat left 0;
        }
        .menu a.home:hover span{
            background: #888;
        }
    </style>
</head>
<body>
	<div class="menu">
        <a class="home" href="#"><span>HOME</span></a>
        <a href="#"><span>NEWS1</span></a>
        <a href="#"><span>NEWS2</span></a>
        <a href="#"><span>NEWS3</span></a>
        <a href="#"><span>NEWS4</span></a>
        <a href="#"><span>NEWS5</span></a>
    </div>
</body>
</html>

上传下背景图片,

  • 大小: 310 Bytes
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics