涅槃快乐

热爱生活,追求技术

上海, 中国
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

公告

欢迎交流与分享经验!

分类

  • AI1
  • Chrome1
  • Flutter1
  • Linux1
  • TypeScript2
  • android7
    • 资讯1
  • chrome1
  • git35
  • javascript1
  • linux26
  • mac19
  • node1
  • react-native51
  • webpack26
  • 其他31
  • 前端660
  • 区块链9
  • 开发工具6
  • 算法学习26
  • 设计模式(TypeScript)26
  • 读书笔记18
  • 资讯222

标签

  • AI18
  • CSS41
  • Chrome7
  • CommonJS1
  • ESLint1
  • JavaScript72
  • Linux2
  • Node15
  • React23
  • React Native3
  • SSR1
  • TypeScript23
  • VUE1
  • Vue9
  • Web Components1
  • Web components1
  • chrome1
  • git1
  • hexo2
  • news1
  • node19
  • react37
  • react-native3
  • web28
  • 小程序2
  • 质量监控1
  • 面试1

标签云

AI CSS Chrome CommonJS ESLint JavaScript Linux Node React React Native SSR TypeScript VUE Vue Web Components Web components chrome git hexo news node react react-native web 小程序 质量监控 面试

归档

  • 十月 202425
  • 九月 202429
  • 八月 202418
  • 七月 20244
  • 六月 202420
  • 五月 202426
  • 四月 202428
  • 三月 202430
  • 二月 202424
  • 一月 202426
  • 十二月 202328
  • 十一月 202331
  • 十月 202321
  • 九月 20231
  • 七月 20231
  • 六月 202315
  • 五月 202322
  • 四月 202315
  • 三月 20239
  • 二月 202326
  • 一月 202315
  • 十二月 202222
  • 十一月 202226
  • 十月 202227
  • 九月 202222
  • 八月 202232
  • 七月 202227
  • 六月 202227
  • 五月 202220
  • 四月 202228
  • 三月 202227
  • 二月 202224
  • 一月 202228
  • 十二月 202124
  • 十一月 202129
  • 十月 202122
  • 九月 202142
  • 七月 20211
  • 六月 202198
  • 五月 20211
  • 四月 202129
  • 三月 2021176
  • 二月 20213

最新文章

  • 前端

    BUG无处不在

    2024-10-27

  • 前端

    Safari无痕模式取不到url中的参数?

    2024-10-26

  • react-native

    React Native 0.76 - 默认启用新架构,React Native DevTools等新功能

    2024-10-25

  • 前端

    ESLint 支持对 JSON 和 Markdown 的代码检查

    2024-10-24

  • 前端

    Node.js 23发布

    2024-10-23

【转】twitter 换新 logo 了,用 CSS 渐变来画一个吧

2023-11-21 前端 CSS 字数统计: 888(字) 阅读时长: 3(分)

不聊其他的,看看如何用 CSS 渐变来绘制这样一个图形

一、 x 的绘制

整个 logo 是一个镂空的“x”形状,先不考虑镂空部分,如何绘制实心的“x”呢

渐变有 3 种,线性渐变、径向渐变和锥形渐变。很显然,x 可以看成是两端倾斜的线段,用线性渐变就足够了。

假设 HTML 结构是这样,一个x元素

1
<x></x>

用字号来控制尺寸大小

1
2
3
4
5
6
x{
display: inline-block;
font-size: 200px;
width: 1em;
height: 1em;
}

然后通过线性渐变绘制一条斜线,其实就是透明→纯色→透明的渐变,注意这里的角度关系,示意如下

用代码实现就是

1
2
3
4
x{
/**/
background: linear-gradient(-52deg, #0000 50%, currentColor 0 55%,#0000 0);
}

可以得到一条倾斜的线段

用同样的方式绘制另一个方向上的

1
2
3
4
5
x{
/**/
background: linear-gradient(-52deg, #0000 50%, currentColor 0 55%,#0000 0),
linear-gradient(52deg, #0000 44%, currentColor 0 56%,#0000;
}

这样就得到一个“x”

二、镂空的实现

提到镂空,你应该想到 CSS mask。

遮罩的原理很简单,在遮罩图像下,只显示不透明的部分,透明的部分会被裁剪,半透明以此类推,示意如下

关于遮罩,这个技巧非常实用,之前在多篇文章中都有用到,有兴趣的可以回顾一下

  • 一个有意思的CSS图片hover效果
  • CSS 如何实现羽化效果?
  • 别用图片了,CSS 遮罩合成实现带圆角的环形 loading 动画
  • CSS mask 实现鼠标跟随镂空效果
  • CSS 实现Chrome标签栏的技巧
  • CSS 实现优惠券的技巧

在这里,由于只需要挖空一小部分,所以这部分是透明的,而其他部分都是不透明的,示意如下

那么问题来了,如何绘制这样一个遮罩图呢?

这种情况下,应该反过来思考,里面的斜线和前面的线性渐变基本一致,只是这部分现在是镂空的。因此,这里需要用到遮罩合成:mask-composite,和设计软件中的图形运算非常相似。

所以,上面的遮罩图形可以拆分为以下两个部分

用代码实现就是

1
2
3
4
5
6
x{
/**/
-webkit-mask: linear-gradient(red 0 0),
linear-gradient(52deg, #0000 48%, red 0 52%,#0000 0) 0/100% 90% no-repeat;
-webkit-mask-composite: xor;
}

这样就实现了twitter的新logo

[图片上传失败…(image-fb5cd2-1700490360197)]

由于背景色是跟随文字颜色的,所以更换 logo 颜色也非常方便

1
2
3
x{
color: royalblue
}

效果如下

完整代码如下(不到10行)

1
2
3
4
5
6
7
8
9
10
11
12
x{
display: inline-block;
font-size: 200px;
width: 1em;
height: 1em;
background:
linear-gradient(52deg, #0000 44%, currentColor 0 56%,#0000 0),
linear-gradient(-52deg, #0000 50%, currentColor 0 55%,#0000 0);
-webkit-mask: linear-gradient(red 0 0),
linear-gradient(52deg, #0000 48%, red 0 52%,#0000 0) 0/100% 90% no-repeat;
-webkit-mask-composite: xor;
}

你也可以访问以下在线链接:

  • CSS twitter (codepen.io)‘)点击预览

三、总结一下

非常简单、非常轻松的一篇分享,相信可以给大家带来一些启发,下面总结一下绘制要点:

  1. 复杂的图像先拆解,先实现简单的部分
  2. x 可以看成是两端倾斜的线段,用线性渐变绘制即可
  3. 看到镂空,应该想到 CSS 中的遮罩
  4. 有些反向遮罩不好实现,可以考虑用遮罩合成,和设计中的图形运算非常相似
  5. CSS实现的好处是可以随意更换颜色
  • 本文链接: https://www.nirvana.net.cn/2023/1121vDdR4s2L66.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

涅槃快乐热爱生活,追求技术

个人简介。
  •   上一篇
  • 下一篇  
沪ICP备2021033284号

沪公网安备 31010602006568号