html css js 实现Tab标签页示例代码

HTML、CSS、JS 实现 Tab 标签页是前端开发中常见的应用场景,可以通过实现 Tab 标签页来实现页面的切换和内容展示。下面我将详细讲解 HTML、CSS、JS 实现 Tab 标签页的攻略:

HTML 页面结构

在 HTML 中,每个 Tab 页都可以用一个 div 元素来表示,其中每个 div 元素要包含一个与之相对应的唯一标识符 ID 和相应的内容。

<div class="tabs">
  <div class="tab" id="tab1">Tab 1</div>
  <div class="tab" id="tab2">Tab 2</div>
  <div class="tab" id="tab3">Tab 3</div>
</div>
<div class="tab-content" id="tab1-content">
  This is content of tab 1.
</div>
<div class="tab-content" id="tab2-content">
  This is content of tab 2.
</div>
<div class="tab-content" id="tab3-content">
  This is content of tab 3.
</div>

上面代码片段中,我们首先定义了一个 div 元素来表示 Tab 标签页,每个 Tab 页面用一个 div 来表示,它们都有一个唯一的 id 标识符,用于 JS 代码控制 Tab 的展现。然后定义了三个 div 元素来表示每个 Tab 所对应的内容,它们也都有唯一标识符,便于在 JS 中控制显示与隐藏。

CSS 样式

我们需要设置 Tab 标签页和对应的内容的样式,让它们能够在页面中良好地展现出来。

.tabs {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid #ccc;
  margin-bottom: 10px;
}

.tab {
  padding: 10px;
  cursor: pointer;
  border-bottom: 2px solid transparent;
}

.tab:hover {
  border-bottom: 2px solid #ccc;
}

.tab.active {
  border-bottom: 2px solid #333;
}

.tab-content {
  display: none;
  padding: 20px;
}

.tab-content.active {
  display: block;
}

上面代码片段中,我们先设置了 .tabs 和 .tab-content 的样式,然后定义了 .tab 和 .tab:hover 的样式,分别用于表示 Tab 标签页和鼠标悬停时的效果。.tab.active 和 .tab-content.active 的样式用于表示当前激活的 Tab 和对应的内容。

JS 控制

实现功能的核心部分在于 JavaScript 代码段,需要用 JS 代码实现点击 Tab 时,根据 Tab id 显示对应的内容,并隐藏其他内容。

const tabs = document.querySelectorAll('.tab');
const tabContents = document.querySelectorAll('.tab-content');

tabs.forEach(tab => {
  tab.addEventListener('click', () => {
    const tabId = tab.getAttribute('id');
    const activeTab = document.querySelector('.active');
    const activeTabContent = document.querySelector('.tab-content.active');

    activeTab.classList.remove('active');
    activeTabContent.classList.remove('active');
    tab.classList.add('active');
    document.getElementById(`${tabId}-content`).classList.add('active');
  });
});

上面代码片段中,我们首先取到所有的 .tab 元素和 .tab-content 元素,然后循环遍历所有 .tab 元素,将点击事件添加到 .tab 上。对于每个 .tab 元素,我们获取到其 id,然后移除所有前面激活的元素类名,给当前激活的 .tab 和对应的 .tab-content 添加 active 类名,实现页面上对应 Tab 隐藏与展现。

示例说明

示例1

在实际的项目中,可以根据自己的实际需求调整 HTML 结构和样式。例如,在 Tab 标签页中增加二级导航、按钮等附加控件。

<div class="tabs">
  <div class="tab" id="web">Web</div>
  <div class="tab" id="app">App</div>
  <div class="tab" id="service">Service</div>
  <div class="nav">
    <a href="" class="nav-item">More Web</a>
    <a href="" class="nav-item">More App</a>
    <a href="" class="nav-item">More Service</a>
  </div>
</div>

<div class="tab-content" id="web-content">
  <h3>Web Development</h3>
  <p>Web development is the work involved in developing a website for the Internet.</p>
</div>
<div class="tab-content" id="app-content">
  <h3>App Development</h3>
  <p>Mobile app development is the act or process by which a mobile app is developed for mobile devices.</p>
</div>
<div class="tab-content" id="service-content">
  <h3>Service Development</h3>
  <p>Service development is developing a software that provides a function for the network or distributed environment.</p>
</div>

上面代码片段中,在原有的 Tab 标签页基础之上,我们加入了 .nav 元素和 .nav-item 元素,用于表示每个 Tab 的更多功能。也可以根据需要再次增加不同类型的元素。

示例2

还可以通过接口或配置文件方式,动态生成 Tab,并通过 AJAX 请求异步加载对应内容。例如,在我们的博客页面中,Tab 标签页需要显示最热、最新、分类等不同维度的文章列表,我们可以通过 Django 模板渲染,配合 Ajax 请求动态生成 Tab 界面。

<div class="tabs" id="article-tabs">
  {% for tab in tabs %}
  <div class="tab" id="{{ tab.id }}">{{ tab.name }}</div>
  {% endfor %}
</div>

<div class="tab-content" id="latest-content">
  {% include 'latest_articles.html' %}
</div>

