CSS 中的 11 个新特性和功能

开发 前端
9 月 13 日,CSS 工作组发布了 CSS 值和单位模块第 5 级的第一个公共工作草案。它描述了 CSS 属性接受的通用值和单位以及它们使用的语法,并附带了一些有趣的新功能。

9 月 13 日,CSS 工作组发布了 CSS 值和单位模块第 5 级的第一个公共工作草案。它描述了 CSS 属性接受的通用值和单位以及它们使用的语法,并附带了一些有趣的新功能。

注意:由于它是最近才发布的,并且目前处于工作草案状态,本文中描述的许多功能将发生变化,并且它们不是在所有浏览器中可用(有些浏览器可用!)。

不久前还无法想象的事情正在进入规范:随机值、使用属性作为任何属性的值、能够在计算中使用顺序……看起来很有希望。

这些功能中的许多都有一个共同点:它们简化了 CSS 代码。以前需要多条规则或黑客解决方案的事情将只需一两行 CSS 即可实现。正如我所说,它看起来很有希望。

这是新更改的列表(更多详细信息如下):

  • 对 attr() 函数的更改:因此它可以与任何属性和任何 CSS 属性一起使用(不仅仅是在内容上)。
  • calc-size() 函数:在计算中使用 auto 或 min-content 等固有值。
  • 新的 first-valid() 函数可避免自定义属性值无效的问题。
  • 新的 *-mix() 函数系列,带有新的比率符号。
  • 新的 *-progress() 函数系列,用于计算范围之间或媒体或容器内的进度比率。
  • 使用新的 random() 和 random-item() 函数进行随机化,从范围或列表中返回随机值(终于!)
  • 新的 brothers-count() 和 brothers-index() 函数提供整数值,可根据顺序和大小进行操作。
  • 新的 toggle() 函数,用于设置嵌套元素的样式,轻松循环遍历值列表。
  • 带有逗号分隔值列表的参数的新函数符号,可避免逗号分隔参数的歧义。
  • 新的 URL 修饰符,可更好地控制 url() 请求。
  • 扩展位置类型以允许流相关值。

1、对 attr() 函数的更改

读取属性并在 CSS 中使用它并不是什么新鲜事。使用 attr() 已经可以做到这一点,但一个常见的抱怨是功能有限,只能处理字符串和内容。

attr() 函数将进行一些更新,因此任何独立于其数据类型的数据属性都可以在任何属性中使用。

它将像指定类型一样简单,如果我们愿意,还可以指定一个后备值,以防万一出现意外情况。

这是一个期待已久的更新,将让很多开发人员感到高兴。

2、使用 calc-size() 操作内在值

此模块还引入了一个新功能,可以安全地操作内在值(auto、max-content、fit-content 等)。此功能在过渡和动画中特别有用。

它还添加了新关键字(size),为计算提供更多灵活性,使处理尺寸更加容易。

既然已经存在 calc(),为什么还要创建一个全新的函数?正如文档所解释的那样,这样做有向后兼容性和实际原因(例如,在所有情况下都可以平滑插值,尤其是在以百分比操作时)。

3、新的 first-valid() 函数

引入了一种新方法:first-valid()。其思想是将一个值列表传递给该函数;这些值将被解析,并且将使用第一个有效的值。这在处理 CSS 自定义属性(又称 CSS 变量)时特别有用。

使用 CSS 变量时的一个问题是,在声明中,它们被视为有效值,即使实际包含的值无效。设置后备值也无济于事,后备声明也将被忽略。

使用这种方法,我们可以通过使用 first-valid() 将所有后备声明合并为一个声明来简化代码。

4、新的 *-mix() 函数系列

它还引入了一个新函数 mix(),可用于简化不同的 *-mix 函数。您想混合颜色吗?您可以执行类似 color-mix(red 60%, blue) 的操作,或者更简单的 mix(60%, red, blue) 也可以。正如我们所说的颜色,我们还可以混合长度、变换函数等。

该符号也扩展到其他 *-mix 函数系列:

  • calc-mix()
  • color-mix()
  • cross-fade()
  • palette-mix()

如果在进度参数(第一个)中未指定缓动函数,则默认应用线性。

5、新的 *-progress() 函数系列

它们表示给定值从一个起始值到另一个终止值的比例进展。结果是一个介于 0 和 1 之间的数字,可用于运算,但与前面描述的 *-mix 函数系列结合使用时会特别方便。

此系列中有三个函数:

  • progress():通用,适用于任何数学函数。
  • media-progress():适用于媒体功能。
  • content-progress():适用于容器查询。

6、CSS 中的随机化函数

