html、css 实现二级菜单

article/2025/8/23 9:53:58

本文中,一级菜单我设计了五个元素(然后给第四个元素设计了二级菜单)

在这里插入图片描述

html:

<nav><ul class="topnav clearfix"><li><a href="">Lorem.</a></li><li><a href="">Ratione.</a></li><li><a href="">Atque!</a></li><li><a href="">Corrupti?</a><div class="submenu"><ul><li>Lorem.</li><li>Possimus?</li><li>Iure.</li><li>Totam!</li><li>Consectetur.</li></ul></div></li><li><a href="">Voluptatum.</a></li></ul>
</nav>

对于css代码,我来逐个讲解

一:解决高度坍塌(清除浮动)

因为一级菜单我是用ul li来做的,虽然ul是块级元素(display: block;),但是lidisplay: list-item;,多个是一行一行显示的

所以我使用了浮动,来让多个li元素排在一行

但是,li使用了浮动之后,会导致一个问题,高度坍塌: li的父元素ul是常规流元素块盒,它的height默认值为auto,此时,它的高度不会计算不考虑浮动元素;由于ul里面只有li元素,所以会导致一个悲剧,ul元素的height为0

高度坍塌解决办法:

(在html中,我给ul元素一个类选择器.clearfix

css:

.clearfix::after{content: "";display: block;clear: both;
}

在这里插入图片描述

二:实现一级菜单

在这里插入图片描述

css:

nav {background: #008c8c;color: #fff;height: 40px;line-height: 40px;
}nav .topnav>li{float: left;padding: 0 20px;height: 40px;width: 20%;box-sizing: border-box;text-align: center;position: relative;
}

文字垂直居中(line-height与height取相同的值):

height: 40px;
line-height: 40px;

文字水平居中:

text-align: center;

在这里插入图片描述
ul下的5个li元素,作为一级菜单,我将他们的宽度以百分比设置width: 20%,宽度百分比的值是相对于其包含块(其父元素ul)的width,而ul我没有设置宽度,它采用默认值width: auto,而且因为ul元素是常规流元素,此时,它的width会把水平剩余空间吸收掉。(可以这么认为:ul的宽度就是视口的宽度(视口:浏览器的可视窗口))

然后我又用到了css3的一个属性:

box-sizing: border-box;

每一个html元素,都可以看作一个盒子:

在这里插入图片描述
以我给的这个图为例,1536 × 40 ,1536为width,40为height (默认情况下,height、width决定的区域:内容盒,content-box)

但是

box-sizing

  • css3中的新属性,改变宽高(height、width)的影响范围
  • box-sizing: border-box;宽高影响范围为边框盒
    比如说:(width = 内容宽 + padding-left + padding-right + border-left + border-right),当width设置好之后,内容宽的值会随border和padding的取值而随之变化
  • 注意啊:box-sizing的取值只有content-box和border-box;前两者加paddding-box是background-clip的取值
  • 内容盒 content-box = 内容区(默认情况下,height、width决定的区域)
  • 填充盒 padding-box = 内容区 + 填充区
  • 边框盒 border-box = 内容区 + 填充区 + 边框

所以效果上来看就是:一级菜单中的5个元素,在水平方向上各占20%

我给一级菜单的li元素还设置了一个属性:相对定位

它是用来把一级菜单的li元素的内容盒给二级菜单作为包含块的:

  • 包含块:决定了盒子的排列规则
  • 将二级菜单的元素设置为绝对定位position: absolute;
  • 绝对定位元素的包含块:找祖先元素中第一个定位元素,改元素的填充盒;若找不到,则它的包含块为整个网页(初始化包含块)
    这样,二级菜单就会相对于其对应的一级菜单的内容盒进行定位了

在这里插入图片描述

三:实现二级菜单

以免篇幅拖沓,本文只给一级菜单的第四个li元素设计了二级菜单
在这里插入图片描述

  • 一般,页面上只显示一级菜单,需要点击一级菜单,才会出现相应的二级菜单
  • 需要用到伪类:hover
    鼠标悬停在元素上时的样式

(在html中,我给一级菜单的第四个li元素设置了一个选择器.submenu
css:

nav .topnav>li:hover{color: #f40;font-weight: bold;
}nav .topnav>li .submenu{position: absolute;right: 0;width: 100%;background-color: #008c8c;color: #fff;text-align: left;line-height: 1.5;/* 不生成盒子(即隐藏) */display: none;
}nav .topnav>li:hover .submenu{display: block;padding: 10px;
}

补充一嘴:在css中书写选择器时,比如:

nav .topnav>li:hover

选中nav元素下的.topnav元素的子元素li,并且有鼠标悬停在上面

  • 空格,选后代元素
  • >,选子元素

自此,本文结束,虽然比较简陋,但是二级菜单的基本结构是搭建起来了(一级菜单用浮动,二级菜单用定位)
在这里插入图片描述


http://chatgpt.dhexx.cn/article/QJqA2A8C.shtml

相关文章

二级菜单

原理&#xff1a; 其核心就是两层ul进行嵌套当鼠标移动到一级菜单时&#xff0c;其对应的二级菜单自动展开 下面我们来看具体的代码&#xff1a; <div class"menu-box"><ul><li><a href"#">首页</a></li><li>…

二级菜单小知识

在许多网页中&#xff0c;我们经常会见到二级菜单&#xff0c;例如以下这种 这个是wegame官网实现的二级菜单&#xff0c;但我在实现这种菜单时也遇到过以下这种情况&#xff1a; 很明显&#xff0c;在我刚打开二级菜单想要触碰时菜单就消失了&#xff0c;这是因为什么呢&#…

HTML+CSS实现简单的二级菜单

HTMLCSS实现简单的二级菜单&#xff0c;效果如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>二级菜单</title><style>body,ul,li,a,img{margin: 0;padding: 0;}ul,li{list-style: none;}a{…

gta5组装电脑配置推荐2021适合玩gta5游戏电脑清单

CPU Intel 酷睿i5 10400F 主板 华硕TUF GAMING B460M-PLUS (WI-FI) 我用的gta5组装电脑配置怎么搭配更好用 这些点很重要看过你就懂了 http://www.adiannao.cn/du 内存 金士顿骇客神条FURY 8GB DDR4 2666 RGB 固态硬盘 西部数据Blue SN550 NVME SSD&#xff08;500GB&#xff…

6v网站迅雷下载电影任务出错

刚刚又试了下&#xff0c;第二步的复制链接其实可以直接在电影的超链接那右键&#xff0c;一样可以复制。 至于精简版下载100%可能出现的无法完成&#xff0c;在下载文件夹中找到对应电影&#xff0c;以mp4为后缀重命名即可 ------------------------------------------------…

一款非常好用的下载工具-Free Download Manager-可代替迅雷使用的下载工具

迅雷作为老牌的下载工具&#xff0c;应该都使用过&#xff0c;然而当前的迅雷在越来越大的基础上&#xff0c;新增了很多非下载的功能&#xff0c;为了追求纯粹的下载体验的用户来说&#xff0c;未免有些冗余。而Free Download Manager作为免费的下载软件&#xff0c;可以替代迅…

迅雷(pc)

今天给大家带来的是迅雷VIP尊享版&#xff0c;该版本的主要优势在于可以右边栏默认关闭状态&#xff0c;启动时不会先显示后隐藏&#xff0c;去除全部广告和无用组件让我们时时刻刻都享受VIP的服务。这是一款大神破解的迅雷软件&#xff0c;直接下载安装软件&#xff0c;支持手…

比较普遍的C语言游戏

我不怎么会教人写什么东西&#xff0c;我就写了几个C语言的游戏&#xff0c;可以自学&#xff0c;首先要下载VC&#xff0c;百度搜索VC找到官网下载&#xff0c;其他网站是捆绑&#xff0c;好&#xff0c;现在写代码了。 先教大家如何用VC打开C语言编写窗口 将VC下载完成点开之…

C语言实现入门级小游戏——三子棋

今天博主将为大家带来C语言入门级小游戏——三子棋&#xff08;井字棋&#xff09;的详细介绍&#xff0c;希望这篇文章对大家能有帮助 。 在编程的学习过程中&#xff0c;编写一些中这样的小游戏&#xff0c;是非常有乐趣的事情&#xff0c;完成之后会非常非常有成就感&…

【C语言小游戏】猜数字游戏

hello&#xff0c;csdn的小伙伴呢&#xff0c;在前面&#xff0c;我们已经初步了解了c语言&#xff0c;并且系统的学习了分支与循环的内容。今天我们就将分支与循环的内容综合应用一下&#xff0c;来做一个很简单猜数字小游戏。 目录 程序的需求以及最终代码展示 一、实现打印…

C语言学习推荐---小游戏

文章目录 控制台文字游戏srand、rand、time猜拳游戏 控制台动作游戏运动的小球贪吃蛇 音乐图形界面easyx介绍 后续 学习c语言的时候&#xff0c;想写例子&#xff0c;但是课后习题又太枯燥怎么办&#xff1f; 写小游戏可以锻炼我们的编程抽象能力和思维&#xff0c;而且比较有趣…

c语言入门级小游戏·飞机(1.0版)| 激发你的编程兴趣(50~100行代码)

目录 制作一个可移动的飞机 发射激光 设置一个可击中的障碍物 完整代码 声明&#xff1a;本游戏参考《c语言课程设计与游戏开发实践教程》。 先来放一个效果图 怎么样&#xff0c;真的是新手级别吧&#xff1f; &#xff08;效果视频c语言练习草稿_game1.2.5飞机-CSDN直播…

C语言小游戏之扫雷完整版

C语言小游戏之扫雷 一.游戏介绍二.游戏步骤及实现的功能1.初始化雷盘2.打印雷盘3.随机布置雷4.玩家排雷5.防止玩家第一次被炸死6.统计所选位置周围八个位置中雷的个数7.递归拓展已选位置周围的区域8.标记雷及取消标记 一.游戏介绍 看到这张图片&#xff0c;相信很多小伙伴都非常…

C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

目录 一.前言二.资源环境的配置三.游戏整体构思1.游戏的开始与结束(菜单)2.创建二维数组用来布置雷和排查雷的信息3.初始化棋盘4.打印棋盘5.布置雷6.排查雷 四.所有代码及效果展示 一.前言 人尽皆知的扫雷小游戏&#xff0c;原理简单&#xff0c;写法也简单&#xff0c;我会通…

c语言代码怎样制作成一个游戏?

游戏背景 《球球大作战》是Superpop一款自主研du发的免费手机网络游戏。 以玩家间的实时互动PK产生游戏乐趣为设计宗旨&#xff0c;通过简单的规则将玩家操作直接转化为游戏策略&#xff0c;体验智谋碰撞的战斗乐趣。 游戏的基本操作包括键盘按下&#xff08;上下左右四个方向…

[ C语言 ] 用C语言实现小游戏 ---- 三子棋 代码 + 解析

前言 本篇文章记录了用C语言实现三子棋小游戏&#xff0c;主要目的是对之前C语言知识学习的巩固&#xff0c;联系各个知识&#xff0c;以及怎么样实际使用各个知识。 一、三子棋的游戏规则 玩家将会看到一个3X3的网格棋盘&#xff0c;默认玩家先下棋&#xff0c;电脑后下棋。 …

一个好玩的小游戏(纯C语言编写)

最近在看知乎是发现了一个这一个专栏 https://zhuanlan.zhihu.com/c2game 从中获取的许多知识&#xff0c;本文中的游戏也是从里面学到的&#xff0c;不过本人又自己加了一些功能。 这是一个类似于飞机大战的游戏&#xff0c;不过目前代码量比较小&#xff0c;所以看起来非常…

【用游戏学C语言】几个基本的小游戏的实现(缓慢更新中~)

目录 ​更新说明 前言 1.相关函数的简单介绍&#xff08;预备知识&#xff09; &#xff08;1&#xff09;关于函数getch() &#xff08;2&#xff09;关于函数system() &#xff08;3&#xff09;关于函数sleep() &#xff08;4&#xff09;关于函数kbhit() &#xff…

【C语言】游戏项目:《疯狂赛车》,每个人都要加油活下去

序 交换一个苹果&#xff0c;得到一个苹果&#xff1b;交换一种思想&#xff0c;得到一种思想。选择与你才干&#xff0c;性格不同的人&#xff0c;他可以弥补你的缺陷。 嗨&#xff01;这里是狐狸~~ 最近有点网抑云了&#xff0c;脑子很乱&#xff0c;不晓得想些什么&#…

Qt学习之QFile和QFileInfo

Qt项目中对文件操作是必不可少的。顾名思义&#xff1a;QFile是文件对象类&#xff0c;QFileInfo是文件信息对象类&#xff0c;结合例子我们看一下用法。 读的文件内容如下&#xff0c;以字符 “#” 或者 “;” 开始的为注释行。 [Extern_Item1] ;名称 Namelibccgext_cvi_64.so…