CSS奇思妙想 -- 使用 background 创造各种美妙的背景

简介: CSS奇思妙想 -- 使用 background 创造各种美妙的背景

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


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


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


背景基础知识



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

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


  • 纯色背景 background: #000:

eaffc14b9847455bafbf6354e268fb02_tplv-k3u1fbpfcp-watermark.png


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

1f4c6656188f461a8046acbea45a0bae_tplv-k3u1fbpfcp-watermark.png


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

5bcd3520e96048a4b904d601fdb033db_tplv-k3u1fbpfcp-watermark.png


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

be7e7bc0c3ac4b86a7ce076b4f421103_tplv-k3u1fbpfcp-watermark.png


背景进阶



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


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


  • 渐变不仅仅只能是单个的 linear-gradient 或者单个的 radial-gradient,对于 background 而言,它是支持多重渐变的叠加的,一点非常重要;
  • 灵活使用 repeating-linear-gradeint(repeating-radial-gradeint),它能减少很多代码量
  • transparent 透明无处不在
  • 尝试 mix-blend-mode 与 mask,创建复杂图案的灵魂
  • 使用随机变量,它能让一个 idea 变成无数美丽的图案

接下来,开始组合之旅。


使用 mix-blend-mode



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


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



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


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

afd50d4f3c594ddb843d8ef1e339e266_tplv-k3u1fbpfcp-watermark.png


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

image.gif



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

29b2647e2fbf4793b5dd8e2903de0e8c_tplv-k3u1fbpfcp-watermark.gif


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


CodePen Demo - Repeating-linear-gradient background & mix-blend-mode


尝试不同的 mix-blend-mode


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

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


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

5b148471e9e144dfbcbb402502e70883_tplv-k3u1fbpfcp-watermark.png


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


CodePen Demo - Repeating-linear-gradient background & mix-blend-mode


借助 CSS-Doodle 随机生成图案


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


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

image.gif


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


CodePen Demo -- CSS Doodle - CSS MIX-BLEND-MODE Background


尝试使用径向渐变


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

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

c6b77c75518f48aba06ec66c1603110e_tplv-k3u1fbpfcp-watermark.png


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


2536bed4fc2d416fb7d1ca88e4964c64_tplv-k3u1fbpfcp-watermark.png


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

20a72195b98b4ea3a56d3527badc9243_tplv-k3u1fbpfcp-watermark.gif


CodePen Demo -- radial-gradient & mix-blend-mode Demo


借助 CSS-Doodle 随机生成图案


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

097982d3682e49e9bf4625be779ceb1f_tplv-k3u1fbpfcp-watermark.gif


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


CodePen Demo -- CSS Doodle - CSS MIX-BLEND-MODE Background 2


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


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


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



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

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

705a15b4472d431ca8f3c401f4d79e9c_tplv-k3u1fbpfcp-watermark.png


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

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


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


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


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

a99e8ec92e6a409f91ab90d6dd1aa44a_tplv-k3u1fbpfcp-watermark.png

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


82de5ee583d34bf4a62550d836daa38f_tplv-k3u1fbpfcp-watermark.gif


CodePen Demo -- Graideint background mix


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


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


d86bd6dddf394dcb9594f0d74e0fe526_tplv-k3u1fbpfcp-watermark.gif


CodePen Demo -- Graideint background mix 2


借助 CSS-Doodle 随机生成图案


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


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


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


78aae92c7edb4db49a00d3102d85e19e_tplv-k3u1fbpfcp-watermark.gif


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


CodePen Demo -- CSS Doodle Mix Gradient


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


使用 mask



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


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


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


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


使用 mask 对图案进行切割


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

2b435c2c598a432dad8dd76de8a145b9_tplv-k3u1fbpfcp-watermark.png



它的 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);
}
CSS 复制 全屏


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

747bdd1e2e904bfda1161f190181771a_tplv-k3u1fbpfcp-watermark.png



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

7663471e72004f988c1d7ec7b4531b1a_tplv-k3u1fbpfcp-watermark.png



CodePen Demo -- mask & background Demo


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


755ffd2249d94ed7886e1f02b3c5fd60_tplv-k3u1fbpfcp-watermark.png




