【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮
1. 实现效果
2. 实现方法
- 使用 JS 获取盒子的高度,来添加对应的按钮和样式;
- 使用 CSS 的浮动效果,参考CSS 实现超过固定高度后出现展开折叠按钮;
- 使用容器查询 – container 语法;
- 使用 clamp 函数进行样式判断。
3. 优劣分析
- JS 需要在内容加载完成后来进行获取高度进行判断;
- CSS 的浮动首先需要你理解浮动的一些特殊特性,还需要添加一些辅助样式属性;
- 容器查询需要设置容器的最开始的固定高度,目前没有尝试;
- 本文采用的方法,使用 clamp 函数判断显示与否展示按钮。
4. 创建基础的 DOM
<div class="rui-flex-content"><div class="rui-container"><div class="rui-fwb">内容超出限制</div><input class="rui-content-check" type="checkbox" id="rui-pre" hidden /><div class="rui-content"><pre class="rui-text">
.rui-flex-content {display: flex;font-size: 20px;justify-content: space-around;
}
.rui-fwb {font-weight: bold;
}
.rui-content {--max-h: 200px;margin-top: 15px;width: 400px;max-height: var(--max-h);overflow: hidden;border-radius: 4px;outline: 2px dashed royalblue;position: relative;
}
.rui-content::before {content: '';display: block;position: absolute;bottom: clamp(-40px, calc(100% - var(--max-h)), 1px);left: 0;width: 100%;height: 40px;background-image: linear-gradient(to top, #fff, transparent);
}
.rui-text {white-space: pre-wrap;box-sizing: border-box;width: 100%;padding: 10px 15px;line-height: 1.1;margin: 0;font-size: 14px;color: #232323;
}</pre><label for="rui-pre" class="rui-btn"></label></div></div><div class="rui-container"><div class="rui-fwb">内容未超出限制</div><input class="rui-content-check" type="checkbox" id="pre" hidden /><div class="rui-content"><pre class="rui-text">.rui-content{width: 400px;max-height: 200px;overflow: hidden;border-radius: 4px;outline: 2px dashed royalblue;}</pre><label for="pre" class="rui-btn"></label></div></div></div>
5. 设置容器的样式
.rui-flex-content {display: flex;font-size: 20px;justify-content: space-around;
}
.rui-fwb {font-weight: bold;
}
.rui-content {--max-h: 200px;margin-top: 15px;width: 400px;max-height: var(--max-h);overflow: hidden;border-radius: 4px;outline: 2px dashed royalblue;position: relative;
}
.rui-text {white-space: pre-wrap;box-sizing: border-box;width: 100%;padding: 10px 15px;line-height: 1.1;margin: 0;font-size: 14px;color: #232323;
}
6. 基础效果
7. 添加底部的渐变
7.1 实现分析
- 使用 ::before 伪元素实现过渡的渐变效果;
- 使用 linear-gradient(to top, #fff, transparent) 做白色到透明的渐变背景;
- 使用 clamp 计算渐变的定位底部位置。
7.2 实现样式
.rui-content::before {content: '';display: block;position: absolute;bottom: clamp(-40px, calc(100% - var(--max-h)), 0px);left: 0;width: 100%;height: 40px;background-image: linear-gradient(to top, #fff, transparent);
}
7.3 实现效果
7.4 注意
- 此处在盒子小于规定的最大尺寸200px时,隐藏渐变效果的方法是将渐变定位到盒子外,用overflow:hidden进行隐藏;
- 也就是 clamp(-40px, calc(100% - var(–max-h)), 0px) 句代码的判断定位,但是这个条件判断存在一个问题,这个条件判断小于-40px就取-40px,大于0px就取0px,问题是如果值在-40px到0px之间时,出现线性设置bottom的值,这就不符合我们这里的显示隐藏的需求。
7.5 bug 效果
- 这里为了看到效果,直接将渐变颜色直接设置为黑色;
- 可以看到当盒子的高度是175px时,计算bottom的值就是 175px - 200px = -25px,而-25px处于-40px到0px之间,因此这个时候bottom的值就是 -25px,所以出现了一半。
7.6 实际需要的效果
我们实际需要的效果是当盒子的高度小于200px时,直接将渐变定位到盒子外隐藏,大于200px时,直接取0px直接定位在盒子的底部,上边 clamp(-40px, calc(100% - var(–max-h)), 0px) 这个公式其实已经满足我们大部分需求,现在的问题就是在盒子的高度在160px到200px之间时的取值,不符合我们的需求。我们的需求是在盒子高度在 160px到200px 之间,bottom 的值也需要是 -40px,这个问题该如何解决呢?
7.7 解决办法
盒子高度在 160px到200px 之间,bottom 的值就在 -40px到0px之间取值。但是我们需要的是这个时候bottom的值是-40px,如何解决呢?将当前bottom的值乘以一个基础系数,只要最后得到的结果小于-40px就可以,当然为了处理-1px到0px之间的小数,建议这个系数最好大于1000,这个时候比如盒子高度198px,bottom的值就是 (198px - 200px)*1000 = - 2000px这个结果和-40px比较,所以取值-40px,就能满足我们的需求。
7.8 解决后效果
这个时候就可以看到盒子高度 174px 时,下边的渐变遮罩层就隐藏了,满足开发需求。
7.9 优化后样式
.rui-content::before {content: '';display: block;position: absolute;bottom: clamp(-40px, calc(calc(100% - var(--max-h)) * 1000), 0px);left: 0;width: 100%;height: 40px;background-image: linear-gradient(to top, #fff, transparent);
}
8. 添加隐藏展示按钮
8.1 样式代码
.rui-btn {width: 100px;text-align: center;position: absolute;left: calc(50% - 50px);bottom: clamp(-40px, calc(calc(100% - var(--max-h)) * 1000), 0px);cursor: pointer;
}
.rui-btn::after {content: '↑';display: block;height: 40px;line-height: 40px;text-align: center;transition: 0.2s all;
}
8.2 说明
- 按钮的定位和遮罩层一样,在小于200px时不显示,超出200px后就展示按钮,所以定位也使用 clamp(-40px, calc(calc(100% - var(–max-h)) * 1000), 0px) 进行计算。
8.3 效果
9. 添加按钮的事件样式控制
9.1 说明
- 使用 rui-btn:hover::after 控制按钮 hover 的时候改变字体颜色;
- 使用 + 选择器在 input 选中时,控制盒子的高度自适应;
- 使用 + 选择器将底部的按钮箭头换方向;
- 使用 + 选择器将底部的渐变遮罩层隐藏。
9.2 样式实现
.rui-btn:hover::after {color: royalblue;
}
.rui-content-check:checked + .rui-content {max-height: fit-content;
}
.rui-content-check:checked + .rui-content .rui-btn::after {transform: rotate(180deg);
}
.rui-content-check:checked + .rui-content::before {opacity: 0;
}
9.3 效果
10. 最终效果
11. 总结
- 学习使用 CSS 函数 clamp 函数,此函数不但能作为区间取值,还可以作为一种判断;
- 此效果采用的纯 CSS 实现,减少了 JS 操作判断;
- 需要待解决问题,就是临界值 200px 的时候,刚好 200px 不应该显示按钮,超出200px才显示,这个目前还在思考解决办法。
相关文章:
【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮
1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度,来添加对应的按钮和样式;使用 CSS 的浮动效果,参考CSS 实现超过固定高度后出现展开折叠按钮;使用容器查询 – container 语法;使用 clamp 函数进行样式判断。 3. 优…...
二十项零信任相关的前沿和趋势性技术-MASQUE
影响力评级:较低 市场渗透率:不到目标受众的 1% 成熟度:孵化 定义:基于QUIC加密的多路复用应用程序底层 (MASQUE) 是一个 IETF 标准草案,可实现流量的安全传输和代理。 MASQUE全称为:Multiplexed Appli…...
【Docker】使用Dev Container进行开发
工作区 Dev Container 设置 新建一个文件夹 ./devcontainer 然后下面放 devcontainer.json 然后安装 vscode dev container 插件,然后 CtrlShiftP 启动 Container {"name": "PyTorch-Julia Development","image": "x66ccff/p…...
搭建一个基于Spring Boot的数码分享网站
搭建一个基于Spring Boot的数码分享网站可以涵盖多个功能模块,例如用户管理、数码产品分享、评论、点赞、收藏、搜索等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的数码分享平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …...
在线json格式化工具
在线json格式化工具,包括中文和英文版本,无需登录,无需费用,用完就走。 官网地址: https://json.openai2025.com 效果如下:...
leetcode300.最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…...
【个人学习记录】软件开发生命周期(SDLC)是什么?
软件开发生命周期(Software Development Life Cycle,SDLC)是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段: 需求分析(Requirements Analysis) 收集并分析用户需求定义系统目标…...
CTE与临时表:优劣势对比及使用场景分析
在数据库开发中,尤其是在复杂查询和优化中,**公共表表达式(CTE)和临时表(Temporary Table)**是两种常用的工具。尽管它们的功能有些相似,都是为了处理中间结果集,但它们的优劣势和使…...
Kali环境变量技巧(The Environment Variable Technique Used by Kali
Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...
Ubuntu 24.04 LTS linux 文件权限
Ubuntu 24.04 LTS 文件权限 读权限 :允许查看文件的内容。写权限 (w):允许修改文件的内容。执行权限 (x):允许执行文件(对于目录来说,是进入目录的权限)。 文件权限通常与三类用户相关联: 文…...
多个版本JAVA切换(学习笔记)
多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…...
AI刷题-最小替换子串长度、Bytedance Tree 问题
目录 一、最小替换子串长度 问题描述 输入格式 输出格式 输入样例 1 输出样例 1 输入样例 2 输出样例 2 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、Bytedance Tree 问题 问题描述 输入格式 输…...
Android 项目依赖冲突问题:Duplicate class found in modules
问题描述与处理处理 1、问题描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…...
Webpack简述
一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢,构建工具的作用就是让人类舒舒服服写自己喜欢的代码,然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件(编译import)&am…...
ARM GCC编译器
ARM GCC编译器(GNU Compiler Collection for ARM)是GNU项目的一部分,专门用于编译针对ARM架构的代码。它是一个开源的工具链,支持多种编程语言,包括C、C和汇编语言。以下是关于ARM GCC编译器的详细解释及其作用&#x…...
CSS3 3D 转换介绍
CSS3 中的 3D 转换提供了一种在二维屏幕上呈现三维效果的方式,主要包括translate3d、rotate3d、scale3d等转换函数,下面来详细介绍: 1. 3D 转换的基本概念 坐标系 在 CSS3 的 3D 空间中,使用的是右手坐标系。X 轴是水平方向&…...
关于 Cursor 的一些学习记录
文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1:提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…...
3. 后端验证前端Token
书接上回,后端将token返回给前端,前端存入cookie,每次前端给后端发送请求,后端是如何验证的。 若依是用过滤器来实现对请求的验证,过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理࿰…...
【LLM】Openai-o1及o1类复现方法
note 可以从更为本质的方案出发,通过分析强化学习的方法,看看如何实现o1,但其中的核心就是在于,如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。 文章目录 note一、Imitate, Explore, …...
与“神”对话:Swift 语言在 2025 中的云霓之望
0. 引子 夜深人静,是一片极度沉醉的黑,这便于我与深沉的 macbook 悄悄隐秘于其中。一股异香袭来,恍惚着,撸码中身心极度疲惫、头脑昏沉的我仿佛感觉到了一束淡淡的微光轻洒在窗边。 我的对面若隐若现逐渐浮现出一个熟悉的身影。他…...
设计模式-单例模式
定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全,调用效率高,但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …...
C#枚举类型携带额外数据的方法
Java里面的枚举类型可以定义很多属性,携带各种数据,然而C#里面的枚举类型只能代表数字,不能在枚举类型里面定义各种属性,导致某些应用场景使用起来不方便,但是可以利用C#里面的Attribute来解决这个问题。 例如…...
跨境电商使用云手机用来做什么呢?
随着跨境电商的发展,越来越多的卖家开始尝试使用云手机来协助他们的业务,这是因为云手机具有许多优势。那么,具体来说,跨境电商使用云手机可以做哪些事情呢? (一)实现多账号登录和管理 跨境电商…...
RabbitMQ-消息可靠性以及延迟消息
目录 消息丢失 一、发送者的可靠性 1.1 生产者重试机制 1.2 生产者确认机制 1.3 实现生产者确认 (1)开启生产者确认 (2)定义ReturnCallback (3)定义ConfirmCallback 二、MQ的持久化 2.1 数据持久…...
Mybatis plus中的BaseMapper与ServiceImpl
BaseMapper接口方法与ServiceImpl类方法的区别与联系 什么是BaseMapper?什么是ServiceImpl? BaseMapper 是 MyBatis-Plus 提供的一个基础 Mapper 接口,封装了常用的 CRUD 操作方法,如 selectById、insert、updateById、deleteBy…...
第三篇 Avaya IP Office的架构及其服务组成
所谓的架构,其实就是Solution,解决方案。一般就是如下几套: IPO primary IPO secondaryIPO primary IP500v2IPO primary IPO secondary IP500v2IPO primary IPO secondary IP500v2 Expansion Server(IP500v2,扩展)IPO primaryIPO 500v2 简单的解释…...
近红外简单ROI分析matlab(NIRS_SPM)
本次笔记主要想验证上篇近红外分析是否正确,因为叠加平均有不同的计算方法,一种是直接将每个通道的5分钟实时长单独进行叠加平均,另一种是将通道划分为1分钟的片段,将感兴趣的通道数据进行对应叠加平均,得到一个总平均…...
ESP32学习笔记_FreeRTOS(6)——Event and Notification
摘要(From AI): 这篇博客详细介绍了 FreeRTOS 中的事件组和任务通知机制,讲解了事件组如何通过位操作实现任务间的同步与通信,以及任务如何通过通知机制进行阻塞解除和数据传递。博客提供了多个代码示例,展示了如何使用事件组和任务通知在多任…...
多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)
文章目录 1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1 封装播放组件3.2.2 隐形的视频div3.2.3 截取封面图 3.3 结束 1.背景 有这样一个需求: 给你一个监控列表,每页展示多个监控(至少12个,m3u8格式)&…...
ExpGCN:深度解析可解释推荐系统中的图卷积网络
一、引言 在当今信息爆炸的时代,推荐系统已成为电子商务和社交网络中不可或缺的工具,旨在为用户筛选出符合其兴趣的信息。传统的协同过滤(CF)技术通过挖掘用户与项目之间的交互记录来生成推荐,但这种方法简化了模型&a…...
ChatGPT Prompt 编写指南
一、第一原则:明确的意图 你需要明确地表达你的意图和要求,尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确,越有希望获得你想要的答案。 糟糕的案例 ❌ 写一首关于 OpenAI 的诗。 更好的案…...
【脑机接口数据处理】 如何读取Trode 的.rec文件 原始数据?
文章目录 函数简介文件下载函数语法基本用法带时间跳过的用法带选项参数的用法输出结构使用示例 注意事项 MATLAB中读取Trodes文件的实用函数——readTrodesFileContinuous 在处理神经科学实验数据时,经常会遇到Trodes格式的文件。这些文件包含了丰富的神经信号数据…...
反转字符串中的单词 II:Swift 实现与详解
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
蓝桥杯训练—矩形面积交
文章目录 一、题目二、示例三、解析四、代码 一、题目 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴,对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程写出两个矩形的交的面积 输入格式: 输入包含两行…...
如何设置HTTPS站点防御?
设置HTTPS站点防御涉及到多个层面的安全措施,包括但不限于配置Web服务器、应用安全头信息、使用内容安全策略(CSP)、启用HSTS和OCSP Stapling等。下面是一些关键的步骤来增强HTTPS网站的安全性: 1. 使用强加密协议和密钥交换算法…...
光谱相机如何还原色彩
多光谱通道采集 光谱相机设有多个不同波段的光谱通道,可精确记录每个波长的光强信息。如 8 到 16 个甚至更多的光谱通道,每个通道负责特定波长范围的光信息记录。这使得相机能分辨出不同光谱组合产生的相同颜色感知,而传统相机的传感器通常只…...
doris:导入概览
Apache Doris 提供了多种导入和集成数据的方法,您可以使用合适的导入方式从各种源将数据导入到数据库中。Apache Doris 提供的数据导入方式可以分为四类: 实时写入:应用程序通过 HTTP 或者 JDBC 实时写入数据到 Doris 表中,适用于…...
Linux 操作二:文件映射与文件状态
Linux 操作二:文件映射与文件状态查询 文件映射 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程…...
ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本
本系列为个人学习 ASP .NET Core学习全过程记录,基于.NET 9 和 VS2022 ,实现前后端分离项目基础框架搭建和部署,以简单、易理解为主,注重页面美观度和后台代码简洁明了,可能不会使用过多的高级语法和扩展,后…...
电脑换固态硬盘
参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…...
MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解
大家好,我是袁庭新。 MySQL作为企业项目中的主流数据库,其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具,旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…...
机器学习之决策树(DecisionTree)
决策树中选择哪一个特征进行分裂,称之为特征选择。 特征选择是找出某一个特征使得分裂后两边的样本都有最好的“归宿”,即左边分支的样本属于一个类别、右边分支的样本属于另外一个类别,左边和右边分支包含的样本尽可能分属同一类别ÿ…...
Qt Desiogn生成的ui文件转化为h文件
1.找到这个工具 2.查找到ui文件以及要转化为的h文件的路径。 3.在1中的工具输入uic /xx/xxx.ui -o /xx/xxx.h即可得到结果。...
python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测
OpenCV中边缘检测四种常用算子: (1)Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度,并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核,分别用于计…...
【论文阅读】VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning
VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning -- VCD-FL:可验证可抵抗共谋攻击的动态联邦学习 来源背景介绍相关工作本文贡献预备知识 系统模型威胁模型具体实现初始化本地训练梯度加密承诺生成插值优化 密文聚合聚合结果验证梯度解密结果验证恶意…...
浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…...
记一次数据库连接 bug
整个的报错如下: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Metho…...
STM32 FreeRTOS 信号量
信号量的简介 reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。 比如动车上的卫生间,一个…...
计算机网络 | 什么是公网、私网、NAT?
关注:CodingTechWork 引言 计算机网络是现代信息社会的基石,而网络通信的顺畅性和安全性依赖于有效的IP地址管理和网络转换机制。在网络中,IP地址起到了标识设备和进行数据传输的核心作用。本文将详细讨论公网IP、私网IP以及NAT转换等网络技…...