«

2025 年度 Chrome 的 5 个值得关注的 CSS 新特性

时间:2025-12-13 03:03     作者:独元殇     分类: 前端技术


CSS 不是一滩死水,它在发展,每年都在。2025 也一样。在 chrome 平台,CSS 今年适配了很多的新功能。能让我们使用 HTML5 + CSS 写出一些,过去非常麻烦甚至要借助一大堆 js 的内容。

虽然现在 ai 在前端的编程能力相当惊人,但我们还是要吃饭的,那谁能吃的更久的呢?肯定不是菜鸟程序员,而是对语言的细节更了解的人,所以一些新特性,还是值得看看的。AI 对新细节的了解远远不如旧细节更清晰。

在 chrome 的官网上,已经整理好了,可以找到今年更新了一大堆的特性。不过很多都晦涩难懂,我选了 5 个比较独特的、比较实用的:

分别对应着:

下面的一些举例代码,大家可以在本地或者 Codepen 或者 分格 HTML 编辑器 这个地方进行快速预览学习!

注意,一定要在 chrome://flags/ 里开启 Experimental Web Platform features 才能使用!这些特性可能要在 2026 2027 年才会完全普及。

img

自定义 select

首先第一个, appearance: base-select 就是一个开关。给我们的 < select > 赋予这个属性,就会完全把 这个 < select > 给搞成类似于安卓开启 ROOT 了一样,也就是完全自定义 select 选择框的细节!能把 < select > 以更方便的方式,搞的非常花哨!

这个超级实用!我们写表单,肯定很经常使用 < select > ,设计师往往会设计这个设计的很好看,但默认的 < select > 就是很丑,所以还得自己新建一大堆 < div > 来模拟... 麻烦至极!

img

看看官网给的例子,多漂亮?

我们也能简单用一下!

应用这个属性后,选择框的每个部分,都有独立的伪元素可以去控制:

img

官网给的说明

这是最简单的一个例子:

img

代码如下:

<style>
    select, ::picker(select) {
      appearance: base-select;
    }
    option {
      display: flex;
      justify-content: space-between;
    }
    option:checked::after { 
      content: "被选择"; /* 只有选中状态才通过伪元素显示钩子 */
      color: #007bff;
    }
</style>

<select>
    <option value="spike" selected>spike</option>
    <option value="zorp">zorp</option>
    <option value="fluffy">fluffy</option>
    <option value="bloop">bloop</option>
</select>

原生轮播图

我们都知道有个 Swiper.js 的 js 库,专门辅助实现轮播图的。就这么简单一个需求,过去需要搞那么麻烦。

绝大部分电商、外贸独立站和企业官网,都流行搞这个。现在 CSS 要原生支持这玩意了!

css 里加入了 ::scroll-marker & ::scroll-button 这俩东西!能剩下一大堆 js 监听事件!以及 DOM 操作。

现在是一个简单的使用示例:

img

当我们拖动滚动条的时候,左上角的圆点会变色。这个特性在做轮播图时,大有可为!

代码如下:

<style>
  ul {
    display: flex; overflow-x: auto; scroll-snap-type: x mandatory;
    width: 300px; height: 100px; border: 2px solid #000;
    scroll-marker-group: before; 
  }

  ::scroll-marker-group(before) {
    display: flex; justify-content: center; gap: 10px; padding: 10px;
  }

  /* 小圆点*/
  li::scroll-marker {
    content: ""; display: block; width: 15px; height: 15px;
    border-radius: 50%; background: #ccc; cursor: pointer;
  }

  /* 小圆点在拖动时,变色 */
  li::scroll-marker:target-current { background: red; transform: scale(1.2); }

  li { flex: 0 0 100%; scroll-snap-align: center; list-style: none; font: 40px sans-serif; }
</style>

<ul>
  <li style="background:red">1</li>
  <li style="background:blue">2</li>
  <li style="background:green">3</li>
</ul>

锚点

这个怎么解释呢?

比如过去,我们在写什么下拉框时,如果想让一个元素 B,不管另一个元素 A 怎么移动,怎么变换,都死死跟着它,位于它的某个位置,其实是很难的。虽然看起来这个是 CSS 的责任,但我们通常要引入 js ,一直不断的计算。

现在引入了 anchor ,这个问题好办了,不用 js 了!轻松很多!

<style>
  button { anchor-name: --my-btn; } /* 起名:--my-btn */

  .tooltip {
    position: absolute;
    position-anchor: --my-btn;  /* 使用 --my-btn 作为基点 */
    top: anchor(bottom); 
    left: anchor(center);
    transform: translate(-50%, 0);  
  }
</style>

<button>鼠标目标</button>
<p>第一段文字</p>
<p>第二段文字</p>
<div class="tooltip">我是悬浮卡片</div>

效果如下:

img

只要给 A 元素起一个名字,然后在 B 元素里写一下定位规则就可以了。

无论两者隔离多远,无论有没有挨着,A 再变换位置,B 始终会位于它的下面居中。

light-dark() 函数

以前我们怎么判断 浏览器 的白天模式,夜间模式?

比如我们要写 夜间 的样式,那就使用 @media (prefers-color-scheme: dark){ ... } 对吧?但这种方式不直观高效。

现在多了个 light-dark() ,只需要 light-dark(浅色值, 深色值) 填入相应的值就好了!相当高效!

<style>
  :root { 
    color-scheme: light dark; /* 开启 light-dark() 函数 */
  }
  body {
    /* light-dark(浅色值, 深色值) */
    background: light-dark(#ffffff, #000000);
    color:      light-dark(#333333, #ffffff);

    font-size: 24px;
    height: 100vh; place-items: center;
  }
</style>

<div>切换系统主题,我自动变色</div>

之后,这个页面就很智能的自适应了!

img

img

这样更直观了。不用东一块、西一块的写了!

文本框的大小变化

就是那个 textarea ,过去,我们会使用 js 来监听内容,然后来实现其的自适应。或者是引入 autosize.js 的库。

现在,多了个 field-sizing: content; 的方法,我们可以直接自动根据文本内容,来调整文本框的变化了!

<style>
  textarea {

    field-sizing: content;  /* 根据 content 决定尺寸 */

    min-height: 40px; /* 设个下限 */
    padding: 10px;
    border: 2px solid #000;
  }
</style>

<textarea placeholder="打字 或者 回车,我可以自动变化..."></textarea>

效果如下:

img

目前我个人对其的应用场景,不是很清楚,但确实是值得收藏!

标签: 原创 css

评论:
avatar
springwood 21 小时前
这些新的 CSS 特性不支持其他浏览器吧?
commentator
独元殇 14 小时前
@springwood:light-dark()  和 field-sizing: content 在 Chrome 和 火狐 都可以正常使用,其他几个都不太行,得等到未来了。