{% for tab in tabs %}
<div class="tab-content" id="{{ tab.id }}-content" class="article-list">
  <div class="loading">Loading...</div>
</div>
{% endfor %}

<script>
  $(document).ready(function() {
    $('#article-tabs .tab').on('click', function() {
      const tabId = $(this).attr('id');
      //异步加载数据并插入HTML
      $.ajax({
        type: 'get',
        url: `/articles/${tabId}/`,
        success: function(data) {
          $(`#${tabId}-content`).html(data);
        }
      });
    });
  });
</script>

上面代码片段中,我们使用 Django 模板和 for 循环语句动态渲染了 Tab 界面和内容部分,每个 Tab 对应一个包含 id、name 等属性的数据对象。在页面 ready 之后给每个 .tab 元素添加点击事件,根据 id 发起 Ajax 请求异步加载对应的内容,然后插入到对应的 .tab-content 元素中。

总之,在 HTML、CSS 和 JS 三个方面努力,我们可以实现灵活多样的 Tab 标签页展示效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:html css js 实现Tab标签页示例代码 - Python技术站

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

相关文章

  • 标记语言——清单

    标记语言——清单 清单是一种在标记语言中常用的元素,可以让你以列表的形式,更好地呈现信息。本文将详细讲解如何使用标记语言来创建清单。 有序列表 有序列表即为按照一定顺序排列的列表,通常用数字表示顺序。语法如下: 1. 第一项 2. 第二项 3. 第三项 其中数字后面必须加上一个英文句点“.”,并且数字之后要加上一个空格才能产生正确的效果。示例如下: 苹果 香…

    css 2023年6月10日
    00
  • js上传图片预览的实现方法

    下面是关于“js上传图片预览的实现方法”的完整攻略。 一、实现思路 实现图片上传预览功能,我们需要以下几步: HTML页面中新增一个input元素用于文件上传; 给这个input元素绑定change事件,当用户选择一个本地图片进行上传时,就会触发change事件; 获取用户上传的图片文件,并通过FileReader API将它读成DataURL格式的图像; …

    css 2023年6月11日
    00
  • CSS中使用expression完美设置页面最小宽度(兼容ie)

    使用expression表达式可以在CSS中设置页面最小宽度,从而对兼容IE6、7、8等老旧浏览器的页面展示进行调整。具体步骤如下: 1. 在HTML文件头部引入样式表 <head> <link rel="stylesheet" type="text/css" href="style.css…

    css 2023年6月10日
    00
  • 基础的CSS3弹性盒Flexbox布局使用实例

    关于基础的CSS3弹性盒Flexbox布局使用实例,我们可以分为以下几个步骤进行讲解: 1. 理解Flexbox布局 Flexbox布局是CSS3中新增的一种布局方式,它的目的是更方便、更灵活地实现容器内部的元素的定位、排列和对齐。与传统的布局方式相比,Flexbox布局明确了容器和子元素的角色,对于布局和对齐的需求提供了更多的控制。在Flexbox布局中,…

    css 2023年6月10日
    00
  • 使用Java和WebSocket实现网页聊天室实例代码

    下面我为你详细讲解如何使用Java和WebSocket实现网页聊天室的攻略。整个过程分为以下步骤: 步骤一:准备工作 在开始操作之前,我们需要确定需求和相关技术组件。首先,需要了解WebSockets和Java有关的技术组件,包括: JavaSE 8及以上 Maven或Gradle构建工具 WebSocket API和相关实现(Tomcat或Glassfis…

    css 2023年6月10日
    00
  • 使用CSS制作一个比较炫酷的页面切换动画

    下面是使用CSS制作比较炫酷的页面切换动画的攻略,包括具体步骤和示例说明。 攻略步骤 第一步:设置HTML和CSS基本结构 首先,需要设置HTML和CSS的基本结构。在HTML中,需要至少有两个页面容器,也就是两个div标签来包含每个页面的内容。在CSS中,需要设置页面容器的样式,包括width、height、position、overflow等属性,以及为…

    css 2023年6月10日
    00
  • CSS3实现渐变背景兼容问题

    请先使用以下格式的标题划分答案的主要内容: 问题背景 兼容方案 统一兼容方案 使用autoprefixer工具实现 示例说明 示例一:纵向渐变兼容 示例二:角向渐变兼容 问题背景 CSS3引入了渐变这一新的属性,能够使得网页背景更为美观,同时也方便网页设计。然而,各浏览器对这一新属性的支持程度不同,因此会引起兼容问题,尤其是在老旧的浏览器中无法正常呈现渐变效…

    css 2023年6月9日
    00
  • 当DIV高度为自动时,背景颜色无法显示的解决方法

    当一个 div 的高度被设为 auto,它的高度将会根据其包含的内容自适应,这通常情况下是一个很好的设计,但如果你想要为该元素定义一个背景颜色,你将会遇到以下问题:由于该元素的高度是根据其包含的内容而定的,而并不是由其 padding 或 border 决定的,导致该元素的背景颜色无法铺满整个元素体积,从而导致整个背景色失效。 以下提供两种解决方法。 方法一…

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