趣味设计具有一定程度的随机化,而 CSS 中却没有这种功能。但此模块引入了两个新函数,它们可从列表 (random-item()) 或范围 (random()) 中返回随机值。

无需再使用黑客技巧或依赖其他语言来实现此目的。语法也简单而强大,可以通过选择器或元素计算随机数。

7、新sibling函数

有时您可能希望根据容器内元素的顺序提供不同的样式。不幸的是,计数器不能在 CSS 中这样使用。

随着两个返回数字的新函数的引入,可以使用它们进行操作,这个障碍被消除了:

  • sibling-count():返回兄弟的数量。
  • sibling-index():返回元素在兄弟列表中的位置/顺序。

不再需要在每个元素上设置自定义属性或使用 nth-child 编写单独的选择器。

8、新的 toggle() 函数

引入了一种在嵌套元素中定义值的便捷新方法。toggle() 函数设置元素及其后代将循环使用的值,从而大大简化了代码。忘记复杂的规则或重新定义 - 一切都将在一行代码中完成。

例如,假设我们有一个包含四个嵌套级别的列表。我们希望奇数级别有圆盘,偶数级别有正方形。

我们可以在不同级别执行 ul > li ul > li ul > li ul { … },或者我们可以执行类似 ul { list-style-type: disc, square; } 的操作。砰!完成了!

关于这个函数唯一有点令人担忧的是它的名字。也许只有我一个人觉得,“toggle”这个词有“二元性”的含义:开/关、是/否 - 两个值可以相互切换。 toggle() 函数可以有任意多个参数,因此将其命名为“toggle”感觉很奇怪。

9、参数的新函数符号

您可能已经注意到,一些新函数(例如 random() 或 toggle())可以接受以逗号分隔的值列表的参数。

在这些情况下,我们如何区分一个参数和下一个参数?这就是为什么有人提议对函数符号进行“逗号升级”。这意味着我们可以使用分号 (;) 而不是逗号 (,) 来明确分隔参数。

例如,假设您想在页面上使用随机字体系列并指定不同的选项:

  • Times,serif
  • Arial,sans-serif
  • Roboto,sans-serif

所有这些参数都是以逗号分隔的值列表。如果我们使用逗号分隔参数,那将是一团糟。但使用新符号,很容易识别一个参数的结束位置和下一个参数的开始位置:

.random-font {
  font-family: random-item(Times, serif; Arial, sans-serif; Roboto, sans-serif);
}

10、位置类型的扩展

CSS 已经具有边距、填充和边框的逻辑属性 - 这些值与文本书写方向有关,并且可能因语言而异。

现在为位置类型引入了此功能(不要与位置属性混淆)。指示位置的属性(例如 background-position、object-position 等)可以指定与文本流和方向相关的值。

可以使用的新值为:

  • x-start
  • x-end
  • y-start
  • y-end
  • block-start
  • block-end
  • inline-start
  • inline-end

结论

它仍处于早期阶段,情况会发生变化,但 CSS 值和单位模块级别 5 中包含的一些新特性和功能看起来非常有前景。

有些也是期待已久的!尤其是将任何属性与任何属性一起使用的可能性。我记得很久以前在规范中看到过这个选项。希望这是实现它所需要的推动力。

不要忘记查看 CSS 值和单位模块级别 5 工作草案以获取更多详细信息。如果您有任何问题或意见,请在他们的 GitHub 存储库中记录工单。

责任编辑:华轩 来源: web前端开发
相关推荐

2017-03-13 15:27:55

CSS新特性

2022-08-05 13:14:25

ES2022JavaScript代码

2023-02-10 13:15:45

Windows 11

2010-09-03 10:24:01

CSSmargin

2021-10-27 10:15:25

Python新特性编程语言

2022-06-06 09:56:38

编程语言Python

2020-04-27 09:21:25

Android谷歌功能

2021-10-20 16:44:50

Windows 11操作系统微软

2012-12-25 10:52:23

IBMdW

2023-12-11 09:02:27

CSS前端CSS 新特性

2009-01-03 15:01:16

ibmdwLotusQuickr

2021-12-10 14:53:17

微软Windows 11Windows

2023-01-05 08:00:24

RegExpFoo类字段

2009-03-11 20:07:31

LinuxFedora 11新特性

2021-12-09 22:22:19

Windows 11操作系统微软

2012-05-07 13:45:45

Oraclen 11g虚拟列数据库

2022-02-09 15:55:01

JavaHttpClientJAVA11

2021-06-26 10:04:23

Code特性技巧

2023-08-14 09:59:31

Debian操作系统

2010-09-29 14:08:31

点赞
收藏

51CTO技术栈公众号