实现这一效果利用css和js技术结合

以ul->li为例子

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下拉</title>
</head>
<body>
<div id="sidebar">
<ul>
<li class="submenu">
<a>首页</a>
<ul>
<li><a>首页内容1</a></li>
<li><a>首页内容2</a></li>
<li><a>首页内容3</a></li>
</ul>
</li>
<li>
<a>内容</a>
</li>
<li class="submenu">
<a>新闻</a>
<ul >
<li><a>新闻1</a></li>
<li><a>新闻2</a></li>
<li><a>新闻3</a></li>
<li><a>新闻4</a></li>
<li><a>新闻5</a></li>
</ul>
</li>
</ul> </div>
</body>
</html>
效果图如下:可以看到默认情况下下层菜单会直接出现。与我们要的效果不一致。

所以首先第一步我们需要将下层菜单先隐藏起来,css样式中用,display:none【此元素不会被显示】样式来隐藏二级菜单。

在页面标签<head></head>中加入

<style>
.submenu >ul{
display: none;
}
</style>
效果图如下:

这样我们就默认显示一级菜单,二级隐藏。

第二步:为了实现点击展开菜单效果,即,点击展开被隐藏的元素。为显示之前隐藏的元素,我们要设置一个open类,然后定义open类的css

再在style标签中继续添加以下代码:

<style>

//.....

.open>ul{
display: block;//以块元素显示
}

</style>

当前这里我们添加了一个class,在需要展开的那个li的class里添加open类,例如在首页里面添加open类:

<li class="submenu open">
<a>首页</a>
<ul>
<li><a>首页内容1</a></li>
<li><a>首页内容2</a></li>
<li><a>首页内容3</a></li>
</ul>
</li>
效果如下:

第三步:上面是在需要的地方手动添加open类,我们需要的是点击某个链接的时候下拉,这就是js要做的内容了。

    所有很明显js要做的就是当我们需要(点击一下)的时候添加class类=》addClass,不需要(也是点一下)的时候移除class类=》removeClass。

下面是js代码[注意:需要引入jq包]

<script>
$(function () {
$('.submenu>a').click(
function (e) {
e.preventDefault();//阻止点击a的默认动作
var li = $(this).parents('li');
if (li.hasClass('open')){ //假如有open类,移除
li.removeClass('open')
}else{ //否则添加open类
li.addClass('open')
}
}
)
})
</script>
下面给出完成代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下拉</title>
<style>
.submenu >ul{
display: none;
}
.open>ul{
display: block;
}
</style>
</head>
<body>
<div id="sidebar">
<ul>
<li class="submenu">
<a>首页</a>
<ul>
<li><a>首页内容1</a></li>
<li><a>首页内容2</a></li>
<li><a>首页内容3</a></li>
</ul>
</li>
<li>
<a>内容</a>
</li>
<li class="submenu">
<a>新闻</a>
<ul >
<li><a>新闻1</a></li>
<li><a>新闻2</a></li>
<li><a>新闻3</a></li>
<li><a>新闻4</a></li>
<li><a>新闻5</a></li>
</ul>
</li>
</ul> </div>
<script src="js/jquery.min.js"></script>
<script>
$(function () {
$('.submenu>a').click(
function (e) {
e.preventDefault();//阻止点击a的默认动作
var li = $(this).parents('li');
if (li.hasClass('open')){ //假如有open类,移除
li.removeClass('open')
}else{ //否则添加open类
li.addClass('open')
}
}
)
})
</script>
</body>
</html>
这样就能实现点击某个链接出现下拉,再点击下拉消失,在这个效果上还有变形(其实就是做的好看点,加上jq显示隐藏淡入淡出效果等,这个在之后的变形2会给出),
变形1:每次默认打开的时候让某个菜单展现,手动为那个菜单添加open类,不想要的时候就删除对应li标签class中的open类
变形2:见下篇

最新文章

  1. poj3249Test for Job(记忆化搜索)
  2. golang学习之旅:方法、函数使用心得
  3. sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)
  4. matlab 更改横坐标坐标值的方向
  5. beta-1阶段各组员的贡献分分配
  6. python3爬虫再探之豆瓣影评数据抓取
  7. SPOJ #442 Searching the Graph
  8. 大道至简—SQLite3 使用教学
  9. 以&amp;运行在后台的程序,关闭terminal后,相应进进程自动关闭
  10. 解决EditText跟ScrollView滑动冲突
  11. 杭电oj-1002-A+B Problem
  12. 2.10 while循环应用
  13. js常用随手记
  14. tomcat7启动闪退
  15. CISCO 动态路由(OSPF)
  16. 线段树-hdu3397
  17. Docker 命令收集
  18. linux文件管理 文件权限
  19. 【opencv基础】OpenCV installation stuck at [ 98%] Built target opencv_perf_stitching with no error
  20. spirng中的asm与jdk不兼容&lt;已解决&gt;

热门文章

  1. List集合中对象的排序
  2. #424 Div2 Problem C Jury Marks (二分 &amp;&amp; 暴力 &amp;&amp; std::unique &amp;&amp; 思维)
  3. CodeForces 1100F Ivan and Burgers
  4. 序列式容器————array
  5. 激活navicat premium12
  6. 第四周实验总结&amp;实验报告
  7. 数据结构和算法(Java版)快速学习(栈与队列)
  8. 五、python中MD5加密
  9. 配置Log4j(很详细)【转】
  10. [转]delphi 防止刷新时闪烁的终极解决办法