-
编写纯 CSS 弹出菜单的原理及实现 By shawl.qiu
摘要:
本文介绍了使用 CSS 编写适用于 Opera, Firefox, IE 的多风格弹出菜单
说明:
编写 CSS 弹出菜单的要点不外乎当鼠标移到目标上时, 显示出隐藏的标签.
要隐藏的标签使用 display:none; 属性进行隐藏.
触发显示隐藏标签主要使用 :hover 属性, 并用 display:block; 显示隐藏的标签.
但由于浏览器对 CSS 的支持并非一致.
对于 Opera 或者 Firefox, 我们可以编写出纯 CSS 菜单, 他们支持任何标签的 :hover 属性.
而对于 IE 浏览器, :hover 只对 a 标签起作用, 但我们可以使用脚本的 onmouseover, onmouseout 模拟出其他标签的 :hover 属性.
因此编写适用于 IE 的 CSS 弹出菜单必须使用到少许的脚本.
目录:
1. 编写直排右侧弹出的 CSS 菜单.
1.1 真正的基于 Opera, Firefox 纯 CSS 弹出菜单
1.2 兼容 IE, Opera, Firefox 的 CSS 弹出菜单(脚本实现)
2. 编写横排底部弹出的 CSS 菜单.
2.1 真正的基于 Opera, Firefox 纯 CSS 弹出菜单
2.2 兼容 IE, Opera, Firefox 的 CSS 弹出菜单(脚本实现)
3. 结论
4. 预览
shawl.qiu
2006-10-01
http://blog.csdn.net/btbtd
1. 编写直排右侧弹出的 CSS 菜单.
1.1 真正的基于 Opera, Firefox 纯 CSS 弹出菜单-
linenum
- HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- " http://www.w3.org/TR/html4/loose.dtd">
Untitled Document - /*
- body{ margin:0px auto; width:768px; /* 定义页面居中显示,*/}
- *{text-decoration:none!important; /* 定义所有链接不显示下划线 */}
- .pmVerticalRightOut{background-color:#fff!important; /* 定义主菜单域背景色 */}
- .pmVerticalRightOut .level{ /* 定义一级类别属性 */
- width:120px; /* 宽度 */
- height:17; /* 高度 */
- position:relative; /* 显示位置为相对位置 */
- display:block; /* 以块模式显示 */
- background-color:#D8D8D8; /* 背景色 */
- padding:0px 2px; /* 文字内补丁间隔 */
- margin:0px 0px 1px 0px; /* 菜单外补丁间隔 */
- }
- .pmVerticalRightOut .level:hover { /* 当鼠标划过一级菜单时 */
- background-color:#6633FF; /* 背景色 */
- color:#FFFFFF; /* 文字颜色 */
- }
- .pmVerticalRightOut .level_{display:none; /* 默认隐藏二级类别 */}
- .pmVerticalRightOut .level:hover .level_ { /* 鼠标划过时触发显示二级类别 */
- display:block; /* 以块显示 */
- left:124124px; /* 相对于一级类别显示的位置 */
- width:120px; /* 宽度 */
- height:auto; /* 高度 */
- top:0px; /* 相对于一级类别所在位置的顶端 */
- background-color:#EFEFEF; /* 定义背景色 */
- position:absolute; /* 位置为绝对位置 */
- }
- .pmVerticalRightOut .level:hover .level_ .level_title {
- /* 定义二级类别标题样式 */
- font-weight:bold; /* 字体加粗 */
- background-color:#A7ADFE; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmVerticalRightOut .level:hover .level_ a:hover {
- /* 定义二级类别链接显示样式 */
- background-color:#F83658; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmVerticalRightOut .level_ * {
- /* 定义所有二级类别通用属性 */
- display:block; /* 以块显示 */
- color:black; /* 文字颜色 */
- padding:0px 2px; /* 内补丁间隔 */
- }
- /*]]>*/
-
level 4
1.2 兼容 IE, Opera, Firefox 的 CSS 弹出菜单(脚本实现)-
linenum
- HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- " http://www.w3.org/TR/html4/loose.dtd">
Untitled Document - /*
- body{ margin:0px auto; width:768px; /* 定义页面居中显示,*/}
- *{text-decoration:none!important; /* 定义所有链接不显示下划线 */}
- /* ------------------- start 针对 Opera, Firefox 的 CSS 弹出菜单 -------------------*/
- .pmVerticalRightOut{background-color:#fff!important; /* 定义主菜单域背景色 */}
- .pmVerticalRightOut .level{ /* 定义一级类别属性 */
- width:120px; /* 宽度 */
- height:17; /* 高度 */
- position:relative; /* 显示位置为相对位置 */
- display:block; /* 以块模式显示 */
- background-color:#D8D8D8; /* 背景色 */
- padding:0px 2px; /* 文字内补丁间隔 */
- margin:0px 0px 1px 0px; /* 菜单外补丁间隔 */
- }
- .pmVerticalRightOut .level:hover { /* 当鼠标划过一级菜单时 */
- background-color:#6633FF; /* 背景色 */
- color:#FFFFFF; /* 文字颜色 */
- }
- .pmVerticalRightOut .level_{display:none; /* 默认隐藏二级类别 */}
- .pmVerticalRightOut .level:hover .level_ { /* 鼠标划过时触发显示二级类别 */
- display:block; /* 以块显示 */
- left:124124px; /* 相对于一级类别显示的位置 */
- width:120px; /* 宽度 */
- height:auto; /* 高度 */
- top:0px; /* 相对于一级类别所在位置的顶端 */
- background-color:#EFEFEF; /* 定义背景色 */
- position:absolute; /* 位置为绝对位置 */
- }
- .pmVerticalRightOut .level:hover .level_ .level_title {
- /* 定义二级类别标题样式 */
- font-weight:bold; /* 字体加粗 */
- background-color:#A7ADFE; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmVerticalRightOut .level:hover .level_ a:hover {
- /* 定义二级类别链接显示样式 */
- background-color:#F83658; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmVerticalRightOut .level:hover .level_ * {
- /* 定义所有二级类别通用属性 */
- display:block; /* 以块显示 */
- color:black; /* 文字颜色 */
- padding:0px 2px; /* 内补丁间隔 */
- }
- /* ------------------- end 针对 Opera, Firefox 的 CSS 弹出菜单 -------------------*/
- /* ------------------- start 针对 IE 的 CSS 弹出菜单 -------------------*/
- .levelIe{ /* 定义一级类别属性 */
- width:120px; /* 宽度 */
- height:17; /* 高度 */
- position:relative; /* 显示位置为相对位置 */
- display:block; /* 以块模式显示 */
- background-color:#D8D8D8; /* 背景色 */
- padding:0px 2px; /* 文字内补丁间隔 */
- margin:0px 0px 1px 0px; /* 菜单外补丁间隔 */
- }
- .levelIe .level_ { /* 鼠标划过时触发显示二级类别 */
- display:block; /* 以块显示 */
- left:124124px; /* 相对于一级类别显示的位置 */
- width:120px; /* 宽度 */
- height:auto; /* 高度 */
- top:0px; /* 相对于一级类别所在位置的顶端 */
- background-color:#EFEFEF; /* 定义背景色 */
- position:absolute; /* 位置为绝对位置 */
- }
- .levelIe .level_ .level_title {
- /* 定义二级类别标题样式 */
- font-weight:bold; /* 字体加粗 */
- background-color:#A7ADFE; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .levelIe .level_ a:hover {
- /* 定义二级类别链接显示样式 */
- background-color:#F83658; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .levelIe .level_ * {
- /* 定义所有二级类别通用属性 */
- display:block; /* 以块显示 */
- color:black; /* 文字颜色 */
- padding:0px 2px; /* 内补丁间隔 */
- }
- /* ------------------- end 针对 IE 的 CSS 弹出菜单 -------------------*/
- /*]]>*/
- <script> </script>
- //
- if (navigator.appName=="Microsoft Internet Explorer") {
- function fPmVerticalRightOut() {
- var getItem = document.getElementById("pmVerticalRightOut").getElementsByTagName("div");
- for (var i=0; i
- getItem[i].onmouseover=function() {
- if( this.className=="level"){
- this.className="levelIe";
- }
- }
- getItem[i].onmouseout=function() {
- if( this.className=="levelIe"){
- this.className="level";
- }
- }//css popup menu script by shawl.qiu
- }
- }
- window.onload=fPmVerticalRightOut;
- }
- //]]>
level 4
2. 编写横排底部弹出的 CSS 菜单.
2.1 真正的基于 Opera, Firefox 纯 CSS 弹出菜单-
linenum
- HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- " http://www.w3.org/TR/html4/loose.dtd">
Untitled Document - /*
- body{ margin:0px auto; width:768px; /* 定义页面居中显示,*/}
- *{text-decoration:none!important; /* 定义所有链接不显示下划线 */}
- .pmHorizontalBottomOut{background-color:#fff!important; /* 定义主菜单域背景色 */}
- .pmHorizontalBottomOut .level{ /* 定义一级类别属性 */
- width:120px; /* 宽度 */
- height:17; /* 高度 */
- position:relative; /* 显示位置为相对位置 */
- display:block; /* 以块模式显示 */
- background-color:#D8D8D8; /* 背景色 */
- padding:0px 2px; /* 文字内补丁间隔 */
- margin:0px 1px 0px 0px; /* 菜单外补丁间隔 */
- float:left;
- }
- .pmHorizontalBottomOut .level:hover { /* 当鼠标划过一级菜单时 */
- background-color:#6633FF; /* 背景色 */
- color:#FFFFFF; /* 文字颜色 */
- }
- .pmHorizontalBottomOut .level_{display:none; /* 默认隐藏二级类别 */}
- .pmHorizontalBottomOut .level:hover .level_ { /* 鼠标划过时触发显示二级类别 */
- display:block; /* 以块显示 */
- width:124124px; /* 宽度 */
- height:auto; /* 高度 */
- margin:0px -2px 0px -2px; /* 外补丁 */
- background-color:#EFEFEF; /* 定义背景色 */
- position:absolute; /* 位置为绝对位置 */
- }
- .pmHorizontalBottomOut .level:hover .level_ .level_title {
- /* 定义二级类别标题样式 */
- font-weight:bold; /* 字体加粗 */
- background-color:#A7ADFE; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmHorizontalBottomOut .level:hover .level_ a:hover {
- /* 定义二级类别链接显示样式 */
- background-color:#F83658; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmHorizontalBottomOut .level_ * {
- /* 定义所有二级类别通用属性 */
- display:block; /* 以块显示 */
- color:black; /* 文字颜色 */
- padding:0px 2px; /* 内补丁间隔 */
- }
- /*]]>*/
-
level 4
2.2 兼容 IE, Opera, Firefox 的 CSS 弹出菜单(脚本实现)-
linenum
- HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- " http://www.w3.org/TR/html4/loose.dtd">
Untitled Document - /*
- body{ margin:0px auto; width:768px; /* 定义页面居中显示,*/}
- *{text-decoration:none!important; /* 定义所有链接不显示下划线 */}
- /* ------------------- start 针对 Opera, Firefox 的 CSS 弹出菜单 -------------------*/
- .pmHorizontalBottomOut{background-color:#fff!important; /* 定义主菜单域背景色 */}
- .pmHorizontalBottomOut .level{ /* 定义一级类别属性 */
- width:120px; /* 宽度 */
- height:17; /* 高度 */
- position:relative; /* 显示位置为相对位置 */
- display:block; /* 以块模式显示 */
- background-color:#D8D8D8; /* 背景色 */
- padding:0px 2px; /* 文字内补丁间隔 */
- margin:0px 1px 0px 0px; /* 菜单外补丁间隔 */
- float:left;
- }
- .pmHorizontalBottomOut .level:hover { /* 当鼠标划过一级菜单时 */
- background-color:#6633FF; /* 背景色 */
- color:#FFFFFF; /* 文字颜色 */
- }
- .pmHorizontalBottomOut .level_{display:none; /* 默认隐藏二级类别 */}
- .pmHorizontalBottomOut .level:hover .level_ { /* 鼠标划过时触发显示二级类别 */
- display:block; /* 以块显示 */
- width:124124px; /* 宽度 */
- height:auto; /* 高度 */
- margin:0px -2px 0px -2px; /* 外补丁 */
- background-color:#EFEFEF; /* 定义背景色 */
- position:absolute; /* 位置为绝对位置 */
- }
- .pmHorizontalBottomOut .level:hover .level_ .level_title {
- /* 定义二级类别标题样式 */
- font-weight:bold; /* 字体加粗 */
- background-color:#A7ADFE; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmHorizontalBottomOut .level:hover .level_ a:hover {
- /* 定义二级类别链接显示样式 */
- background-color:#F83658; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .pmHorizontalBottomOut .level_ * {
- /* 定义所有二级类别通用属性 */
- display:block; /* 以块显示 */
- color:black; /* 文字颜色 */
- padding:0px 2px; /* 内补丁间隔 */
- }
- /* ------------------- end 针对 Opera, Firefox 的 CSS 弹出菜单 -------------------*/
- /* ------------------- start 针对 IE 的 CSS 弹出菜单 -------------------*/
- .levelIe{ /* 定义一级类别属性 */
- width:120px; /* 宽度 */
- height:17; /* 高度 */
- position:relative; /* 显示位置为相对位置 */
- display:block; /* 以块模式显示 */
- background-color:#D8D8D8; /* 背景色 */
- padding:0px 2px; /* 文字内补丁间隔 */
- margin:0px 1px 0px 0px; /* 菜单外补丁间隔 */
- float:left;
- }
- .levelIe { /* 当鼠标划过一级菜单时 */
- background-color:#6633FF; /* 背景色 */
- color:#FFFFFF; /* 文字颜色 */
- }
- .levelIe .level_ { /* 鼠标划过时触发显示二级类别 */
- display:block; /* 以块显示 */
- width:124124px; /* 宽度 */
- height:auto; /* 高度 */
- margin:0px -2px 0px -2px; /* 外补丁 */
- background-color:#EFEFEF; /* 定义背景色 */
- position:absolute; /* 位置为绝对位置 */
- }
- .levelIe .level_ .level_title {
- /* 定义二级类别标题样式 */
- font-weight:bold; /* 字体加粗 */
- background-color:#A7ADFE; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .levelIe .level_ a:hover {
- /* 定义二级类别链接显示样式 */
- background-color:#F83658; /* 背景色 */
- color:white; /* 文字颜色 */
- }
- .levelIe .level_ * {
- /* 定义所有二级类别通用属性 */
- display:block; /* 以块显示 */
- color:black; /* 文字颜色 */
- padding:0px 2px; /* 内补丁间隔 */
- }
- /* ------------------- end 针对 IE 的 CSS 弹出菜单 -------------------*/
- /*]]>*/
- <script> </script>
- //
- if (navigator.appName=="Microsoft Internet Explorer") {
- function fPmHorizontalBottomOut() {
- var getItem = document.getElementById("pmHorizontalBottomOut").getElementsByTagName("div");
- for (var i=0; i
- getItem[i].onmouseover=function() {
- if( this.className=="level"){
- this.className="levelIe";
- }
- }
- getItem[i].onmouseout=function() {
- if( this.className=="levelIe"){
- this.className="level";
- }
- }//css popup menu script by shawl.qiu
- }
- }
- window.onload=fPmHorizontalBottomOut;
- }
- //]]>
level 4
3. 结论
以上例子可以看出, 如果已经编写出一个可用的CSS弹出菜单例子, 那要编写出弹出位置在其他地方的 CSS 弹出菜单的话, 只须小小修改一下就 OK.
4. 预览
4.1 1.2 兼容 IE, Opera, Firefox 的 CSS 弹出菜单(脚本实现) 的预览- <script type="text/javascript"> //<![CDATA[ if (navigator.appName=="Microsoft Internet Explorer") { function fPmVerticalRightOut() { var getItem = document.getElementById("pmVerticalRightOut").getElementsByTagName("div"); for (var i=0; i<getItem.length; i++) { getItem[i].onmouseover=function() { if( this.className=="level"){ this.className="levelIe"; } } getItem[i].onmouseout=function() { if( this.className=="levelIe"){ this.className="level"; } }//css popup menu script by shawl.qiu } } function fPmHorizontalBottomOut() { var getItem = document.getElementById("pmHorizontalBottomOut").getElementsByTagName("div"); for (var i=0; i<getItem.length; i++) { getItem[i].onmouseover=function() { if( this.className=="level"){ this.className="levelIe"; } } getItem[i].onmouseout=function() { if( this.className=="levelIe"){ this.className="level"; } }//css popup menu script by shawl.qiu } } //window.onload=fPmHorizontalBottomOut; window.onload=fPmVerticalRightOut,fPmHorizontalBottomOut; } //]]> </script>
0
0
相关文章
CSS如何引入特定组件样式_在Vue单文件组件中编写css
CSS如何利用Sass的Variable Defaults实现默认覆盖_编写易于集成的css插件
CSS如何使用Stylelint工具规范团队代码格式_自动检测并修复css编写规范
CSS如何处理大项目样式冲突_采用BEM命名法编写CSS文件
CSS如何利用Sass的Percentage函数实现网格列宽_通过算术逻辑生成css比例
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。
16
2026.03.11
本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。
23
2026.03.10
本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。
75
2026.03.09
本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。
95
2026.03.06
本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。
218
2026.03.05
本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。
420
2026.03.04
2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!
168
2026.03.04
本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。
222
2026.03.03
本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。
33
2026.03.03
热门下载
相关下载
精品课程
最新文章

