登录 注册

<   js+css简单选项卡切换的实现

2025-09-01

好的,下面是一个使用 JavaScript 和 CSS 实现简单选项卡切换的示例。

核心思路:

1. HTML 结构:
* 需要一个容器来包裹整个选项卡组件。
* 需要一个列表(如 <ul><ol>)来存放选项卡的标题(<li>)。
* 需要一个容器来存放每个选项卡对应的内容区域。
* 每个内容区域通常会有一个与之关联的标题。

2. CSS 样式:
* 隐藏所有选项卡内容区域,只显示当前活动的那个。
* 为活动的选项卡标题添加一个高亮样式(例如,改变背景色、字体加粗等)。
* 控制选项卡的布局和外观。

3. JavaScript 逻辑:
* 为每个选项卡标题添加点击事件监听器。
* 当某个标题被点击时:
* 移除所有选项卡标题的“活动”状态。
* 给被点击的标题添加“活动”状态。
* 隐藏所有选项卡内容区域。
* 显示与被点击标题对应的选项卡内容区域。



HTML (index.html):

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简单选项卡切换</title>
<link rel="stylesheet" href="style.css">
</head>
<body>

<div class="tab-container">
<ul class="tab-nav">
<li class="tab-item active" data-tab="tab1">选项卡 1</li>
<li class="tab-item" data-tab="tab2">选项卡 2</li>
<li class="tab-item" data-tab="tab3">选项卡 3</li>
</ul>

<div class="tab-content-wrapper">
<div id="tab1" class="tab-content active">
<h2>这是选项卡 1 的内容</h2>
<p>这里是第一个选项卡的一些详细信息。</p>
</div>
<div id="tab2" class="tab-content">
<h2>这是选项卡 2 的内容</h2>
<p>这是第二个选项卡的内容。你可以看到它只有在被选中时才显示。</p>
</div>
<div id="tab3" class="tab-content">
<h2>这是选项卡 3 的内容</h2>
<p>这是第三个选项卡的内容,与前两个类似,但有自己的独特信息。</p>
</div>
</div>
</div>

<script src="script.js"></script>
</body>
</html>


CSS (style.css):

css
/* 基本样式重置 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}

body {
font-family: sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}

/* 选项卡容器 */
.tab-container {
width: 80%!;(MISSING)
max-width: 600px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
overflow: hidden; /* 确保子元素不会超出圆角 */
}

/* 选项卡导航 (标题列表) */
.tab-nav {
list-style: none;
display: flex;
border-bottom: 1px solid #ddd;
}

/* 选项卡标题 */
.tab-item {
padding: 15px 20px;
cursor: pointer;
font-weight: bold;
color: #555;
transition: color 0.3s ease, border-bottom-color 0.3s ease;
border-bottom: 3px solid transparent; /* 为活动状态预留空间 */
}

/* 活动的选项卡标题 */
.tab-item.active {
color: #007bff; /* 蓝色,表示活动状态 */
border-bottom-color: #007bff; /* 底部添加蓝色边框 */
}

/* 选项卡内容包裹器 */
.tab-content-wrapper {
padding: 20px;
}

/* 单个选项卡内容 */
.tab-content {
display: none; /* 默认隐藏所有内容 */
}

/* 活动的选项卡内容 */
.tab-content.active {
display: block; /* 显示活动的内容 */
}

.tab-content h2 {
margin-bottom: 15px;
color: #333;
}

.tab-content p {
color: #666;
line-height: 1.6;
}


JavaScript (script.js):

javascript
document.addEventListener('DOMContentLoaded', function() {
// 获取所有选项卡导航项
const tabItems = document.querySelectorAll('.tab-item');
// 获取所有选项卡内容区域
const tabContents = document.querySelectorAll('.tab-content');

// 为每个选项卡导航项添加点击事件监听器
tabItems.forEach(function(item) {
item.addEventListener('click', function() {
// 1. 移除所有选项卡标题的 'active' 类
tabItems.forEach(function(navItem) {
navItem.classList.remove('active');
});

// 2. 给当前被点击的选项卡标题添加 'active' 类
this.classList.add('active');

// 3. 获取当前被点击标题的 data-tab 属性值
const targetTabId = this.getAttribute('data-tab');

// 4. 移除所有选项卡内容的 'active' 类
tabContents.forEach(function(content) {
content.classList.remove('active');
});

// 5. 根据 targetTabId 找到对应的选项卡内容,并添加 'active' 类
const targetTabContent = document.getElementById(targetTabId);
if (targetTabContent) {
targetTabContent.classList.add('active');
}
});
});
});




如何使用:

1. 将上面的 HTML 代码保存为 index.html 文件。
2. 将上面的 CSS 代码保存为 style.css 文件,并放在与 index.html 同一个目录下。
3. 将上面的 JavaScript 代码保存为 script.js 文件,并放在与 index.html 同一个目录下。
4. 用浏览器打开 index.html 文件,你就能看到一个简单的选项卡切换效果了。



代码解释:

* HTML:
* tab-container: 整个选项卡组件的父容器。
* tab-nav: 包含所有选项卡标题的无序列表。
* tab-item: 每个选项卡的标题,li 元素。
* class="tab-item active": active 类用于标记初始时显示的选项卡。
* data-tab="tab1": 这是一个自定义数据属性,用于关联标题和内容。当点击这个 li 时,我们会读取这个值来找到对应的内容。
* tab-content-wrapper: 包含所有选项卡内容区域的容器。
* tab-content: 每个选项卡的内容区域,div 元素。
* id="tab1": 与 tab-itemdata-tab 属性相对应。
* class="tab-content active": active 类用于标记初始时显示的内容区域。

* CSS:
* .tab-item.active: 当 tab-item 同时拥有 active 类时,它会获得高亮样式(蓝色字体和底部蓝色边框)。
* .tab-content: display: none; 让所有内容区域默认都是隐藏的。
* .tab-content.active: 当 tab-content 同时拥有 active 类时,display: block; 会显示它。

* JavaScript:
* DOMContentLoaded: 确保脚本在整个 HTML 文档加载和解析完成后才执行。
* querySelectorAll: 用于获取页面上所有匹配选择器的元素。
* forEach: 遍历获取到的节点列表,为每个元素添加事件监听器。
* addEventListener('click', ...): 当元素被点击时触发。
* this.classList.add('active') / this.classList.remove('active'): this 指的是被点击的那个 tab-item 元素,通过 classList 来添加或移除 CSS 类。
* this.getAttribute('data-tab'): 获取当前被点击的 tab-itemdata-tab 属性值。
* document.getElementById(targetTabId): 根据获取到的 id 找到对应的选项卡内容元素。

这个实现非常基础,但非常实用,可以作为很多 Web 应用中选项卡功能的起点。

AI问答 发表 上传 拍照
BBSGOOD.COM ©2025  运行时间: