CSS3 函数完全指南:从基础到实战,解锁样式新可能
在之前的篇章中,我们介绍过
CSS Flex 布局:https://mp.csdn.net/mp_blog/creation/editor/151112077
CSS 动画属性:https://mp.csdn.net/mp_blog/creation/editor/151143790
CSS 3D属性:https://mp.csdn.net/mp_blog/creation/editor/151357158
CSS 伪元素和伪类:https://mp.csdn.net/mp_blog/creation/editor/151616270
在本章节中,我们重点介绍CSS3 里面的函数
CSS3 的诞生不仅带来了圆角、阴影等新属性,更引入了「函数」这一灵活工具 —— 它们能动态计算值、生成复杂效果、适配多场景,是现代前端样式开发的核心能力。本文将按「功能场景」分类,逐一拆解 CSS3 常用函数,带你从语法到实战彻底掌握。
一、颜色函数:精准控制色彩与透明度
颜色是样式的基础,CSS3 扩展了颜色表示方式,支持「RGB、HSL、宽色域」等多种维度,满足从简单配色到专业设计的需求。
1. 基础透明度系列:rgb() / rgba()
- 功能:通过「红、绿、蓝三原色」定义颜色,rgba() 额外支持透明度。
- 语法:
- rgb(red, green, blue):三原色值范围 0~255 或 0%~100%
- rgba(red, green, blue, alpha):alpha 为透明度(0 完全透明,1 完全不透明,支持小数如 0.5)
示例:
/* 纯红色(255,0,0) */
.box1 { background: rgb(255, 0, 0); }
/* 50%透明的蓝色 */
.box2 { background: rgba(0, 0, 255, 0.5); }
/* 用百分比表示的绿色 */
.box3 { color: rgb(0%, 100%, 0%); }

注意:rgb() 可省略 rgb 直接写 #ff0000,但 rgba() 无法用十六进制简写,需显式写函数。
-
2. 色相控制系列:hsl() / hsla()
- 功能:通过「色相(Hue)、饱和度(Saturation)、亮度(Lightness)」定义颜色,更符合人眼对色彩的感知(比如调整饱和度让颜色更鲜艳)。
- 语法:
- hsl(hue, saturation, lightness)
- hsla(hue, saturation, lightness, alpha)
- 参数解析:
- hue:色相(色轮角度),0° 红、120° 绿、240° 蓝,范围 0°~360°
- saturation:饱和度(颜色纯度),0% 灰度、100% 纯色
- lightness:亮度,0% 黑色、50% 正常色、100% 白色
- 优势:调整颜色时无需重新计算 RGB 值,比如想让橙色变浅,只需改 lightness 为 60%。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
/* 鲜艳的橙色(色相30°,满饱和,正常亮度) */
.tag {
background: hsl(30, 100%, 50%);
}
/* 浅灰色(任意色相,0饱和,高亮度) */
.card {
border: 1px solid hsl(0, 0%, 80%);
}
/* 30%透明的紫色(色相270°) */
.btn {
color: hsla(270, 100%, 50%, 0.3);
}
</style>
<body>
<div class="tag">标签</div>
<div class="card">卡片</div>
<div class="btn">按钮</div>
</body>
</html>

3. 宽色域与新方案:hwb() / lab() / lch() / color()
CSS3 后期新增了更专业的颜色函数,支持「宽色域(如 P3)」和「感知均匀颜色空间」,适合设计系统、印刷级场景。
|
函数 |
功能说明 |
语法示例 |
|
hwb() |
色相 + 白度 + 黑度(简化版 HSL) |
hwb(200 30% 20%)(色相 200°,30% 白,20% 黑) |
|
lab() |
基于人眼感知的颜色空间(L = 亮度,a/b = 色轴) |
lab(50 20 -30)(中等亮度,偏红 - 偏蓝) |
|
lch() |
lab 的极坐标形式(L = 亮度,C = 彩度,H = 色相) |
lch(60 50 180)(亮度 60,彩度 50,色相 180°) |
|
color() |
支持指定色域(如 srgb、display-p3) |
color(display-p3 1 0.5 0)(P3 色域的橙色) |
示例(实战场景):
为 Retina 屏幕适配宽色域图片文字:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.banner-text {
/* 优先用P3宽色域红色,不支持则降级为sRGB */
color: color(display-p3 1 0 0);
color: rgb(255, 0, 0); /* 降级方案 */
}
</style>
<body>
<div class="banner-text">Hello World</div>
</body>
</html>

