1. box-sizing: border-box 的作用

问题: 默认的 CSS 盒模型 (content-box) 中,元素的 width 和 height 属性只指定了内容区域的尺寸。如果你给元素添加了 padding 或 border,这些值会被加在 width/height 之上,导致元素的实际占用空间变大。

作用: box-sizing: border-box 改变了盒模型的计算方式。它让元素的 width 和 height 属性包含了内容、内边距 (padding) 和边框 (border)。外边距 (margin) 仍然不计入。

示例:

.box {width: 200px;padding: 20px;border: 5px solid red;
}/* 
默认 content-box 下:
总宽度 = width(200px) + padding-left(20px) + padding-right(20px) + border-left(5px) + border-right(5px) = 250px
*/.box {box-sizing: border-box;width: 200px;padding: 20px;border: 5px solid red;
}/* 
border-box 下:
总宽度 = width(200px) = 200px
内容区的实际宽度 = width(200px) - padding(40px) - border(10px) = 150px
*/

最佳实践: 很多开发者会使用通配符将其应用于所有元素,以便更直观地控制布局。

*,
*::before,
*::after {box-sizing: border-box;
}

2. @keyframes 的作用

作用: @keyframes 是 CSS 动画的核心规则,用于定义动画序列中的关键帧。你可以在其中指定动画在特定时间点应有的样式状态。定义好的关键帧动画需要通过 animation-name 属性应用于元素才会生效。

语法:

@keyframes animation-name {0% {/* 起始状态样式 */opacity: 0;}50% {/* 中间状态样式 */transform: scale(1.2);}100% {/* 结束状态样式 */opacity: 1;transform: scale(1);}
}/* 使用 from/to 关键字 */
@keyframes slide-in {from {transform: translateX(-100%);}to {transform: translateX(0);}
}

3. transition 属性的作用

作用: transition 用于定义元素在不同状态之间切换时的过渡效果。它不会自己触发动画,而是在某些状态改变时(如 :hover:active 或通过 JavaScript 添加/移除类)平滑地过渡属性值。

它是一个简写属性,包含:

  • transition-property: 指定要过渡的属性(如 allopacitytransform)。

  • transition-duration: 指定过渡持续的时间(如 1s200ms)。

  • transition-timing-function: 指定速度曲线(如 easelinearease-in-out)。

  • transition-delay: 指定过渡开始前的延迟时间。

示例:

.button {background-color: blue;transition: background-color 0.3s ease, transform 0.5s; /* 同时过渡多个属性 */
}.button:hover {background-color: darkblue;transform: translateY(-5px);
}

4. 选择器优先级 (Specificity)

当多条规则作用于同一个元素时,浏览器根据选择器的优先级来决定应用哪条样式。

计算规则(从高到低):

  1. !important - 最高优先级(但应尽量避免使用,难以覆盖)。

  2. 内联样式 - style="color: red;" (优先级约为 1000)。

  3. ID 选择器 - #header (优先级为 0100)。

  4. 类选择器、属性选择器、伪类 - .class[type="text"]:hover (优先级为 0010)。

  5. 元素选择器、伪元素 - div::before (优先级为 0001)。

  6. 通配符、关系选择器 - *>+~ (优先级为 0000)。

比较方法: 将选择器的各个部分数量组合成一个四位数 (0, 0, 0, 0),从左到右依次比较。例如:

  • div -> (0,0,0,1)

  • .nav li -> (0,0,1,1) (一个类 + 一个元素)

  • #submit.button -> (0,1,1,0) (一个ID + 一个类)

  • 内联样式 -> (1,0,0,0)

(0,1,1,0) 的优先级高于 (0,0,2,0),因为第二位(ID)的数字更大。


5. 实现透明效果的方法

  1. opacity:

    • 设置元素的整体不透明度,包括其所有内容。

    • 值从 0.0 (完全透明) 到 1.0 (完全不透明)。

    • opacity: 0.5;

  2. RGBA / HSLA 颜色:

    • 仅设置背景色文字颜色的透明度,不影响元素的其他内容(如子元素、边框)。

    • background-color: rgba(255, 0, 0, 0.5); (红色,50%透明)

    • color: hsla(120, 100%, 50%, 0.3); (绿色,30%透明)

  3. transparent 关键字:

    • 表示完全透明,是 rgba(0,0,0,0) 的简写。

    • background-color: transparent;


6. 实现动画的途径

