纯CSS实现兼容IE7及以上宽度自适应无限级导航菜单附演示

yizhihongxing

首先,实现兼容IE7及以上的宽度自适应无限级导航菜单需要用到CSS的伪类选择器。我们可以使用:hover和:focus来表示菜单项的悬停和聚焦状态,使用>和+来表示子菜单和兄弟菜单的关系,同时使用display:none和display:block来控制菜单的隐藏和显示。具体实现步骤如下:

1.给菜单的父元素设置position:relative属性,以便子菜单可以相对于父菜单进行定位:

.menu {
  position: relative;
}

2.给所有一级菜单设置display:inline-block属性,以便让菜单排成一行,并设置相应的背景和样式:

.menu > ul > li {
  display: inline-block;
  background-color: #ccc;
  padding: 10px;
}

3.隐藏所有子菜单,并设置子菜单的样式:

.menu ul ul {
  display: none;
}
.menu ul ul li {
  background-color: #eee;
  padding: 10px;
}

4.当鼠标悬停在一级菜单上时,显示对应的子菜单:

.menu > ul > li:hover > ul {
  display: block;
  position: absolute;
  top: 100%;
  left: 0;
}

5.当子菜单用鼠标悬停时,显示下一级的子菜单:

.menu > ul > li > ul > li:hover > ul {
  display: block;
  position: absolute;
  top: 0;
  left: 100%;
}

以上步骤可以实现最基本的无限级导航菜单,并且兼容IE7及以上版本的浏览器。但是如果菜单的层数很多,可能会导致显示不完整的问题。因此,在CSS中也可以设置菜单的最大宽度,在菜单项数量超出时自动换行。例如:

.menu > ul {
  max-width: 800px;  /* 最大宽度为800px */
  margin: 0 auto;   /* 水平居中 */
  white-space: nowrap;  /* 不换行 */
}
.menu > ul > li {
  white-space: normal;  /* 允许换行 */
}

这样即可保证菜单在内容超出时自动折行,并且兼容IE7及以上版本。下面附上一个示例代码,演示最终效果:

<div class="menu">
  <ul>
    <li><a href="#">菜单1</a></li>
    <li><a href="#">菜单2</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></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>
    </li>
    <li><a href="#">菜单3</a></li>
    <li><a href="#">菜单4</a></li>
    <li><a href="#">菜单5</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></li>
      </ul>
    </li>
  </ul>
</div>

CSS代码:

.menu {
  position: relative;
}
.menu > ul {
  max-width: 800px;
  margin: 0 auto;
  white-space: nowrap;
}
.menu > ul > li {
  display: inline-block;
  background-color: #ccc;
  padding: 10px;
  white-space: normal;
  position: relative;
}
.menu > ul > li:hover {
  background-color: #ddd;
}
.menu ul ul {
  display: none;
  position: absolute;
  top: 0;
  left: 100%;
}
.menu > ul > li:hover > ul {
  display: block;
}
.menu > ul > li > ul > li:hover > ul {
  display: block;
  top: 0;
  left: calc(100% - 1px);
}
.menu ul ul li {
  background-color: #eee;
  padding: 10px;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯CSS实现兼容IE7及以上宽度自适应无限级导航菜单附演示 - Python技术站

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

相关文章

  • jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)

    引入jquery.guide.js插件 在html文件中引入jquery和jquery.guide.js插件的js文件,同时在head中添加相关的css样式文件,如下所示: “`html jquery.guide.js Demo jquery.guide.js Demo Click the button to trigger the guide popup…

    css 2023年6月9日
    00
  • 创建图片对比slider滑块示例详解

    创建图片对比 slider 滑块示例的详细攻略如下: 1. 准备工作 首先,创建一个带有图片的 HTML 元素(通常是 或 ),设置它们的宽度、高度、背景和位置等样式属性。具体来说,需要创建两个元素(比如说A和B),它们的位置要重叠在一起,并且其中一个的 opacity 设置为0,如下所示: <div class="image-contain…

    css 2023年6月10日
    00
  • 利用class、id对元素进行分类、标识实例

    当我们在编写HTML文档时,需要将文档中的每个元素进行分类和标识,以便后续的CSS和JavaScript代码可以方便地针对它们进行样式和行为的控制。而在HTML中,我们可以使用class和id属性来对元素进行分类和标识。 利用class属性对元素进行分类 class属性可以为元素定义一个或多个类名,这些类名用空格分隔。一个元素可以同时拥有多个类名,这些类名可…

    css 2023年6月10日
    00
  • CSS :focus-within的具体使用

    那么现在我将为您详细讲解 “CSS :focus-within的具体使用”。 什么是:focus-within伪类选择器? :focus-within伪类是CSS3的一种新的伪类选择器,它表示的是在一个元素的内部发生的焦点事件。具体来说,这个伪类选择器可以应用于一个容器元素,当它的子元素获得焦点时就会被触发。 :focus-within的语法 :focus-…

    css 2023年6月9日
    00
  • 基于firebug的firefox扩展 css usage

    “基于firebug的firefox扩展 css usage”是一款非常实用的浏览器扩展,可以帮助网页设计者更好地了解和优化自己的 CSS 代码。下面详细介绍如何使用这一扩展。 步骤1:安装扩展 首先,我们需要在 Firefox 网站上下载安装“CSS Usage”扩展。然后,在 Firefox 页面中选择“附加组件”菜单,并找到“CSS Usage”扩展。…

    css 2023年6月10日
    00
  • IE6/IE7下绝对定位position:absolute和margin的冲突问题解决

    针对IE6/IE7下绝对定位position:absolute和margin的冲突问题,一般可以采取以下三种解决方式: 解决方式一:使用相对定位做包裹层 首先,我们可以为需要布局的元素外层再套一层div,设置这个包裹层为position:relative; <div style="position:relative;"> &l…

    css 2023年6月9日
    00
  • CSS技巧之圆角背景与三角形实现方法

    关于“CSS技巧之圆角背景与三角形实现方法”的完整攻略,我将从以下几个方面进行详细讲解: 圆角背景的实现方法 三角形的实现方法 示例说明 1. 圆角背景的实现方法 1.1 border-radius属性 CSS3中提供了border-radius属性,可以非常简单的实现圆角背景效果。border-radius属性有四个参数,分别对应左上角、右上角、右下角和左…

    css 2023年6月9日
    00
  • 微信小程序自定义头部导航栏(组件化)

    微信小程序自定义头部导航栏是一个比较常见的需求。通过自定义导航栏可以给小程序增加更多的个性化特色,使得小程序的用户体验更加优秀。接下来我将分享一些自定义头部导航栏的攻略。 1. 使用组件化方式实现 我们可以通过组件化方式来实现自定义头部导航栏。在小程序中创建一个头部导航栏组件,然后在各个页面中引用即可。这种方式代码复用性强,且方便维护。 1.1 创建头部导航…

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