JS+CSS实现仿msn风格选项卡效果代码

yizhihongxing

下面是详细讲解“JS+CSS实现仿msn风格选项卡效果代码”的完整攻略,包含以下几个步骤:

1. HTML结构

首先,我们需要在HTML中定义选项卡的基本结构,通常采用<ul><li>来表示。具体代码如下:

<ul class="tabnav">
  <li class="active"><a href="#">选项卡1</a></li>
  <li><a href="#">选项卡2</a></li>
  <li><a href="#">选项卡3</a></li>
</ul>
<div class="tabcontent">
  <div class="active">第1个选项卡的内容</div>
  <div>第2个选项卡的内容</div>
  <div>第3个选项卡的内容</div>
</div>

其中,tabnav类表示选项卡导航栏,tabcontent类表示选项卡内容区域,active类表示当前选项卡的样式。在这个示例中,第1个选项卡会被默认选中,并且相应的内容会被显示出来。

2. CSS样式

接着,我们需要为选项卡和内容定义CSS样式,对于选项卡导航栏,我们可以采用以下样式:

.tabnav {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
}
.tabnav li {
  margin-right: 15px;
}
.tabnav li a {
  display: block;
  padding: 10px;
  background-color: #eee;
  text-decoration: none;
  color: #333;
}
.tabnav li.active a {
  background-color: #fff;
}

这里采用了flex布局,使得选项卡可以水平排列。对于每个选项卡,采用了a标签并设置相关样式,同时,当选项卡处于激活状态时,讲改变背景色为白色。

接着为选项卡内容区域定义CSS样式:

.tabcontent div {
  display: none;
  padding: 10px;
  border: 1px solid #ccc;
}
.tabcontent div.active {
  display: block;
}

默认情况下,选项卡内容需要被隐藏,通过display: none实现。当选项卡处于激活状态时,将对应的内容项设置为display: block,即可实现显示。

3. JavaScript交互

最后,我们需要使用JavaScript实现选项卡的交互效果。具体代码如下:

var tabnav = document.querySelector('.tabnav');
var tabcontent = document.querySelector('.tabcontent');

tabnav.addEventListener('click', function(event) {
  var target = event.target;
  if (target.tagName === 'A') {
    var index = Array.from(tabnav.children).indexOf(target.parentNode);
    setActive(index);
  }
});

function setActive(index) {
  var tabs = tabnav.children;
  var contents = tabcontent.children;
  for (var i = 0; i < tabs.length; i++) {
    tabs[i].classList.remove('active');
    contents[i].classList.remove('active');
  }
  tabs[index].classList.add('active');
  contents[index].classList.add('active');
}

代码中首先获取选项卡导航栏和内容区域的DOM元素,然后给选项卡导航栏绑定click事件。当点击选项卡时,获取所点击的选项卡的索引,通过setActive函数设置相应的选项卡和内容项为激活状态。

其中,setActive函数会先将所有选项卡和内容项的激活状态清除,然后再将所选中的选项卡和内容项设置为激活状态。这样,就可以实现选项卡的交互效果了。

示例说明

以下是两个示例,分别实现了不同的选项卡效果。

示例1 - 垂直选项卡

这个示例中,将选项卡导航栏设置为垂直排列的形式,并在选项卡之间添加分割线。CSS样式如下:

.tabnav {
  list-style: none;
  margin: 0;
  padding: 0;
}
.tabnav li {
  margin-bottom: 5px;
  border-bottom: 1px solid #ccc;
}
.tabnav li:last-child {
  margin-bottom: 0;
  border-bottom: none;
}
.tabnav li a {
  display: block;
  padding: 10px;
  background-color: #eee;
  text-decoration: none;
  color: #333;
}
.tabnav li.active a {
  background-color: #fff;
}

JavaScript交互部分保持不变。

具体效果可以参考如下的示例页面:

https://codepen.io/pen/?template=bqLzYa

示例2 - 嵌套选项卡

这个示例中,选项卡内容是另外一个选项卡导航栏。即当点击一个选项卡时,该选项卡下面的内容会是另外一个选项卡导航栏,对应的内容区域也是一个选项卡。CSS样式如下:

.tabnav {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
}
.tabnav li {
  margin-right: 15px;
}
.tabnav li a {
  display: block;
  padding: 10px;
  background-color: #eee;
  text-decoration: none;
  color: #333;
}
.tabnav li.active a {
  background-color: #fff;
}
.tabcontent > div {
  display: none;
  padding: 10px;
  border: 1px solid #ccc;
}
.tabcontent > div.active {
  display: block;
}

/* 嵌套选项卡 */
.tabcontent .tabnav {
  display: block;
}
.tabcontent .tabnav li {
  margin-right: 0;
  margin-bottom: 5px;
}
.tabcontent .tabnav li:first-child {
  border-top: 1px solid #ccc;
}
.tabcontent .tabnav li a {
  background-color: #fff;
  color: #333;
  border: 1px solid #ccc;
  border-top: none;
}
.tabcontent .tabnav li.active a {
  background-color: #eee;
}
.tabcontent .tabcontent {
  margin: 10px 0 0 20px;
}

JavaScript交互部分需要稍作调整,具体代码如下:

var tabnav = document.querySelector('.tabnav');
var tabcontent = document.querySelector('.tabcontent');

