首页
开发技巧正文内容

CSS 即将推出的 11 项新功能

2024年09月23日
阅读时长 4 分钟
阅读量 2
CSS 即将推出的 11 项新功能

9 月 13 日,CSS 工作组发布了 CSS Values and Units Module Level 5 的第一个公开工作草案。

该草案描述了 CSS 属性接受的常见值和单位,以及用于它们的语法,并带来了一些有趣的新功能。以下是摘要。

注意:由于这是最新的工作草案,并且目前处于工作草案状态,本文描述的许多功能将发生变化,并且不会在所有浏览器中提供(有些功能除外)!

2024 年 9 月 13 日,CSS 工作组发布了 CSS Values and Units Module Level 5 的第一个公开工作草案。这是 上一个级别 的扩展,其中包含一些有趣的新增功能。

不久前还难以想象的事情正在规范中变得可能:随机值,将属性用作任何属性的值,能够在计算中使用顺序... 看起来很有前途。

许多这些功能有一个共同点:它们简化了 CSS 代码。以前需要多条规则或巧妙解决方案的事情现在只需一两行 CSS 就能实现。正如我所说,看起来很有前途。

以下是新变化的列表(更多细节见下文):

  • attr() 函数的更改:使其可以与任何属性一起在任何 CSS 属性中使用(不仅限于 content)。

  • calc-size() 函数:在计算中使用 automin-content 等固有值。

  • 新的 first-valid() 函数,以避免自定义属性存在无效值的问题。

  • 新的 *-mix() 函数系列,具有新的比率表示法。

  • 新的 *-progress() 函数系列,用于计算范围内或媒体或容器内的进度比率。

  • 使用新的 random()random-item() 函数进行随机化,以从范围或列表中返回随机值(终于!)

  • 新的 sibling-count()sibling-index() 函数,提供整数值以根据顺序和大小进行操作。

  • 新的 toggle() 函数,用于轻松为嵌套元素设置样式,循环遍历值列表。

  • 用于逗号分隔值列表的新功能符号,以避免逗号分隔参数时的歧义。

  • 新的 URL 修饰符,以更多地控制 url() 请求。

  • 扩展位置类型,以允许流相关值。


新功能和更新

attr() 函数的更改

读取属性并在 CSS 中使用它并不新鲜。使用 attr() 已经是可能的,但一个常见的抱怨是功能性有限,只能在 content 中使用字符串。

attr() 函数将进行一些更新,因此可以在任何属性中使用任何数据属性,而不受其数据类型的限制。只需指定类型,如果需要的话,还可以指定一个备用值,以防出现意外情况。

这是一个备受期待的更新,将让许多开发人员感到高兴。


使用 calc-size() 进行固有值操作

该模块还引入了一个新函数,能够安全地处理固有值(automax-contentfit-content 等)。这是一个在过渡和动画中特别有帮助的功能。

它还添加了新的关键字(size),以提供更多灵活性的计算,使大小计算更加容易。

为什么要有一个全新的函数,当已经有 calc() 了呢?正如文档解释的那样,这样做是有向后兼容性和实际原因的(例如,在所有情况下都进行平滑插值,特别是在百分比中进行运算时)。


新的 first-valid() 函数

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

在操作 CSS 变量时的一个问题是,在声明中,它们被视为有效值,即使实际包含的值不是有效的。设置备用值也不会有所帮助,备用声明也将被忽略。

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


新的 *-mix() 函数系列

还引入了一个新函数 mix(),可用于简化不同的 *-mix 函数。想要混合颜色吗?你可以做类似 color-mix(red 60%, blue) 这样的事情,或者更简单的 mix(60%, red, blue) 也可以。而且当我们说到颜色时,我们也可以混合长度、变换函数等。

这种表示法也扩展到其他 *-mix 函数系列:

  • calc-mix()

  • color-mix()

  • cross-fade()

  • palette-mix()

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


新的 *-progress() 函数系列

它们表示给定值从起始值到结束值的比例进度。结果是一个介于 0 和 1 之间的数字,可用于操作,但与先前描述的 *-mix 函数系列结合使用时尤其方便。

这个系列中有三个函数:

  • progress():通用,适用于任何数学函数。

  • media-progress():用于媒体特性。

  • content-progress():用于容器查询。


CSS 中的随机化函数

有趣的设计中有一定程度的随机性,这在 CSS 中一直缺失。但是这个模块引入了两个新函数,可以从列表中返回随机值(random-item())或在范围内返回随机值(random())。

不再需要巧妙的技巧或依赖其他语言来实现这一点。语法简单而强大,还可以通过选择器或元素计算随机数。


