CSS中的transition与渐变

目录

[一、CSS transition](#一、CSS transition)

[1. 核心属性](#1. 核心属性)

简写语法

[2. 子属性详解](#2. 子属性详解)

[2.1 transition-property](#2.1 transition-property)

[2.2 transition-duration](#2.2 transition-duration)

[2.3 transition-timing-function](#2.3 transition-timing-function)

[2.4 transition-delay](#2.4 transition-delay)

[3. 使用场景示例](#3. 使用场景示例)

[3.1 悬停效果(Hover)](#3.1 悬停效果(Hover))

[3.2 展开/收起动画](#3.2 展开/收起动画)

[3.3 动态移动元素](#3.3 动态移动元素)

[4. 注意事项](#4. 注意事项)

[4.1 支持过渡的属性](#4.1 支持过渡的属性)

[4.2 性能优化](#4.2 性能优化)

[4.3 浏览器兼容性](#4.3 浏览器兼容性)

[5. 高级技巧](#5. 高级技巧)

[5.1 多属性独立配置](#5.1 多属性独立配置)

[5.2 与 JavaScript 结合](#5.2 与 JavaScript 结合)

[5.3 检测过渡结束事件](#5.3 检测过渡结束事件)

[二、CSS 渐变](#二、CSS 渐变)

一、线性渐变(linear-gradient)

[1. 基本语法](#1. 基本语法)

[2. 参数说明](#2. 参数说明)

[3. 示例](#3. 示例)

二、径向渐变(radial-gradient)

[1. 基本语法](#1. 基本语法)

[2. 参数说明](#2. 参数说明)

[3. 示例](#3. 示例)

三、圆锥渐变(conic-gradient)

[1. 基本语法](#1. 基本语法)

[2. 参数说明](#2. 参数说明)

[3. 示例](#3. 示例)

四、重复渐变(repeating-*-gradient)

[1. 类型](#1. 类型)

[2. 关键点](#2. 关键点)

五、高级技巧与应用场景

[1. 透明渐变](#1. 透明渐变)

[2. 多背景叠加](#2. 多背景叠加)

[3. 实用场景](#3. 实用场景)

4.总结

示例:


一、CSS transition

transition 用于在 CSS 属性值变化时 添加平滑的过渡动画效果。它通过定义状态变化的中间过程,让元素的变化更自然。


1. 核心属性

transition 包含以下四个子属性,可按顺序简写:

属性 作用 示例值
transition-property 指定应用过渡的 CSS 属性名称 width, all
transition-duration 定义过渡动画的持续时间 2s(2秒)
transition-timing-function 控制动画的速度曲线(如匀速、加速等) ease, cubic-bezier()
transition-delay 设置动画开始前的延迟时间 0.5s(0.5秒)
简写语法

示例:

css 复制代码
.box {
  transition: width 0.3s ease-in-out 0.1s;
}

2. 子属性详解

2.1 transition-property
  • 作用:明确哪些 CSS 属性需要过渡效果。

    • 单个属性:width, opacity, transform 等。

    • 多个属性:逗号分隔,如 width, height

    • 所有属性:all(慎用,可能影响性能)。

css 复制代码
.box {
  transition-property: width, background-color;
}
2.2 transition-duration
  • 作用:定义过渡动画的持续时间。

  • 单位 :秒(s)或毫秒(ms),如 0.5s500ms

  • 必填项:如果省略,过渡不会生效。

css 复制代码
.box {
  transition-duration: 0.3s;
}
2.3 transition-timing-function
  • 作用 :控制动画的 速度变化曲线

  • 常用值

    • ease(默认):慢速开始,中间加速,结尾减速。

    • linear:匀速动画。

    • ease-in:缓慢开始,逐渐加速。

    • ease-out:快速开始,逐渐减速。

    • ease-in-out:慢速开始和结束,中间加速。

    • cubic-bezier(n,n,n,n):自定义贝塞尔曲线(如 cubic-bezier(0.25, 0.1, 0.25, 1))。

css 复制代码
.box {
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
2.4 transition-delay
  • 作用:设置动画触发后的延迟时间。

  • 单位 :秒(s)或毫秒(ms)。

css 复制代码
.box {
  transition-delay: 0.2s; /* 等待 0.2 秒后开始动画 */
}

3. 使用场景示例

3.1 悬停效果(Hover)
css 复制代码
.button {
  background-color: blue;
  transition: background-color 0.3s ease;
}

.button:hover {
  background-color: red;
}
  • 鼠标悬停时,按钮背景色在 0.3 秒内从蓝色平滑过渡到红色。
3.2 展开/收起动画
css 复制代码
.panel {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.5s ease-out;
}

.panel.active {
  max-height: 500px;
}
  • 通过切换类名 .active,元素高度在 0.5 秒内展开或收起。
3.3 动态移动元素
css 复制代码
.box {
  transform: translateX(0);
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.box.move {
  transform: translateX(100px);
}
  • 元素在 0.4 秒内向右移动 100px,使用自定义速度曲线。

4. 注意事项

4.1 支持过渡的属性
  • 数值型属性width, height, opacity, color, transform 等。

  • 不支持过渡的情况

    • display: nonedisplay: block(无法过渡,需改用 visibilityopacity)。

    • 属性值从无单位到有单位(如 height: 0height: auto)。

4.2 性能优化
  • 优先使用 GPU 加速属性 :如 transformopacity,减少重排(Reflow)。

  • 避免频繁触发过渡:如大量元素同时动画可能影响性能。

4.3 浏览器兼容性
  • 现代浏览器均支持 transition,但旧版本可能需要前缀(如 -webkit-transition)。

5. 高级技巧

5.1 多属性独立配置
css 复制代码
.box {
  transition: 
    width 0.3s ease,
    height 0.5s linear 0.2s;
}
  • width 过渡:0.3 秒,缓动函数为 ease

  • height 过渡:0.5 秒,匀速,延迟 0.2 秒。

5.2 与 JavaScript 结合

通过动态修改类名或样式触发过渡:

css 复制代码
element.classList.add('active'); // 触发过渡
5.3 检测过渡结束事件
css 复制代码
element.addEventListener('transitionend', () => {
  console.log('过渡结束!');
});

二、CSS 渐变

CSS 渐变允许创建平滑的颜色过渡效果,替代静态图像,提升性能与灵活性。主要类型包括 线性渐变径向渐变圆锥渐变重复渐变。以下是详细解析:


一、线性渐变(linear-gradient

作用:沿一条直线方向生成颜色过渡。

1. 基本语法
css 复制代码
background: linear-gradient(
    [方向或角度],
    颜色断点1, 
    颜色断点2,
    ...
);
2. 参数说明
  • 方向或角度

    • 关键词to right(向右)、to bottom left(向右下)、to 45deg(45度方向)。

    • 角度0deg(向上)到 360deg,顺时针计算。

  • 颜色断点

    • 颜色 位置,如 #ff0000 20%

    • 位置可省略,浏览器自动均分。

3. 示例
css 复制代码
/* 水平红到蓝渐变 */
.box {
  background: linear-gradient(
    to right, 
    red, 
    blue
  ); 
}

/* 对角三色渐变 */
.box2 {
  background: linear-gradient(
    45deg, 
    red 0%, 
    yellow 50%, 
    green 100%
  ); 
}

效果

  • .box:从左到右由红渐变为蓝。

  • .box2:从45度方向,红→黄(50%处)→绿。


二、径向渐变(radial-gradient

作用:从中心点向外辐射生成颜色过渡。

1. 基本语法
css 复制代码
background: radial-gradient(
    [形状 大小 at 位置], 
    颜色断点1, 
    颜色断点2, 
    ...
);
2. 参数说明
  • 形状

    • circle(圆形)或 ellipse(椭圆,默认)。
  • 大小

    • closest-sidefarthest-corner(默认)、具体尺寸(如 200px 100px)。
  • 位置

    • at center(默认中心)、at top right(右上角)。
  • 颜色断点:同线性渐变。

3. 示例
css 复制代码
/* 中心红到蓝圆形渐变 */
.box {
  background: radial-gradient(
    circle at center, 
    red, 
    blue
  );
}

.box2 {
  background: radial-gradient(
    ellipse farthest-corner at 20% 80%, 
    red, 
    yellow 50%, 
    green
  );
}

效果

  • .box:中心红向外扩散到蓝。

  • .box2:椭圆渐变,中心点位于20% 80%,红→黄(50%处)→绿,扩散至最远角落。


三、圆锥渐变(conic-gradient

作用:围绕中心点旋转生成颜色过渡,适合创建色轮或饼图。

1. 基本语法
css 复制代码
background: conic-gradient(
    [from 角度] 
    [at 位置], 
    颜色断点1, 
    颜色断点2, 
    ...
);
2. 参数说明
  • 起始角度from 45deg(默认0deg,即12点钟方向)。

  • 位置at center(默认)。

  • 颜色断点 :颜色可指定角度位置,如 yellow 25%

3. 示例
css 复制代码
/* 色轮渐变 */
.box {
  background: conic-gradient(
    red, 
    yellow, 
    green, 
    blue, 
    red
  ); 
}

.box2 {
  background: conic-gradient(
    from 90deg at 30% 50%, 
    red 0deg 90deg, 
    yellow 90deg 180deg, 
    green 180deg
  );
}

效果

  • .box:顺时针红→黄→绿→蓝→红循环。

  • .box2:从90度(3点钟方向)开始,红占90度,黄占90度,绿占剩余角度,中心点位于30% 50%。


四、重复渐变(repeating-*-gradient

作用:重复基础渐变图案,填充元素背景。

1. 类型
  • repeating-linear-gradient

  • repeating-radial-gradient

  • repeating-conic-gradient

2. 关键点
  • 颜色断点需定义长度/百分比范围,才能触发重复。

  • 示例

    css 复制代码
    /* 重复红→蓝→红的水平条纹 */
    .box {
      background: repeating-linear-gradient(
        45deg, 
        red 0 10%, 
        blue 10% 20%, 
        red 20% 30%
      );
    }

效果:45度方向,每30%重复一次红→蓝→红条纹。


五、高级技巧与应用场景

1. 透明渐变
css 复制代码
/* 半透明渐变 */
.box {
  background: linear-gradient(
    to right, 
    rgba(255,0,0,0.5), 
    rgba(0,0,255,0.5)
  ); 
}
2. 多背景叠加
css 复制代码
.box {
  background: 
    linear-gradient(
        to bottom, 
        rgba(0,0,0,0.5), 
        transparent
        ),
    url("image.jpg"); /* 叠加渐变与图片 */
}
3. 实用场景
  • 按钮背景:线性渐变提升立体感。

  • 进度条:重复线性渐变模拟条纹进度。

  • 色轮/饼图:圆锥渐变直接绘制。

  • 阴影/高光:径向渐变模拟光照效果。

4.总结
  • 线性渐变:适用于水平/垂直/对角线颜色过渡。

  • 径向渐变:适合圆形/椭圆发光、光斑效果。

  • 圆锥渐变:专为色轮、角度指示设计。

  • 重复渐变:创建条纹、网格等重复图案。

  • 组合使用:可叠加多渐变或与图片混合,实现复杂视觉效果。


示例:

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <link rel="stylesheet" href="./iconfont/iconfont.css">
    <style>

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .box {
            position: relative;
            width: 300px;
            height: 212px;
            margin: 100px auto;
        }

        .box img {
            width: 300px;
        }
        
        .box .cover {
            position: absolute;
            bottom: 0;

            width: 100%;
            height: 100%;

            background-image: linear-gradient(
                transparent,
                rgba(0,0,0,0.5)
            );
            opacity: 0;
        }

        .box .cover:hover {
            opacity: 1;
        }

        .text {
            width: 130px;
            margin: 150px auto;
            color: #ffffff;
        }

    </style>
</head>
<body>
    
    <div class="box">
        <img src="./res/product.jpg" alt="">
        <div class="cover">
            <div class="text">
                <p>处理特殊场景需求</p>
                <p>动态适配设备环境</p>
            </div>
        </div>
    </div>

</body>
</html>

相关推荐
跟着汪老师学编程2 分钟前
24、web前端开发之CSS3(一)
前端·css·css3
beibeibeiooo8 分钟前
【CSS3】01-初始CSS + 引入 + 选择器 + div盒子 + 字体修饰
前端·css·css3
孤╮独的美15 分钟前
CSS3:深度解析与实战应用
前端·css·css3
一城烟雨_24 分钟前
Vue3 实现pdf预览
前端·vue.js·pdf
易xingxing28 分钟前
探索HTML5 Canvas:创造动态与交互性网页内容的强大工具
前端·html·html5
好_快37 分钟前
Lodash源码阅读-arrayPush
前端·javascript·源码阅读
好_快39 分钟前
Lodash源码阅读-equalByTag
前端·javascript·源码阅读
大土豆的bug记录6 小时前
鸿蒙进行视频上传,使用 request.uploadFile方法
开发语言·前端·华为·arkts·鸿蒙·arkui
maybe02096 小时前
前端表格数据导出Excel文件方法,列自适应宽度、增加合计、自定义文件名称
前端·javascript·excel·js·大前端
HBR666_6 小时前
菜单(路由)权限&按钮权限&路由进度条
前端·vue