css功能实用 新

CSS新特性,浏览器支持,
自定义属性/变量

自定义属性基本上允许你在一个集中的地方定义CSS属性的替身,以用于你的设计。

通常,在构建一个主题时,你会选择一个配色方案,然后每次都要声明这些颜色。

a {
	color: #cd2653;
}

.social-iconsa {
	background: #cd2653;
}

.wp-block-button.is-style-outline {
	color: #cd2653;
}
问题:如果你想对其中一种颜色进行更改,你必须更改它的每一个实例。

有更好的解决方案
自定义属性可以解决这个问题。可以将有关颜色指定给一个变量一次,
然后每次使用时只需将该变量作为CSS属性输入即可,就像这样:

:root {
	--global--color-primary: #28303d;
}

a {
	color: var(--global--color-primary);
}

.social-iconsa {
	background: var(--global--color-primary);
}
只需要在一个地方进行更改即可。
过去,你需要采用SASS这样的预处理程序来使用变量,现在它是CSS的一个原生功能。
在文档开头的 :root 选择器下定义你的变量(注意双连字符 -- 在变量前面,这就是将它们定义为自定义属性的原因,而且它们是区分大小写的!)。
之后,你可以通过 var() 函数在整个文档中使用它们。

至于此CSS功能的采用程度如何,浏览器支持非常好:

@supports

@supports
接下来,我们有一个类似于媒体查询的CSS规则。然而,@supports 并不是让CSS规则以屏幕大小或手机类型为条件,而是允许你根据用户浏览器支持的CSS属性和值来做同样的事情。
,并非所有的浏览器和设备都支持所有的CSS功能。
虽然你通常可以使用回退声明来处理这个问题,但在某些情况下,如果你不特别包含对旧技术的支持,就会严重破坏你的网站。

此外,你还可以使用 @supports 为更现代的浏览器添加额外的功能或样式,
以便处理它们(这就是为什么使用 @supports 的查询也被称为“功能查询”)。

如何使用功能查询

如果你熟悉媒体查询,使用支持检查将非常容易。下面是如何使用它:

@supports (display: grid) {
	.site-content {
		display: grid;
	}
}
正如你所看到的,它只是简单的规则,后面的括号里是你要检查的属性或属性值对。之后就是通常的CSS声明,如果满足条件,要应用什么规则。

上面的例子指出,如果浏览器支持CSS grid(稍后会有更多的说明),它应该将 display: grid; 应用到带有 .site-content 类的元素上。

还需要注意的是,@supports 理解操作符not、and、和 or(也可以组合)来创建更具体的规则,比如为不支持该特定功能的浏览器提供回退。

@supportsnot (display: grid) {
	.site-content {
		float: left;
	}
}
为了正确地使用@supports,你需要知道哪些浏览器支持它,好消息是所有现代浏览器都支持。

Flexbox Gaps


Flexbox是我们之前详细讨论过的另一个CSS布局模块。
长期以来,它的一个弱点就是flexbox间隙,也就是可以定义行和列之间的中断。

值得庆幸的是,浏览器对这个CSS功能的支持正在改善。
现在可以开始使用 gap、row-gap 和 column-gap 在使用Grid、Flexbox和Multi-Column Layouts创建的布局中创建空间。

这是一个简短的示例,说明在flexbox中的外观:

.flex-gap-test {
	display: inline-flex;
	flex-wrap: wrap;
	gap: 16px;
}

<div class="flex-gap-test">
	<div>1</div>
	<div>2</div>
	<div>3</div>
	<div>4</div>
	<div>5</div>
	<div>6</div>
</div>
这是在页面上:
虽然可以通过页边距来实现同样的布局,但它需要更多的标记和变通方法,
而不是简单地声明间隙大小。

content-visibility


content-visibility 是一个非常酷的新CSS功能,可以提高网站性能。它的工作原理基本上就像懒惰加载一样,只是不针对图片,而是针对任何HTML元素。您可以使用它来阻止网站的任何部分加载,直到其可见为止。

使用也超级简单,只需将其应用到你所选择的元素上,就像这样:

