div css 实现tabs标签的思路及示例代码

让我来为你详细讲解如何使用div和CSS实现tabs标签。

一、思路

假设我们需要实现一个tabs标签,首先需要以下几步:

  1. 将标签划分为两部分:内容区和导航区;
  2. 内容区包含全部标签页的内容,导航区用于切换标签页;
  3. 导航区的每个按钮都有一个相对应的标签页,点击导航区的某个按钮可以显示对应的标签页;
  4. 显示的标签页需要隐藏其他标签页,以显示当前标签页的内容。

基于以上思路,我们可以实现一个简单的tabs标签。

二、示例代码

以下代码实现了一个带有三个标签页的tabs标签,点击导航区的按钮可以切换标签页:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Tabs标签页</title>
    <style>
        /*定义标签页的样式*/
        .tabs {
            width: 800px;
            margin: 50px auto;
            background-color: #f5f5f5;
            padding: 10px;
            border: 1px solid #ccc;
        }

        /*定义导航区的样式*/
        .tabs-nav {
            list-style: none;
            padding: 0;
            margin: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: #fff;
        }

        /*定义导航按钮的样式*/
        .tabs-nav li {
            margin: 0 10px;
            padding: 5px;
            cursor: pointer;
            font-weight: bold;
            border: 1px solid #ccc;
            border-radius: 5px;
        }

        /*定义标签页内容区的样式*/
        .tabs-content div {
            display: none; /*默认情况下内容区域不显示*/
            padding: 10px;
            line-height: 1.6;
        }

        /*定义选中标签页的样式*/
        .tabs-nav li.active {
            background-color: #ccc;
        }

        /*定义选中标签页对应子内容的样式*/
        .tabs-content div.active {
            display: block; /*选中标签页的子内容显示*/
            background-color: #fff;
            border: 1px solid #ccc;
            border-top: none;
            border-radius: 0 5px 5px 5px;
        }
    </style>
</head>
<body>
    <div class="tabs">
        <ul class="tabs-nav">
            <li class="active">标签1</li>
            <li>标签2</li>
            <li>标签3</li>
        </ul>
        <div class="tabs-content">
            <div class="active">标签1的内容...</div>
            <div>标签2的内容...</div>
            <div>标签3的内容...</div>
        </div>
    </div>

    <!-- 导航按钮的点击事件 -->
    <script>
        var tabs = document.querySelector(".tabs");
        var nav = tabs.querySelectorAll(".tabs-nav li");
        var content = tabs.querySelectorAll(".tabs-content div");

        for (var i = 0; i < nav.length; i++) {

            nav[i].onclick = function(){
                // 切换导航按钮样式
                for (var j = 0; j < nav.length; j++) {
                    nav[j].classList.remove("active");
                }
                this.classList.add("active");

                // 切换内容区域样式
                for (var k = 0; k < content.length; k++) {
                    content[k].classList.remove("active");
                }
                var index = this.getAttribute("data-index");
                content[index].classList.add("active");
            }

            // 给每个导航按钮添加自定义属性 data-index
            nav[i].setAttribute("data-index",i);
        }

    </script>
</body>
</html>

在上述代码中,我们首先定义了整个tabs标签的样式,分别为导航区、导航按钮、标签页内容区和选中标签页。在HTML中,我们将导航区和标签页内容区分别用ul和div实现,并将标签页内容区中的每个标签页都包裹在一个div中。

接着,我们通过JavaScript代码实现了导航按钮的点击事件。点击某个导航按钮后,切换该按钮的样式以及对应的标签页的样式。

三、示例说明

以上示例实现了一个比较简单的tabs标签,下面再提供两个更加复杂的使用示例:

