Skip to content

State of CSS 2024 个人记录

Posted on:2024年11月8日 at 22:54

原文链接:State of CSS 2024

filter / backdrop-filter

filter - CSS:层叠样式表 | MDN

backdrop-filter - CSS:层叠样式表 | MDN

提供高斯模糊、亮度、对比度、反转等滤镜效果。

可以更轻松地实现毛玻璃样式、黑白效果、主题色调和等功能。

PS: 使用滤镜时会使CSS 3D失效,详见:探究 CSS 混合模式\滤镜导致 CSS 3D 失效问题 · Issue #41 · chokcoco/iCSS

:has()

:has() - CSS:层叠样式表 | MDN

一种新的 CSS 伪类选择器,可以根据元素内部或后代元素的存在情况来选择元素。

很好用的伪类选择器,在TME的实习中实现某个业务需求中使用过。在引入 :has() 之前,CSS 缺乏选择“父元素”或“祖先元素”的功能,我们不得不使用JS来动态地检测和操作父元素。

eg:

1. 基于子元素状态改变父元素的样式

2. 增强响应式布局的控制

/* 如果 .container 中有图片,就调整其布局 */
.container:has(img) {
  display: flex;
  align-items: center;
}

3. 配合其他伪类使用

/* 当 .card 中的按钮悬停时,改变 .card 的背景 */
.card:has(button:hover) {
  background-color: #f0f0f0;
}

:focus-visible

:focus-visible - CSS:层叠样式表 | MDN

根据用户的输入方式 (鼠标 vs 键盘(tab)) 展示不同形式的焦点。

原生支持嵌套

CSS 嵌套 - CSS:层叠样式表 | MDN

& 嵌套选择器 - CSS:层叠样式表 | MDN

Subgrid

Subgrid - CSS: Cascading Style Sheets | MDN

本次最受欢迎的特性,已获得所有主流浏览器的支持。

mdn官网暂时没有翻译,这是官网给出的定义:Level 2 of the CSS grid layout specification includes a subgrid value for grid-template-columns and grid-template-rows.

grid布局已经是大家所熟知的一种布局方式了,但仍存在一定的局限性,如下

大窗口

小窗口

内容是响应式的,因此在同一行中文本行数会给卡片内部的布局带来变化。如果内容是动态生成的,变化的问题会更加显著。

以往,为了解决这个问题,我们通常会使用js来检测所有卡片内容的最大高度,在每次resize时进行调整,很显然会导致性能下降。

使用subgrid可以实现矩阵嵌套。

.card {
  display: grid;
  grid-template-rows: subgrid;
  ...
}

此时可能会出现如下情况,卡片内的间距非常大

The gap properties and subgrid

由于使用subgrid,子网格的gap会继承父网格,将其覆盖即可。

覆盖后效果如下

使用subgrid后大窗口使用subgrid后小窗口

参考文章

CSSのSubgridが全ブラウザ対応。Gridの入れ子の基本から応用までを完全理解する