.content-below-fold {
	content-visibility: auto;
}
content-visibility 有三个值。默认情况下,它被设置为可见,在这种情况下,元素会像往常一样加载。另外,你也可以将其设置为hidden,在这种情况下,无论元素是否可见,都不会被渲染。另一方面,当设置为 auto 时,可见区域外的元素将被跳过,一旦出现在屏幕上,就会被渲染。

很酷的东西,对不对?

在这种情况下,有一点可能也很重要,那就是 contain-intrinsic-size。
由于设置为 content-visibility: hidden; 的元素实际上大小为零,这让你可以为隐藏的元素应用一个理论上的高度和宽度,以便浏览器可以从一开始就考虑到它,
而不是在元素渲染时才考虑。这样,您可以避免在滚动过程中布局突然改变。

浏览器对 content-visibility 的支持还有点不完善,但也在不断完善中。
同样的,对于contain-intrinsic-size的支持也是如此。

图片
一旦被更广泛地采用,我预测它将成为加快渲染过程的最有效工具之一。

Transitions, Transforms, Animations

在以前,如果你想让东西在你的网站上移动,你通常不得不求助于JavaScript(或动画GIF,对于那些属于MySpace一代的人)。然而,你可能不知道的是,多年来CSS也有能力让东西动起来。实现这类事情的三大工具是:

过渡 Transitions——允许你使一个属性值到另一个属性值的变化(如悬停效果)平滑而不是突然。
转换 Transformations——使您可以在2D和3D空间中移动,旋转和缩放元素。
动画 Animations——在CSS中设置简单或复杂的动画,并配置它们的运行方式和时间。
自然,我们没有篇幅在这里详细介绍这三个方面的内容。然而,让我们为每个人做一些速成的例子,让你对可能的事情有一个印象。

CSS过渡

这是CSS过渡的快速示例:

div {
	width: 100px;
	height: 100px;
	transition: height 3s;
}

div:hover {
	height: 500px;
}
当有人悬停在元素上时,上面的标记将使 div 高度的增加速度减慢到3秒。

CSS转换

以下是CSS转换的示例。当有人将鼠标悬停在元素上方时,它将使元素顺时针旋转30度:

div:hover {
	transform: rotate(30deg);
}
CSS动画

最后,是展示CSS动画的简短代码段:

@keyframes color-change {
	from {background-color: blue;}
	to {background-color: yellow;}
}

div:hover {
	animation-name: color-change;
	animation-duration: 3s;
}
注意如何使用 @keyframes 命名动画并定义其功能,然后使用 animation-name 将其应用于元素。animation-duration 控制完成的时间,还有其他类似的属性。

如果你想尝试所有这些,好消息是,浏览器的支持非常好,因此,没有任何障碍可以让您随意旋转CSS过渡,转换和动画。

滚动捕捉

Scroll snapping让你可以选择将用户的视口锁定在你网站的某个部分或元素上。它对创建酷炫的过渡非常有用,并帮助用户在向下滚动页面时关注最重要的页面元素。

这种效果在移动应用程序中很多可见,但是,通过滚动捕捉,您也可以将其带到网站上。

在最基本的层面上,使用也相对简单。你只需将滚动捕捉的类型应用到一个容器上,并定义它的子代应该捕捉到哪里。

.container {
	scroll-snap-type: y mandatory;
}

.containerdiv {
	scroll-snap-align: start;
}
浏览器的兼容性还算不错。

图片
然而,请注意,所有可用的滚动捕捉属性的支持有点不均衡。因此,请务必检查您的特定用例。

:is 和 :where
在我们的新CSS特性列表中,你可能不知道的最后一个条目是 :is 和 :where 伪类。它们允许你通过缩短CSS选择器的列表来减少CSS标记的重复。

例如,比较一下:

.maina:hover,
.sidebara:hover,
.site-footera:hover {
	/* markup goes here */
}
对此:

:is(.main, .sidebar, .site-footer) a:hover {
	/* markup goes here */
}
相同的东西适用于 :where:

