纯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日

相关文章

  • CSS3实现王者荣耀匹配人员加载页面的方法

    以下是“CSS3实现王者荣耀匹配人员加载页面的方法”的完整攻略。 什么是王者荣耀匹配人员加载页面 王者荣耀匹配人员加载页面是一个现代化的网页程序,它会根据指定的条件,展示在线等待匹配的战队或个人,提供给用户一个便捷的玩家匹配体验。在该页面中,用户可以查看匹配时的核心信息,如队伍成员、英雄选择、所处段位等,并可以进行交流、挑选匹配或观看等一系列操作。 采用CS…

    css 2023年6月10日
    00
  • jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)

    jQuery是一个JavaScript库,它使得JavaScript编写代码变得更加简单。通过使用jQuery,我们可以使用更少的代码来完成许多常见的JavaScript任务,例如处理HTML文档遍历、事件处理、动画和很多其他的操作。同时,它也支持CSS选择器,可以使用CSS样式选择器来定位DOM元素。 奇偶匹配是CSS3中的一种选择器用法,用于匹配列表、表…

    css 2023年6月9日
    00
  • 使用D3.js制作图表详解

    使用D3.js制作图表可以分为以下几个步骤: 步骤一:安装D3.js 首先需要安装D3.js。可以通过官方网站下载或使用npm安装。 npm install d3 步骤二:准备数据 在制作图表前,需要准备好需要展示的数据。D3.js可以处理各种形式的数据,包括数组、json等。 步骤三:选择元素与绑定数据 在D3.js中,可以使用select方法选择指定元素…

    css 2023年6月10日
    00
  • CSS3 菱形拼图实现只旋转div 背景图片不旋转功能

    下面是详细讲解“CSS3 菱形拼图实现只旋转div 背景图片不旋转功能”的完整攻略。 1. 制作菱形拼图 这里我们采用比较简单的方式制作菱形拼图,就是把一个正方形旋转45度,然后截取四个角形来制作。代码如下: .diamond { width: 200px; height: 200px; margin: 50px; background-color: #cc…

    css 2023年6月10日
    00
  • HTML九宫格布局实现方法

    下面是HTML九宫格布局实现方法的完整攻略。 HTML九宫格布局实现方法 什么是九宫格布局? 九宫格布局指将一个页面或者一个区域按照九宫格的形式进行划分,每一个区域都可以放置不同的内容,通常用于制作网站的首页或者某些特定的页面。 实现九宫格布局的方法 方法一:使用表格布局 表格布局是一种简单实用的布局方式,通过设置表格的行和列的数量以及宽度和高度可以轻松地实…

    css 2023年6月11日
    00
  • jquery如何改变html标签的样式(两种实现方法)

    想要使用 jQuery 改变 HTML 元素的样式,需要使用 css() 方法。这个方法可以帮助我们改变元素的内联样式,也可以修改嵌入样式表或外部样式表中的规则。总体来说,可以通过两种方式来改变 HTML 标签的样式。下面就详细介绍这两种实现方法。 一、使用 .css() 方法 使用 jQuery 的 .css() 方法可以轻松地改变 HTML 元素的样式。…

    css 2023年6月10日
    00
  • clear 万能清除浮动(clearfix:after)

    “清除浮动”是Web开发中常用的技巧,旨在解决由浮动元素造成的布局问题。其中一种常见的清除浮动方法是使用“clearfix:after”的伪元素。 什么是浮动? 在开始讲解清除浮动之前,首先要了解浮动元素是什么。浮动是CSS中一个常用的布局概念,一般是指元素脱离文档流,并向左或向右浮动。 什么是清除浮动? 当一个元素被浮动后,其原先占据的空间就会释放出来,如…

    css 2023年6月10日
    00
  • 基于html和CSS3制作酷炫的导航栏

    制作酷炫的导航栏需要掌握 HTML 和 CSS3 的相关知识,下面是一些制作导航栏的示例和攻略: 1. 基础导航栏 首先,在 HTML 中创建一个无序列表,每个列表项表示一个导航标签,并用 CSS 对列表进行样式设置。可以给选中的导航标签添加不同的背景色或字体样式,以突出其特殊性。 HTML 代码示例: <nav> <ul> <…

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