【CSS动效实战(纯CSS与JS动效)】03 精美手风琴侧边栏完整示例教程 示例1

本节示例演示:
请添加图片描述

一、基本布局

一般来说,侧边栏的位置是在左侧,咱们为了更好的展现侧边栏的效果,并且在本节中不涉及过多的内容,我们只需要直接给一个 div 宽度为 15即可,接着再到这个 div 中编写对应的侧边栏。

给予一个 nav 样式,设置宽度为 15%,并且给予一些基础样式,使其呈现有一定的对比度:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>accordion nav demo 1_bit CSS 动效课 </title><style>.nav {width: 20vw;background-color: white;margin: 4px;height: 100vh;}body {margin: 0;background-color: rgb(223, 224, 225);}</style>
</head><body><div class="nav"></div>
</body></html>

此时页面效果如下:
在这里插入图片描述

二、 手风琴侧边栏 LOGO 部分编写

有了基本布局后,开始着手编写侧边栏。

从这个侧边栏我们可以明显的知道,侧边栏顶部是 logo 区,或者你放其他的也行,logo 之下就是对应的菜单,那么侧边栏的内容就分为两块,一个上一个下,并且这一上一下的结果所属于一个侧边栏,那么此时肯定需要一个 div 包裹其他两个 div,此时 侧边栏代码编写如下:

<body><div class="nav"><!--手风琴侧边栏--><div><!--logo--><div></div><!--菜单--><div></div></div></div>
</body>

此时我们编写一个类样式,咩咩咩为 accordion:

<style>
.accordion {width: 100%;border-right: #424243 solid 2px;
}
</style>

并且包裹手风琴内容的div 要调用这个类样式:

<!--手风琴侧边栏-->
<div class="accordion">

在此我们只是给这个手风琴侧边栏定义了一个基础的边框和宽度,接下来创建 logo和 logo 下的 span 样式:

<style>
.logo {border-bottom: #424243 solid 1px;display: flex;justify-content: center;
}.logo span {color: white;padding: 2rem 2rem;font-size: 2rem;font-weight: bolder;
}
</style>

因为要对文字设置一定的大小,对文字使用 span 标签可以很好的进行控制;在 logo 样式中,还设置了当前 div 为 flex 样式,这样就可以很好的控制其中的内容是否居中等操作了,接着我们设置了 logo 的 span 样式,文本为白色,设置了padding 这样使其大小可以撑大,这样就不用设置该文本对于边缘的空隙了,接着设置了字体大小和加粗。此时的html 代码如下:

<body><div class="nav"><!--手风琴侧边栏--><div class="accordion"><!--logo--><div class="logo"><span>ePageTool</span></div><!--菜单--><div></div></div></div>
</body>

此时页面效果如下:
在这里插入图片描述

三、 菜单部分内容编写

接着完成了 logo 后开始编写下面的菜单内容,我们可以从之前的演示图看到,我们点击对应的菜单栏可以对其进行选中并且展开其内部的选项,那么这个功能需要一个 html 元素实现,那就是 radio ;在其选中一个类型内容后,将会展开对应的内部选项,这些选项需要一个 div 统一对其进行管理,那么在选项的 div 之下应该还需要创建一个 div,并且 div 中需要有选项内容:

<!--菜单-->
<div><div><ul><li><a href="#">使用</a></li><li><a href="#">自定义</a></li></ul></div>
</div>

在此使用了 ul 表示对应的选项内容,那么外部还需要显示该菜单的文本直接使用一个 label 表现即可:

<!--菜单-->
<div><label> 开始</label><div><ul><li><a href="#">使用</a></li><li><a href="#">自定义</a></li></ul></div>
</div>

之前说需要使用 radio 表示选中,那么此时在外部再加一个 input type 为 radio:

<!--菜单-->
<div><input type="radio"><label> 开始</label><div><ul><li><a href="#">使用</a></li><li><a href="#">自定义</a></li></ul></div>
</div>

此时页面显示如下:
在这里插入图片描述
这明显就不是我们想要的样子,那么此时第一步,我们先把 radio 的选中圈圈取消,这个时候直接写 accordion 下的 input 直接为 none,这样就可以统一去掉所有 radio 的圈圈了:

<style>
.accordion input[type='radio'] {display: none;
} 
</style>

