web前端之选项卡集合、动态添加类名、动态移除类名、动态添加样式、激活、间距、节流、tabBar

本文主要是介绍web前端之选项卡集合、动态添加类名、动态移除类名、动态添加样式、激活、间距、节流、tabBar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MENU

  • input的checked属性(Html+Style)
  • 伪元素(Html+Style+JavaScript)
  • 激活类(Html+Style+JavaScript)
  • vue伪元素


input的checked属性(Html+Style)

前言

代码段创建一个使用HTML和CSS实现的标签式内容切换组件。通过选择不同的标签,可以展示相应的内容。
代码段实现一个简洁的标签切换组件,当用户点击不同的标签时,显示相应的内容。每个标签的样式在选中时会改变,未选中的内容会被隐藏。这个组件在需要多个内容区域的情况下非常有用,比如网页的导航栏、选项卡式的内容展示等。


效果图

默认


激活


激活


Html

<div class="box"><input id="idRadio1" type="radio" name="option" checked /><label for="idRadio1"><div class="tab_bar">Home</div><div class="content">Home Lorem ipsum dolor, sit amet consectetur adipisicing elit. Sunt cumque quasi at veritatisnecessitatibusquisquam nobis ipsa, sapiente incidunt ullam maiores, provident impedit eaque libero recusandaenequeomnis aperiam? Voluptatibus.</div></label><input id="idRadio2" type="radio" name="option" /><label for="idRadio2"><div class="tab_bar">Blog</div><div class="content">Blog Lorem ipsum dolor sit amet consectetur adipisicing elit. Quia magnam eius vel distinctio a odittempore!Odit libero voluptatibus accusamus placeat, nobis enim quo ratione nostrum nesciunt commodi, sitvoluptatum.Repudiandae alias consequuntur praesentium iure eos nesciunt fuga iste. Natus libero cum quidemcommodiipsam magni, nobis laudantium eum quae error velit sed accusamus voluptatem alias earum incidunttemporibus dolorem.</div></label><input id="idRadio3" type="radio" name="option" /><label for="idRadio3"><div class="tab_bar">Shop</div><div class="content">Shop Lorem ipsum, dolor sit amet consectetur adipisicing elit. Vitae sequi recusandae unde dolorum eumiureipsam quae nihil deserunt facilis omnis doloribus illum similique sunt, corporis minus nemo quaeratest?Iste blanditiis nulla culpa, quidem, facere explicabo beatae enim assumenda aspernatur nemo inciduntanimi quis ab esse laudantium impedit sed ipsam fuga molestias? Quibusdam pariatur aliquam,explicaboesse vero incidunt!Aspernatur suscipit quidem sunt at in! Officia, quas blanditiis aut magnam quo harum dignissimos, etperspiciatis similique dolorem quaerat dolore placeat fuga obcaecati natus quam deserunt maioreseiusaccusamus praesentium.</div></label><input id="idRadio4" type="radio" name="option" /><label for="idRadio4"><div class="tab_bar">News</div><div class="content">News Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem earum quo aspernatur, facere nobisimpedit accusantium adipisci. Minima harum, libero pariatur, natus nulla molestiae sit ex, error doloresiusto ipsam.Mollitia nisi molestiae nemo voluptate praesentium suscipit, impedit repudiandae at ratione architectorerum? Quos, expedita quod. Voluptas molestiae, molestias ipsam ad laudantium amet eveniet facilis fugaperferendis similique dignissimos illum.Iure ea sit, dolorem sed quos, vel assumenda sint distinctio iusto facere, quasi mollitia! Providentmagni harum nemo rem expedita autem quaerat in ea enim placeat assumenda, unde aut similique!Ullam, distinctio. Ea optio perferendis, provident rem iste eveniet molestias consectetur mollitia initaque iure explicabo dolorem autem, laudantium ducimus cum libero aut nihil ut minus eligendi. Officia,iste laboriosam.</div></label>
</div>

1、<div class="box">是一个包含整个组件的容器。
2、<input type="radio" />是一系列的单选按钮,用于选择不同的标签。这些按钮隐藏,并通过CSS与标签和内容关联。
3、<label>每个标签和其对应的内容都被包含在一个<label>标签中,点击时会触发关联的单选按钮。
4、<div class="tab_bar">是每个标签的可视部分,显示为用户点击的选项,如“Home”、“Blog”等。
5、<div class="content">是对应于每个标签的内容部分,默认情况下隐藏,只有选中的标签对应的内容会被显示。


Style

