Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >3种纯CSS方式实现Tab 切换

3种纯CSS方式实现Tab 切换

作者头像
Javanx
发布于 2019-09-04 08:43:59
发布于 2019-09-04 08:43:59
4.7K03
代码可运行
举报
文章被收录于专栏:web秀web秀
运行总次数:3
代码可运行

前言

Tab 切换是种很常见的网页呈现形式,不管是PC或者H5都会经常看到,今天就为小伙伴们提供多种纯CSS Tab 切换的实现方式,同时对比一下那种代码更方便,更通俗易懂。

纯CSS实现都面临2个问题: 1、 如何接收点击事件? 2、 如何操作相关DOM?

checked 伪类实现纯 CSS Tab 切换

拥有 checked 属性的表单元素, <input type="radio"> 或者 <input type="checkbox"> 能够接收到点击事件。

知识点: 1、 使用 radio 标签的 :checked 伪类,加上 <label for> 实现纯 CSS 捕获点击事情 2、 使用了 ~ 选择符对样式进行控制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
.container *{
  padding: 0;
  margin: 0;
}
.container {
  position: relative;
  width: 400px;
  margin: 50px auto;
}

.container input {
  display: none;
}

.nav {
  position: relative;
  overflow: hidden;
}

.nav li {
  width: 200px;
  float: left;
  text-align: center;
  background: #ddd;
  list-style: none;
}

.nav li label {
  display: block;
  width: 200px;
  line-height: 36px;
  font-size: 18px;
  cursor: pointer;
}

.content {
  position: relative;
  overflow: hidden;
  width: 400px;
  height: 100px;
  border: 1px solid #999;
  box-sizing: border-box;
  padding: 10px;
}

.content1,
.content2 {
  display: none;
  width: 100%;
  height: 100%;
}

.nav1:checked ~ .nav li {
  background: #ddd;
  color: #000;
}
.nav1:checked ~ .nav li:first-child {
  background: #ff7300;
  color: #fff;
}

.nav2:checked ~ .nav li {
  background: #ddd;
  color: #000;
}
.nav2:checked ~ .nav li:last-child {
  background: #ff7300;
  color: #fff;
}

.nav1:checked ~ .content > div {
  display: none;
}
.nav1:checked ~ .content > div:first-child {
  display: block;
}

.nav2:checked ~ .content > div {
  display: none;
}
.nav2:checked ~ .content > div:last-child {
  display: block;
}

.nav li.active {
  background: #ff7300;
  color: #fff;
}

.content .default {
  display: block;
}
</style>
<div class="container">
  <input class="nav1" id="li1" type="radio" name="nav">
  <input class="nav2" id="li2" type="radio" name="nav">
  <ul class='nav'>
    <li class='active'><label for="li1">tab1</label></li>
    <li><label for="li2">tab2</label></li>
  </ul>
  <div class="content">
    <div class="content1 default">tab1 内容:123456</div>
    <div class="content2">tab2 内容:abcdefgkijkl</div>
  </div>
</div>

target 伪类实现纯 CSS Tab 切换

知识点: 1、 要使用 :target 伪元素,需要 HTML 锚点,以及锚点对应的 HTML 片段 2、 核心是使用 :target 伪类接收点击事件 3、 通过兄弟选择符 ~ 控制样式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
.container *{
  padding: 0;
  margin: 0;
}
.container {
  position: relative;
  width: 400px;
  margin: 50px auto;
}

.nav {
  position: relative;
  overflow: hidden;
}

li {
  width: 200px;
  float: left;
  text-align: center;
  background: #ddd;
  list-style: none;
}

li a {
  display: block;
  width: 200px;
  line-height: 36px;
  font-size: 18px;
  cursor: pointer;
  text-decoration: none;
  color: #000;
}

#content1,
#content2 {
  position: absolute;
  overflow: hidden;
  top: 36px;
  width: 400px;
  height: 100px;
  border: 1px solid #999;
  box-sizing: border-box;
  padding: 10px;
}

#content1,
#content2 {
  display: none;
  width: 100%;
  background: #fff;
}

#content1:target,
#content2:target {
  display: block;
}

#content1.active {
  display: block;
}

.active ~ .nav li:first-child {
  background: #ff7300;
  color: #fff;
}

#content1:target ~ .nav li {
  background: #ddd;
  color: #000;
}
#content1:target ~ .nav li:first-child {
  background: #ff7300;
  color: #fff;
}