:where(.main, .sidebar, .site-footer) a:hover {
	/* markup goes here */
}
如果标记是一样的,有什么区别呢?不同的是 :is 更具体。它取括号中最特殊的元素的特殊性程度。相比之下,:where 的特异性永远是零。因此,再往下覆盖就容易多了。

浏览器的应用还有点不稳定,但慢慢就会有了。所以,请随意开始尝试。
标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
MathorCup高校数学建模挑战赛是一项旨在提升学生数学应用、创和团队协作能力的年度竞赛。参赛团队需在规定时间内解决实际问题,运用数学建模方法进行分析并提出解决方案。2021年第十一届比赛的D题就是一个典型例子。 MATLAB是解决这类问题的常用工具。它是一款强大的数值计算和编程软件,广泛应用于数学建模、数据分析和科学计算。MATLAB拥有丰富的函数库,涵盖线性代数、统计分析、优化算法、信号处理等多种数学操作,方便参赛者构建模型和实现算法。 在提供的文件列表中,有几个关键文件: d题论文(1).docx:这可能是参赛队伍对D题的解答报告,详细记录了他们对问题的理解、建模过程、求解方法和结果分析。 D_1.m、ratio.m、importfile.m、Untitled.m、changf.m、pailiezuhe.m、huitu.m:这些是MATLAB源代码文件,每个文件可能对应一个特定的计算步骤或功能。例如: D_1.m 可能是主要的建模代码; ratio.m 可能用于计算某种比例或比率; importfile.m 可能用于导入数据; Untitled.m 可能是未命名的脚本,包含临时或测试代码; changf.m 可能涉及函数变换; pailiezuhe.m 可能与矩阵的排列组合相关; huitu.m 可能用于绘制回路图或流程图。 matlab111.mat:这是一个MATLAB数据文件,存储了变量或矩阵等数据,可能用于后续计算或分析。 D-date.mat:这个文件可能包含与D题相关的特定日期数据,或是模拟过程中用到的时间序列数据。 从这些文件可以推测,参赛队伍可能利用MATLAB完成了数据预处理、模型构建、数值模拟和结果可视化等一系列工作。然而,具体的建模细节和解决方案需要查看解压后的文件内容才能深入了解。 在数学建模过程中,团队需深入理解问题本质,选择合适的数学模
以下是关于三种绘制云图或等高线图算法的介绍: 一、点距离反比插值算法 该算法的核心思想是基于已知数据点的值,计算未知点的值。它认为未知点的值与周围已知点的值相关,且这种关系与距离呈反比。即距离未知点越近的已知点,对未知点值的影响越大。具体来说,先确定未知点周围若干个已知数据点,计算这些已知点到未知点的距离,然后根据距离的倒数对已知点的值进行加权求和,最终得到未知点的值。这种方法简单直观,适用于数据点分布相对均匀的情况,能较好地反映数据在空间上的变化趋势。 二、双线性插值算法 这种算法主要用于处理二维数据的插值问题。它首先将数据点所在的区域划分为一个个小的矩形单元。当需要计算某个未知点的值时,先找到该点所在的矩形单元,然后利用矩形单元四个顶点的已知值进行插值计算。具体过程是先在矩形单元的一对对边上分别进行线性插值,得到两个中间值,再对这两个中间值进行线性插值,最终得到未知点的值。双线性插值能够较为平滑地过渡数据值,特别适合处理图像缩放、地理数据等二维场景中的插值问题,能有效避免插值结果出现明显的突变。 三、面距离反比 + 双线性插值算法 这是一种结合了面距离反比和双线性插值两种方法的算法。它既考虑了数据点所在平面区域对未知点值的影响,又利用了双线性插值的平滑特性。在计算未知点的值时,先根据面距离反比的思想,确定与未知点所在平面区域相关的已知数据点集合,这些点对该平面区域的值有较大影响。然后在这些已知点构成的区域内,采用双线性插值的方法进行进一步的插值计算。这种方法综合了两种算法的优点,既能够较好地反映数据在空间上的整体分布情况,又能保证插值结果的平滑性,适用于对插值精度和数据平滑性要求较高的复杂场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值