body {width: 100%;height: 100vh;margin: 0;padding: 28px;box-sizing: border-box;background-color: #a17a7a;.box {position: relative;display: flex;>input {display: none;}>input:checked+label .tab_bar {background-color: rgb(243, 240, 58);color: #333333;}>input:checked+label .content {display: block;z-index: 1;}>label {.tab_bar {padding: 10px;box-sizing: border-box;background-color: rgba(255, 255, 255, 0.5);color: #ffffff;cursor: pointer;transition: 0.25s;}.content {width: 100%;position: absolute;top: 50px;left: 0;padding: 10px;box-sizing: border-box;background-color: #ffffff;box-shadow: 0px 0px 6px #333333 inset;border-radius: 2px;color: #333333;display: none;z-index: 0;}}>label:nth-child(2)>.tab_bar {border-top-left-radius: 2px;border-bottom-left-radius: 2px;}>label:last-child>.tab_bar {border-top-right-radius: 2px;border-bottom-right-radius: 2px;}}
}

body设置页面的基本样式,宽度和高度为100%,背景颜色为浅棕色。
.box是整个标签组件的容器,设置为相对定位和水平排列。
input[type="radio"]所有的单选按钮都被隐藏(display: none;)。
input:checked + label .tab_bar当单选按钮被选中时,关联的标签样式会改变,背景颜色变为黄色,文字颜色变为深灰色。
input:checked + label .content当单选按钮被选中时,关联的内容部分会被显示(display: block;),并且设置较高的层级(z-index: 1;)。
.tab_bar标签的基础样式,设置背景颜色、文字颜色、内边距、边框等属性,并且增加鼠标悬停时的样式过渡效果。
.content内容部分的基础样式,设置宽度、位置、内边距、背景颜色、阴影效果、圆角边框等属性。默认情况下隐藏(display: none;),仅在选中状态下显示。
nth-child(2)和last-child通过选择器调整标签的圆角,使得第一个和最后一个标签有不同的边框圆角样式,增强视觉效果。


伪元素(Html+Style+JavaScript)

效果图

默认


激活


html
代码

<div class="card"><div class="tab_bar"><div class="item" onclick="handleTabBar(this)">tabBar1</div><div class="item" onclick="handleTabBar(this)">tabBar2</div><div class="item" onclick="handleTabBar(this)">tabBar3</div></div><div class="content"><div class="item"><h2>Tab1</h2><p>Content for Tab 1.</p></div><div class="item"><h2>Tab2</h2><p>Content for Tab 2.</p></div><div class="item"><h2>Tab3</h2><p>Content for Tab 3.</p></div></div>
</div>

解析

1、整个代码块的外层是一个<div>标签,类名为card,表示这是一个卡片样式的容器。
2、tab_bar部分包含三个div元素,每个div元素都具有item类,并且每个div元素有一个onclick事件,当用户点击时,会调用handleTabBar(this)函数。
2.1、tabBar1、tabBar2和tabBar3是三个不同的标签,每个标签都会显示不同的内容。
3、content部分也包含了三个div元素,每个div元素都具有item类,对应不同的标签页内容。


style
代码

.card {padding: 8px;box-sizing: border-box;background-color: #ffffff;box-shadow: 0px 0px 2px 2px #fafad2;border-radius: 4px;.tab_bar {display: flex;padding-bottom: 8px;box-sizing: border-box;border-bottom: 1px solid #e1e1e1;.item {padding: 4px 8px;box-sizing: border-box;cursor: pointer;}.item:not(:first-child) {margin-left: 6px;}.active {position: relative;color: #409eff;transition: color 0.3s ease;}.active::after {content: '';position: absolute;width: 68%;height: 3px;left: 50%;bottom: -2px;transform: translateX(-50%);background-color: #409eff;border-radius: 2px;}}.content {margin-top: 8px;.item {display: none;h2 {margin: 0;}p {margin: 0;margin-top: 4px;}}}
}

解析

1、.card定义卡片的基本样式,包括内边距、背景色、阴影效果和边框圆角。
2、.tab_bar是标签栏的样式,使用display: flex;使其成为一个水平排列的布局。每个.item元素有内边距,并且设置鼠标悬停时的样式cursor: pointer;表明它是可点击的。
3、.item:not(:first-child)定义非第一个item的左边距,使其与前一个元素有一定的间隔。
4、.active类表示当前激活的标签,改变文字颜色,并添加一个下划线,表示当前激活的状态。
5、.content .item隐藏所有内容,除非被激活。


JavaScript
代码

