CSS新用法 - :modal、::backdrop、:picture-in-picture、:placeholder-shown、inset、scrollbar-gutte、backdrop-filter

这篇讲什么

CSS 这两年又加了一波新特性,主要是给特定场景下的视觉效果开了快捷通道 —— 模态框、画中画、自定义滚动条、玻璃磨砂等等。下面整理 8 个最实用的,带浏览器支持版本和实际代码。

CSS新用法 - :modal、::backdrop、:picture-in-picture、:placeholder-shown、inset、scrollbar-gutte、backdrop-filter

:modal 伪类 和 ::backdrop 伪元素 - Chrome 105+

:modal 用来匹配处于"模态"状态的元素,通常配合 <dialog> 元素的 showModal() 方法使用。这种模态框 会自动屏蔽掉后面其他元素的交互,不需要自己手动控制 overflow / pointer-events 等。

配合 ::backdrop 伪元素 —— 浏览器原生提供的模态背景层,可以直接给它写样式,做毛玻璃 / 半透明等效果,比传统的"额外加一个 mask div"简洁多了。

<dialog>
  模态框的内容
  <button class="closeButton">关闭</button>
</dialog>

<button class="showButton">Show打开</button>
<button class="showModalButton">Show modal打开</button>

用法:

dialog {
  border: 10px solid #f00;
}

:modal {
  border: 2px solid #000;
}

:picture-in-picture 伪类 - Chrome 105+

给"处于画中画模式"的 <video> 元素加样式。比如视频被拽出画中画窗口时,原位置可以显示一个占位 "Now playing in PiP" 提示。

const showButton = document.querySelector('.showButton')
const showModalButton = document.querySelector('.showModalButton')
const closeButton = document.querySelector('.closeButton')
const dialog = document.querySelector('dialog')

showButton.addEventListener('click', e => {
  dialog.show()
})

showModalButton.addEventListener('click', e => {
  dialog.showModal()
})

closeButton.addEventListener('click', e => {
  dialog.close()
})

:placeholder-shown 伪类 - 全浏览器支持

表单输入元素当前显示 placeholder 文字时(用户还没填),匹配。常用做浮动 label —— 用户开始输入时 label 上飘,效果优雅。

dialog {
  border: 10px solid #f00;
}

:modal {
  border: 2px solid #000;
}

/* 上面的css和之前的一样 */

/* 这样可以写一个全局的modal背景颜色 */
::backdrop {
  background: conic-gradient(red, orange, yellow, green, red);
  outline: 20px solid white;
  outline-offset: -20px;
}

/* 这样可以写一个指定的 */
dialog::backdrop {
  background-color: rgb(0 0 0 / 0.5);
}

配合 transition 用法:

/* 这样将会在视频进入画中画时,在原始坑位展示一个透明度0.3的模糊的样子 */
:picture-in-picture {
  opacity: 0.3;
  filter: blur(5px);
}

inset 缩写属性 - Chrome 87+

inset 等同于 top + right + bottom + left 四个一起设。绝对定位 / fixed 定位常用:

/* 这样写就是在一个input,有placeholder且还没有输入东西的时候,有一个5px的蓝色边框 */
input:placeholder-shown {
  border: 5px solid blue;
}

等价于:

/* 使用inset之前 */
.box {
  position: absolute;
  top: 20px;
  right: 30px;
  bottom: auto;
  left: 40px;
}

/* 使用inset之后,按上右下左的顺序写,和margin一样 */
.box {
  position: absolute;
  inset: 20px 30px auto 40px;
}

/* 只设置上下 */
.box {
  position: absolute;
  inset-block: 10px 20px;
}

/* 只设置左右 */
.box {
  position: absolute;
  inset-inline: 5% 10%;
}

四个值的写法跟 margin 一样:inset: 10px 20px 表示上下 10px、左右 20px。

scrollbar-gutter - Chrome 94+

滚动条的"占位"控制。默认情况下,某些场景里滚动条会"突然出现",导致页面内容跳一下。scrollbar-gutter: stable 让浏览器始终保留滚动条的空间,即使没滚动条也留出来,避免跳跃。

scrollbar-gutter: auto;
scrollbar-gutter: stable;
scrollbar-gutter: stable both-edges;

backdrop-filter - 大部分现代浏览器

毛玻璃效果。给元素加 backdrop-filter: blur(10px) 就能让元素背后的内容模糊,iOS 风磨砂玻璃感。配合半透明背景,做导航栏、卡片、模态背景视觉极佳。

:root {
  scrollbar-gutter: stable;
}

实际场景:

dialog::backdrop {
  backdrop-filter: blur(5px);
}

怎么知道某个 CSS 特性能用

caniuse.com,输入特性名,看绿色 / 红色分布。一般规则:

  • Chrome / Edge / Firefox 三家都绿 → 放心用
  • Safari 落后 → 看自己用户群,iOS / macOS 占比高就要谨慎
  • IE 11 红的 → 不用管,IE 11 已经死了

渐进增强思路:新特性优先用 (没 fallback),老浏览器用户看到的就是退化版。不要为了 1% 的 IE 用户拖累 99% 的现代浏览器体验。

一句话总结

这几个新 CSS 特性目前主流浏览器都支持(2024 年后),日常项目放心写。backdrop-filterscrollbar-gutter 是出场频率最高的两个,值得记下来。

—— 别看了 · 2026
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理 邮箱1846861578@qq.com。
技术教程

Vscode,Prettier,ESLint配置及注释

2024-6-3 14:08:43

技术教程

CSS新用法 - min()、max()、clamp()、:where()、:is()、:has()

2024-6-6 11:37:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索