CSS initial-letter 如何实现首字下沉:从排版控制到浏览器支持边界
首字下沉在文章正文排版中很常见,但用 float 手工拼出的方案在行高、字体度量和多行对齐上容易失稳。本文以一篇中文长文的开篇段为贯穿场景,说明 initial-letter 的尺寸与下沉值如何决定首字占位和基线位置,它与 float 方案在布局参与方式上的差异,以及在不支持该属性的浏览器里如何做渐进增强与降级。
共 26 篇文章
首字下沉在文章正文排版中很常见,但用 float 手工拼出的方案在行高、字体度量和多行对齐上容易失稳。本文以一篇中文长文的开篇段为贯穿场景,说明 initial-letter 的尺寸与下沉值如何决定首字占位和基线位置,它与 float 方案在布局参与方式上的差异,以及在不支持该属性的浏览器里如何做渐进增强与降级。
很多页面用 overflow: hidden 裁掉装饰元素,却意外得到可被脚本滚动的容器和滚动链。本文解释 overflow: clip 为何不创建滚动容器、overflow-clip-margin 如何扩展裁剪边界,并给出固定定位装饰场景下的取舍与支持边界。
图片轮播和分页列表常用 scroll-snap 对齐卡片,但一次快速滑动常会越过多个 snap 点。本文解释 scroll-snap-stop: always 如何在滚动惯性阶段拦截跨越、它与 scroll-snap-type 的交互、对性能与交互体验的影响,并给出适用边界与降级判断。
相对颜色语法让浏览器在运行时基于已有颜色通道计算新颜色,无需 Sass 或 JavaScript 预处理。文章以主题色生成悬停态为贯穿场景,解释 from 关键字与通道变量的处理模型,对比 color-mix() 的混合逻辑,说明与 Sass 颜色函数的差异、浏览器支持边界与回退写法。
固定宽度页面在内容变长时,经典滚动条会挤占可用宽度,导致整页内容横向跳动。本文解释 scrollbar-gutter 的 gutter 位置与 stable、both-edges 取值如何提前预留空间,说明 overlay 滚动条下该属性为何失效,并对比 padding 方案、给出诊断信号与适用边界。
本文解析 overflow-anchor 属性如何通过选择锚节点并调整滚动位置来防止视口跳动,以动态加载内容场景为例说明其工作原理、适用边界与禁用场景,帮助前端开发者正确使用滚动锚定。
当首选字体不可用而回退到备用字体时,文本的视觉大小可能突变。本文以中文网页的多字体回退栈为例,解释 font-size-adjust 如何通过调整字号使备用字体的 x 高度与首选字体一致,并分析其计算机制、对行高与布局的影响以及浏览器支持边界。
本文聚焦 CSS 滚动驱动动画中 animation-range 的机制,解释如何将动画时间线映射到滚动容器的特定区间,并与默认的全区间映射对比。以长页面中多个元素依次进入视口触发动画为例,结合 IntersectionObserver 方案分析 range 的触发时机、性能影响、适用边界与浏览器支持。
本文以设计系统主题色为例,解释 CSS color() 函数与 OKLCH 色彩空间如何定义超出 sRGB 的广色域颜色,以及当显示设备不支持时浏览器如何通过色域映射将颜色转换到 sRGB,导致颜色失真。文中对比 HEX/RGB 的局限,并给出使用 color() 与 @media (color-gamut) 的实践建议。
本文以主题色生成悬停态为例,解析 color-mix() 在不同色彩空间(sRGB、OKLab 等)中的插值机制,解释为何混合结果受色彩空间和插值方法影响,并与 Sass 颜色函数对比,说明浏览器支持边界与回退策略。
本文讨论 CSS scroll-driven animations 中 timeline-scope 属性的作用:它如何将子元素的命名滚动时间线提升到祖先作用域,使非父子关系的元素也能共享同一时间线。以页面级滚动进度条驱动多个区域动画的场景为例,说明命名时间线的查找机制、作用域限制、timeline-scope 的声明方式及其对动画同步的影响,对比传统 JS 滚动监听方案的性能与复杂度,并给出适用边界与浏览器支持。
本文介绍 CSS Custom Highlight API 如何通过 ::highlight() 伪元素为任意文本范围应用样式,并与 ::selection 对比,分析其性能影响(如重绘范围),以代码编辑器语法高亮为例,对比传统 span 包裹方案,说明适用边界。
本文以博客文章正文排版为例,分析 text-wrap: pretty 如何通过调整段落末尾几行的换行位置来避免孤行、提升排版质量,并解释其与 text-wrap: balance 的差异、对布局计算次数的影响,以及适用场景和性能权衡。
本文以主题切换为例,解释 CSS 容器查询中 @container style() 的机制,分析其与尺寸容器查询的差异,说明样式查询为何不会导致布局重排,并对比传统类名切换方案的适用边界与浏览器支持。
本文以图片轮播场景为例,分析 scroll-snap-type 的 mandatory 与 proximity 值如何影响滚动行为,解释强制吸附导致滚动位置突变和性能问题的机制,并给出减少卡顿的实践建议。
本文以弹出菜单定位场景为例,讲解 CSS Anchor Positioning 如何通过 anchor-name、position-anchor、anchor() 函数和 position-area 将元素锚定到其他元素,并重点分析为什么需要 position-try-fallbacks 回退机制,以及与传统 JS 定位方案的权衡和浏览器支持边界。
本文以模态框内滚动穿透到背景页面为例,解释 overscroll-behavior 的 contain 与 none 值如何控制滚动链和滚动穿透。对比传统 JavaScript 阻止滚动的方案,分析其适用边界、浏览器支持及对可访问性的影响,帮助前端开发者做出更优的滚动行为决策。
本文以表单校验提示场景为例,解析 :has() 关系型选择器的匹配机制,说明它如何让父元素样式依赖子元素状态,并深入样式失效与重算流程,对比传统 JS 类名切换方案,讨论性能开销、适用边界与浏览器支持。
手风琴组件展开收起时,display:none 的切换无法产生过渡效果。本文解释 CSS Transitions Level 2 的 transition-behavior 属性如何允许 display 等离散属性参与过渡,分析其翻转时机、与连续属性的差异、浏览器支持及性能影响。
本文以标题排版场景为例,分析 text-wrap: balance 如何让浏览器平衡多行文本的宽度,解释其基于最大宽度迭代的布局计算机制,对比手动换行或 JS 测量方案,并说明 balance 的适用边界(短文本)、性能开销(布局次数增加)及与 pretty 的差异。
本文以 SPA 路由切换为贯穿场景,剖析 View Transitions API 如何通过伪元素树和静态快照实现平滑过渡,重点解释跨文档过渡时快照隔离的必要性,以及同源限制、渲染阻塞与回退机制,并与 React Transition Group 等方案对比。
本文以长页面滚动指示器为例,解析 scroll-timeline 与 view-timeline 如何将动画进度映射到滚动位置,对比其基于合成器更新与主线程更新的差异,并给出适用边界。
本文以组件库样式覆盖为场景,解析 CSS @layer 中级联层的排序规则,重点说明 !important 声明如何反转层优先级,并给出避免样式冲突的实践建议。
本文以长商品列表为例,解析 content-visibility 如何通过布局、样式、绘制包含与交集观察跳过离屏元素的渲染,从而降低初始渲染与滚动时的布局绘制成本。同时说明它与 contain 的区别、auto 的失效条件、对滚动条和可访问性的影响,以及何时应该使用。
传统 CSS 依赖选择器权重解决样式冲突,但组件库覆盖场景中权重往往失效。本文以组件库样式覆盖为例,讲解 @layer 如何引入层顺序作为新的优先级维度,说明层内与层间的比较机制、未分层样式与 important 的交互规则,以及浏览器兼容边界与工程实践。
本文以长列表商品页为贯穿场景,解析 CSS contain 属性中 layout、paint、size 等值的隔离机制,说明它们如何缩小样式、布局与绘制的计算范围,并对比 content-visibility 的异同,帮助你在实际项目中做出正确的性能优化决策。