runInit();function handleTabBar(e) {const itemElTabBar = document.querySelectorAll('.tab_bar .item');const itemElContent = document.querySelectorAll('.content .item');itemElTabBar.forEach((item, i) => {if (item === e) {e.classList.add('active');itemElContent[i].style.display = 'block';} else {item.classList.remove('active');itemElContent[i].style.display = 'none';}});
}function runInit() {const itemElTabBar = document.querySelectorAll('.tab_bar .item');const itemElContent = document.querySelectorAll('.content .item');itemElTabBar[0].classList.add('active');itemElContent[0].style.display = 'block';
}

解析

1、runInit()函数在页面加载时立即运行,初始化第一个标签页,使其显示为激活状态。
2、handleTabBar(e)函数在用户点击任意一个标签时触发。
2.1、itemElTabBar和itemElContent分别获取.tab_bar和.content下的所有item元素。
2.2、遍历所有的item元素,检查当前点击的item是否与遍历中的item相同。
2.2.1、如果是相同的,将其设置为激活状态(添加active类),并显示对应的内容。
2.2.2、如果不是相同的,则移除active类,并隐藏对应的内容。


激活类(Html+Style+JavaScript)

效果图

默认1


激活1


激活2


动态图


概述

代码段实现一个简单的图片展示和切换功能,用户可以通过点击下方的缩略图来更改上方的大图显示。代码主要由HTML结构、CSS样式和JavaScript交互逻辑组成。


html

<div class="box"><div class="back_img"></div><ul class="list"><li class="item"><img class="active" src="../../image/2_.jpg" alt=""></li><li class="item"><img src="../../image/5_.jpg" alt=""></li><li class="item"><img src="../../image/10_.jpg" alt=""></li><li class="item"><img src="../../image/3_.jpg" alt=""></li><li class="item"><img src="../../image/1_.jpg" alt=""></li></ul>
</div>

1、<div class="box">是整个组件的容器,包含大图显示区域和缩略图列表。
2、<div class="back_img"></div>用于显示大图的区域,初始状态下没有内容,背景图像会通过CSS设置。
3、<ul class="list">是缩略图列表,包含多个缩略图供用户选择。
3.1、<li class="item">列表项,每个项包含一张缩略图。
3.2、<img>实际的缩略图图片。
3.3、第一张图片具有class="active"类,表示默认选中的状态,对应显示在大图区域。


HTML结构简单明了,清晰地分隔大图显示区域和缩略图列表,方便后续样式和交互的实现。


style

* {margin: 0px;padding: 0px;box-sizing: border-box;
}body {width: 100vw;height: 100vh;display: flex;justify-content: center;align-items: center;background: linear-gradient(to bottom, pink, skyblue);.box {width: 680px;.back_img {height: 500px;background-image: url('../../image/2_.jpg');background-repeat: no-repeat;background-size: 100% 100%;box-shadow: 0px 0px 1px 2px rgba(255, 165, 0, 1);border-radius: 4px;transition: all 1s;}.list {width: 100%;height: 100%;display: flex;justify-content: space-between;align-items: center;margin-top: 18px;list-style: none;gap: 16px;.item {flex: 1;height: 118px;img {width: 100%;height: 100%;box-shadow: 0px 0px 1px 2px rgba(68, 68, 68, 0.4);border-radius: 4px;cursor: pointer;}img.active {box-shadow: 0px 0px 1px 2px rgba(255, 165, 0, 1);}}}}
}

全局样式*
1、margin: 0px;padding: 0px;清除所有元素的默认外边距和内边距,保证样式的一致性。
2、box-sizing: border-box;设置盒模型计算方式,元素的宽高包括内边距和边框,方便尺寸控制。


body样式
1、width: 100vw;height: 100vh;设置视口宽高为 100%,充满整个浏览器窗口。
2、display: flex;使用Flexbox布局。
3、justify-content: center;align-items: center;将内容在水平方向和垂直方向居中对齐。
4、background: linear-gradient(to bottom, pink, skyblue);设置从上到下的线性渐变背景色,颜色从粉色过渡到天蓝色。


.box容器样式
1、width: 680px;设置容器的宽度。


.back_img
1、height: 500px;设置高度。
2、background-image: url('../../image/2_.jpg');设置初始背景图像,与第一张缩略图对应。
3、background-repeat: no-repeat;防止背景图像重复。
4、background-size: 100% 100%;让背景图像充满整个容器并拉伸到容器尺寸。
5、box-shadow: 0px 0px 1px 2px rgba(255, 165, 0, 1);添加橙色的外阴影,增加层次感。
6、border-radius: 4px;设置圆角,增加柔和感。
7、transition: all 1s;添加过渡效果,使背景图像更换时有平滑的过渡。


