首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

cssjs菜单栏展开收缩

基础概念

CSS(层叠样式表)和JS(JavaScript)是构建网页交互性的两个关键技术。CSS负责页面的样式和布局,而JS则负责页面的动态行为和交互逻辑。

菜单栏展开收缩是一种常见的网页交互效果,通常用于导航菜单。用户点击菜单栏时,菜单项会展开显示子菜单项,再次点击则收缩隐藏子菜单项。

相关优势

  1. 用户体验:提供直观的导航体验,使用户能够轻松访问网站的各个部分。
  2. 界面整洁:在不使用时收缩菜单,保持页面整洁,避免信息过载。
  3. 响应式设计:适应不同屏幕尺寸,确保在移动设备上也能良好显示。

类型

  1. 纯CSS实现:利用CSS的:hover伪类或CSS动画来实现菜单的展开和收缩。
  2. JS实现:通过JavaScript监听点击事件,动态改变菜单的显示状态。
  3. 结合CSS和JS:使用CSS处理样式和动画,使用JS处理逻辑和交互。

应用场景

  • 网站导航菜单
  • 移动应用底部导航栏
  • 侧边栏菜单

示例代码

纯CSS实现

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Menu Toggle</title>
    <style>
        .menu {
            display: flex;
            list-style: none;
            padding: 0;
        }
        .menu-item {
            position: relative;
        }
        .sub-menu {
            display: none;
            position: absolute;
            top: 100%;
            left: 0;
            background-color: #fff;
            border: 1px solid #ccc;
        }
        .menu-item:hover .sub-menu {
            display: block;
        }
    </style>
</head>
<body>
    <ul class="menu">
        <li class="menu-item">
            Home
        </li>
        <li class="menu-item">
            Products
            <ul class="sub-menu">
                <li>Product 1</li>
                <li>Product 2</li>
                <li>Product 3</li>
            </ul>
        </li>
        <li class="menu-item">
            About
        </li>
    </ul>
</body>
</html>

JS实现

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS Menu Toggle</title>
    <style>
        .menu {
            display: flex;
            list-style: none;
            padding: 0;
        }
        .menu-item {
            position: relative;
        }
        .sub-menu {
            display: none;
            position: absolute;
            top: 100%;
            left: 0;
            background-color: #fff;
            border: 1px solid #ccc;
        }
    </style>
</head>
<body>
    <ul class="menu">
        <li class="menu-item">
            Home
        </li>
        <li class="menu-item" onclick="toggleSubMenu(this)">
            Products
            <ul class="sub-menu">
                <li>Product 1</li>
                <li>Product 2</li>
                <li>Product 3</li>
            </ul>
        </li>
        <li class="menu-item">
            About
        </li>
    </ul>

    <script>
        function toggleSubMenu(element) {
            const subMenu = element.querySelector('.sub-menu');
            if (subMenu.style.display === 'block') {
                subMenu.style.display = 'none';
            } else {
                subMenu.style.display = 'block';
            }
        }
    </script>
</body>
</html>