二、背景函数:生成渐变、多图混合效果
背景是页面视觉的核心,CSS3 通过函数实现了「渐变背景、多背景叠加、响应式图片」等复杂效果,无需依赖 PS 切图。
1. 线性渐变:linear-gradient()
- 功能:生成「线性方向的颜色过渡」,可实现从左到右、从上到下等渐变效果。
- 语法:
linear-gradient([方向], 颜色1 [位置1], 颜色2 [位置2], ...)
- 参数解析:
- 方向:可选,默认「从上到下(to bottom)」,支持:
- 关键词:to top(上)、to right(右)、to bottom right(右下)
- 角度:45deg(45 度角,顺时针为正)
- 颜色 + 位置:位置可选(默认均匀分布),支持 px/%,比如 red 20% 表示红色在 20% 位置结束。
- 方向:可选,默认「从上到下(to bottom)」,支持:
示例(常见场景):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
/* 从左到右的红蓝渐变 */
.header {
background: linear-gradient(to right, red, blue);
}
/* 45度角的三色渐变(指定位置) */
.card {
background: linear-gradient(45deg, yellow 0%, green 50%, purple 100%);
}
/* 渐变+透明度(实现毛玻璃底层) */
.mask {
background: linear-gradient(
to bottom,
rgba(0, 0, 0, 0.8) 0%,
rgba(0, 0, 0, 0) 100%
);
}
</style>
<body>
<div class="header">header</div>
<div class="card">card</div>
<div class="mask">mask</div>
</body>
</html>

- 注意:linear-gradient() 本质是「背景图片」,需配合 background-size/repeat 控制大小和重复。
2. 径向渐变:radial-gradient()
- 功能:生成「从中心向外的圆形 / 椭圆形渐变」,适合实现光晕、按钮高光等效果。
- 语法:
radial-gradient([形状 大小 at 中心点], 颜色1 [位置1], 颜色2 [位置2], ...)
- 核心参数:
- 形状:circle(圆形)、ellipse(椭圆形,默认)
- 大小:控制渐变范围,支持 closest-side(到最近边)、farthest-corner(到最远角,默认)、100px(固定半径)
- 中心点:默认「中心(center)」,支持 50% 50%、left top 等。
示例(实战):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
/* 圆形渐变(中心到边缘的白→蓝,实现光晕) */
.light {
width: 200px;
height: 200px;
background: radial-gradient(
circle,
rgba(255, 255, 255, 0.8) 0%,
rgba(9, 142, 251, 0.326) 70%
);
}
/* 椭圆形渐变(右下角为中心,红→黄) */
.badge {
width: 200px;
height: 200px;
background: radial-gradient(
ellipse farthest-corner at right bottom,
red,
yellow 80%
);
}
</style>
<body>
<div class="light"></div>
<div class="badge"></div>
</body>
</html>

