在之前的篇章中,我们介绍过

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% 位置结束。

示例(常见场景):

<!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 从「静态样式表」升级为「动态计算工具」,其核心价值在于:​

  1. 减少依赖:无需 PS 切图(渐变、图案)、无需 JS 计算(尺寸、定位);​
  2. 提升适配性:通过 calc()/clamp() 等实现响应式,适配多屏幕;​
  3. 增强表现力:3D 变形、滤镜、动画函数,实现更丰富的视觉效果;​
  4. 优化性能:transform/opacity 等函数触发 GPU 加速,避免重排重绘。​

建议在开发中优先使用 CSS3 函数替代传统方案,既能提升开发效率,也能让样式更灵活、更易维护。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