#content2:target ~ .nav li {
  background: #ddd;
  color: #000;
}
#content2:target ~ .nav li:last-child {
  background: #ff7300;
  color: #fff;
}

.wrap {
  position: absolute;
  overflow: hidden;
  top: 36px;
  width: 400px;
  height: 100px;
  border: 1px solid #999;
  box-sizing: border-box;
}
</style>
<div class="container">
  <div id="content1" class="active">tab 1内容:123456</div>
  <div id="content2">tab 2内容:abcdefgkijkl</div>

  <ul class='nav'>
    <li class="active"><a href="#content1">tab1</a></li>
    <li><a href="#content2">tab2</a></li>
  </ul>

  <div class="wrap"></div>
</div>

focus-within 来实现 tab 切换功能

:focus-within 它表示一个元素获得焦点,或该元素的后代元素获得焦点。重点:它或它的后代获得焦点。

这也就意味着,它或它的后代获得焦点,都可以触发 :focus-within

知识点 1、 这个属性有点类似 Javascript 的事件冒泡,从可获焦元素开始一直冒泡到根元素 html,都可以接收触发 :focus-within 事件 2、 本例子的思路就是通过获焦态来控制其他选择器,以及最重要的是利用了父级的 :not(:focus-within) 来设置默认样式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
.container {
  width: 300px;
  margin: 50px auto;
  padding: 10px;
  boder: 1px solid #ddd;
}

.nav-box {
  font-size: 0;
}

button {
  width: 150px;
  height: 40px;
  box-sizing: border-box;
  outline: none;
  background: #fff;
  border: 1px solid #ddd;
  font-size: 18px;
  cursor: pointer;
}

button:focus-within {
  color: #fff;
  background: #ff7300;
}

.content-box {
  font-size: 24px;
  border: 1px solid #ddd;
  height: 100px;
}
.content-box div {
  display: none;
}

.nav-box:not(:focus-within) .nav1 {
  color: #fff;
  background: #ff7300;
}
.nav-box:not(:focus-within) .content1 {
  display: block;
}

.nav1:focus-within ~ .content-box .content1 {
  display: block;
}

.nav2:focus-within ~ .content-box .content2 {
  display: block;
}
</style>
<div class="container">
  <div class="nav-box">
    <button class="nav1">tab1</button>
    <button class="nav2">tab2</button>
    <div class="content-box">
      <div class="content1">
        content-1
      </div>
      <div class="content2">
        content-2
      </div>
    </div>
  </div>
</div>