3. 重复渐变:repeating-linear-gradient() / repeating-radial-gradient()
- 功能:重复生成渐变单元,实现条纹、网格、波纹等图案,无需写多张图片。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
/* 水平条纹(10px红色+10px白色重复) */
.striped {
background: repeating-linear-gradient(
to bottom,
red 0px,
red 10px,
white 10px,
white 20px
);
}
/* 网格图案(结合两个交叉的重复渐变) */
.grid {
background: repeating-linear-gradient(
to right,
#eee 0 1px,
transparent 1px 10px
),
repeating-linear-gradient(to bottom, #eee 0 1px, transparent 1px 10px);
}
</style>
<body>
<div class="striped" style="width: 200px; height: 200px"></div>
<div class="grid" style="width: 200px; height: 200px"></div>
</body>
</html>

4. 多背景与适配:url() / image-set()
- url():加载外部图片作为背景,支持多背景叠加(用逗号分隔)。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.banner {
width: 500px;
height: 300px;
background: url("https://pic.616pic.com/ys_img/01/17/47/eVnQ1JdIY4.jpg")
no-repeat center top,
url("https://th.bing.com/th/id/R.5ed0897a486be7aa0ee35688e2b35518?rik=owRMso4E2UGNEQ&riu=http%3a%2f%2fwww.v3wall.com%2fwallpaper%2f1920_1200%2f1207%2f1920_1200_20120727122504514090.jpg&ehk=zS%2fd8Ed8%2b3fjJQ5eyAa97UfWPXxU8ahmCxJ6eNcSgQA%3d&risl=&pid=ImgRaw&r=0")
no-repeat center/cover;
}
</style>
<body>
<div class="banner"></div>
</body>
</html>

- image-set():根据屏幕分辨率加载适配图片(比如 Retina 屏加载 2x 图),解决「高清屏模糊」问题。
- 语法:image-set(url(图1) 1x, url(图2) 2x, ...)
示例
.avatar {
background-image: image-set(
url("avatar-100px.jpg") 1x, /* 普通屏 */
url("avatar-200px.jpg") 2x /* Retina屏 */
);
}
需加浏览器前缀(如 -webkit-image-set)兼容旧版 Chrome/Safari。
三、尺寸函数:动态计算宽高、间距
CSS3 的尺寸函数支持「混合单位计算、自适应范围控制」,解决了传统 CSS 中「固定值无法适配多屏幕」的问题,是响应式布局的核心。
1. 动态计算:calc()
- 功能:支持「加减乘除运算」,可混合不同单位(如 px/%/rem),动态计算样式值。
- 语法:calc(表达式),注意:
- 运算符前后必须加空格(如 calc(100% - 20px),不能写 100%-20px)
- 除法中除数不能为 0;乘法中只能有一个值带单位(如 calc(2 * 10px) 正确,calc(2px * 10px) 错误)。
- 优势:无需用 JS 计算动态值,直接通过 CSS 适配不同屏幕。
示例:
/* 容器宽度 = 父容器100% - 左右各20px padding */
.container {
width: calc(100% - 40px);
padding: 0 20px;
margin: 0 auto;
}
/* 字体大小 = 16px + 0.5vw(随屏幕宽度变化) */
.title {
font-size: calc(16px + 0.5vw);
}
/* 两列布局:左侧固定200px,右侧占剩余宽度 */
.sidebar { width: 200px; float: left; }
.main { width: calc(100% - 200px); float: right; }
2. 范围控制:min() / max() / clamp()
这三个函数是「响应式适配的黄金组合」,能自动根据条件选择值,避免样式溢出或过小。
(1)min():取多个值中的最小值
- 功能:确保样式值「不超过最大值」,比如「宽度最大 1200px,否则随父容器缩小」。
示例:
/* 图片宽度:最大100%(不超过父容器),且最大500px(避免过大) */
.img {
width: min(100%, 500px);
}
/* 字体大小:最小14px,且不超过父容器宽度的5%(避免文字溢出) */
.text {
font-size: min(14px, 5vw);
}
(2)max():取多个值中的最大值
- 功能:确保样式值「不小于最小值」,比如「按钮 padding 最小 8px,且随屏幕变大」。
示例:
/* 按钮内边距:最小8px,且随字体大小变化(1em=当前字体大小) */
.btn {
padding: max(8px, 1em);
}
/* 容器高度:最小300px,且至少占视口高度的50% */
.card {
height: max(300px, 50vh);
}
(3)clamp():限定值在「最小值 - 首选值 - 最大值」之间
- 功能:最灵活的范围控制,「首选值」随环境变化(如 vw),但超出范围时自动取边界值。
- 语法:clamp(最小值, 首选值, 最大值)
- 优势:一行代码实现「自适应 + 边界控制」,替代传统的媒体查询。
示例(实战高频):
/* 标题字体:最小18px,首选2vw(随屏幕变),最大32px */
.article-title {
font-size: clamp(18px, 2vw, 32px);
}
/* 容器宽度:最小300px,首选80%父容器,最大1200px */
.content {
width: clamp(300px, 80%, 1200px);
margin: 0 auto;
}
四、变形函数:实现旋转、缩放、平移
CSS3 的 transform 属性配合变形函数,可实现「元素的 2D/3D 变换」,无需依赖 JS,且性能优于传统的 top/left 定位(不会触发重排)。
所有变形函数需写在 transform 中,多个函数用空格分隔(如 transform: translate(20px) rotate(30deg))。
1. 2D 变形核心函数
|
函数 |
功能 |
语法示例 |
效果说明 |
|
translate(x, y) |
平移(x 轴 + y 轴) |
translate(50px, 20px) |
向右移 50px,向下移 20px |
|
translateX(x) |
仅 x 轴平移 |
translateX(-30px) |
向左移 30px |
|
translateY(y) |
仅 y 轴平移 |
translateY(10%) |
向下移父容器高度的 10% |
|
scale(x, y) |
缩放(x 轴 + y 轴) |
scale(1.2, 0.8) |
宽放大 20%,高缩小 20% |
|
scaleX(x) |
仅 x 轴缩放 |
scaleX(0.5) |
宽缩小 50%(高不变) |
|
scaleY(y) |
仅 y 轴缩放 |
scaleY(1.5) |
高放大 50%(宽不变) |
|
rotate(angle) |
旋转(顺时针为正) |
rotate(30deg) / rotate(1rad) |
顺时针转 30 度 / 1 弧度 |
|
skew(x-angle, y-angle) |
倾斜(扭曲) |
skew(10deg, 5deg) |
x 轴倾斜 10 度,y 轴倾斜 5 度 |
|
skewX(angle) |
仅 x 轴倾斜 |
skewX(-5deg) |
向左倾斜 5 度 |
|
skewY(angle) |
仅 y 轴倾斜 |
skewY(8deg) |
向下倾斜 8 度 |
示例(按钮 hover 效果):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.btn {
transition: transform 0.3s; /* 加过渡让效果平滑 */
}
.btn:hover {
/* hover时:向右移5px + 放大1.05倍 + 顺时针转2度 */
transform: translate(5px) scale(1.05) rotate(2deg);
}
</style>
<body>
<button class="btn">按钮</button>
</body>
</html>
正常情况下:

鼠标移动上去后

2. 复合变形:matrix()
- 功能:用一个函数实现「平移、缩放、旋转、倾斜」的复合效果,本质是「2D 变换矩阵」。
- 语法:matrix(a, b, c, d, e, f),对应公式:
x' = a*x + c*y + e(新 x 坐标)
y' = b*x + d*y + f(新 y 坐标)
示例:
.box {
transform: matrix(
1.039, 0.6, /* a, b:缩放+旋转相关 */
-0.6, 1.039, /* c, d:倾斜+旋转相关 */
20, 10 /* e, f:平移(x, y) */
);
}
等效于 transform: translate(20px, 10px) rotate(30deg) scale(1.2) 的矩阵:
注意:矩阵计算复杂,日常开发推荐用多个基础函数组合,仅在需精确控制时使用 matrix()。
3. 3D 变形函数
在 2D 基础上增加「z 轴(深度)」,需配合 perspective(透视)属性才能显示 3D 效果(模拟人眼视角,值越小 3D 感越强)。
|
函数 |
功能 |
示例 |
|
translate3d(x,y,z) |
3D 平移(z 轴正值向前) |
translate3d(0,0,50px) |
|
scale3d(x,y,z) |
3D 缩放 |
scale3d(1.2,1.2,1.2) |
|
rotate3d(x,y,z,angle) |
3D 旋转 |
rotate3d(1,0,0,45deg) |
|
perspective(n) |
透视(父容器添加) |
perspective(500px) |
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.card-container {
border: 1px solid #ccc;
perspective: 1000px; /* 父容器添加透视 */
}
.card {
width: 200px;
height: 300px;
background-color: #ddf8ff;
transition: transform 0.6s;
transform-style: preserve-3d; /* 子元素保持3D效果 */
}
.card-container:hover .card {
transform: rotate3d(0, 1, 0, 180deg); /* 绕y轴旋转180度(翻面) */
}
</style>
<body>
<div class="card-container">
<div class="card">
<div class="front">Front</div>
<div class="back">Back</div>
</div>
</div>
</body>
</html>


五、过渡与动画函数:实现平滑动效
CSS3 的过渡(transition)和动画(animation)函数,让元素状态变化更平滑,无需写 JS 动画。
1. 过渡函数:transition()
- 功能:定义「元素状态变化的过渡效果」(如 hover 时颜色、尺寸的渐变)。
- 语法:transition(属性 时长 timing-function 延迟),各参数可选,多个属性用逗号分隔。
- 核心参数:
- timing-function:过渡曲线(控制速度变化),常用值:
- ease:默认(慢→快→慢)
- linear:匀速
- ease-in:慢→快
- ease-out:快→慢
- cubic-bezier(n,n,n,n):自定义曲线(可在 Chrome 开发者工具调试)
示例(按钮渐变效果):
.btn {
background: blue;
/* 过渡:背景色(0.3s)+ transform(0.3s,延迟0.1s,匀速) */
transition:
background-color 0.3s ease,
transform 0.3s linear 0.1s;
}
.btn:hover {
background: red;
transform: scale(1.1);
}
简化写法:transition: all 0.3s(所有属性变化都加过渡,适合简单场景)。
2. 动画函数:animation()
- 功能:实现「更复杂的多帧动画」(如循环旋转、闪烁),需配合 @keyframes 定义关键帧。
- 语法:animation(名称 时长 timing-function 延迟 迭代次数 方向 填充模式)
核心参数解析
|
参数 |
说明 |
常用值 |
|
名称 |
对应 @keyframes 的名称 |
自定义(如 spin) |
|
迭代次数 |
动画播放次数 |
infinite(无限次)、3(3 次) |
|
方向 |
动画播放方向 |
normal(正)、reverse(反)、alternate(来回) |
|
填充模式 |
动画结束后元素状态 |
forwards(保持最后一帧)、backwards(初始帧) |
示例(循环旋转动画):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
/* 1. 定义关键帧(从0度转到360度) */
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* 2. 应用动画到元素 */
.loading {
width: 50px;
height: 50px;
border: 5px solid #eee;
border-top-color: blue;
border-radius: 50%;
/* 动画:名称spin + 1s时长 + 匀速 + 无限次 */
animation: spin 1s linear infinite;
}
</style>
<body>
<div class="loading"></div>
</body>
</html>

进阶示例(来回移动动画):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
@keyframes move {
0% {
transform: translateX(0);
}
100% {
transform: translateX(200px);
}
}
.ball {
width: 50px;
height: 50px;
border-radius: 50%;
background: rgb(0, 255, 55);;
/* 动画:来回移动(alternate),保持最后一帧(forwards) */
animation: move 2s ease-in-out infinite alternate forwards;
}
</style>
<body>
<div class="ball"></div>
</body>
</html>

六、滤镜函数:实现图片特效
CSS3 的 filter 属性配合滤镜函数,可实现「图片的模糊、灰度、亮度调整」等特效,无需 PS 处理图片,且支持动态修改。
常用滤镜函数
|
函数 |
功能 |
语法示例 |
效果说明 |
|
blur(px) |
高斯模糊 |
blur(5px) |
值越大越模糊 |
|
brightness(%) |
亮度调整 |
brightness(150%) |
100% 正常,>100% 变亮,<100% 变暗 |
|
contrast(%) |
对比度调整 |
contrast(200%) |
>100% 对比度增强,<100% 降低 |
|
grayscale(%) |
灰度处理 |
grayscale(100%) |
100% 完全灰度,0% 正常 |
|
sepia(%) |
棕褐色(复古) |
sepia(80%) |
值越大棕褐色越重 |
|
hue-rotate(angle) |
色相旋转 |
hue-rotate(90deg) |
整体颜色偏移指定角度 |
|
invert(%) |
颜色反转 |
invert(100%) |
100% 完全反转(类似负片) |
|
opacity(%) |
透明度 |
opacity(50%) |
与 rgba() 类似,但性能略差 |
|
saturate(%) |
饱和度调整 |
saturate(300%) |
>100% 饱和度增强 |
|
drop-shadow(x,y,blur,color) |
阴影 |
drop-shadow(2px 2px 5px #000) |
比 box-shadow 更灵活(支持透明背景) |
示例(图片 hover 特效):
.photo {
transition: filter 0.3s;
}
.photo:hover {
/* hover时:亮度增强+对比度增强+轻微模糊 */
filter: brightness(120%) contrast(110%) blur(1px);
}
/* 示例2:按钮阴影(支持透明背景) */
.btn {
background: rgba(0,0,255,0.5); /* 半透明背景 */
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3)); /* 阴影跟随透明背景 */
/* 对比:box-shadow会显示矩形阴影,无法跟随透明区域 */
}
七、其他实用函数
1. 文本函数:attr() / counter()
- attr():获取元素的 HTML 属性值,常用于 content 伪元素(如显示自定义属性)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.tag::after {
/* 显示data-type属性的值 */
content: "[" attr(data-type) "]";
margin-left: 5px;
color: #999;
}
</style>
<body>
<span class="tag" data-type="hot">推荐</span>
</body>
</html>

