CSS二级菜单

news/2024/11/9 18:27:03

 0.需求:当鼠标hover到按钮上时,出现下拉菜单导航条。

1.问题拆解:
(1)HTML应该如何组织比较方便合理
因为题中要求下拉菜单位于按钮的正下方,可以使用列表<li>中嵌套无序列表<ul>的方式,设置<ul>padding值为0。
(2)如何实现下拉菜单在鼠标没有hover到按钮上时不出现
使用定位隐藏,设置下拉菜单为绝对定位,设置一个负的很大的值。
(3)如何实现下拉菜单在鼠标hover时出现
设置鼠标hover时,<ul>列表的left值。
<body>

    <li class="btn"><a class="btn1" href="#">按钮</a>

        <ul>

            <li><a href="#">下拉菜单项</a></li>

            <li><a href="#">下拉菜单项</a></li>

            <li><a href="#">下拉菜单项</a></li>

            <li><a class="last" href="#">下拉菜单项</a></li>

        </ul>

    </li>

</body>

(1)首先重置默认的<li>,<a>标签样式

 

        li,

        li a {

            text-decoration: none;

            list-style-type: none;

            font-family: "宋体";

            font-size: 12px;

            color: #000;

        }

(2)设置按钮的边框等,此时我设置的是外层<li>标签中<a>标签的样式,此时将内层<a>标签设置成块级block,这样可以设置宽高,并且后面有用(后面再说)。

       .btn1 {

            display: block;

            border: 1px solid #ddd;

            width: 50px;

            height: 28px;

            text-align: center;

            line-height: 28px;

        }

(3)将下拉菜单隐藏设置成不可见

        ul {

            margin-top: 1px;

            position: absolute; /*设置绝对定位*/

            left: -999em;   /*设置隐藏*/

            padding: 0;  /*离它的父元素的边界为0,所以可以位于父元素<li>的正下方*/

        }

(4)为下拉菜单项添加样式

        ul li a {

            display: inline-block;  /*菜单项宽度未知,设置inline-block宽度为内容宽度*/

            border-top: 1px solid #ddd;

            border-left: 1px solid #ddd;  /*这方法很笨,千万别学我*/

            border-right: 1px solid #ddd;

            height: 30px;

            padding: 0 10px;

            line-height: 30px;

        }

(5)不能忘了最后一个

        .last {

            border-bottom: 1px solid #ddd;

        }

(6)设置鼠标hover时出现下拉菜单

        .btn:hover ul {

            left: auto; /*默认ul的padding为0,位于按钮正下方*/

        }

(7)设置hover时改变背景颜色

        ul li a:hover {

            background-color: #ddd;

        }

(8)此时会有一个小bug,鼠标hover到按钮整一行时都会出现下拉菜单,因为此时最外层的<li>标签是块级元素,块级元素没有设置宽度默认的宽度是父元素宽度,而它的父元素是body,第(6)步写的是hover整个外层<li>标签,所以会出现这种情况。
解决办法:   可以在父元素<li>设置inline-block,子元素设置block,当子元素内容超出时,父元素宽度根据内容变化,所以,可以将按钮hover区域控制按钮边框之内。

        .btn{

            display: inline-block; /*设置btn是inline-block,

            默认宽度为内容宽度,则鼠标只会在hover到按钮区域时才会展开下拉菜单*/

        }

以下是完整代码:

<!DOCTYPE html>

<html>

 

<head>

    <meta charset="utf-8">

    <title>纯css实现下拉菜单</title>

    <style>

        li,

        li a {

            text-decoration: none;

            list-style-type: none;

            font-family: "宋体";

            font-size: 12px;

            color: #000;

        }

        

        .btn1 {

            display: block;

            border: 1px solid #ddd;

            width: 50px;

            height: 28px;

            text-align: center;

            line-height: 28px;

        }

        

        ul {

            margin-top: 1px;

            position: absolute; /*设置绝对定位,宽度为内容宽度*/

            left: -999em;   /*设置隐藏*/

            padding: 0;  /*离它的父元素的边界为0,所以可以位于父元素li的正下方*/

        }

        

        ul li a {

            display: inline-block;  /*菜单项宽度未知,设置inline-block宽度为内容宽度*/

            border-top: 1px solid #ddd;

            border-left: 1px solid #ddd;

            border-right: 1px solid #ddd;

            height: 30px;

            padding: 0 10px;

            line-height: 30px;

        }

        

        .last {

            border-bottom: 1px solid #ddd;

        }

        

        .btn:hover ul {

            left: auto; /*默认ul的padding为0,位于按钮正下方*/

        }

        

        ul li a:hover {

            background-color: #ddd;

        }

        .btn{

            display: inline-block; /*设置btn是inline-block,

            默认宽度为内容宽度,则鼠标只会在hover到按钮区域时才会展开下拉菜单*/

        }

    </style>