以上样式表示 accordion 类下的 input 标签属性 type 值为 radio 的统一设置属性 display: none;,那么此时页面如下:

在这里插入图片描述
由于 radio 是单选项,我们需要对其设置一个单选项组,直接使用 name 表示即可,多个不同的 radio 使用同一个 name 就表示同一个组的 radio:

<input name="menu" type="radio"  >

此时我们还需要做一件事,因为我们的 radio 的 display 已经是 none 了, 那么我们需要有一个东西代替这个恶radio,此时我们直接给予 label 一个 for:

<label for="start"> 开始</label>

这个 for 可以对应所关联的 radio,那么 radio 此时需要一个 id 对应这个 label 元素,我们只需要给予这个 radio 的 id 为 start 即可:

<input name="menu" type="radio" id="start" >

此时 body 代码如下:

<body><div class="nav"><!--手风琴侧边栏--><div class="accordion"><!--logo--><div class="logo"><span>ePageTool</span></div><!--菜单--><div><input name="menu" type="radio" id="start"><label for="start"> 开始</label><div><ul><li><a href="#">使用</a></li><li><a href="#">自定义</a></li></ul></div></div></div></div>
</body>

接着我们直接给予这个菜单一个 item 样式:

<!--菜单-->
<div class="item">

接着直接写两个 样式,item 样式不写都可以:

<style>
.accordion>.item label {color: white;background-color: #ff6f61;display: block;padding: 1rem 2rem;border-bottom: #931313 solid 1px;transition: color 0.3s, background-color 0.3s;
}.accordion>.item label:hover {background-color: #c30d0ddb;color: white;
}
</style>

首先 .accordion>.item label 表示 accordion 样式下的 item 样式下的 label 标签样式,颜色为白,给予背景色,设置 display 为 block,并且给予对应的 padding,以及下边框(这样每个 item 之间有间隔看得清楚)颜色,还定义了一个 transition 动画,主要是颜色动画和背景色动画,随后给予了一个同样 label 的 hover 样式,设置背景色会有一定的变化,并且设置了 color 字体颜色为白色,这样整个 label 就会有颜色的改变,此时页面效果如下:

请添加图片描述

接着我们需要对这个菜单下的展开选项设置样式:
在这里插入图片描述
我们给予这个展开项的div 一个样式 content:

<div class="content"><ul><li><a href="#">使用</a></li><li><a href="#">自定义</a></li></ul>
</div>

此时我们发现这个 ul 列有一定的距离:
在这里插入图片描述
这是因为这时ul 自带了padding 和 margin,我们需要消除,那么在 content 样式中,我们就需要给予 padding 、margin 为 0:

<style>
.content ul {margin: 0;padding: 0;
}
</style>

此时页面如下:
在这里插入图片描述
接着给a标签对应的样式:

<style>
.content ul a {width: 100%;display: inline-block;color: white;font-size: 1rem;text-decoration: none;padding: 1rem 3rem;border-bottom: 1px solid #394c7f;
}
</style>

设置标签 a 宽度为 100%,并且转换元素类型,给予字体 size、去掉下划线,给予 padding随后得到的效果如下:
在这里插入图片描述

我们此时发现下划线超格了,那么需要设置 overflow,直接在content 上设置overflow即可:

<style>
.content ul {overflow: hidden;margin: 0;padding: 0;}
</style>

此时页面将不会超格;接下来设置对应 a 标签的 hover 标签,这个标签我们需要有一定的动画效果,那么在 a 标签的样式中添加过渡动画,并且添加 position: relative,因为接下来添加的效果需要脱离文档流制作:

<style>
.content ul a {width: 100%;display: inline-block;color: white;font-size: 1rem;text-decoration: none;padding: 1rem 3rem;border-bottom: 1px solid #394c7f;position: relative;transition: all 0.5s;
}
</style>

接着添加 hover 效果,这个效果只是其一,接下来还有其他效果:

