热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

善用CSS伪类,不用JS也能做出选项卡功能

先看看Demo:CODEPEN示例页面讲到选项卡(Tabs)功能时,大多会想到用JavaScript去做,像知名的前端框架:Bootstrap所提供的Tab元件,就是用jQuery

先看看Demo:

《善用CSS伪类,不用JS也能做出选项卡功能》

CODEPEN 示例页面

讲到选项卡(Tabs)功能时,大多会想到用Javascript去做,像知名的前端框架:Bootstrap所提供的Tab元件,就是用jQuery实现的(其实网络上有很多用jQuery开发的Tab);但其实不用jQuery或Javascript技术,就能实现高效能且易维护的Tabs元件,让我们来看看是怎么办到的:

规划HTML结构

  1. 通常我们会用列表元素来制作选项卡的界面,每个
  2. 代表用来包含一组选项卡与其对应的内容块。
  3. 接下来加入选项卡,选项卡必须使用
  4. 内容块则是
    元素。
  5. 再来我们为每个





  • 内容A





  • 内容B





  • 内容C


为什么使用Label与Radio button?

这篇文章的主要技巧也就是要靠这两种元素的特性,因为我们要“借用”Radio button的单选特性,决定哪个Tab是Active,同时确保其他Tab是未选中的状态。

Radio button默认的样式是非常丑陋的,而且我们能改动的样式也是有限的,所以不建议直接把它设计成Tab,所以我们使用

所以我们为Radio button加上id,然后将Label的for属性指向对应的id:





  • 内容A





  • 内容B





  • 内容C


这样就完成我们的HTML结构了,再来要写点CSS,让功能得以运作起来。

写点CSS

  1. 我们先让
  2. 并排(display:inline-block)。
  3. 再来为
  4. 特别注意内容块用绝对定位让每次显示的内容都在同样的位置,之后我们再控制层叠等级(z-index)和透明度(opacity)来实现显示/隐藏。

li { display: inline-block; }
input[type="radio"] {
position: absolute;
outline: none;
...
}
.tab {
...
}
.section {
position: absolute;
top: 50px; // 取决于你的Label高度
left: 0;
...
}

咦?还是不能动?因为我们还需要运用CSS的两个重要技巧:伪类(Pseudo-class)和通用兄弟元素选择器(Sibling Combinator),才能让选项卡与内容块做切换。

加入CSS伪类与通用兄弟元素选择器

我们为Radio button加上伪类:checked,表示当这个Radio button被选中时(等于对应的标签被选中使)才会呈现的样式。

input[type="radio"]:checked {
...
}

然后要做切换动作的是选项卡和内容块,由于它们与Radio button属同一层父元素,所以我们这里要用到通用兄弟元素选择器~来做,通用兄弟元素选择器有两种:

  1. 相邻兄弟选择器(Adjacent Sibling Combinator)是用来选择互为兄弟元素的相邻的元素。
  2. 通用兄弟元素选择器(General Sibling Combinator)则是用来选择互为兄弟元素的所有匹配的元素。

我们使用通用兄弟元素选择器即可:

input[type="radio"]:checked ~ .tab { // 这里也可以使用相邻兄弟选择器来做
...
}
input[type="radio"]:checked ~ .section {
...
z-index: 2;
}

注意内容内存块(.section)要加上z-index属性才能覆盖其它选项卡的内容块,最后我们再将Radio button设为透明或使用定位的技巧让它消失在页面上,前面没有先提这点的原因,是因为可以让你在点选选项卡时,观察Radio button的选中状态变化,同时也方便测试,确认选项卡对应的Radio button有正确被触发。

这样就大功告成啦!

整理

大略整理一下重点与需要注意的地方:

  1. Radio button的单选特性是基于同样的name属性,所以name一定要设,而且要一样;反之,你可以设置多组name去实现多组的选项卡组件,而且各自是独立运作,不会互相影响。
  2. Radio button的id和Label的for是必要的属性。
  3. 内容块的定位要避免覆盖到选项卡。
  4. 注意HTML的结构是否正确,CSS选择器的使用是否正确(选项卡和内容块有没有在同一层)。
  5. 注意z-index的设置是否正确。

本篇文章的技术给予选项卡UI另一种开发的选择,Radio button的特性还有很多应用可以做(如Switcher),只要善用HTML表单元素与CSS的一些技巧,也能玩出很多有趣的功能,甚至替代Javascript的部份工作。

《善用CSS伪类,不用JS也能做出选项卡功能》


推荐阅读
  • 项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • jQuery实现简单的动画效果及用法详解
    本文详细介绍了使用jQuery实现简单动画效果的方法,包括显示/隐藏、向上收缩/向下展开、淡入/淡出、自定义动画等。同时提供了具体的用法示例,并解释了参数的含义和使用技巧。通过本文的学习,读者可以掌握如何使用jQuery实现各种动画效果,为网页增添生动和互动性。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
author-avatar
何止爱你2010_694
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有