新的 sibling 函数

有时,您可能希望根据容器内元素的顺序提供不同的样式。不幸的是,在 CSS 中不能像这样使用计数器(我会把这个抱怨留到另一天)。

通过引入两个返回数字的新函数,使得可以操作这些数字,这个障碍被消除了:

  • sibling-count():返回兄弟节点的数量。

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

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


新的 toggle() 函数

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

例如,假设我们有一个具有四个嵌套级别的列表。我们希望奇数级别具有圆点,偶数级别为方块。我们可以在不同级别上进行一些 有趣 的操作,或者我们只需执行类似 ul { list-style-type: disc, square; } 这样的操作。完成!

关于这个函数唯一令人担忧的是它的名称。也许只是我,但“toggle”一词具有“二元性”内涵:开/关,是/否 - 两个值之间切换/切换。toggle() 函数可以有任意多个参数,因此感觉奇怪它被命名为“toggle”。


用于参数的新功能符号

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

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

例如,想象一下您想在页面上有一个随机的 font-family 并指定不同的选项:

  • Times, serif

  • Arial, sans-serif

  • Roboto, sans-serif

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

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


位置类型的扩展

CSS 已经为 marginpaddingborder 提供了逻辑属性 - 这些值是相对于文本书写方向的,并且可能会从一种语言变为另一种语言。

现在,这也适用于位置类型(不要与 position 属性混淆)。指示位置的属性(例如 background-positionobject-position 等)可以指定相对于文本流和方向的值。

可以使用的新值包括:

  • x-start

  • x-end

  • y-start

  • y-end

  • block-start

  • block-end- inline-start

  • inline-end


结论

目前仍处于早期阶段,事物将会发生变化,但 CSS 值和单位模块第 5 级中包含的一些新功能看起来非常有前景。

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

别忘了查看 CSS Values and Units Module Level 5 Working Draft 以获取更多详细信息。如果您有任何问题或意见,请在他们的 GitHub 存储库中提交问题。

免责声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

相关文章

探索多种软件架构模式及其实用应用
2024年11月22日19:06
本文深入探讨了多种软件架构模式,包括有界上下文、边车模式、发布-订阅模式、应用网关、微服务、命令职责分离(CQRS)等,介绍了它们的优点、使用场景以及具体应用实例。文章强调根据具体项目需求和团队能力选择最合适的架构,以构建高效和可维护的解决方案,同时展示了各架构模式间的综合应用,提供了丰富的案例和技术细节。
15个高级Python快捷键助您更快编程
2024年11月21日07:02
本文分享了 15 个高级的 Python 编程快捷键,包括上下文管理器、行内字典合并、函数参数解包、链式比较、dataclasses、海象运算符、反转列表、备忘录缓存、splitlines、enumerate、字典推导、zip 用于并行迭代、itertools.chain 扁平化列表、functools.partial 部分函数和 os.path 文件路径管理等,帮助开发者提高编程效率和代码简洁性。
揭示网页开发的 11 个迷思:停止相信这些误区
2024年11月19日22:05
网页开发充满误解,这篇博文针对11个常见迷思进行揭秘。包括网站开发后不需更新、需掌握所有技术、AI会取代开发者等。强调持续学习、专业化、用户体验的重要性,澄清误区如多任务处理的必要性和最新技术的必需性。文章提醒开发者注重实用而非追求完美代码,以务实态度面对开发工作。
你知道 CSS 的四种 Focus 样式吗?
2024年11月18日21:41
本文介绍了四种 CSS focus 样式::focus、:focus-visible、:focus-within 以及自定义的 :focus-visible-within,帮助提升网站用户体验。:focus 样式应用于被选中元素;:focus-visible 仅在键盘导航时显示;:focus-within 用于父元素;自定义 :focus-visible-within 结合两者效果。合理运用这些样式能使网站更方便键盘用户导航。
利用 Python 实现自动化图像裁剪:简单高效的工作流程
2024年11月11日20:49
使用 Python 和 OpenCV 自动裁剪图像,轻松实现 16:9 的完美构图。这个指南介绍了如何通过代码进行灰度化、模糊处理和边缘检测,最终识别出最重要的部分进行裁剪。特别适合需要批量处理图像的情况,节省大量时间。
每位资深前端开发人员都应了解的 TypeScript 高级概念
2024年11月11日02:07
资深前端开发者应了解 TypeScript 的高级概念,如联合类型、交叉类型、类型保护、条件类型、映射类型、模板字面量类型和递归类型。这些特性可提升代码的可维护性和可扩展性,确保在开发复杂应用时实现更高的类型安全性和效率。