首页 > 其他分享 >用CSS实现tab切换

用CSS实现tab切换

时间:2024-12-02 09:33:48浏览次数:3  
标签:tab 标签 content item 切换 Tab active CSS

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tab 切换</title>
    <style>
        .tabs {
            display: flex;
            list-style: none;
            padding: 0;
            margin: 0;
            border-bottom: 2px solid #ccc;
        }

        .tab-item {
            padding: 10px 20px;
            cursor: pointer;
            border-top-left-radius: 5px;
            border-top-right-radius: 5px;
            transition: background-color 0.3s ease;
        }

        .tab-item.active {
            background-color: #f0f0f0;
            border-bottom: 2px solid transparent; /* 避免底部双线 */
        }

        .tab-content {
            padding: 20px;
            border: 1px solid #ccc;
            border-top: none; /* 避免顶部双线 */
            display: none; /* 默认隐藏所有内容 */
        }

        .tab-content.active {
            display: block;
        }
    </style>
</head>
<body>

    <ul class="tabs">
        <li class="tab-item active" data-tab="tab1">Tab 1</li>
        <li class="tab-item" data-tab="tab2">Tab 2</li>
        <li class="tab-item" data-tab="tab3">Tab 3</li>
    </ul>

    <div class="tab-content active" id="tab1">
        <h2>Tab 1 Content</h2>
        <p>This is the content of Tab 1.</p>
    </div>

    <div class="tab-content" id="tab2">
        <h2>Tab 2 Content</h2>
        <p>This is the content of Tab 2.</p>
    </div>

    <div class="tab-content" id="tab3">
        <h2>Tab 3 Content</h2>
        <p>This is the content of Tab 3.</p>
    </div>

    <script>
        const tabItems = document.querySelectorAll('.tab-item');
        const tabContents = document.querySelectorAll('.tab-content');

        tabItems.forEach(item => {
            item.addEventListener('click', () => {
                const targetTab = item.dataset.tab;

                // 移除所有 tab-item 和 tab-content 的 active class
                tabItems.forEach(i => i.classList.remove('active'));
                tabContents.forEach(c => c.classList.remove('active'));

                // 为当前点击的 tab-item 和对应的 tab-content 添加 active class
                item.classList.add('active');
                document.getElementById(targetTab).classList.add('active');
            });
        });
    </script>

</body>
</html>

代码解释:

  • HTML 结构: 使用无序列表(ul)创建标签,列表项(li)作为每个标签按钮。每个标签按钮都有一个 data-tab 属性,用于关联对应的标签内容。标签内容使用 div 元素,并通过 iddata-tab 值对应。
  • CSS 样式: 设置标签按钮和内容的样式,包括激活状态的样式。
  • JavaScript 交互:
    • 使用 querySelectorAll 获取所有标签按钮和内容元素。
    • 遍历标签按钮,为每个按钮添加点击事件监听器。
    • 在点击事件处理函数中:
      • 获取点击按钮的 data-tab 属性值。
      • 移除所有标签按钮和内容的 active 类,清除之前的激活状态。
      • 为当前点击的按钮和对应的标签内容添加 active 类,显示对应内容。

关键点:

  • 使用 data-tab 属性关联标签按钮和内容,使代码更清晰易维护。
  • 使用 JavaScript 动态添加/移除 active 类控制标签切换。
  • CSS 中使用 transition 属性实现平滑的过渡效果。

This example provides a clear and concise solution for implementing tab switching with CSS and JavaScript. It's easy to understand and modify for your specific needs. Remember to adjust the styling and content to match your design.

标签:tab,标签,content,item,切换,Tab,active,CSS
From: https://www.cnblogs.com/ai888/p/18580943

相关文章

  • 用CSS实现一个轮播图
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>CSSCarousel</title>......
  • css中的baseline,你知道吗?
    是的,我知道CSS中的baseline。它指的是文本基线,是排列文本行的一个重要概念。更具体地说,它是字母“x”的下边缘所在的线。理解baseline对于垂直对齐元素,尤其是文本元素至关重要。以下是一些关于CSSbaseline的关键点:默认对齐方式:在没有明确指定对齐方式的情况下,i......
  • 使用纯css实现一个rate评分的功能
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>CSSRating</title>......
  • 使用css3画一个扇形
    Youcancreateapie-chart-likesector/segmentusingpureCSSinseveralways.Hereareacoupleofcommontechniquesandhowtheywork:1.Usingclip-path(Moststraightforwardforsinglesectors):Thisisgenerallythecleanestandmostrecommendedappr......
  • 使用css3绘制一个QQ小企鹅的LOGO
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>QQPenguin</title>......
  • CoD, Towards an Interpretable Medical Agent using Chain of Diagnosis
    文章标题CoD,TowardsanInterpretableMedicalAgentusingChainofDiagnosis发表日期2024.9.15文章地址https://arxiv.org/abs/2407.133011.文章解决的问题诊断过程透明性缺失:LLMs在医疗诊断时类似于黑箱操作,虽能给出诊断......
  • 光标自动定位到起始位置 contenteditable="true" ,v-html绑定内容,div可编辑时,光标移到
    出现这个问题原因:(1)通过打断点可以看到,当你输入的时候触发input事件,提交值给父组件中的v-model;(2)但因为在子组件中又监听了v-model的值,所以整体形成了闭环;(3)还需要重点说明的是光标问题,contenteditable与v-html所在的元素值的改变如果不是通过输入而是通过赋值实现,光标就会跑到最......
  • HTML-css样式
    HTML样式-csscss样式的使用方法:内部样式:在HTML元素中使用“style”属性内部样式表:在HTML文档头部中<head>区域中使用<style>元素来包含css外部引用:使用外部css文件,使用link元素包含最好使用外部引用css文件内部样式:<pstyle="color:blue;margin-left:20px;">这是一个段落......
  • 007.精读《Apache Paimon Docs - Table with PK》
    文章目录1.引言2.基本概念2.1数据结构2.2桶2.3表模式3.合并引擎3.1概述3.2部分更新3.3聚合引擎4.相关组件4.1变更日志生成器4.2序列字段和行类型字段4.3压缩5.总结1.引言通过本文,我们将带领读者《ApachePaimonDocs-TablewithPK》展开讨......
  • QHE5701 – Database Systems
    QHE5701–DatabaseSystems2024Lab–51Lab5:DesigningDatabaseandGeneratingsampledata(usingdatageneratortool)Inthislabyou’lluseMySQLtodesignandimplementadatabasefromuserrequirement.DatabaseSpecificationDetails:Inacompanyt......