Web 前端实战:JQ 实现下拉菜单
实现过程
实现一个简易的鼠标悬停菜单项显示其子项的下拉框控件。将用到 CSS 绝对定位、流式布局、动画等;JQuery 鼠标移入和移出事件、DOM 查找。效果图如下:

HTML 结构:
<div class="dropdown-group">
<div class="dropdown">
<div class="label">菜单1</div>
<div class="items">
<div class="item">菜单1-1</div>
</div>
</div>
</div>
使用流式布局让div.dropdown-group下的所有div.dropdown横向排列:
.dropdown-group {
cursor: pointer;
height: 40px;
width: 220px;
display: flex;
justify-content: space-between;
align-content: center;
align-items: center;
background-color: #7979DE;
}
div.dropdown 的高和宽都要和父元素保持一致,并且定位是相对定位,因为其子项都是相对于它进行的,绝对定位和相对定位:
.dropdown {
height: 100%;
width: 100%;
position: relative;
}
div.dropdown div.items也就是下拉所展示的元素,相对于其父元素进行定位,自身是绝对定位,top的值和父元素的高度一致,即 40px,left的值设置 0px,左上角对齐父元素的左下角。display在鼠标没有悬停时设置为 none。
当鼠标悬停菜单时,div.dropdown div.items的display设置为 block。动画有 0.5s 的延迟,从 0 高度到最大高度过程中,元素溢出时必须要隐藏,即overflow-y: hidden。
.dropdown .items {
display: none;
width: 100%;
padding: 5px;
position: absolute;
top: 40px;
left: 0;
overflow-y: hidden;
box-sizing: border-box;
background-color: #00B7FF;
}
.dropdown:hover .items {
display: block;
}
最后,轮到 JQ 部分,当鼠标悬停时,查询每一个子项的总高度,以及添加样式和移除样式:
$(".dropdown")
.mouseenter(function () {
let $items = $(this).find("div.items");
$(this).css({ "--items-height": `${ $items.height() }px` });
$items.addClass("show-items");
})
.mouseleave(function () {
let $items = $(this).find("div.items");
$items.removeClass("show-items");
});
.show-items {
animation: ShowItems 0.5s ease-in-out;
}
@keyframes ShowItems {
0% {
height: 0;
}
100% {
height: var(--items-height)
}
}
Gitee 仓库
https://gitee.com/shiramashiro/web-learning/tree/main/src/03.案例
Web 前端实战:JQ 实现下拉菜单的更多相关文章
- jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身)
jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身) //点击非当前下拉菜单区域时,关闭下拉菜单 $(document).mousedown(function ...
- jq自定义下拉菜单,当用户点击非自身元素(下拉菜单)本身时关闭下拉菜单
jq自定义下拉菜单,当用户点击非自身元素(下拉菜单)本身时关闭下拉菜单 截图: 代码如下: //关闭用户菜单 $(document).mousedown(function(e){ var _con = ...
- jq+css+html简单实现导航下拉菜单
相信导航栏下拉菜单是web开发最常见的一个item了.这里就不做介绍了,直接上code. Html部分 <div class="_nav"> <ul id=&qu ...
- html 布局;css3+jq 下拉菜单;table分页动态添加行;html5本地存储;简单易用的html框架
简单好用的html框架,预览图见最后: 源码: 1.页面布局使用table: table 嵌套 +iframe 布局: 2.下拉菜单为jq+css3 动画; css input 无边框,select下 ...
- iOS 下拉菜单 FFDropDownMenu自定义下拉菜单样式实战-b
Demo地址:https://github.com/chenfanfang/CollectionsOfExampleFFDropDownMenu框架地址:https://github.com/chen ...
- Web标准:八、下拉及多级弹出菜单
Web标准:八.下拉及多级弹出菜单 知识点: 1.带下拉子菜单的导航菜单 2.绝对定位和浮动的区别和运用 3.CSS自适应宽度滑动门菜单 1)带下拉子菜单的导航菜单 带下拉子菜单的就是在一级导航下 ...
- 符合web标准的网页下拉菜单
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> <head> < ...
- jQuery 前端复选框 全选 反选 下拉菜单联动
jQuery 页面中复选框全选.反选.下拉联动(级联) <!DOCTYPE html> <html lang="en"> <head> < ...
- Html5+Mui前端框架,开发记录(四):下拉菜单绑定数据、搜索、时间控件
1.下拉菜单绑定数据,选择后回传值 1)html: <div class="mui-input-row"> <label>xxx:</label> ...
随机推荐
- Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景
在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...
- JNPF.java前后端分离框架,SpringBoot+SpringCloud开发微服务平台
JNPF.java版本采用全新的前后端分离架构模式.前后端分离已成为互联网项目开发的业界标准开发方式,通过 nginx+tomcat 等方式有效的进行解耦合,并且前后端分离会为以后的大型分布式架构.弹 ...
- node.js环境安装及环境变量
1.nodejs官网下载对应系统的安装包 2.除了你想自定义安装的路径其他一切一直点next往下走 3.打开cmd命令窗口输入node -v,看到v.xx.xx代表node已经装好 node -v 4 ...
- Eureka入门
一个Eureka中分为eureka server和eureka client.其中eureka server是作为服务的注册与发现中心.eureka client既可以作为服务的生产者,又可以作为服务 ...
- 如何在Vue项目中,通过点击DOM自动定位VScode中的代码行?
作者:vivo 互联网大前端团队- Youchen 一.背景 现在大型的 Vue项目基本上都是多人协作开发,并且随着版本的迭代,Vue 项目中的组件数也会越来越多,如果此时让你负责不熟悉的页面功能开发 ...
- 5种在TypeScript中使用的类型保护
摘要:在本文中,回顾了TypeScript中几个最有用的类型保护,并通过几个例子来了解它们的实际应用. 本文分享自华为云社区<如何在TypeScript中使用类型保护>,作者:Ocean2 ...
- Python双人五子棋
这篇文章旨在介绍一个双人的五子棋程序.再次重申,本人不擅长对代码的可读性进行优化,所以可能有些杂乱(在所难免). 先瞅一眼效果图: 请注意,这个棋子--是这么圆润立体!本程序不需任何素材图片,完全用代 ...
- Idea创建文件夹自动合成一个
在idea中创建文件夹时,它们总是自动合成一个,如下图: 文件夹自动折叠真的很影响效率,可能会引发一些不经意的失误 解决方法: 取消这个地方的勾选 这样就可以正常创建文件夹了
- SAP Smartforms 参数配置
DATA : sf_name TYPE rs38l_fnam. DATA : sf_output_options TYPE ssfcompop. DATA : sf_control_parameter ...
- Pisa-Proxy 之 SQL 解析实践
SQL 语句解析是一个重要且复杂的技术,数据库流量相关的 SQL 审计.读写分离.分片等功能都依赖于 SQL 解析,而 Pisa-Proxy 作为 Database Mesh 理念的一个实践,对数据库 ...