常见问题及解决方法

  1. 菜单展开后无法收缩
    • 原因:可能是JS逻辑错误,导致点击事件未正确触发。
    • 解决方法:检查JS代码,确保点击事件监听器正确绑定,并且逻辑正确处理展开和收缩状态。
  • 菜单在移动设备上显示不正常
    • 原因:可能是CSS媒体查询未正确设置,导致响应式设计失效。
    • 解决方法:添加适当的媒体查询,确保在不同屏幕尺寸下菜单显示正常。
  • 菜单展开动画效果不流畅
    • 原因:可能是CSS动画性能问题,或者浏览器渲染问题。
    • 解决方法:优化CSS动画,减少不必要的重绘和回流,或者使用will-change属性提示浏览器提前优化。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • GridView结合tablayout实现展开收缩功能

    PS:最近有一些粉丝给我留言说怎么实现那种 上面多个item,然后可以展开收缩,当点击了item后下方会出现一些数据,而且item对应多个型号,我当时看到这也就明白了他的意思,我上个图大家就明白了,这是腾讯云文章里的一个...,这是网页端的,意思一样,就不再上移动端的图了 img.png img1-1.png 然后点击上面的按钮下方会有相应的文章出现,这个就是展开收缩功能,所谓item对应的型号可以这样理解,当点击了上面的...,并且调出数据 实现展开收缩的方法可能有很多,今天这个方法个人感觉还是简单易懂的,就是获取到全部数据,然后再定义个只现实的listRow用来存放显示的数据,咱们是一行四列,所以,需要在全部数据中拿出前四个数据...myGVAdapter.notifyDataSetChanged(); FLAG = false; } } }); 到这里GridView就已经可以展开和收缩了...myGVAdapter2.notifyDataSetChanged();这里只通知listview就可以了,GV通知要在btn(展开收缩按钮)中添加。

    3K80

    Typecho1.1仿简书主题小屏幕菜单栏展开优化

    刚刚把大小屏适配功能给还原了,现在继续在还原的基础上进行小屏幕菜单栏展开优化。 可不能瞎改,不然又得改坏。 一、调整菜单栏宽度 介于我的菜单标题最多就两个字,所以宽度可以设置窄一点,美观一些。...原始样式在大屏上展开宽度为170px,小屏上展开宽度为130px。我将它调整为大屏115px,小屏105px。...二、优化小屏菜单栏展开时页面不压缩。 先看看效果图: ? 左边是优化前,右边是优化后。 虽然从图片上来看,左边的图似乎更美观一点,但操作体验却不竟如此。...左图的菜单栏在展开的同时,内容也在跟着变化,以适应菜单栏展开之后剩下的宽度。 而右图的菜单栏展开时,内容没有变化,纯粹是菜单栏的开和关,我认为这样的体验更舒畅一些。...translate(0px,0); margin-left: -0px; padding-left: 0px; position:fixed; } 可以看出,我是在修改了菜单栏宽度的基础上

    59220

    Vue + Element UI 实现权限管理系统 前端篇(八):管理应用状态

    引入背景 像先前我们是有导航菜单栏收缩和展开功能的,但是因为组件封装的原因,隐藏按钮在头部组件,而导航菜单在导航菜单组件,这样就涉及到了组件收缩状态的共享问题。...收缩展开按钮触发收缩状态的修改,导航菜单需要根据收缩状态来设置导航栏的宽度。这样就需要在收缩状态变更时刷新导航菜单样式。后续类似的组件状态共享还会有许多。...使用 Store 4.1 修改状态 在原先响应折叠导航栏的函数内替换原有逻辑,改为发送提交请求来改变收缩状态。 ?...根据收缩状态绑定不同样式,就可以实现导航菜单栏根据收缩状态更新页面效果了。 MenuBar.vue ? ? HeadBar.vue ? ?  Main.vue ? ? 5....封装收缩组件 1. 组件封装  如下图,新建目录和文件,封装收缩组件展开导航栏组件。 ?

    2K20

    干掉visio,这个画图神器真的绝了!!!

    下面用一张图总结一下,diagrams的工作界面主要组成部分: 3.1 菜单栏 File菜单:包含了一系列的文件操作,包括:新建、打开文件、打开最近的文件、保存文件、另存为文件、分享文件、重命名、拷贝文件...Extras菜单:包含了一系列额外的操作,包含:主题、展开、收缩、插件、编辑画图区、配置等。 Help菜单:主要包含一系列全局的操作,包含:搜索、快捷键、关于等。...3.2 工具栏 工具栏中包含了一些常用的功能,比如:图片尺寸、放大、缩小、退回、撤销、删除、在前、在后、背景色、字体颜色、连接、阴影、添加表格、添加图形、全屏、展开、收缩等。...它的功能非常强大,包括:菜单栏、工具栏、左边图形区、画图区、右边样式区、底部等。 同时还介绍了如何进入画图区。 当然本文只是抛砖引玉,给大家介绍了diagrams的一小部分功能。

    90810

    干掉visio,这个画图神器真的绝了!!!

    下面用一张图总结一下,diagrams的工作界面主要组成部分: 3.1 菜单栏 File菜单:包含了一系列的文件操作,包括:新建、打开文件、打开最近的文件、保存文件、另存为文件、分享文件、重命名、拷贝文件...Extras菜单:包含了一系列额外的操作,包含:主题、展开、收缩、插件、编辑画图区、配置等。 Help菜单:主要包含一系列全局的操作,包含:搜索、快捷键、关于等。...3.2 工具栏 工具栏中包含了一些常用的功能,比如:图片尺寸、放大、缩小、退回、撤销、删除、在前、在后、背景色、字体颜色、连接、阴影、添加表格、添加图形、全屏、展开、收缩等。 这些功能真的太实用了。...它的功能非常强大,包括:菜单栏、工具栏、左边图形区、画图区、右边样式区、底部等。 同时还介绍了如何进入画图区。 当然本文只是抛砖引玉,给大家介绍了diagrams的一小部分功能。

    4500

    Android Studio 4.0 稳定版发布了

    2、从菜单栏中选择 View > Tool Windows > Build。...当 Android Studio 分析构建时,它将计算确定构建持续时间的一组任务,并提供可视化帮助你了解每个任务的影响,你还可以通过展开 Warnings 节点来获取有关警告的详细信息。 ?...Flame Chart,Top Down 和 Bottom Up 分析的选项卡现在位于右侧列中,在 Threads 组中,对于系统跟踪记录线程会自动展开,对于其他记录类型默认情况下会折叠起,在线程名称上双击...(或按Enter)以展开或折叠它们。...五、用于代码收缩规则的智能编辑器功能 当打开 R8 的代码收缩规则文件时,Android Studio 现在提供智能编辑器功能,例如:语法突出显示、代码完成和错误检查。

    4.7K20

    Unity & 蓝湖 关于UI工作流优化的思考(二)

    拖入到Unity中Project窗口的Assets目录中的任一文件夹内 3.选中所有切图,在Inspector窗口修改Texture Type为Sprite类型,并点击右下角的Apply 4.在顶部菜单栏...在蓝湖中点击切图的样式信息中的内容即可复制 回到Unity,点击粘贴按钮,将从蓝湖中复制的内容粘贴到对应参数中 8.删除 点击”-“号按钮,可以将该项进行移除 点击清空按钮,可以清空当前所有的配置信息 9.收缩...配置信息过多时,点击收缩按钮,可以关闭所有折叠栏 10.展开 点击展开按钮,可以打开所有折叠栏 11.生成 点击生成后,工具会根据填写的配置信息,在切图所在文件夹中加载指定切图,并将其设置到指定位置...foldoutDic.Clear(); } } if (GUILayout.Button("展开...foldoutDic[elements[i]] = true; } } if (GUILayout.Button("收缩

    84211

    Android开发笔记(一百四十四)高仿支付宝的头部伸缩动画

    之所以要嵌套这么多层,是因为要完成以下功能: 1、CoordinatorLayout嵌套AppBarLayout,这是为了让头部导航栏能够跟随内容视图下拉而展开,跟随内容视图上拉而收缩。...这个内容视图可以是RecyclerView,也可以是NestedScrollView; 2、AppBarLayout嵌套CollapsingToolbarLayout,这是为了定义导航栏下面需要展开和收缩的部分视图...; 3、CollapsingToolbarLayout嵌套Toolbar,这是为了定义导航栏上方无论何时都要显示的长条区域,其中Toolbar还要定义两个不同的样式布局,用于分别显示展开与收缩状态时的工具栏界面...这个渐变动画其实可分为两段: 1、导航栏从展开状态向上收缩时,头部的各控件要慢慢向背景色过渡,也就是淡入效果; 2、导航栏向上收缩到一半,顶部的工具栏要换成收缩状态下的工具栏布局,并且随着导航栏继续向上收缩...如果导航栏是从收缩状态向下展开,则此时相应的做上述渐变动画的取反效果,即: 1、导航栏从收缩状态向下展开时,头部的各控件要慢慢向背景色过渡,也就是淡入效果;同时展开导航栏的下部分布局,并且该布局上的各控件渐渐变得清晰

    1.2K10
    领券