CodePen Demo -- mask & background Demo


mask-composite OR -webkit-mask-composite


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

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


通俗点来说,他的作用就是,当一个元素存在多重 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);
}

707243f865bd41e993c27a8e31d36d97_tplv-k3u1fbpfcp-watermark.png



我们的 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 的话大概是这样:

acbad0d4bd744cb4a32027032cf449ad_tplv-k3u1fbpfcp-watermark.png

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


13da80df0f1042bf91c5950e28bc3d45_tplv-k3u1fbpfcp-watermark.png


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


ac34c21da6ca44b789f176fac01e0418_tplv-k3u1fbpfcp-watermark.png



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


CodePen Demo -- background & -webkit-mask-composite


借助 CSS-Doodle 随机生成图案


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


678da3ed3d494a5b998d1f89c6bb67b4_tplv-k3u1fbpfcp-watermark.png


是不是很类似万花筒?


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


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

be236c9c86ec45d7a5e7f5fad09c773f_tplv-k3u1fbpfcp-watermark.gif


CodePen Demo -- CSS Doodle - CSS MASK Background


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


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

d0ece81641a74d42bebdf4d192a4239e_tplv-k3u1fbpfcp-watermark.gif


CodePen Demo -- CSS Doodle - CSS MASK Background 2

afedeccbbc0d4f38b95fa098e5ebe2f1_tplv-k3u1fbpfcp-watermark.gif


CodePen Demo -- CSS Doodle - CSS MASK Background 3


总结一下



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


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


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


目录
相关文章
|
前端开发 UED 容器
CSS基础-背景属性:颜色、图片、重复
【6月更文挑战第9天】本文介绍了CSS背景属性,包括背景颜色、图片、重复的使用和常见问题。通过实例展示了如何设置背景颜色(如使用rgba()注意透明度影响)、背景图片(使用background-size控制缩放)、背景重复(避免默认平铺导致混乱)以及综合使用背景属性创建复杂效果。理解并熟练运用这些属性能提升网页设计的视觉层次和用户体验。建议通过实践不断探索和提升CSS技能。
278 4
|
前端开发 JavaScript
Vue中使用纯CSS实现全屏网格加渐变色背景布局
Vue中使用纯CSS实现全屏网格加渐变色背景布局
437 0
|
前端开发 容器
CSS3 新增背景属性 + 新增边框属性(如果想知道CSS3新增背景属性和新增边框属性的知识点,那么只看这一篇就够了!)
CSS3 新增背景属性 + 新增边框属性(如果想知道CSS3新增背景属性和新增边框属性的知识点,那么只看这一篇就够了!)
|
Web App开发 移动开发 前端开发
Web网页制作-知识点(3)——HTML5新增标签、CSS简介、CSS的引入方式、选择器、字体属性、背景属性、表格属性、关系选择器 二
Web网页制作-知识点(3)——HTML5新增标签、CSS简介、CSS的引入方式、选择器、字体属性、背景属性、表格属性、关系选择器 二
180 1
|
移动开发 前端开发 HTML5
Web网页制作-知识点(3)——HTML5新增标签、CSS简介、CSS的引入方式、选择器、字体属性、背景属性、表格属性、关系选择器一
Web网页制作-知识点(3)——HTML5新增标签、CSS简介、CSS的引入方式、选择器、字体属性、背景属性、表格属性、关系选择器 一
187 1
|
前端开发
CSS背景
【5月更文挑战第3天】CSS背景。
135 8
|
前端开发
一文搞懂css常用字体属性与背景属性(2),非科班面试之旅
一文搞懂css常用字体属性与背景属性(2),非科班面试之旅
|
前端开发 JavaScript
【HTML+CSS+JavaScript】3d-boxes-background
【HTML+CSS+JavaScript】3d-boxes-background
113 0
|
前端开发
css样式字体、文本、背景属性,盒子模型详解,轻松调教出优美的字体和网页背景色
css样式字体、文本、背景属性,盒子模型详解,轻松调教出优美的字体和网页背景色
223 2
|
前端开发 容器
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
180 2

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    128
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    141
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    114
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    87
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    210
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    236
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    129
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    65
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    123
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    163