本文主要分为两块来写,首先说一下纯 CSS 实现弹出子菜单的原理,接着是一个例子。
一、实现原理
本文试图实现的弹出子菜单是,当鼠标经过菜单项时,子菜单就自动弹出来。实现这一功能的关键技术是使用“:hover”伪类。我们都知道,“:hover”可以实现改变元素的背景、字体、鼠标状态等元素自身的样式。其实,它也可以实现改变子元素的样式。
例如,请看下面的情况:
- <ul class="menu">
- <li><span>main menu 1<b class="caret"></b></span>
- <ul class="sub-menu">
- <li><span>sub menu 1</span></li>
- <li><span>sub menu 2</span></li>
- <li><span>sub menu 3</span></li>
- <li><span>sub menu 4</span></li>
- <li><span>sub menu 5</span></li>
- </ul>
- </li>
- </ul>
使用第一层 ul 的 li 元素的伪类“:hover”是可以实现修改其子元素的样式的。其语法格式如下:
- ul.menu > li:hover > ul{
- display: block;
- }
当然,这只是举个例子,其它的有类似结构的元素也是可以实现的。本文实现弹出子菜单的技术关键就是这一个样式了。
二、一个例子
实现效果:
实现代码如下:
- <html >
- <head>
- <title>Dropdown menu without JavaScript</title>
- </head>
- <body>
- <style type="text/css">
- #chenishr{
- background: #489382;
- width: 100%;
- height: 35px;
- line-height: 35px;
- }
- #chenishr ul.menu{
- width: 600px;
- height: 35px;
- line-height: 35px;
- margin: 0 auto;
- padding: 0px;
- }
- #chenishr ul.menu > li{
- position: relative;
- list-style: outside none none;
- display: inline-block;
- padding: 0 10px;
- height: 35px;
- border-left: solid 1px #1A7E77;
- }
- #chenishr ul.menu > li:first-child{
- border-left: none;
- }
- #chenishr ul.sub-menu{
- display: none;
- position: absolute;
- top: 35px;
- left: 0px;
- min-width: 236px;
- border: solid 1px #DDDDDD;
- padding: 0px;
- box-shadow: 0 5px 10px rgba(0,0,0,0.2);
- background: #FFFFFF;
- }
- #chenishr ul.sub-menu > li{
- list-style: none;
- padding-left: 10px;
- border-top: 1px solid #EEE;
- }
- #chenishr ul.sub-menu > li:first-child{
- border-top: none;
- }
- #chenishr ul.sub-menu > li:hover{
- background: #EEEEEE;
- cursor: pointer;
- }
- #chenishr ul.menu > li:hover{
- background: #68B7A6;
- cursor: default;
- }
- #chenishr ul.menu > li:hover > ul{
- display: block;
- }
- #chenishr .caret{
- display: inline-block;
- width: 0;
- height: 0;
- vertical-align: top;
- border-top: 4px solid #000;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
- content: "";
- margin: 16px 0px 0px 3px;
- }
- </style>
- <div id="chenishr">
- <ul class="menu">
- <li><span>main menu 1<b class="caret"></b></span>
- <ul class="sub-menu">
- <li><span>sub menu 1</span></li>
- <li><span>sub menu 2</span></li>
- <li><span>sub menu 3</span></li>
- <li><span>sub menu 4</span></li>
- <li><span>sub menu 5</span></li>
- </ul>
- </li>
- <li><span>main menu 2</span></li>
- <li><span>main menu 3<b class="caret"></b></span>
- <ul class="sub-menu">
- <li><span>sub menu 1</span></li>
- <li><span>sub menu 2</span></li>
- <li><span>sub menu 3</span></li>
- <li><span>sub menu 4</span></li>
- <li><span>sub menu 5</span></li>
- </ul>
- </li>
- </ul>
- </div>
- </body>
- </html>
(完)
本文作者: chenishr
本文标题:《纯 CSS 弹出子菜单》
本文地址: http://blog.chenishr.com/?p=238
©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。