途径是什么?如何实现动画?
CSS3使用 transition 或 @keyframes + animation 属性。transition: 响应状态变化。
@keyframes: 定义复杂动画序列,通过 animation: name duration ... 应用。最简单、性能最优的首选方案
JavaScript使用 requestAnimationFrame(callback)浏览器为动画优化的API,在下次重绘前调用 callback 函数。在函数中手动更新元素的样式(如 element.style.transform)。用于需要极高控制力的复杂JS驱动动画
SVG可缩放矢量图形,XML格式。1. SMIL<animate> 标签(已不推荐)。
2. CSS: 像操作HTML元素一样为SVG元素添加CSS动画。
3. JavaScript: 操作SVG DOM。非常适合矢量图标、图表的动画
Canvas通过JavaScript动态绘制图形的HTML元素。必须使用 requestAnimationFrame 循环“擦除”并“重绘”每一帧。适合像素操作、游戏、数据可视化等复杂且高性能的图形动画

如何选择?

  • 简单UI交互、过渡效果CSS3(性能最好,开发简单)。

  • 复杂、交互式矢量图形SVG + CSS/JS。

  • 像素级操作、游戏、复杂可视化Canvas + JS。

  • 需要完全用代码控制的复杂动画JS + requestAnimationFrame


7. 让动画在最后一帧保持结束状态

使用 CSS animation 属性中的 animation-fill-mode 子属性。

  • animation-fill-mode: none; (默认):动画结束后,元素跳回初始样式。

  • animation-fill-mode: backwards;:在动画延迟期间,元素立即应用第一帧的样式。

  • animation-fill-mode: forwards;动画结束后,元素保持最后一帧的样式

  • animation-fill-mode: both;:同时应用 backwards 和 forwards 的效果。

解决方案:

.element {animation: myAnimation 2s ease-in-out;animation-fill-mode: forwards; /* 保持最后一帧状态 */
}

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

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

相关文章

雅菲奥朗SRE知识墙分享(二):『SRE对智能运维的升级模型』

SRE深度结合AI创新&#xff0c;雅菲奥朗专家刘峰老师总结了近期人工智能运维领域的突破&#xff0c;合计以下15个关键点:一、领域1&#xff1a;Dev&Ops 深度融合• 关键点1. 组织&#xff1a;Google “SREScale” 最新论文提出「单一故障域 单一 SRE 小组」原则&#xff0…

前端 Promise 全面深入解析

一、Promise基础概念 1、什么是Promise? Promise是一个表示异步操作最终完成或失败的对象。它允许你为异步操作的成功结果和失败原因分别绑定相应的处理方法。 2、Promise的三种状态 pending(等待中): 初始状态,既不是成功,也不是失败 fulfilled(已成功): 操作成功完…

【LIN】2.LIN总线通信机制深度解析:主从架构、五种帧类型与动态调度策略

参考文章&#xff1a; Lin总线通信在STM32作为主机代码以及从机程序 基于STM32的LIN总线的实现 STM32F0-LIN总线通讯程序代码 主从调试OK LIN协议通信DEMO及源码剖析 前文已讲解关于LIN帧代码如何实现&#xff1a;【LIN】1.LIN通信实战&#xff1a;帧收发全流程代码实现 帧类型…

Maven的概念与Maven项目的创建

MavenMaven的概念依赖管理项目构建Maven安装Maven项目的创建Maven的第一个项目Maven的第二个项目Maven的概念 Maven 是 Apache 基金会推出的跨平台的项目管理工具&#xff0c;主要服务于基于Java平台的项目构建、依赖管理和项目信息管理&#xff0c;目前是 Java 生态中最主流的…

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一、初步了解binlog MySQL的二进制日志…

windows安装Elasticsearch,ik分词器,kibana可视化工具

安装地址 elasticsearch安装地址: Past Releases of Elastic Stack Software | Elastic 分词器下载地址: https://github.com/infinilabs/analysis-ik?tabreadme-ov-file kibana下载地址: Past Releases of Elastic Stack Software | Elastic 注意&#xff1a;版本一定要统…

GaussDB 数据库架构师修炼(十八)SQL引擎-SQL执行流程

1 SQL执行流程查询解析&#xff1a;词法分析、语法分析、 语义分析 查询重写&#xff1a;视图和规则展开、基于规则的查询优化 计划生成&#xff1a;路径搜索和枚举、选出最优执行计划 查询执行&#xff1a;基于优化器生成的物理执行计划对数据进行获取和计算2 解析器和优化器S…

能源管理系统中的物联网数据采集:深度探索与操作指南

