#CSS
12 篇
CSS 开始有函数和条件了:@function 与 if()
CSS 新增的 @function 与 if() 把「一个组件多种状态」从媒体查询复制粘贴里解放出来。两者都还没到 Baseline,但值得先看懂它们替代了什么。
text-box-trim 能用了:把标题上下的空白削掉
行盒总比字高,标题上方那半行空白一直靠负 margin 硬抠。Baseline 之后 text-box-trim 一次修好,代价是接受它按字体度量裁切。
Chrome 155:JPEG XL 回来了,后量子算法进了 Web Crypto
Chrome 155 稳定版支持直接解码 JPEG XL,用的是 Rust 写的 jxl-rs;Web Crypto API 同时加入 ML-KEM、ML-DSA 等后量子算法。
sibling-index() 和 sibling-count():CSS 终于知道自己是第几个
Firefox 154 让这两个函数进入 Baseline。它们返回当前元素在兄弟中的序号和兄弟总数,于是错落动画、按序配色、均分尺寸都能在 CSS 里算完,不必再给每个元素挂一个内联样式或 CSS 变量。
用 @layer 把样式优先级从「比权重」变成「排顺序」
样式失控的根源不是选择器写得不够具体,而是所有人都靠加权重解决问题。级联层让顺序显式化:层与层之间比顺序,层内部才比特异性。
锚点跳转被页头吃掉:一次 scroll-padding-top 修全站
吸顶页头会盖住锚点目标,逐个标题写 scroll-margin 迟早漏。正确的位置是滚动容器上的 scroll-padding-top,再用 ResizeObserver 把真实页头高度写回令牌。
模态框用原生 dialog:白拿的东西比想象中多
自己搭模态要手写焦点陷阱、ESC、滚动锁与返回焦点。原生 dialog 配 showModal 全部内置,还能用 ::backdrop,代价只有一条样式继承规则。
深色模式下表单还是白的:color-scheme 才是开关
把背景涂黑不等于原生控件跟着黑。select 的下拉、日期选择器、自动填充的底色都由 color-scheme 决定,accent-color 只管住勾选框与滑块。
页头多高不该猜:ResizeObserver 实测回写 CSS 变量
导航换行、字体晚到、内容长度变化都会让元素高度和 CSS 里的常量对不上。ResizeObserver 观察元素本身,把实测值写回变量,比监听 resize 可靠。
设计令牌:一个文件管住整个站点
为什么我把颜色、间距、圆角全部收进 _tokens.scss,以及换一套视觉方向为什么只需要改这一个文件。
把孔版套印的约束翻译成设计令牌
这个站点的视觉方向是孔版套印。我真正做的事是把印刷的物理限制写成令牌,于是换观感只动了两个文件,组件一行没改。
用 View Transitions 做主题切换水波纹
主题切换时用一个从点击点扩散的圆揭示新主题。半径要够到屏幕最远的角,动画结束必须清掉自定义属性,否则会污染下一次。