</head>

 

<body>

    <li class="btn"><a class="btn1" href="#">按钮</a>

        <ul>

            <li><a href="#">下拉菜单项</a></li>

            <li><a href="#">下拉菜单项</a></li>

            <li><a href="#">下拉菜单项</a></li>

            <li><a class="last" href="#">下拉菜单项</a></li>

        </ul>

    </li>

</body>

</html>

 

 

转载于:https://www.cnblogs.com/yuer20180726/p/11008152.html


http://www.niftyadmin.cn/n/2042158.html

相关文章

基于javaweb的留学生信息交流论坛

该在线留学生交流网站&#xff0c;是一款主要以留学生交流为主题的交流性质的论坛网站&#xff0c;采用了SSH框架技术开发&#xff0c;利用mysql作为数据库&#xff0c;主要展示了留学新闻和论坛交流的功能&#xff0c;方便了交流和对澳洲那边生活的了解&#xff0c;面对面和去…

Java中getResourceAsStream的

from: http://www.cnblogs.com/javayuer/archive/2011/01/02/1924192.html Java中getResourceAsStream的用法 首先&#xff0c;Java中的getResourceAsStream有以下几种&#xff1a; 1. Class.getResourceAsStream(String path) &#xff1a; path 不以’/开头时默认是从此类…

winscp 显示隐藏文件

1. 在winscp右下角&#xff0c;有个显示隐藏文件的数目&#xff0c; 双击即可显示隐藏文件 2. 在面板上配置显示隐藏文件

基于android的反邪教科普信息app(springboot+uinapp+Mysql)

网络的广泛应用给生活带来了十分的便利。所以把反邪教科普管理与现在网络相结合&#xff0c;利用java技术建设反邪教科普app&#xff0c;实现反邪教科普的信息化。则对于进一步提高反邪教科普管理发展&#xff0c;丰富反邪教科普管理经验能起到不少的促进作用。 反邪教科普app能…

基于android的慈善公益机构智慧管理APP(ssm+uinapp+Mysql)

爱心小屋公益机构智慧管理app能够通过互联网得到广泛的、全面的宣传&#xff0c;让尽可能多的用户了解和熟知爱心小屋公益机构智慧管理app的便捷高效&#xff0c;不仅为群众提供了服务&#xff0c;而且也推广了自己&#xff0c;让更多的群众了解自己。对于爱心小屋公益机构智慧…

少儿编程-教育:少儿编程教育

ylbtech-少儿编程-教育&#xff1a;少儿编程教育1.返回顶部 1、少儿编程教育是通过编程游戏启蒙、可视化图形编程等课程&#xff0c;培养学生的计算思维和创新解难能力的课程。中文名&#xff1a;少儿编程教育外文名&#xff1a;kid coding受众人群&#xff1a;6-18岁青少年儿童…

【问题记录】linux中apache升级过程中遇到的一些问题,make[2]: *** [ab] Error 1

Exception&#xff1a;httpd-2.4.39 编译阶段失败&#xff0c;make[2]: *** [ab] Error 1 错误日志如下&#xff1a; -1.la -luuid -lrt -lcrypt -lpthread -ldl -lm -L/usr/kerberos/lib64 -lssl -lcrypto -ldl -lz -luuid -lrt -lcrypt -lpthreadab.o: In function ssl_proce…

apache install

1. download apache: http://www.apachelounge.com/download/VC11/ 2. install V11 微软组件 https://www.microsoft.com/en-us/download/confirmation.aspx?id30679 3. install apache under directory c:\Apache24. No need to change conf\httpd.conf. Else Documen…