-第1章 HTMLCSS方法实现下拉菜单
方法 实现 下拉菜单
2023-09-11 14:17:02 时间
中英文的自动换行问题
把下面代码中的 javascript
改成 子菜单1
试试, 如果英文的话宽度会自动撑开, 用中文不会, 而直接转行下来。
<ul>
<li><a href="#">javascript</a></li>
<li><a href="#">子菜单2</a></li>
<li><a href="#">子菜单3</a></li>
</ul>
ie7中的a元素的宽高兼容问题
从上面的图上不只是可以看出字转行了。而且宽度也发生了变化
。这个变化在旁边的 chrome 浏览器中是没有的,在右边的ie7中可以看到。
给子菜单中a设置高度
即可。但是高度是解决了,现在还有一个宽度也有问题,那么再设置宽度
即可。
只设置了高度:
设置了宽高:
所以在ie7下要设置好宽高。
完整代码
<!--
Author: XiaoWen
Create a file: 2017-02-27 11:24:01
Last modified: 2017-02-27 13:05:43
Start to work:
Finish the work:
Other information:
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#nav{
background: #eee;
width: 600px;
height: 40px;
margin: 0 auto;
}
ul{
list-style:none;
}
ul li{
float: left;
line-height: 40px;
text-align: center;
position: relative;
}
a{
text-decoration: none;
color: #000;
display: block;
padding: 0 10px;
height: 40px;
}
a:hover{
color: #fff;
background: #666;
}
ul li ul li{
float: none;
background: #eee;
margin-top: 2px;
}
ul li ul{
position: absolute;
left: 0;
top: 40px;
}
ul li ul li a{
width: 80px;
}
ul li ul li a:hover{
background: #06f;
}
ul li ul{
display: none;
}
ul li:hover ul{
display: block;
}
</style>
</head>
<body>
<div id="nav">
<ul>
<li><a href="#">一级菜单1</a></li>
<li><a href="#">一级菜单2</a></li>
<li>
<a href="#">菜单3</a>
<ul>
<li><a href="#">javascript</a></li>
<li><a href="#">子菜单2</a></li>
<li><a href="#">子菜单3</a></li>
</ul>
</li>
<li><a href="#">一级菜单3</a></li>
<li><a href="#">一级菜单4</a></li>
<li><a href="#">一级菜单5</a></li>
</ul>
</div>
</body>
</html>
原理
二级菜单,其实也就是给一级菜单中的其中一个里面再写一个列表。这个列表本来是隐藏 display:none 的,当鼠标移动到一级菜单 li:hover 上时,才显示这个列表。要二级菜单在子一级菜单的位置下,需要给一级菜单 li 设置相对定位。
留下的问题
- 中文字符自动换行的问题,这个只要加上宽度也就可以了。或者强制不换行。
- 上面说到给子a标签添加
固定的宽度和高度
可以避免ie7下面的兼容问题,我们设置了80px的宽度,但是,如果子菜单里面的内容我们不知道,文字个数很多,超过了80px呢? - 上面是在 li 标签上加的 hover 伪类事件,这个在 ie6 中是不可以的。 ie6 只运行 a 标签的伪类事件,而且 a 标签中最好不要包含块类元素。
最后有没有想说什么?做个菜单而已,明明可以很简单, ie7 的宽高问题, ie6 的伪类问题,弄得复杂了起来。这还只是个菜单而已,想想整个网站上的所有页面…… 如果要做好兼容性,复杂程度可想而知。
那么,为了我们的身心健康,为了向前发展的技术, 勇敢的对旧版本浏览器说 NO
。
相关文章
- 朴素贝叶斯算法的python实现方法
- CentOS "libc.so.6: version 'GLIBC_2.14' not found"解决方法,同理'GLIBC_2.15' not found"
- 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
- U方法
- ML之ME:分类预测问题中评价指标(AP/mAP)的简介、使用方法、代码实现、案例应用之详细攻略
- Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份、差异备份、日志备份)、还原、删除、修改数据库等案例)之详细攻略
- ML之XGBoost:XGBoost算法模型(相关配图)的简介(XGBoost并行处理)、关键思路、代码实现(目标函数/评价函数)、安装、使用方法、案例应用之详细攻略
- 一种多源信息融合方法及其应用(Matlab代码实现)
- WebRTC QoS方法之视频发送端NACK实现
- Ubuntu部署Django项目方法详解
- JavaScript实现数字前补“0”的五种方法示例
- git 不小心把某个文件给 add 了 的解决方法
- dao层的泛型实现(2种方法)
- 软件测试 -- 入门 6 软件测试设计方法
- JAVA操作Excel表格:方法一:jxl的使用②:Excel实战之JXL解析读取excel文件
- strlen库函数求字符串的长度和三种模拟实现方法
- pytorch 22 8种Dropout方法的简介 及 基于Dropout用4行代码快速实现DropBlock
- [SQL] 只更新表中某一部分数据的实现方法