标梵分享利用背景创造各种精彩的背景-程序员宅基地

技术标签: css  background  

 

         

将介绍一些利用 CSS 中的 backgroundmix-blend-modemask 及一些相关属性,制作一些稍微复杂、酷炫的背景。

通过本文,你将会了解到 CSS background 中更为强大的一些用法,并且学会利用 background 相关的一些属性,采用不同的方式,去创造更复杂的背景图案。在这个过程中,你会更好的掌握不同的渐变技巧,更深层次的理解各种不同的渐变。

同时,借助强大的 CSS-Doodle,你将学会如何运用一套规则,快速创建大量不同的随机图案,感受 CSS 的强大,走进 CSS 的美。

背景基础知识

我们都知道,CSS 中的 background 是非常强大的。

首先,复习一下基础,在日常中,我们使用最多的应该就是下面 4 种:

  • 纯色背景 background: #000

图片

  • 线性渐变 background: linear-gradient(#fff, #000) :

图片

  • 径向渐变 background: radial-gradient(#fff, #000) :

图片

  • 角向渐变 background: conic-gradient(#fff, #000) :

图片

背景进阶

当然。掌握了基本的渐变之后,我们开始向更复杂的背景图案进发。我最早是在《CSS Secret》一书中接触学习到使用渐变去实现各种背景图案的。然后就是不断的摸索尝试,总结出了一些经验。

在尝试使用渐变去制作更复杂的背景之前,列出一些比较重要的技巧点:

  • 渐变不仅仅只能是单个的 linear-gradient 或者单个的 radial-gradient,对于 background 而言,它是支持多重渐变的叠加的,一点非常重要;

  • 灵活使用 repeating-linear-gradeintrepeating-radial-gradeint),它能减少很多代码量

  • transparent 透明无处不在

  • 尝试 mix-blend-mode 与 mask,创建复杂图案的灵魂

  • 使用随机变量,它能让一个 idea 变成无数美丽的图案

接下来,开始组合之旅。

使用 mix-blend-mode

mix-blend-mode ,混合模式。最常见于 photoshop 中,是 PS 中十分强大的功能之一。在 CSS 中,我们可以利用混合模式将多个图层混合得到一个新的效果。

关于混合模式的一些基础用法,你可以参考我的这几篇文章:

  • 不可思议的颜色混合模式 mix-blend-mode [3]

  • 不可思议的混合模式 background-blend-mode[4]

然后,我们来尝试第一个图案,先简单体会一下 mix-blend-mode 的作用。

我们使用 repeating-linear-gradient 重复线性渐变,制作两个角度相反的背景条纹图。正常而言,不使用混合模式,将两个图案叠加在一起,看看会发生什么。

图片

额,会发生什么就有鬼了:sweat_smile: 。显而易见,由于图案不是透明的,叠加在一起之后,由于层叠的关系,只能看到其中一张图。

好,在这个基础上,我们给最上层的图案,添加 mix-blend-mode: multiply,再来一次,看看这次会发生什么。

可以看到,添加了混合模式之后,两张背景图通过某种算法叠加在了一起,展现出了非常漂亮的图案效果,也正是我们想要的效果。

CodePen Demo - Repeating-linear-gradient background & mix-blend-mode[5]

尝试不同的 mix-blend-mode

那为什么上面使用的是 mix-blend-mode: multiply 呢?用其他混合模式可以不可以?

当然可以。这里仅仅只是一个示例,mix-blend-mode: multiply 在 PS 中意为正片叠底,属于图层混合模式的变暗模式组之一。

我们使用上面的 DEMO,尝试其他的混合模式,可以得到不同的效果。

可以看到,不同的混合模式的叠加,效果相差非常之大。当然,运用不同的混合模式,我们也就可以创造出效果各异的图案。

CodePen Demo - Repeating-linear-gradient background & mix-blend-mode[6]

借助 CSS-Doodle 随机生成图案

到这,就不得不引出一个写 CSS 的神器 -- CSS-Doodle[7],我在其他非常多文章中也多次提到过 CSS-doodle,简单而言,它是一个基于 Web-Component 的库。允许我们快速的创建基于 CSS Grid 布局的页面,并且提供各种便捷的指令及函数(随机、循环等等),让我们能通过一套规则,得到不同 CSS 效果。

还是以上面的 DEMO 作为示例,我们将 repeating-linear-gradient 生成的重复条纹背景的颜色、粗细、角度随机化、采用的混合模式也是随机选取,然后利用 CSS-Doodle,快速随机的创建各种基于此规则的图案:

图片

可以点进去尝试一下,点击鼠标即可随机生成不同的效果:

CodePen Demo -- CSS Doodle - CSS MIX-BLEND-MODE Background [8]

尝试使用径向渐变

当然,上面使用的是线性渐变,同样,我们也可以使用径向渐变运用同样的套路。

我们可以使用径向渐变,生成多重的径向渐变。像是这样:

图片

给图片应用上 background-size,它就会像是这样:

图片

像上文一样,我们稍微对这个图形变形一下,然后叠加两个图层,给最上层的图形,添加 CSS 样式 mix-blend-mode: darken

图片

CodePen Demo -- radial-gradient & mix-blend-mode Demo[9]

借助 CSS-Doodle 随机生成图案

再来一次,我们使用 CSS-Doodle,运用上述的规则在径向渐变,也可以得到一系列有意思的背景图。

图片

可以点进去尝试一下,点击鼠标即可随机生成不同的效果:

CodePen Demo -- CSS Doodle - CSS MIX-BLEND-MODE Background 2 [10]

当然,上述的叠加都是非常简单的图案的叠加,但是掌握了这个原理之后,就可以自己尝试,去创造更复杂的融合。:dog:

上述的叠加效果是基于大片大片的实色的叠加,当然 mix-blend-mode 还能和真正的渐变碰撞出更多的火花。

在不同的渐变背景中运用混合模式

在不同的渐变背景中运用混合模式?那会产生什么样美妙的效果呢?

运用得当,它可能会像是这样:

图片

umm,与上面的条纹图案完全不一样的风格。

你可以戳进 gradienta.io[11] 来看看,这里全是使用 CSS 创建的渐变叠加的背景图案库。

使用混合模式叠加不同的渐变图案

下面,我们也来实现一个。

首先,我们使用线性渐变或者径向渐变,随意创建几个渐变图案,如下所示:

图片

接着,我们两两之间,从第二层开始,使用一个混合模式进行叠加,一共需要设定 5 个混合模式,这里我使用了 overlaymultiplydifferencedifference,  overlay。看看叠加之后的效果,非常的 Nice:

图片

CodePen Demo -- Graideint background mix[12]

由于上面动图 GIF 的压缩率非常高,所以看上去锯齿很明显图像很模糊,你可以点进上面的链接看看。

然后,我们可以再给叠加后的图像再加上一个 filter: hue-rotate(),让他动起来,放大一点点看看效果,绚丽夺目的光影效果:

图片

CodePen Demo -- Graideint background mix 2[13]

借助 CSS-Doodle 随机生成图案

噔噔噔,没错,这里我们又可以继续把 CSS-Doodle 搬出来了。

随机的渐变,随机的混合模式,叠加在一起,燥起来吧。

使用 CSS-Doodle 随机创建不同的渐变,在随机使用不同的混合模式,让他们叠加在一起,看看效果:

图片

当然,由于是完全随机生成的效果,所以部分时候生成出来的不算太好看或者直接是纯色的。不过大部分还是挺不错的 :joy:

CodePen Demo -- CSS Doodle Mix Gradient[14]


感谢坚持,看到这里。上述上半部分主要使用的混合模式,接下来,下半部分,将主要使用 mask,精彩继续。


使用 mask

除去混合模式,与背景相关的,还有一个非常有意思的属性 -- MASK

mask[15] 译为遮罩。在 CSS 中,mask 属性允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域

对 mask 的一些基础用法还不太熟悉的,可以先看看我的这篇文章 -- 奇妙的 CSS MASK[16]。

简单而言,mask 可以让图片我们可以灵活的控制图片,设定一部分展示出来,另外剩余部分的隐藏。

使用 mask 对图案进行切割

举个例子。假设我们使用 repeating-linear-gradient 渐变制作这样一个渐变图案:

图片

它的 CSS 代码大概是这样:

:root {
    $colorMain: #673ab7;
}
{
    background: 
        repeating-linear-gradient(0, $colorSub 0, $colorSub 3px, transparent 3px, transparent 10px),
        repeating-linear-gradient(60deg, $colorSub 0, $colorSub 3px, transparent 3px, transparent 10px),
        repeating-linear-gradient(-60deg, $colorSub 0, $colorSub 3px, transparent 3px, transparent 10px);
}

如果我们给这个图案,叠加一个这样的 mask :

{
    mask: conic-gradient(from -135deg, transparent 50%, #000);
}

上述 mask 如果是使用 background 表示的话,是这样 background: conic-gradient(from -135deg, transparent 50%, #000), 图案是这样:

图片

两者叠加在一起,按照 mask 的作用,背景与 mask 生成的渐变的 transparent 的重叠部分,将会变得透明。将会得到这样一种效果:

图片

CodePen Demo -- mask & background Demo [17]

我们就完成了 background 与 mask 的结合。运用 mask 切割 background 的效果,我们就能制作出非常多有意思的背景图案:

图片

CodePen Demo -- mask & background Demo [18]

mask-composite OR -webkit-mask-composite

接下来,在运用 mask 切割图片的同时,我们会再运用到 -webkit-mask-composite 属性。这个是非常有意思的元素,非常类似于 mix-blend-mode / background-blend-mode

-webkit-mask-composite[19]: 属性指定了将应用于同一元素的多个蒙版图像相互合成的方式。

通俗点来说,他的作用就是,当一个元素存在多重 mask 时,我们就可以运用 -webkit-mask-composite 进行效果叠加。

注意,这里的一个前提,就是当 mask 是多重 mask 的时候(类似于 background,mask 也是可以存着多重 mask),-webkit-mask-composite 才会生效。这也就元素的 mask 可以指定多个,逗号分隔。

假设我们有这样一张背景图:

:root {
    $colorMain: #673ab7;
    $colorSub: #00bcd4;
}
div {
    background: linear-gradient(-60deg, $colorMain, $colorSub);
}

图片

我们的 mask 如下:

{
    mask: 
            repeating-linear-gradient(30deg, #000 0, #000 10px, transparent 10px, transparent 45px),
            repeating-linear-gradient(60deg, #000 0, #000 10px, transparent 10px, transparent 45px),
            repeating-linear-gradient(90deg, #000 0, #000 10px, transparent 10px, transparent 45px);
}

mask 表述成 background 的话大概是这样:

图片

如果,不添加任何 -webkit-mask-composite,叠加融合之后的效果是这样:

图片

如果添加一个 -webkit-mask-composite: xor,则会变成这样:

图片

可以看到,线条的交汇叠加处,有了不一样的效果。

CodePen Demo -- background & -webkit-mask-composite[20]

借助 CSS-Doodle 随机生成图案

了解了基本原理之后,上 CSS-Doodle,我们利用多重 mask 和 -webkit-mask-composite,便可以创造出各式各样的美妙背景图案:

 

是不是很类似万花筒?

借助了 CSS-Doodle,我们只设定大致的规则,辅以随机的参数,随机的大小。接着就是一幅幅美妙的背景图应运而生。

下面是运用上述规则的尝试的一些图案:

图片

CodePen Demo -- CSS Doodle - CSS MASK Background[21]

当然,可以尝试变换外形,譬如让它长得像个手机壳。

下面两个 DEMO 也是综合运用了上述的一些技巧的示例,仿佛一个个手机壳的图案。

图片

CodePen Demo -- CSS Doodle - CSS MASK Background 2[22]

图片

CodePen Demo -- CSS Doodle - CSS MASK Background 3[23]

总结一下

背景 background 不仅仅只是纯色、线性渐变、径向渐变、角向渐变。混合模式、滤镜、遮罩也并不孤独。

当 background 配合混合模式 mix-blend-modebackground-blend-mode、滤镜 filter、以及遮罩 mask 的时候,它们就可以组合变幻出各种不同的效果。

到目前为止,CSS 已经越来越强大,它不仅仅可以用于写业务,也可以创造很多有美感的事物,只要我们愿意去多加尝试,便可以创造出美妙的图案。

最后

好了,本文到此结束,看到这里,你是不是也跃跃欲试?想自己亲手尝试一下?

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS[24] ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

本文来源:iCSS前端趣闻 微信公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42317619/article/details/113885974

智能推荐

Android Studio 检查并删除无用资源文件_android 如何找出无用资源-程序员宅基地

文章浏览阅读6.8k次。背景有时项目中有很多的无用资源,包括xml文件、strings、colors文件中多余的定义等等,一个个删除,效率太低。解决方案在Android Studio中选择菜单“Analyze” --> “Run inspaction by Name …”。在弹出的搜索窗口中输入想执行的检查类型,如“Unused Resources”。在搜索结果界面,右键点击“Unused resourc..._android 如何找出无用资源

如何查看Chrome浏览器曾经使用过的账号和密码?查看方法分享_x用户名用谷歌账号能查到吗-程序员宅基地

文章浏览阅读4.2k次。chrome浏览器是一款非常好用的搜索服务浏览器,这款软件使用起来超级的方便,不仅方便用户搜索,还有各种插件可以使用,操作起来超级的方便,可以随时满足用户的各种使用需求,让用户更加便捷的享受搜索服务,有很多用户在使用的时候会忘记自己的密码,今天小编就会大家一起来分享一个可以查看之前使用过的账号和密码的方法,这样使用起来就会更加的方便,如果忘记密码也可以使用手机一键寻找,操作超级的简单哦!如何查看Chrome浏览器曾经使用过的账号和密码打开Chrome浏览器,点击屏幕右上角的垂直3点图标。点击”设置“。_x用户名用谷歌账号能查到吗

AutoCAD工程测量工具集-程序员宅基地

文章浏览阅读1.2k次。源代码见:将在本博客中陆续发布。。。下载地址:即将上传。AutoLisp程序可用appload命令加载。推荐加载时加入自启动组。所有命令均以“zz”开头,程序加载后在命令行中输入“zz”就会弹出所有命令列表,用上、下键在列表中选择后按回车键执行即可。

简单介绍一下关系数据库三范式?-程序员宅基地

文章浏览阅读972次。简单介绍一下关系数据库三范式?一、简单介绍一下关系数据库三范式?二、事务四个基本特征或 ACID 特性。一、简单介绍一下关系数据库三范式?  范式就是规范,就是关系型数据库在设计表时,要遵循的三个规范。要想满足第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式。  第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。列数据的不可分割。  第二范式(2NF)要求数据库表中的每个行必须可以被唯一地区分。为实

如何解决并发修改异常_并发修改异常处理java-程序员宅基地

文章浏览阅读665次。如何解决并发修改异常解决方法:1.采用列表迭代器解决,添加元素的时候,必须使用列表迭代器的添加元素的方法。特点:在当前元素的后面添加指定元素2.采用普通for循环的方式遍历集合,并添加元素。特点:在集合元素的最后添加指定的元素3.采用CopyOnWriteArrayList集合实现,它自身已经规避了并发修改异常。特点:在集合元素的最后添加指定的元素..._并发修改异常处理java

Elasticsearch6.5.4版本集群安装设置密码_it doesn't look like the x-pack security feature i-程序员宅基地

文章浏览阅读2.9k次。1.ES安装配置文件1.1主节点配置文件# ======================== Elasticsearch Configuration =========================# ---------------------------------- Cluster -----------------------------------cluster.name: GzEsCluster# ------------------------------------ Node_it doesn't look like the x-pack security feature is available on this elasti

随便推点

2021CCPC女生赛 C. 连锁商店(思维+状压DP)_2021ccpc女生赛c-程序员宅基地

文章浏览阅读1.2k次,点赞8次,收藏8次。链接题意:给出N个节点,给出M条边,我们只能从低节点跳到高节点。然后给出N个节点属于的公司,给出第i个公司第一次到给多少奖金。问从节点1开始,分别到达节点(1~n)最大奖金。分析:其实不难想到我们如果当前节点在x,有(a1,a2,a3…)这些节点可以到达节点x,那么我们选取(a1,a2,a3…)所有的状态转移过来就好了,状态表示我们可以用二进制,也可以用字符串数组等等,只要可以表示状态就行。状态转移有两种状态一种是在之前出现过,不用再加奖金了,把这个状态加入x另一种之前没有出现过,加上奖金并_2021ccpc女生赛c

qt 怎么设计个性化的滑块_前模哈夫式滑块怎么设计?以下3种结构设计方法,让你学以自用...-程序员宅基地

文章浏览阅读599次。汽车注塑模具中的哈夫模具也叫斜弹模,它是前模哈夫式滑块结构,滑块是斜运动脱离产品倒扣的,叫斜弹模可能比较容易理解,和斜顶运动原理相同。知乎视频​www.zhihu.com前模哈夫式滑块结构模具有3个优点: 01.前模哈夫式滑块比后模滑块占空间小,可以选用更小的注塑机台生产,节约成本 02.前模哈夫式滑块铲鸡是利用前模A板原身留锁模的,铲鸡强度够,且不容易涨模。 03.哈夫式滑块是留在前模,只需计算...

人体各关节活动范围_肘关节活动范围描述-程序员宅基地

文章浏览阅读3.7k次。肩关节上臂下垂为中立位。关节活动度a 前屈:70°-90°b 后伸:40°-45°c 前屈上举:150°-170°d 上举:160°-180°e 外展:80°-90°f 内收:20°-40°g 内旋:70°-90°h 外旋:40°-50°上肢.jpg (24.85 KB)肘关节中立位为前臂伸直。a 屈曲:135°-150°b 过度伸直:10°c 旋前:80°-90°d ..._肘关节活动范围描述

高通平台_移远通信天线RF射频PCB走线设计阅读记录_移远模块 天线pcb设计 规范-程序员宅基地

文章浏览阅读855次。适用于WCDMA、LTE、GSM天线信号由模块出来的π型滤波匹配网络,优化信号质量50欧姆传输线特性阻抗控制多层板阻抗控制模型 ..._移远模块 天线pcb设计 规范

Java基础和Web基础_java基础和java web基础-程序员宅基地

文章浏览阅读530次。-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------_java基础和java web基础

SLAM问题汇总_rotate recovery can't rotate in place because ther-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏39次。Issue : dropped 100.00% of messages so farResolve : tf transform wrong , for me , change /scan to /robot1/scan to resolvehttps://answers.ros.org/question/246928/messagefilter-dropped-100-of-messag..._rotate recovery can't rotate in place because there is a potential collision