object-fit: cover 是视频铺满视口的正确方式,保持宽高比并裁切溢出;mix-blend-mode 仅对元素内容及其背后堆叠上下文生效,需严格分三层(video→遮罩→文字)且同级隔离。

object-fit: cover 能让视频真正铺满视口,但遮罩和文字混合失效,不是 CSS 写错,而是渲染层级没理清——mix-blend-mode 对视频本身不生效,只对“元素内容”和“它背后堆叠上下文的内容”起作用。
video 元素必须用 object-fit: cover,不能靠 width/height 强撑
直接设 width: 100vw; height: 100vh; 会导致黑边或拉伸变形,尤其当视频源是 16:9、屏幕是 21:9 或 4:3 时。object-fit: cover 才是正确缩放方式,它保持原始宽高比并裁切溢出部分。
-
object-fit: fill会强制拉伸,人像变胖、文字压扁,背景视频不可接受 - 必须配合明确尺寸:给
<video></video>设width: 100%; height: 100%;,且父容器为position: fixed; top: 0; left: 0; - 移动端 Safari 需加
playsinline属性,否则跳全屏;iOS 15+ 已支持object-fit,但首帧偶有延迟,可加preload="metadata"缓解
mix-blend-mode 失效的三个典型原因
给文字加 mix-multiply 没反应?大概率是渲染链断了。它不混合视频像素,只混合“当前元素内容”与“它背后的堆叠上下文”。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- 遮罩写成父级
bg-black/50(即background-color: rgba(0,0,0,0.5))——单色背景不构成可混合层,且和文字同属一个 stacking context -
<video></video>被包在带transform或filter的容器里——这些属性会隐式创建新 stacking context,切断混合链 - 文字层没设
position: relative或z-index——mix-blend-mode和z-index必须共存才有效
必须严格分三层:video → 遮罩层 → 文字层
不能用一个 <div> 套住 <code><video></video> 再加背景色糊弄。浏览器把 <video></video> 当作独立合成层,混合必须靠显式 DOM 层级隔离。
- 最底层:
<video autoplay muted loop playsinline class="absolute inset-0 w-full h-full object-cover"></video> - 中间层:一个同级
<div> 或伪元素 <code>::before,设position: absolute; inset: 0;,背景必须是多层(如background: linear-gradient(to top, rgba(0,0,0,0.7), transparent), url(video-bg.jpg)),单色background-color不行 - 顶层:文字容器设
position: relative; z-index: 10;,并应用自定义mix-overlay类 - 关键约束:遮罩层和
<video></video>必须是兄弟节点;它们共同父容器**不能**有isolation: isolate - 在
src/styles.css的@tailwind utilities前插入: @layer utilities { .mix-multiply { mix-blend-mode: multiply; } .mix-overlay { mix-blend-mode: overlay; } }- 别用第三方库注入,PurgeCSS 可能误删;也别写
style="mix-blend-mode: multiply"——内联样式优先级高,但破坏可维护性
Tailwind 中安全注入 mix-blend-mode 类
Tailwind 默认不导出 mix-blend-mode 工具类,也不能用 @apply 硬塞。插件或内联样式都容易出问题。
真正卡住人的从来不是代码怎么写,而是 stacking context 怎么断、怎么续——isolation、transform、filter 这些属性悄无声息地切开渲染链,而开发者只看到文字没变化。调试时先检查 computed styles 里的 stacking context 树,比反复改 class 有用得多。