一、引言物联网&#xff08;Internet of Things, IoT&#xff09;作为数字化时代的核心基础设施&#xff0c;通过将物理世界的设备、物体与网络连接&#xff0c;实现数据的实时感知与交互。而数据采集作为物联网系统的 “神经末梢”&#xff0c;是整个体系运行的基础。本文将从…

Java实现一个简单的LRU缓存对象

LRU&#xff08;Least Recently Used&#xff09;算法的核心思想是&#xff1a;最近使用的数据将被保留&#xff0c;最久未使用的数据将被淘汰。这种策略适用于内存有限、但又需要高频访问的数据场景&#xff0c;比如缓存系统、页面置换算法等。mysql的缓冲池就是使用的LUR Inn…

整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2

摘要三“式”三“心”三“物” 整数原型三段式表达 的 凝聚式中心点dot 、组织式核心元素位element和分析式内核基因座locus 三者分别以**“等号线&#xff08;Arc&#xff09;”**&#xff08;动态关联&#xff09;、**“边界线&#xff08;Transition&#xff09;”**&#…

vue.根据url生成二维码

文章目录概要QR码步骤1. 引入库2. 生成二维码3. 将二维码加入页面中用javascript库简化二维码生成1. 引入库2. 使用库生成二维码二维码美化和定制1. 调整大小2. 调整颜色3. 添加自定义形状和图案4. 添加logo性能优化与错误处理1. 减少不必要的计算2. 异步处理概要 生成 URL 二…

WPF+MVVM入门学习

最近在学WPF的MVVM&#xff0c;有两种方式实现&#xff0c;一种是自己实现&#xff0c;一种是借助MVVM框架&#xff0c;接下来通过一个医院自助打印报告机键盘输入界面来演示自己实现、框架CommunityToolkit和Prism的区别。 项目源码&#xff1a;https://gitee.com/cplmlm/Sel…

[e3nn] docs | 不可约表示(Irreps)

链接&#xff1a;https://docs.e3nn.org/en/latest/examples/examples.html docs&#xff1a;e3nn e3nn是一个用于构建欧几里得(E(3))等变神经网络的Python库&#xff0c;这意味着它们能自动保持三维旋转和反射的对称性。 该库使用不可约表示(Irreps)来描述数据变换方式&…

深入浅出 ArrayList:从基础用法到底层原理的全面解析(中)

四、ArrayList 常用方法实战 —— 从添加到遍历的全场景覆盖ArrayList 提供了数十个方法&#xff0c;但日常开发中常用的只有 10 个左右&#xff0c;我们按 “元素操作”“集合查询”“遍历方式” 三类来梳理&#xff0c;每个方法都附带示例和注意事项。4.1 元素添加&#xff1…

java后端如何实现下载功能

后端需要把要下载的若干文件 按 ZIP 格式编码成一段二进制字节流&#xff0c;然后以 Content-Type: application/zip Content-Disposition: attachment; filenamexxx.zip 的形式写进 HTTP 响应体。浏览器收到这段“ZIP 格式的字节流”后&#xff0c;就会弹出保存对话框&#xf…

AI生成技术报告:GaussDB与openGauss的HTAP功能全面对比

GaussDB 与 openGauss 的 HTAP 功能比较 前言 GaussDB集中式版本从505.2版本开始引入了HTAP混合负载功能&#xff0c;openGauss也从7.0.0 RC1版本开始引入了HTAP行列融合功能&#xff0c;加强了行存转列存的使用友好度&#xff0c;但两者的实现似乎存在不小的差异。 虽然文档…

小程序开发指南(四)(UI 框架整合)

✍讲解了微信小程序 UI 框架的使用方法和特点&#xff0c;根据项目需求选择合适的组件库。附有相应的组件库预览码&#xff0c;也是将所有的微信小程序原生组件库整合在一起方便后续开发的使用。如果有不好或者有错误的地方请告知&#xff01;希望可以与大家相互的交流学习&…

golang 1.25.0 安装

wget https://golang.google.cn/dl/go1.25.0.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.25.0.linux-amd64.tar.gz ln -s /usr/local/go/bin/* /usr/bin/ go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

基于深度学习的人脸表情识别系统:YOLOv5/v6/v7/v8/v10模型实现与UI界面集成

基于YOLOv5/v7/v8的智能人脸表情识别系统:从算法原理到应用实现 表情识别的技术价值与挑战 人脸表情识别(Facial Expression Recognition, FERYOLOv5/v7/v8等深度学习算法构建高效的表情识别系统,并设计直观的UI界面集成方案。无论你是深度学习初学者还是有经验的开发者,…