03#Web 实战:实现下拉菜单
实现过程
实现一个简易的鼠标悬停菜单项显示其子项的下拉框控件。将用到 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);
}
}
03#Web 实战:实现下拉菜单的更多相关文章
- iOS 下拉菜单 FFDropDownMenu自定义下拉菜单样式实战-b
Demo地址:https://github.com/chenfanfang/CollectionsOfExampleFFDropDownMenu框架地址:https://github.com/chen ...
- 符合web标准的网页下拉菜单
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> <head> < ...
- OAF_开发系列07_实现OAF下拉菜单的上下联动Poplist Synchor(案例)
20150706 Created By BaoXinjian
- jQuery点击页面其他部分隐藏下拉菜单
一.开发小要点 web页面中,我们一般不用select.option来实现下拉菜单效果,因为下拉框的样式丑且难以美化,所以我们选择控制ul显示隐藏来实现同样且高大上的效果,但是不能像下拉框那样点击页面 ...
- JS实现带复选框的下拉菜单
这段时间在做后台的时候需要一个可以复选的下拉菜单,用到的是easyUI中的combo的Demo,先看看官方easyUI:http://www.jeasyui.com/documentation/ind ...
- jquery实现多级下拉菜单
支持多种浏览器,体验效果:http://keleyi.com/keleyi/phtml/jqmenu/4.htm 多级菜单,理论上支持无限多的层级,文件结构非常简单的,以下是完整代码: <!DO ...
- 超简洁的CSS下拉菜单
效果体验:http://hovertree.com/texiao/css/3.htm HTML文件代码: <!DOCTYPE html> <html xmlns="http ...
- 3D滚动下拉菜单-简直不要太任性
预览 先看看最终效果 简介 由来 最初看到这个是在14年5月,猛戳这里:妙味官网,觉得非常炫.想要做出来,所以就开始学习web. 那时候是做c/s的,也因为这个走上了b/s之路,(゚Д゚≡゚Д゚) 现 ...
- Bootstrap框架(基础篇)之按钮,网格,导航栏,下拉菜单
一,按钮 注意:虽然在Bootstrap框架中使用任何标签元素都可以实现按钮风格,但个人并不建议这样使用,为了避免浏览器兼容性问题,个人强烈建议使用button或a标签来制作按钮. 框架中提供了基础按 ...
- 24个 HTML5 & CSS3 下拉菜单效果及制作教程
下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...
随机推荐
- 【软考-中级-其他】03、NoSQL和云计算
其他 NoSQL概述 分类 文档存储数据库:MongoDB 采用BSON格式完成存储数据和网络数据交换 BSON格式:JSON的二进制编码格式 逻辑结构包括:数据库.集合(相当于关系数据库的表).文档 ...
- 【Shell脚本案例】案例3:批量创建100个用户并设置密码
一.背景 新入职员工创建用户 二.常规操作 useradd zhangsan ls /home/ password zhangsan 三.考虑问题 1.实现自动输入密码,将其存到文件中 passwor ...
- 【大数据面试】Hbase:数据、模型结构、操作、读写数据流程、集成、优化
一.概述 1.概念 分布式.可扩展.海量数据存储的NoSQL数据库 2.模型结构 (1)逻辑结构 store相当于某张表中的某个列族 (2)存储结构 (3)模型介绍 Name Space:相当于数据库 ...
- OpenAI 推出超神 ChatGPT 注册教程来了
前几天,OpenAI 推出超神 ChatGPT,非常火爆.但是呢,因为不可抗力原因,大部分人无法体验到.这里我分享一下注册的攻略. 准备 首先能能访问 Google(前置条件,不能明确说,懂得都懂) ...
- adb安装电视apk
adb 是什么? 百度说明:adb工具即Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在某些特殊的情况下进入不了系统 ...
- tomcat下找不到运行的程序文件
1.重新部署tomcat(删掉原有的tomcat) 2.更改部署路径
- python 之字符串的使用
在python中,字符串是最常用的数据类型,通常由单引号(' ').双引号(" ").三重引号(''' ''',""" ""&qu ...
- Typora + PicGo + B2 Cloud Storage 实现个人免费图床
前言 22年底终于购入了Typora,想着之前使用时候的痛点就是在图片管理这一块. 我尝试过使用在线的图床工具进行图片上传再将链接放入Typora,但说实话非常麻烦. 也尝试过就将图片保存在本地,但当 ...
- Java学习笔记:2022年1月11日
Java学习笔记:2022年1月11日 摘要:这篇笔记主要讲解了一些数据在计算机中的存在方式相关的知识点,并由此延伸出了数据在计算机中的操作以及一些数据结构的知识. @ 目录 Java学习笔记:2 ...
- flutter Error:Cannot run with sound null safety, because the following dependencies don't support
学习flutter新版本的路上,真的是一天一个新惊喜啊 今天遇到的坑是 Flutter 升级高版本后,运行和build 报错 Error: Cannot run with sound null saf ...