纯CSS(无JS)实现的二级弹出菜单效果代码

首先我们需要了解什么是纯CSS实现的二级弹出菜单效果。

二级弹出菜单效果是指,当鼠标指向一级菜单时,二级菜单会在该一级菜单的下方水平展开。通常,这种效果需要JS的支持。但是有些开发者可能不想使用JS,只希望使用CSS来实现。那么这个要怎么做呢?

其实,实现纯CSS的二级弹出菜单效果,并不是一件困难的事情。可以使用CSS的:hover伪类和CSS选择器来实现这个效果。

接下来,我们就来详细说明一下如何实现。

1. HTML结构

首先,我们需要构建一个基本的HTML结构,包括一级和二级菜单的相关标签。

其中,一级菜单使用

  • 标签来构建。二级菜单需要嵌套在一级菜单中,并使用

    • 标签组成。代码如下:

      <nav>
        <ul>
          <li><a href="#">菜单项1</a>
            <ul>
              <li><a href="#">子菜单项1</a></li>
              <li><a href="#">子菜单项2</a></li>
              <li><a href="#">子菜单项3</a></li>
            </ul>
          </li>
          <li><a href="#">菜单项2</a>
            <ul>
              <li><a href="#">子菜单项1</a></li>
              <li><a href="#">子菜单项2</a></li>
              <li><a href="#">子菜单项3</a></li>
            </ul>
          </li>
          <li><a href="#">菜单项3</a>
            <ul>
              <li><a href="#">子菜单项1</a></li>
              <li><a href="#">子菜单项2</a></li>
              <li><a href="#">子菜单项3</a></li>
            </ul>
          </li>
        </ul>
      </nav>
      

      2. CSS样式

      接下来,我们需要为菜单添加CSS样式。主要是为了控制菜单的显示和隐藏。

      首先,我们要隐藏所有子菜单,只有在一级菜单悬停时才显示相应的二级菜单。这里我们可以使用display:none来实现菜单的隐藏。而在一级菜单悬停时,我们使用子选择器(>)来选择它下面的子菜单。在样式中添加:hover伪类来实现鼠标悬停时显示二级菜单的效果。代码如下:

      nav ul ul { 
        display: none; 
      }
      
      nav ul li:hover > ul {
        display: inherit; 
      }
      

      其次,我们需要将菜单变成水平显示,并将子菜单的位置置于一级菜单的下方。这里,我们可以使用position属性来控制菜单的位置。代码如下:

      nav ul {
        list-style: none;
        padding: 0;
        margin: 0;
      }
      
      nav ul li {
        float: left;
      }
      
      nav ul li:hover {
        background: #4CAF50;
      }
      
      nav ul ul {
        position: absolute;
      }
      
      nav ul ul li {
        float: none;
        position: relative;
      }
      
      nav ul ul ul {
        position: absolute;
        top: 0;
        left: 100%;
      }
      

      3. 示例

      示例一

      以下是一个完整的HTML和CSS示例。它演示了如何使用纯CSS来实现一个简单的二级弹出菜单效果。

      <!DOCTYPE html>
      <html>
      <head>
          <title>纯CSS二级弹出菜单示例</title>
          <style type="text/css">
              nav ul {
                  list-style: none;
                  padding: 0;
                  margin: 0;
              }
      
              nav ul li {
                  float: left;
                  position: relative;
              }
      
              nav ul li:hover {
                  background: #4CAF50;
              }
      
              nav a {
                  display: block;
                  padding: 0 10px;
                  color: #333;
                  font-size: 15px;
                  line-height: 50px;
                  text-decoration: none;
              }
      
              nav ul ul {
                  display: none;
                  position: absolute;
                  top: 100%;
                  left: 0;
                  background: #fff;
                  padding: 0;
              }
      
              nav ul ul li {
                  float: none;
                  position: relative;
              }
      
              nav ul ul li a {
                  color: #666;
                  line-height: 34px;
                  padding: 10px;
                  display: block;
              }
      
              nav ul ul li a:hover {
                  background: #f2f2f2;
              }
      
              nav ul li:hover > ul {
                  display: inherit;
              }
      
          </style>
      </head>
      <body>
      
          <nav>
              <ul>
                  <li><a href="#">首页</a></li>
                  <li><a href="#">菜单1</a>
                      <ul>
                          <li><a href="#">子菜单1</a></li>
                          <li><a href="#">子菜单2</a></li>
                          <li><a href="#">子菜单3</a></li>
                      </ul>
                  </li>
                  <li><a href="#">菜单2</a>
                      <ul>
                          <li><a href="#">子菜单1</a></li>
                          <li><a href="#">子菜单2</a></li>
                          <li><a href="#">子菜单3</a></li>
                      </ul>
                  </li>
                  <li><a href="#">菜单3</a>
                      <ul>
                          <li><a href="#">子菜单1</a></li>
                          <li><a href="#">子菜单2</a></li>
                          <li><a href="#">子菜单3</a></li>
                      </ul>
                  </li>
              </ul>
          </nav>
      
      </body>
      </html>
      

      我们可以在浏览器中打开该示例,查看菜单的效果。

      示例二

      下面,我们再来分享一个使用SCSS预处理器和ul-li命名规则的示例,这个示例可以更加方便地维护和扩展菜单样式。

      这个示例的思想是:

      1.所有的菜单都在一个ul下,我们可以用ul-li命名规则,来统一样式;

      2.二级菜单和一级菜单共用一个样式,所以可以将它们写在同一段样式中。

      具体代码如下:

      <!DOCTYPE html>
      <html>
      <head>
          <title>纯CSS二级弹出菜单示例</title>
          <!-- 引入SCSS样式 -->
          <style type="text/scss">
              nav {
                  ul {
                      margin: 0;
                      padding: 0;
                      list-style: none;
                  }
      
                  li {
                      float: left;
                      position: relative;
      
                      &:hover {
                          a {
                              background-color: #000;
                              color: #fff;
                          }
      
                          ul {
                              display: block;
                          }
                      }
      
                      a {
                          display: block;
                          padding: 0.6em 0.8em;
                          color: #000;
                          text-decoration: none;
      
                          &:hover {
                              background-color: #f7f7f7;
                              color: #000;
                          }
                      }
      
                      ul {
                          display: none;
                          position: absolute;
                          left: 0;
                          top: 100%;
                          min-width: 10em;
                          padding: 0.5em 0;
                          list-style: none;
                          background: #fff;
                          box-shadow: 0 3px 12px rgba(0, 0, 0, 0.15);
                          li {
                              position: relative;
                              padding: 0.4em 1.2em;
                          }
                      }
                  }
              }
          </style>
      </head>
      <body>
      
          <nav>
              <ul>
                  <li><a href="#">首页</a></li>
                  <li><a href="#">菜单1</a>
                      <ul>
                          <li><a href="#">子菜单1</a></li>
                          <li><a href="#">子菜单2</a></li>
                          <li><a href="#">子菜单3</a></li>
                          <li><a href="#">子菜单4</a></li>
                      </ul>
                  </li>
                  <li><a href="#">菜单2</a>
                      <ul>
                          <li><a href="#">子菜单1</a></li>
                          <li><a href="#">子菜单2</a></li>
                          <li><a href="#">子菜单3</a></li>
                      </ul>
                  </li>
                  <li><a href="#">菜单3</a>
                      <ul>
                          <li><a href="#">子菜单1</a></li>
                          <li><a href="#">子菜单2</a></li>
                      </ul>
                  </li>
              </ul>
          </nav>
      
          <!--引入SCSS编译器-->
          <script src="https://scsstranspiler.com/scripts/compile.js"></script>
      
          <!-- 对SCSS代码进行编译 -->
          <script>
              var scssText = document.querySelector('style[type="text/scss"]').textContent;
              var cssText = SCSSTranspiler.compile(scssText);
              var style = document.createElement('style');
              style.textContent = cssText;
              document.head.appendChild(style);
          </script>
      
      </body>
      </html>
      

      在浏览器中打开该示例,也可看到菜单的效果。

      以上是关于纯CSS实现的二级弹出菜单效果的完整攻略,希望能对您有所帮助。

      本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯CSS(无JS)实现的二级弹出菜单效果代码 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js实现的Easy Tabs选项卡用法实例

    下面是详细的js实现选项卡的攻略,包含了具体的实现过程、代码示例和注意事项。 js实现的Easy Tabs选项卡用法实例 简介 选项卡是一种经典的交互式UI组件,主要用于在有限的屏幕空间内展示多个内容区块。js实现的Easy Tabs选项卡就是其中的一种,比起使用CSS实现,使用js实现可以更加灵活,可定制性更强。 基本原理 js实现的选项卡主要原理是,通过…

    css 2023年6月11日
    00
  • jquery jqPlot API 中文使用教程(非常强大的图表工具)

    首先介绍一下jqPlot。jqPlot是基于jQuery的开源图表插件,可以快速方便地创建各种精美的图表,包括线图、柱状图、饼图等等。API文档非常详细,我们可以根据需要调用相关API实现自定义的功能。接下来,按照以下步骤来讲解完整攻略。 安装及引入 首先需要下载jqPlot的最新版。解压后,将以下文件加入到页面头部: <link rel="…

    css 2023年6月10日
    00
  • vue实现3D切换滚动效果

    下面是一份详细的“Vue实现3D切换滚动效果”的攻略: 1. 前置知识准备 在使用Vue实现3D切换滚动效果之前,你需要掌握以下技术: HTML/CSS基础知识,包括布局、样式等; Vue.js基础知识,包括组件、指令、生命周期等; JavaScript基础知识,包括函数、DOM操作等。 2. 创建容器组件 首先,我们需要创建一个容器组件,来包含所有的卡片元…

    css 2023年6月10日
    00
  • HTML表格布局实际使用详解

    HTML表格布局是HTML编写中重要的一部分,可以用于展示大量的数据,并且可以方便地对数据进行排版和布局。下面为大家详细讲解HTML表格布局实际使用的攻略。 HTML表格的基础语法 HTML表格的基础语法如下: <table> <tr> <th>表头1</th> <th>表头2</th>…

    css 2023年6月10日
    00
  • CSS3制作半透明边框(Facebox)类似渐变

    下面是关于“CSS3制作半透明边框(Facebox)类似渐变”的详细攻略: 1. 什么是Facebox效果 Facebox效果是指通过CSS3技术制作的一种类似渐变的半透明边框效果,可以用于美化网页中的图片、文本框等元素,突出他们的重要性和美观度。Facebox效果具有注重细节、奇妙而简洁的特点,而且可以实现的方式也非常简单,接下来我将向你介绍Facebox…

    css 2023年6月9日
    00
  • JavaScript事件冒泡与事件捕获

    JavaScript事件冒泡与事件捕获是DOM的两种事件处理模型。事件处理模型规定了事件在DOM中的传播方式和触发顺序。 事件冒泡(Bubbling) 事件冒泡是DOM中事件的默认传播方式。子元素触发的事件会依次向父元素传递,直到传递到DOM树的根节点。 举个例子: <div id="grandparent"> <div…

    Web开发基础 2023年3月30日
    00
  • css3实现背景图片拉伸效果像桌面壁纸一样

    要实现背景图片拉伸效果像桌面壁纸一样,我们可以使用CSS3中的background-size属性。该属性可以改变背景图片的大小。 在使用background-size属性之前,需要先确定背景图片需要覆盖的区域。可以使用背景图片的URL属性指定图片的路径,并用background-repeat属性指定不用重复平铺该背景图片。 具体操作如下: 首先,在CSS文件…

    css 2023年6月9日
    00
  • 详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)

    详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐) 前言 CSS3媒体查询是前端响应式布局常用的技术之一。Bootstrap框架则是一套使用CSS、JavaScript和图标字体等技术开发的前端框架,可以大大提高开发效率。本文将深入探讨CSS3媒体查询与Bootstrap框架的原理,并结合实战操作进行详细讲解。 CSS3媒体查询 常见媒体…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部