tabnav.addEventListener('click', function(event) {
  var target = event.target;
  if (target.tagName === 'A') {
    var index = Array.from(tabnav.children).indexOf(target.parentNode);
    if (target.parentNode.parentNode === tabnav) {
      setActive(index);
    } else {
      var parentIndex = Array.from(tabnav.children).indexOf(target.parentNode.parentNode);
      setNestedActive(parentIndex, index);
    }
  }
});

function setActive(index) {
  var tabs = tabnav.children;
  var contents = tabcontent.children;
  for (var i = 0; i < tabs.length; i++) {
    tabs[i].classList.remove('active');
    contents[i].classList.remove('active');
  }
  tabs[index].classList.add('active');
  contents[index].classList.add('active');
}

function setNestedActive(parentIndex, index) {
  var parentTabs = tabcontent.children[parentIndex].querySelector('.tabnav').children;
  var parentContents = tabcontent.children[parentIndex].querySelector('.tabcontent').children;
  for (var i = 0; i < parentTabs.length; i++) {
    parentTabs[i].classList.remove('active');
    parentContents[i].classList.remove('active');
  }
  parentTabs[index].classList.add('active');
  parentContents[index].classList.add('active');
}

以上就是完整的“JS+CSS实现仿msn风格选项卡效果代码”的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS+CSS实现仿msn风格选项卡效果代码 - Python技术站

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

相关文章

  • 纯css实现输入框placeholder动效及输入校验

    下面我将为您介绍“纯css实现输入框placeholder动效及输入校验”的完整攻略。 1.动态placeholder效果 我们可以通过伪类::placeholder实现输入框内的placeholder动态效果。下面是一个例子: <input type="text" placeholder="请输入用户名" cl…

    css 2023年6月10日
    00
  • BootStrap入门教程(一)之可视化布局

    《Bootstrap入门教程(一)之可视化布局》是一篇介绍Bootstrap框架基础可视化布局的入门教程。本文将详细讲解什么是Bootstrap框架以及如何使用它快速构建网站的布局,并提供两个实例说明。 Bootstrap框架简介 什么是Bootstrap? Bootstrap是一款免费、开源的前端框架,它基于HTML、CSS和JavaScript。Boot…

    css 2023年6月10日
    00
  • 书写高效整洁的CSS代码原则

    书写高效整洁的CSS代码是Web开发中非常重要的一部分。本攻略将介绍书写高效整洁的CSS代码的原则,并提供两个示例说明。 原则 以下是书写高效整洁的CSS代码的原则: 避免使用ID选择器:ID选择器具有很高的优先级,但是它们很难重用,并且可能导致样式冲突。相反,应该使用类选择器或标签选择器。 避免使用通配符选择器:通配符选择器会匹配所有元素,这可能会导致性能…

    css 2023年5月18日
    00
  • CSS3线性渐变简单实现以及该属性在浏览器中的不同

    CSS3 线性渐变是一种常用的页面样式效果,它可以实现从一个颜色到另一个颜色的平滑过渡效果。本文将详细讲解 CSS3 线性渐变的实现方法以及该属性在不同浏览器中的差异。 1. 实现方法 CSS3 线性渐变可以通过 linear-gradient() 函数来实现,该函数接受两个或多个颜色值作为参数,用逗号分隔。下面是一个简单的示例: background: l…

    css 2023年5月18日
    00
  • HTML 隐藏滚动条和去除滚动条的方法

    下面是详细讲解“HTML隐藏滚动条和去除滚动条的方法”的完整攻略。 隐藏滚动条 HTML默认情况下会显示滚动条,如果我们想要隐藏滚动条,可以使用CSS样式来实现。 方法一:使用overflow属性 可以使用CSS中的overflow属性将滚动条隐藏起来,下面是示例代码: html { overflow: hidden; } 上面实例中,我们将页面HTML元素…

    css 2023年6月10日
    00
  • 小影怎么删除视频?小影app删除我发布的视频方法介绍

    小影怎么删除视频?小影app删除我发布的视频方法介绍 如果您想删除在小影app中发布的视频,可以按照以下步骤操作: 打开小影app并登录您的账户,进入主页。 点击主页下方的“我的”选项,进入个人中心页面。 在个人中心页面中,您可以看到发布的视频列表。选中您想要删除的视频,点击视频下方的删除按钮。 在弹出的提示框中,确认删除操作。 删除成功后,该视频将不再在小…

    css 2023年6月11日
    00
  • 纯css实现树形结构的示例代码

    实现树形结构可以使用CSS选择器和伪元素。下面是详细步骤: 第一步:构建HTML结构 首先,需要构建树形结构的HTML代码。为了方便演示,我们构建一个树形结构,其中包含一个父节点,两个子节点以及一个孙子节点。HTML代码如下: <ul class="tree"> <li>父节点 <ul> <li&…

    css 2023年6月10日
    00
  • Vue3新特性之在Composition API中使用CSS Modules

    下面是针对“Vue3新特性之在Composition API中使用CSS Modules”的完整攻略。 什么是CSS Modules? CSS Modules是一种流行的CSS样式处理器,它允许我们将CSS代码限定在组件范围内,从而避免了样式之间的污染和覆盖。 在CSS模块中,样式类名不是全局的,而是局部的,通过这种方式,我们能够在写CSS样式代码时避免影响…

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