这个效果就很差一些,因为,在tab失去焦点时,就会复原,回到tab1上面,并不推荐这种方式来实现。小编推荐第一种:checked实现方式,更容易理解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年1月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一些前端题目
答案:ƒ Object() { [native code] } False true false 1
前端小哥哥
2023/05/04
2500
谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节。 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少 谈谈一些有趣的CSS题目
Sb_Coco
2018/05/28
1.8K0
CSS实用技巧第二讲:布局处理
在日常项目开发中,在布局方面有遇到哪些问题了?今天来一起看看CSS布局有哪些小技巧,后续开发更轻松。本文主要通过简单的示例,讲述开发中遇到的布局等问题,但不仅限于布局相关,会有其他相关知识点。
Javanx
2019/10/12
9850
CSS实用技巧第二讲:布局处理
8个硬核技巧带你迅速提升CSS技术
笔者选择了一些常用甚至有些小册都未提及到的干货作为分享内容,相信这些内容能帮助同学们在短期内提升CSS编码素质,实现一些看似只能由JS才能实现的效果。
javascript艺术
2021/05/28
2.8K0
8个硬核技巧带你迅速提升CSS技术
CSS+JS实现tab标签切换
循环将所有的内容标签隐藏,并将tab标题栏的active样式清除,完了之后设置选中标签的内容显示,并给tab标题栏添加active样式。
牛老师讲GIS
2018/10/23
11.8K0
CSS+JS实现tab标签切换
一个tab切换的方法 siblings()
项目中经常会用到 tab 切换功能,有的还会有一个 更多 按钮,我们可以用下面这个方法实现一个多功能的 tab 切换。
德顺
2019/11/13
7380
css实现动态效果
在线显示地址:https://gethtml.cn/project/2020/03/17/index.html
Dreamy.TZK
2020/04/09
6.7K0
帅帅的导航代码
<!DOCTYPE html> <html lang="en" class="no-js"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href
小小鱼儿小小林
2020/06/23
1.2K0
片刻网项目
也就是说在一个大的容器中,我们在写入一个容器(红色)作为存放绿色容器、蓝色容器、紫色容器 。那么实现起来就很简单了。
Dreamy.TZK
2020/04/09
9160
bootstrap学习
bootstrap把页面设置为12列。三个div所以设置col-xs-4,如果是4个div,那么就设置col-xs-3 布局设置(修改过的,方便自己写)
提莫队长
2019/02/21
1.4K0
学生个人网页设计作品 HTML+CSS+JavaScript仿小米商城(8页) 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代
临近期末,大一新生的各种考试和专业结课作业纷至沓来。什么高数啊、线代啊、C语言、网页设计等,简直让人头大。你还在为网页设计老师的作业要求感到头大?网页作业无从下手?网页要求的总数量太多?没有合适的模板?等等一系列问题。你想要解决的问题,在这篇博文中基本都能满足你的需求, 废话不多说,直接看效果。。 --- <font color='#b44846' size='4px'> ❤</font> 【作者主页——🔥获取更多优质源码】 <font color='#b44846' size='4px'> ❤</
IT司马青衫
2022/08/24
1.4K0
学生个人网页设计作品 HTML+CSS+JavaScript仿小米商城(8页) 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代
【CSS】378- [译]44个 CSS 精选知识点
一个周五的晚上,闲来无事整理下自己的 github(经常做收藏党),今天打算都过一遍,发现一个 star很高的项目,里面有大量的 CSS 片段,而且标题很诱人,然后又花了将近1个小时从头到尾过了一遍,其中一些是我们常用的一些知识点,另外也包含一些比较新的属性的应用,知识点挺多的,为了让大家看起来更方便些,然后又花了点(很长很长)时间翻译成中文。
pingan8787
2019/10/15
5.5K0
【CSS】378- [译]44个 CSS 精选知识点
神奇的选择器 `:focus-within`
有个错误有必要每次讲到伪类都提一下,有时你会发现伪类元素使用了两个冒号 (::) 而不是一个冒号 (:),这是 CSS3 规范中的一部分要求,目的是为了区分伪类和伪元素,大多数浏览器都支持下面这两种表示方式。
Sb_Coco
2018/08/02
1.2K0
神奇的选择器 `:focus-within`
如何提升CSS技术?8个硬核技巧带你迅速提升CSS技术
整个分享过程不搞那些乱七八糟的环境搭建。既然只玩CSS,那只有html文件和css文件就足够了。另外还需一个浏览器Chrome和一个编辑器VSCode。
睡魔的谎言
2020/12/22
2.3K0
42个来自《 CSS世界》中的实用技巧
但是要注意,当p的内容为英文单词组成的时候,如果单词过长,而不是“ pppppppppppppppppppppppppppppp”这样的一次,会被视为一个单位而造成超过div的尺寸。
winty
2021/01/05
1.1K0
HTML5+CSS3 做一个灵动的动画 TAB 切换效果
根据文章,使用HTML和CSS实现一个具有灵动效果的选项卡(Tab)。
FungLeo
2018/01/08
4.2K0
HTML5+CSS3 做一个灵动的动画 TAB 切换效果
html5新特性实现tab选项卡切换
分析代码可以知道,选项卡的class为active的时候,选项卡就被选中,当内容section的style属性为display:block时,内容就被选中
一个淡定的打工菜鸟
2018/09/06
13K6
底部关于我们美化代码
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
小狐狸说事
2022/11/17
2.8K0
底部关于我们美化代码
【代码艺术】带视觉特效的js密码强度检测开源库
这是一款带视觉特效的js密码强度检测特效。该特效在用户输入密码的时候,随着密码强度的增强,旁边的图像会越来越清晰或越来越模糊,通过图像的变化来提示用户密码的强度。
用户5997198
2019/09/12
2.9K0
【代码艺术】带视觉特效的js密码强度检测开源库
求一份网页设计结课大作业,要求用到html,css,javascript,的知识
👨‍🎓静态网站的编写主要是用HTML DIV+CSS JS等来完成页面的排版设计👩‍🎓,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的前端Html5代码都是一致的,本网页适合修改成为各种类型的产品展示网页,比如美食、旅游、摄影、电影、音乐等等多种主题,希望对大家有所帮助。 一、网站题目👨‍🎓 🥧 美食网页介绍、🍰甜品蛋糕、🦐地方美食小吃文化、🍺餐饮文化、等网站的设计与制作。 二、网
IT司马青衫
2022/08/21
4650
求一份网页设计结课大作业,要求用到html,css,javascript,的知识
相关推荐
一些前端题目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验