.list
1、display: flex;使用Flexbox布局。
2、justify-content: space-between;在主轴(水平)方向上均匀分布子元素。
3、align-items: center;在交叉轴(垂直)方向上居中对齐。
4、margin-top: 18px在顶部添加间距,与大图区域分隔开。
5、list-style: none;去除列表默认样式。
6、gap: 16px;设置子元素之间的间距。


.item
1、flex: 1;每个缩略图项平均分配剩余空间,保证等宽。
2、height: 118px;设置高度。


img
1、width: 100%;height: 100%;让图片充满父容器。
2、box-shadow: 0px 0px 1px 2px rgba(68, 68, 68, 0.4);添加灰色的外阴影。
3、border-radius: 4px;设置圆角。
4、cursor: pointer;当鼠标悬停时显示指针,提示可点击。


img.active
1、box-shadow: 0px 0px 1px 2px rgba(255, 165, 0, 1);为选中的缩略图添加橙色的外阴影,突出显示。


CSS样式通过精心设计,实现良好的布局和视觉效果,但需要注意的是,嵌套语法需要借助Sass等CSS预处理器进行编译。如果在浏览器中直接使用,需要将嵌套的样式展开为标准的CSS语法。


JavaScript

runInit();function runInit() {const backImg = document.querySelector('.back_img');const elList = document.querySelectorAll('.item > img');let isClick = true;elList.forEach(item => {item.onclick = ({ target }) => {if (isClick) {backImg.style.backgroundImage = `url(${target.src})`;elList.forEach(items => items.classList.remove('active'));target.classList.add('active');isClick = false;setTimeout(() => isClick = true, 1000 * 1);}};});
}

1、runInit();调用初始化函数,开始执行交互逻辑。
2、function runInit() { ... }定义初始化函数。
2.1、const backImg = document.querySelector('.back_img');获取大图显示区域的DOM元素,方便后续修改其背景图像。
2.2、const elList = document.querySelectorAll('.item > img');获取所有缩略图图片的DOM元素集合,便于为每个缩略图添加点击事件。
2.3、let isClick = true;定义一个布尔值变量,用于控制点击节奏,防止过于频繁的点击操作。
3、为每个缩略图添加点击事件监听器。
3.1、elList.forEach(item => { ... });遍历每个缩略图元素,为其添加点击事件。
3.2、item.onclick = ({ target }) => { ... };当缩略图被点击时触发的事件处理函数。
3.3、if (isClick) { ... }检查isClick是否为true,防止在短时间内多次触发点击事件。
3.4、backImg.style.backgroundImage = 'url(' + target.src + ');'将大图区域的背景图像设置为被点击的缩略图的src,实现大图切换。
3.5、elList.forEach(items => items.classList.remove('active'));移除所有缩略图的active类名,取消选中状态。
3.6、target.classList.add('active');为当前被点击的缩略图添加active类名,突出显示选中状态。
3.7、isClick = false;将isClick设置为false,防止在短时间内再次触发点击事件。
3.8、setTimeout(() => isClick = true, 1000 * 1);
3.8.1、使用setTimeout在1秒后将isClick重置为true,允许再次点击。
3.8.2、这种方式实现简单的节流效果,防止用户过于频繁地切换图片。


JavaScript部分通过简单的事件监听和DOM操作,实现点击缩略图更换大图的交互效果。同时,使用一个简单的节流机制,避免过于频繁的点击操作导致的潜在问题。


vue伪元素

html

<div class="tab_bar"><div:class="{item: true,active: item.id === activeTabBar ? true : false}"v-for="item in tabBarList":key="item.id"@click="handleTabBar(item)">{{ item.title }}</div>
</div>

style

.tab_bar {width: 100%;display: flex;border-bottom: 1px solid #a8a8a8;.item {position: relative;padding: 8px;cursor: pointer;}.item:not(:first-child) {margin-left: 8px;}.active {position: relative;color: #409eff;transition: color 0.5s ease;}.active::after {content: '';position: absolute;width: 58%;height: 3px;left: 50%;bottom: -1px;transform: translateX(-50%);background-color: #409eff;}
}

JavaScript

export default {name: 'tabBar',data() {return {activeTabBar: 1,tabBarList: [{ id: 1, title: '正在开班' },{ id: 2, title: '已结束班级' },{ id: 3, title: '全部班级' }]};},methods: {handleTabBar(row = {}) {this.activeTabBar = row.id;}}
};

这篇关于web前端之选项卡集合、动态添加类名、动态移除类名、动态添加样式、激活、间距、节流、tabBar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104326

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能