示例1:基于bootstrap的tabs标签

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Tabs标签页</title>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css">
    <style>
        /*自定义标签页*/
        .tabs .nav-link {
            color: #333;
            background-color: #f5f5f5;
            border: none;
            border-radius: 0;
        }

        /*选中标签页*/
        .tabs .nav-link.active {
            background-color: #fff;
            color: #333;
            border: none;
            border-bottom-color: #fff;
        }

        /*标签页内容区*/
        .tabs .tab-pane {
            padding: 10px;
            background-color: #fff;
            border-top: none;
            border: 1px solid #ccc;
            border-radius: 0 0 5px 5px;
        }

        /*选中标签页内容区*/
        .tabs .tab-pane.active {
            display: block;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>基于bootstrap的Tabs标签页</h2>
        <div class="col-md-8 mx-auto">
            <ul class="nav nav-tabs tabs">
                <li class="nav-item">
                    <a class="nav-link active" href="#tab1">标签1</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#tab2">标签2</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#tab3">标签3</a>
                </li>
            </ul>
            <div class="tab-content tabs">
                <div class="tab-pane fade show active" id="tab1">标签1的内容...</div>
                <div class="tab-pane fade" id="tab2">标签2的内容...</div>
                <div class="tab-pane fade" id="tab3">标签3的内容...</div>
            </div>
        </div>
    </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.bundle.min.js"></script>
</body>
</html>

在以上示例中,我们使用了Bootstrap提供的tabs组件来实现标签页,通过自定义样式来达到我们想要的效果。

示例2:响应式Tabs标签

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>响应式Tabs标签页</title>
    <style>
        body {
            font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;
            background-color: #fff;
            margin: 0;
        }
        .tabs {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        .tabs li {
            float: left;
            margin-right: 10px;
            padding: 5px 10px;
            background-color: #f5f5f5;
            border: 1px solid #ccc;
            border-bottom: none;
            cursor: pointer;
        }
        .tabs li.active {
            background-color: #fff;
            border-bottom: 1px solid #ccc;
        }
        .tabs-content div {
            display: none;
            padding: 10px;
            border: 1px solid #ccc;
            border-top: none;
            clear: both;
            background-color: #fff;
        }
        .tabs-content div.active {
            display: block;
        }
        @media (max-width: 767px) { /*小屏幕设备样式*/
            .tabs li {
                display: block;
                float: none;
                margin: 0;
                border-bottom: 1px solid #ccc;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>响应式Tabs标签页</h2>
        <div class="col-md-8 mx-auto">
            <ul class="tabs">
                <li class="active">标签1</li>
                <li>标签2</li>
                <li>标签3</li>
            </ul>
            <div class="tabs-content">
                <div class="active">标签1的内容...</div>
                <div>标签2的内容...</div>
                <div>标签3的内容...</div>
            </div>
        </div>
    </div>
    <script>
        var tabs = document.querySelector(".tabs");
        var nav = tabs.querySelectorAll("li");
        var content = tabs.querySelectorAll(".tabs-content div");

        for (var i = 0; i < nav.length; i++) {
            nav[i].onclick = function(){
                for (var j = 0; j < nav.length; j++) {
                    nav[j].classList.remove("active");
                }
                this.classList.add("active");
                for (var k = 0; k < content.length; k++) {
                    content[k].classList.remove("active");
                }
                var index = this.getAttribute("data-index");
                content[index].classList.add("active");
            }
            nav[i].setAttribute("data-index",i);
        }
    </script>
</body>
</html>

该示例实现了一个响应式tabs标签,当浏览器窗口大小变化时导航区的样式会发生变化,使得在小屏幕设备上也可以正常显示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:div css 实现tabs标签的思路及示例代码 - Python技术站

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

相关文章

  • javascript在myeclipse中报错的解决方法

    当我们在 MyEclipse 中使用 JavaScript 时,有时可能会遇到各种报错,这可能是由于文件路径、文件名、语法错误及其他原因引起的。本文将为您介绍一些解决方法,帮助您更好地使用 MyEclipse 编写 JavaScript。 1. 检查文件路径 在 MyEclipse 中编写 JavaScript 时,我们必须确保文件路径正确。如果文件路径不正…

    JavaScript 2023年5月18日
    00
  • js遍历子节点子元素附属性及方法

    遍历子节点和子元素是JavaScript和DOM中常用的操作之一。以下是详细讲解“js遍历子节点子元素附属性及方法”的完整攻略。 1. 获取父元素中的所有子节点 在DOM中,获取父元素中的所有子节点可以使用childNodes属性。该属性会返回一个列表,其中包含父元素中的所有子节点。但是需要注意,这个列表可能包含空格和文本节点,因此我们需要对其进行处理,只获…

    JavaScript 2023年6月10日
    00
  • JavaScript中的包装对象介绍

    JavaScript中的包装对象介绍 在JavaScript中,原始数据类型(比如字符串、数字等)是原生支持的,并且具有自己的属性和方法。但由于原始数据类型无法使用对象的特性(比如方法和属性),JavaScript在使用原始数据类型时会自动将其进行包装,形成一种新的类型,即包装对象。 常见的包装对象包括:String、Number和Boolean。通过包装对…

    JavaScript 2023年5月27日
    00
  • js 创建对象的多种方式与优缺点小结

    关于 “JS 创建对象的多种方式与优缺点小结”,我们可以从以下几个方面来进行讲解: 1. 对象字面量创建对象 对象字面量是一种创建对象的简单方式,只需要用{}包含属性和方法即可。示例代码如下: var person = { name: "Tom", age: 20, sayHi: function() { console.log(&quo…

    JavaScript 2023年5月27日
    00
  • js实现文件流式下载文件方法详解及完整代码

    那我来详细讲解一下“js实现文件流式下载文件方法详解及完整代码”的完整攻略吧。 1. 前言 文件下载是许多 Web 应用程序的常见需求之一,而在前端技术中实现文件下载的方式有很多种,其中一种可以称为文件流式下载。本文将详细介绍如何使用 JavaScript 实现文件流式下载,并提供代码示例。 2. 实现思路 实现文件流式下载的基本思路是将文件分成多个片段进行…

    JavaScript 2023年5月27日
    00
  • javascript学习笔记(三)显示当时时间的代码

    下面是关于“javascript学习笔记(三)显示当时时间的代码”的完整攻略。 前置知识 在学习本文之前,你需要掌握以下知识: HTML 基础 CSS 基础 Javascript 语法基础 确定功能 在开始编写代码之前,我们需要确定显示当前时间的具体功能。 我们要实现的功能是:在页面上显示当前的时间,并且能够实时更新。 编写代码 HTML结构 在HTML中,…

    JavaScript 2023年5月27日
    00
  • js显示动态时间的方法详解

    下面是关于”js显示动态时间的方法详解”的完整攻略。 一、简介 在网页或应用中,展示动态时间是非常常见的需求。JavaScript作为一门严谨、高效、灵活、结构化的脚本语言,其展示动态时间的方法也就显得格外的简单和方便。 二、JS展示动态时间的方法 2.1. 获取时间 我们可以使用JS的Date()来获取当前时间。 var currentDate = new…

    JavaScript 2023年5月27日
    00
  • js构造函数创建对象是否加new问题

    当使用 JavaScript 构造函数创建对象时,可以选择是否使用 new 关键字。如果使用了 new 关键字,则会创建一个新的对象并将其绑定到 this 上,最后返回这个新的对象。如果没有使用 new 关键字,则 this 被绑定到全局对象上,这可能导致一些意外的问题。 下面给出两个示例展示使用和不使用 new 关键字的区别。 示例一 function P…

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