- counter() / counters():自定义列表计数(替代默认的 <ol> 编号)。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.list {
counter-reset: item-counter; /* 初始化计数器 */
}
.item::before {
counter-increment: item-counter; /* 每次递增1 */
content: "第" counter(item-counter) "个:"; /* 显示计数 */
color: blue;
}
</style>
<body>
<div class="list">
<div class="item">项目1</div>
<div class="item">项目2</div>
</div>
</body>
</html>

2. 数学函数:abs() / pow() / sqrt() 等
CSS3 新增了基础数学函数,用于精确计算,常配合 calc() 使用:
- abs(n):取绝对值(如 abs(-5) = 5)
- pow(base, exp):幂运算(如 pow(2, 3) = 8)
- sqrt(n):平方根(如 sqrt(16) = 4)
- sin(angle) / cos(angle):正弦 / 余弦(角度需带 deg/rad)
- round(n) / ceil(n) / floor(n):四舍五入 / 向上取整 / 向下取整
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
/* 计算正方形对角线长度(边长*√2) */
.square {
width: 100px;
height: 100px;
border: 1px solid black;
/* 对角线长度 = 100px * sqrt(2) ≈ 141.42px */
transform: translate(calc(100px * sqrt(2)));
}
</style>
<body>
<div class="square"></div>
</body>
</html>

总结:CSS3 函数的核心价值
CSS3 函数的出现,让 CSS 从「静态样式表」升级为「动态计算工具」,其核心价值在于:
- 减少依赖:无需 PS 切图(渐变、图案)、无需 JS 计算(尺寸、定位);
- 提升适配性:通过 calc()/clamp() 等实现响应式,适配多屏幕;
- 增强表现力:3D 变形、滤镜、动画函数,实现更丰富的视觉效果;
- 优化性能:transform/opacity 等函数触发 GPU 加速,避免重排重绘。
建议在开发中优先使用 CSS3 函数替代传统方案,既能提升开发效率,也能让样式更灵活、更易维护。
更多推荐


所有评论(0)