canvas之ctx.fillStyle

ctx.fillStyle 是 Canvas 2D 上下文的核心属性,作用是 设置后续「填充类绘制操作」的颜色 / 渐变 / 图案—— 简单说,就是定义 “用什么东西填充图形、文字、路径” 的样式。
结合我们的海报代码场景,它的用法和细节如下:
一、核心作用:定义 “填充内容” 的样式
Canvas 中的绘制分为两类:
填充(fill):给图形、文字、路径的 “内部区域” 上色(比如实心矩形、文字本身的颜色);
描边(stroke):给图形、路径的 “边框” 上色(比如我们之前标签的红色边框,用的是 ctx.strokeStyle)。
ctx.fillStyle 专门控制「填充」的样式,后续所有调用 ctx.fill()(填充路径)、ctx.fillRect()(填充矩形)、ctx.fillText()(填充文字)的操作,都会使用当前设置的 fillStyle。
二、常见用法(结合海报代码)

  1. 纯色填充(最常用)
    直接设置为颜色值(支持十六进制、RGB、RGBA、颜色名),是我们海报中用得最多的方式:
    javascript
    运行
    // 1. 十六进制颜色(推荐,精准)
    ctx.fillStyle = '#D2691E'; // 主标题栏的橙色
    ctx.fillRect(0, 120 * scale, 375 * scale, 60 * scale); // 填充矩形

// 2. RGB/RGBA(支持透明度)
ctx.fillStyle = 'rgba(255, 0, 0, 0.8)'; // 80%透明度的红色(价格区域可用)
ctx.fillText('¥39.90', 20 * scale, 520 * scale); // 填充文字

// 3. 颜色名(不推荐,兼容性略差)
ctx.fillStyle = 'white'; // 白色,比如标签内的文字

  1. 渐变填充(进阶用法)
    可以创建线性渐变或径向渐变,让填充效果更丰富(比如海报标题栏渐变):
    javascript
    运行
    // 线性渐变:从橙色到深橙色(主标题栏优化)
    const gradient = ctx.createLinearGradient(
    0, 120 * scale, // 渐变起始点(左上角)
    375 * scale, 120 * scale // 渐变结束点(右上角)
    );
    gradient.addColorStop(0, '#D2691E'); // 起始颜色
    gradient.addColorStop(1, '#A0522D'); // 结束颜色
    ctx.fillStyle = gradient;
    ctx.fillRect(0, 120 * scale, 375 * scale, 60 * scale); // 填充渐变矩形
  2. 图片图案填充(高级用法)
    用图片作为填充图案(比如给背景添加纹理):
    javascript
    运行
    const patternImg = canvas.createImage();
    patternImg.src = 'https://example.com/texture.png'; // 纹理图片
    patternImg.onload = () => {
    const pattern = ctx.createPattern(patternImg, 'repeat'); // repeat:重复填充
    ctx.fillStyle = pattern;
    ctx.fillRect(0, 0, 375 * scale, 667 * scale); // 用纹理填充整个背景
    };
    三、关键细节(避坑重点)
  3. 「状态化」属性:设置后持续生效
    ctx.fillStyle 是 “全局状态”,一旦设置,后续所有填充操作都会沿用,直到再次修改:
    javascript
    运行
    ctx.fillStyle = 'red';
    ctx.fillText('文字1', 20, 50); // 红色文字
    ctx.fillRect(20, 80, 100, 50); // 红色矩形(沿用 red)

ctx.fillStyle = 'blue'; // 重新设置
ctx.fillText('文字2', 20, 150); // 蓝色文字(新样式)

  1. 与 ctx.save()/ctx.restore() 配合
    如果只想让某个元素用特定 fillStyle,之后恢复原来的样式,可以用状态保存 / 恢复:
    javascript
    运行
    ctx.fillStyle = 'black'; // 默认文字颜色
    ctx.save(); // 保存当前状态(包括 fillStyle: black)

// 临时设置为红色,绘制单个元素
ctx.fillStyle = 'red';
ctx.fillText('特殊红色文字', 20, 100);

ctx.restore(); // 恢复之前的状态(fillStyle 变回 black)
ctx.fillText('普通黑色文字', 20, 130); // 回到默认颜色

  1. 透明度优先级
    如果用 rgba 或 globalAlpha(全局透明度),优先级是:globalAlpha 会作用于所有样式(包括 fillStyle):
    javascript
    运行
    ctx.globalAlpha = 0.5; // 全局透明度 50%
    ctx.fillStyle = 'red'; // 红色 + 50% 透明 → 最终是半透明红色
    ctx.fillRect(20, 20, 100, 50);
    四、我们的海报代码中,ctx.fillStyle 的典型应用
    海报元素 fillStyle 用法 目的
    背景 #FFF(白色) 白色底色,干净清晰
    小程序名称 #2E8B57(深绿色) 品牌色识别
    主标题栏 #D2691E(橙色) 突出重点,吸引注意力
    价格 #FF0000(红色) 强调价格,刺激购买
    商品名称 #000(黑色) 文字清晰可读
    横线 #D2691E(橙色) 与主标题栏呼应,风格统一
    总结
    ctx.fillStyle 是 Canvas 填充样式的 “总开关”,核心用法是:
    用纯色(十六进制 / RGB)定义大多数元素的填充颜色(满足海报 90% 需求);
    进阶用渐变 / 图片让特定元素更有设计感;
    注意 “设置后持续生效” 的特性,必要时用 save()/restore() 隔离样式。
    如果想调整海报中某个元素的颜色,直接修改对应位置的 ctx.fillStyle 即可~
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容