惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
T
Tailwind CSS Blog
V
Visual Studio Blog
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
量子位
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
Jina AI
Jina AI
雷峰网
雷峰网
博客园 - 【当耐特】
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
IT之家
IT之家

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
CSS progress()函数简介 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2025-12-12 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=11969
本文可全文转载,但需要保留原作者、出处以及文中链接,AI抓取保留原文地址,任何网站均可摘要聚合,商用请联系授权。

一、progress()函数语法

最近CSS又出了个新的函数,名叫progress(),返回0-1的进度值,我研究了下,这个函数还是有一定的实用性的。

我们先看下他的语法:

progress(<value>, <start>, <end>)

这个函数支持3个参数,分别是:

value
当前进度值
start
范围起始值
end
范围结束值

因此:

  • progress(300, 0, 1000)的返回值就是0.3
  • progress(50px, 0px, 100px)的返回值就是0.5
  • progress(50%, 30%, 80%)的返回值就是……这个要计算下:(50% - 30%) / 80%,结果是0.25

需要注意的是,progress()的各个参数的计算值类型需要一致,如果一个是时间值,一个是长度值,或者一个是数值,一个是单位值,是不合法的,下面这两个progress()语句就是非法的:

progress(3s, 0px, 100px)
progress(3em, 0, 100)

二、progress()场景应用

在实际开发中,progress()函数都是与CSS变量,或者是CSS相对单位结合使用的,因为只有此时,其返回值才是动态的,才有使用的意义,否则,类似progress(300, 0, 1000)这样的固定值,还不如直接写个0.3来得快活呢!

例如:

// CSS变量
progress(var(--container-width), 320, 1200)
// 相对单位
progress(100vw, 360px, 1024px)

案例

官方案例都是使用vw单位,但是这个不太方便看文章的小伙伴体验。

所以,我打算使用cqw单位。

HTML如下,一个容器,里面有一个图片:

<div class="container">
  <img src="mybook.jpg" alt="CSS新世界">
</div>

此时,我们就可以使用progress()函数,让图片的宽度基于容器尺寸动态变化,CSS代码如下:

.container {
  padding: 10px;
  border: dashed gray;
  container-type: inline-size;
  overflow: hidden;
  resize: both;
  
  img {
    width: calc(100px + 200px * progress(80cqw, 150px, 800px));
  }
}

80cqw表示.container容器元素80%的宽度,然后这个宽度计算值和150px-800px范围计算进度,最终,图片的尺寸会在100px~300px变化。

实时渲染效果如下所示(需要Chrome 138+)(拖拽右下角的resize拖拽条):

CSS新世界

三、兼容性以及其他

progress()使用还挺灵活的,函数参数支持其他常见的CSS运算函数,例如calc()计算:

progress(calc(20 + 30), 0, 100)

也可以是calc()函数的参数,例如:

calc((progress(var(--container-width), 20%, 80%) / 2) + 0.5)

支持和其他CSS函数,例如random()clamp()混合使用。

总之,哪里需要他,就使用他。

边界特性

7年前,我写过一篇文章“CSS文字和背景color自动配色技术简介”,利用的是opacity的边界特性实现的,比较取巧。

现在有了progress()函数,那就比较正统了,也更容易理解了。

例如:

// 亮度大于0.5,颜色黑色
// 亮度小于 0.5,颜色白色
color: hsl(0, 0%, calc(100% * progress(
  calc((0.5 - var(--lightness)) * infinity), 0, 1))
);

要是对infinity关键字感兴趣,可以访问这篇文章:“了解infinity、pi等CSS calc()计算关键字

兼容性

兼容性一般,目前Chrome Only!

progress()兼容性

目前还只是个玩具。

结语

progress() 是 CSS 中用于表示进度值的特殊函数(属于 CSS 数值函数范畴),核心作用是将「0~1 范围内的进度值」映射为可视化的数值 / 颜色 / 尺寸等,常用于进度条、动态过渡、动画关键帧等场景,是 CSS 原生实现进度关联样式的核心工具。

不过目前受制于兼容性,暂时无法大规模使用,大家了解即可!

最后,我家白衣慕沛灵希望大家多多点赞转发。

白衣慕沛灵

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:https://www.zhangxinxu.com/wordpress/?p=11969

(本篇完)