最常见原因是选择器未匹配到document.fullscreenElement所指的实际元素,如调用videoEl.requestFullscreen()但.player:fullscreen中.player类不存在;其次,元素全屏前为display:none或visibility:hidden,导致全屏后仍不可见。

为什么写了.player:fullscreen { margin: 0; }却没生效
最常见的情况是:你写的 CSS 选择器根本没匹配到真正被全屏的元素。浏览器只对 document.fullscreenElement 所指向的那个 DOM 节点应用 :fullscreen,不看 class 名是否“像”,只认实际身份。比如 JS 里调用了 videoEl.requestFullscreen(),但你写的是 .player:fullscreen,而该 <video> 标签没有 player 这个 class → 规则直接被忽略。
另一个隐蔽原因是:元素本身在进全屏前就处于 display: none 或 visibility: hidden 状态。全屏后它依然不可见,样式再对也看不到效果。
检查方法很简单:console.log(document.fullscreenElement) —— 输出结果就是你该写的选择器主体,比如 <video id="main-video">,那你就得用 #main-video:fullscreen,而不是靠猜。
:fullscreen 里改 margin 有风险吗
有,而且容易踩坑。浏览器对 :fullscreen 下的部分属性会做硬性限制或重置,margin 就是其中之一:Chrome 和 Safari 在某些版本中会忽略 margin 声明,尤其当目标元素是 <video> 时;Firefox 则可能将其强制归零,且不报错。
立即学习“前端免费学习笔记(深入)”;
更麻烦的是,:fullscreen 是单向覆盖,不是状态开关。你设了 margin: 0,退出后这个值不会自动还原 —— 如果基础样式里没定义默认 margin,后续布局就乱了。
推荐做法:
- 先写基础样式,比如
.player { margin: 1rem; } - 再用
:fullscreen做增量调整,比如.player:fullscreen { margin: 0; } - 真要清空外边距,优先用
padding+ 父容器控制,比依赖margin更可控
子元素间距怎么调才可靠
:fullscreen 不继承,也不会自动作用于子元素。写 .player:fullscreen { margin: 0; } 只影响 .player 自身,它的 .controls、.title 等子节点完全不受影响。
想调整子元素间距,必须显式写出组合选择器:
.player:fullscreen .controls { margin-top: 1.5rem; }.player:fullscreen .progress-bar { margin: 0.5rem 0; }- 避免用
margin合并场景(比如相邻子元素都设margin-bottom),改用gap(如果父容器是 flex/grid)
注意:移动端 iOS Safari 的视频全屏是系统级渲染层,你写的任何 CSS(包括子元素的 margin)大概率失效 —— 这时候只能靠 fullscreenchange 事件动态加 class 或内联 style 来兜底。
兼容旧浏览器时怎么写才不漏掉
现代浏览器(Chrome 65+、Firefox 64+、Safari 15.4+)支持无前缀 :fullscreen,但若需覆盖旧版 Safari(
-
video:fullscreen(标准) -
video::-webkit-full-screen(双冒号 + 两个连字符,full-screen中间是短横线) -
video::-moz-fullscreen(moz全小写,单个短横线)
别混写:video:-webkit-full-screen(单冒号)、video::-webkit-full-screen(三冒号)、video::-moz-full-screen(错误连字符)—— 都是语法错误,整条规则静默失效。
另外,别用逗号分隔不同前缀写法,比如 .player:fullscreen, .player::-webkit-full-screen,这种写法只要其中任一选择器非法,整组规则都会被浏览器丢弃。
真正难处理的不是怎么写,而是什么时候不该用 :fullscreen 控制间距 —— 比如需要响应设备旋转、DPR 变化或 iframe 嵌套时,它基本不可靠,得切到 fullscreenchange + document.fullscreenElement + 动态 class 的组合方案。


