<style>
.content a:hover {display: block;background-color: #1e2546;}</style>

接下来给 a 标签添加 before,在 before 上制作对应的动画效果,当然,这里添加的是默认情况。当然是无效果状态,在这里只是默认的把 before 的透明度 opacity 调为 0 ,内容是空白,添加了一个过渡动画对其进行响应:

<style>
.content a:before {content: '';opacity: 0;transition: all 0.3s;
}
</style>

接着增加 before 的对应效果:

<style>
.content a:hover:before {position: absolute;left: 0;top: 0;opacity: 1;border-top: 24px solid transparent;border-left: 11px solid #ff6f61;border-bottom: 24px solid transparent;
}
</style>

在以上效果中,增加 before 为 position: absolute; 开始为期编写对应的样式,这个样式距离左边 0 个单位,距离顶部 0 个单位,透明度 opacity 为 1 表示课件,最关键的是以下样式:

<style>
border-top: 24px solid transparent;
border-left: 11px solid #ff6f61;
border-bottom: 24px solid transparent;
</style>

我们之间设置显示的效果给大家看,该代码改成:

<style>
border-top: 24px solid #ff6161;
border-left: 24px solid #ffdf61;
border-right: 24px solid #616eff;
border-bottom: 24px solid #71ff61;
</style>

这 4 个代码分别表示 border-top 为红、橙、蓝、绿:
在这里插入图片描述
接着显示时如下效果:
在这里插入图片描述
这个时候若我们只想要左侧大小变小,例如 11:

<style>
border-top: 24px solid #ff6161;
border-left: 11px solid #ffdf61;
border-right: 24px solid #616eff;
border-bottom: 24px solid #71ff61;
</style>

效果如下:
在这里插入图片描述
那么此时 其它 颜色为 transparent 为透明。那么代码如下:

<style>
border-top: 24px solid transparent;
border-left: 11px solid #ffdf61;
border-right: 24px solid transparent;
border-bottom: 24px solid transparent;
</style>

效果如下:
在这里插入图片描述
很明显我们的右侧代码没有存在必要,那么直接不写就可以了,也就是删掉这一条:border-right: 24px solid transparent;,并且其它 border 不同大小可以影响其结果,大家自行实验即可,接下来我们添加第二个 item:

<div class="item"><input name="menu" type="radio" id="gradient"><label for="gradient"> 渐变</label><div class="content"><ul><li><a href="#">线性渐变</a></li><li><a href="#">径向渐变</a></li></ul></div>
</div>

并且在 content ul 样式中为其设置高度为 0,这样内容就不会全部展开了:

<style>
.content ul {max-height: 0;overflow: hidden;margin: 0;padding: 0;
}
</style>

此时效果如下,点击后展开不了内容:
在这里插入图片描述

那此时如何点击后展开内容呢?

我们只需要对 input 的效果监听是否 checked 即可:

<style>
.accordion input:checked~.content ul {max-height: auto;transition: all 0.2s;background-color: #273057;
}
</style>

此时 .accordion input:checked~.content ul 的意思是为所有相同父元素中位于.accordion input:checked 之后的所有 content 下的 ul 元素设置CSS,其中 波浪线 之前表示 什么什么之后,content ul 表示设置结果对象,作用范围是当前响应对象的所有相同父元素的对象。那么此时直接设置了 ul 的高度为 auto,那么就可以展开了。

若自己试验后可以看到此时感觉响应效果不好,没有添加动画,那么此时只需要在 content ul 中设置动画即可:

<style>
.content ul {max-height: 0;overflow: hidden;margin: 0;padding: 0;transition: all 0.4s;
}
</style>

效果如下:
请添加图片描述

此时完整代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>accordion nav demo 1_bit CSS 动效课 </title><style>.nav {width: 20vw;background-color: white;margin: 4px;height: 100vh;}body {margin: 0;background-color: rgb(223, 224, 225);}.accordion {width: 100%;border-right: #424243 solid 2px;background-color: #ff6f61;}.logo {border-bottom: #424243 solid 1px;display: flex;justify-content: center;}.logo span {color: white;padding: 2rem 2rem;font-size: 2rem;font-weight: bolder;}.accordion input[type='radio'] {display: none;}.accordion>.item label {color: white;background-color: #ff6f61;display: block;padding: 1rem 2rem;border-bottom: #931313 solid 1px;transition: color 0.3s, background-color 0.3s;}.accordion>.item label:hover {background-color: #c30d0ddb;color: white;}.content ul {max-height: 0;overflow: hidden;margin: 0;padding: 0;transition: all 0.4s;}.content ul a {width: 100%;display: inline-block;color: white;font-size: 1rem;text-decoration: none;padding: 1rem 3rem;border-bottom: 1px solid #394c7f;position: relative;transition: all 0.5s;}.content a:hover {background-color: #1e2546;}.content a:before {content: '';opacity: 0;transition: all 0.3s;}.content a:hover:before {position: absolute;left: 0;top: 0;opacity: 1;border-top: 1.5rem solid transparent;border-left: 11px solid #ffdf61;border-bottom: 1.5rem solid transparent;}.accordion input:checked~.content ul {max-height: 20rem;transition: all 0.2s;background-color: #273057;}</style>
</head><body><div class="nav"><!--手风琴侧边栏--><div class="accordion"><!--logo--><div class="logo"><span>ePageTool</span></div><!--菜单--><div class="item"><input name="menu" type="radio" id="start"><label for="start"> 开始</label><div class="content"><ul><li><a href="#">使用</a></li><li><a href="#">自定义</a></li></ul></div></div><div class="item"><input name="menu" type="radio" id="gradient"><label for="gradient"> 渐变</label><div class="content"><ul><li><a href="#">线性渐变</a></li><li><a href="#">径向渐变</a></li></ul></div></div></div></div>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 服务 同时启动多个服务

Windows 服务 同时启动多个服务独立观察员 2019.02.26最近需要开发 Windows Service 程序&#xff0c;之前没有接触过&#xff0c;所以把了解到的一些东西记录下来。Windows 服务程序可以简单理解为需要长时间在后台运行&#xff0c; 而又不需要界面显示的程序&#xff0c;在计…

一、基本remix环境及HelloWord contract《2022 solidity8.+ 版本教程到实战》

这个系列是 solidity8.版本的教程&#xff0c;既然学习了 solidity 就应该明白智能合约是啥&#xff0c;在此系列文章中将不赘述基础概念&#xff0c;只讲解对应的语法&#xff0c;希望读者理解。 环境 solidity 版本&#xff1a;8.(2022年9月8日 最新版本) IDE&#xff1a;h…

遥感空间尺度转换技术(升尺度和降尺度)

遥感图像的一个基本特征是空间分辨率。目前已经可以有效获取大量不同空间分辨率遥感数据。 尺度和尺度转换已经成为遥感的核心问题之一,人们已经从不同角度提出了这一问题。尺度转换分为两种: 升尺度:从高分辨率到低分辨率的转换;降尺度:从低分辨率到高分辨率的转换。文章…

three.js插件实现立体动感视频播放效果

2019独角兽企业重金招聘Python工程师标准>>> three.js插件实现立体动感视频播放效果 效果描述&#xff1a; 立体式视频播放效果 大家使用的时候可得注意了&#xff0c;它并不支持低版本浏览器 使用方法&#xff1a; 1、将body中的代码部分拷贝到你需要的地方,将视频…

Python3.6学习笔记(五)

网络编程 网络程序出现的比互联网要早很多&#xff0c;实现方式主要依靠网络上不同主机间进程的通信&#xff0c;通信协议最重要的是TCP/IP协议。在这两个协议基础上还有很多更高级的协议&#xff0c;包括HTTP、SMTP等。要进行两个主机间的网络通信&#xff0c;必须四个元素&a…

ArcGIS实验教程——实验三十三:ArcScan自动矢量化完整案例教程

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1 ArcScan 简介2. ArcScan使用前提及注意事项3. ArcGIS自动矢量化案例1 ArcScan 简介 ArcScan是ArcGIS Desktop的打展模块,是栅格数据矢量化的套工具集, 用这些工具,可以创建要素,将…

抢先体验全新标签页!Windows 11 必备小工具下载

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软近日推送了 Windows 11 新预览版&#xff0c;为文件资源管理器带来了全新标签页功能。Windows 11 文件资源管理器全新标签页介绍在 Windows 11 预览版中&#xff0c;新功能分别向 A 和 B 两组用户的电脑推送测试。A 用户的…

二、基本类型及函数使用《2022 solidity8.+ 版本教程到实战》

一、基本变量类型 solidity 中的基本变量类型与一般编程中类似&#xff1a; // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract Hello{string public say"Hello 1_bit";int public ival-1;uint public uval1;address public aval0xd9145CCE52…

Markdown编辑器模板

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

as3文本框的动态拖拽和编辑

如今非常多软件都支持了编辑界面的文本拖拽和点击编辑来直接改动数值, 这样便于操作, 并且体验性也好, 抛砖引玉吧 于是就用好久没编写的as3来写了一下: 由于用的flash ide写的没有提示, 就临时不做细节处理了, 假设用于project上会有点小问题, 只是不影响本效果展示 代码: imp…

为 HttpClient 注册自定义请求标头

前言上次&#xff0c;我们介绍了《在 ASP.NET Core 中使用 HTTP 标头传播》。但是有时候&#xff0c;当服务间需要互相调用时&#xff0c;也需要将创建一些自定义标头传播到目标服务。比如&#xff0c; ServiceA 已经进行了身份验证&#xff0c;那么当它调用 ServiceB 时&#…

【Pix4d精品教程】未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 block,问题分析及解决方案汇总

文章目录 问题描述原因分析问题分析问题解决问题描述 在使用pix4d处理航测数据时,部分航带高精度检测时,提示未校准相机: 287 out of 402 images calibrated (71%), all images enabled, 6 blocks 质量报告如下所示: 切换到【控三射线】,查看空山射线,红色部分是校准失败…

四、函数修改器《2022 solidity8.+ 版本教程到实战》

一、函数修改器 modifier 在 solidity 中有一个函数修改器可作为前置、中置或者后置方法&#xff0c;有点像 ASP.NET 中的母版页&#xff08;最起码差不多十年不碰了&#xff0c;不懂还有没有这个概念&#xff09;&#xff0c;又有点像 ThinkPHP 中的前置方法&#xff0c;可以…

mysql按月进行表分区

数据库 mysql 单表数据量达到千万、亿级&#xff0c;可以通过分表与表分区提升服务性能。 现有表accounting&#xff0c;4亿条数据&#xff0c;数据访问方式为insert与select&#xff0c;select为按月访问&#xff0c;为减少数据与程序变更&#xff0c;采用表分区的方式。 数据…

MFC 直线 虚线 折线 圆 椭圆 矩形 弧形

****Dlg.h头文件加入&#xff1a; //为project加入画笔、点变量数组 public:CPen m_pen[5];CPoint m_point[5]; public:void DrawLine(CDC *pDC);void DrawPolyline(CDC *pDC);void DrawPolygon(CDC *pDC);void DrawRect(CDC *pDC);void DrawRoundRect(CDC *pDC);void DrawElli…

最近无埋点技术很是流行,抽空研究了下诸葛IO,talkingData以及百分点这些业内知名公司的无埋点SDK,抽取其中重要的信息供大家参考:

1、首先什么是无埋点呢&#xff0c;其实所谓无埋点就是开发者无需再对追踪点进行埋码&#xff0c;而是脱离代码&#xff0c;只需面对应用界面圈圈点点即可追加随时生效的事件数据点。 无埋点的好处 其实无埋点并不是完全不用写代码&#xff0c;而是尽可能的少写代码。开发者将S…

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

pix4d mapper相机未校准后手动添加连接点完美案例图文教程 整体预览 局部放大 如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 bl…

Blazor University (30)表单 —— 从 InputBase 派生

原文链接&#xff1a;https://blazor-university.com/forms/descending-from-inputbase/从 InputBase 派生源代码[1]InputBase<T> 组件是各种 Blazor 输入控件所继承的抽象类。这个类在标准 HTML <input> 元素的基础上增加了额外的功能&#xff0c;比如验证——我们…

3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

转自&#xff1a;https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步&#xff0c;新建一个工程&#xff0c;如图&#xff1a; 选 Java 写一个工程名&#xff0c;选择好工程路径&#xff0c;点下一步 选择 webServices &#xff0c;在右边的 version 中选择 …

ArcGIS实验教程——实验三十四:ArcGIS地统计分析全解(直方图、正态QQ图、趋势分析、voronoi图、半变异函数、协方差云)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、地统计分析的基本原理二、地统计分析的工作流程三、探索性空间数据分析工具1. 直方图2. QQ分布图3. 趋势分析4. Voronoi图5. 半变异函数与协方差云6. 交叉协方差云四、空间插值一、地…