精华内容
下载资源
问答
  • 随机背景

    2021-08-05 00:55:24
    这就是为什么我们要尝试让背景图案接近真实,而且我们也在尝试让平铺的元素之间尽量减少缝隙,让它们显得浑然天成自成一体,但是这也会让样式文件的大小超出我们的预期。当你发现了某些独特的特性——...

    问题

    虽然平铺几何图形很棒,但看起来还是有点乏味。而在自然界中,万事万物皆有不同。即使是在相似中,也充满了变化和随机因素。你可以看一看花圃:虽然花朵具有一致的艳丽,但也各有各的亮点。这个世界上没有任何两朵花是相同的。这就是为什么我们要尝试让背景图案接近真实,而且我们也在尝试让平铺的元素之间尽量减少缝隙,让它们显得浑然天成自成一体,但是这也会让样式文件的大小超出我们的预期。

    当你发现了某些独特的特性——比如木头纹理上特定距离就会出现的结,就会打破随机性这种感觉 — Alex Walker, The Cicada Principle and Why It Matters to Web Designers

    模拟随机是一件非常具有挑战性的事情,因为 CSS 并没有任何创造随机性的能力。让我们重新拿起条纹这个示例,假设我们想要得到拥有各种颜色和宽度的垂直条纹(让我们简化为四种颜色吧),并且还要让它们之间过渡自然。我们的第一个想法可能就是创建一个渐变:

    background: linear-gradient(90deg,

    #fb3 15%, #655 0, #655 40%,

    #ab4 0, #ab4 65%, hsl(20, 40%, 90%) 0);

    background-size: 80px 100%;

    就像下图看到的那样

    c16f3c015675d249cb3ab50b330e9978.png

    图注:实现伪随机条纹的初次尝试,其中所有的颜色都是由相同的线性渐变生成的

    非常明显就分辨出了重复元素,这主要是因为它只重复了 80px(background-size)。我们可以做得更好吗?

    解决方案

    对于这一问题,我的第一个想法就是将整个的条纹分成不同块,然后增加这些块的随机性:一个基色和三个条纹层,在不同的距离上实现平铺。通过硬编码颜色过渡点的位置,我们可以改变条纹的宽度,通过使用 backgroud-size,我们可以控制间距,最终就能实现上面的初步设想了:

    background: hsl(20, 40%, 90%);

    background-image:

    linear-gradient(90deg, #fb3 10px, transparent 0),

    linear-gradient(90deg, #ab4 20px, transparent 0),

    linear-gradient(90deg, #655 20px, transparent 0);

    background-size: 80px 100%, 60px 100%, 40px 100%;

    因为最顶层的平铺将会最容易被注意到(因为它覆盖了所有的图层),所以我们对最上面的一层施加最大的间歇性间距(在本例中,就是桔黄色条纹)。

    f764bf451ab7b1aef7ae0179a6e42ecc.png

    图注:第二次尝试,通过不同的 background-size 让不同的图层发生重叠;虚线框内的图案是用来平铺的图案

    正如上图中所看到的那样,整体看起来随机多了,但如果我们仔细观察,还是能意识到每 240px 就会有一次重复。也就是说,在此类组合中,所有重复块的偏移量就是第一个非重复条纹终点位置的一倍或数倍。也许你还记得在学校里我们学过的最小公倍数(LCM,Least Common Multiple),它是一个整数集合中所有整数的一倍或多倍。因此,这里条纹块的大小就是背景大小的最小公倍数,即 40/60/80,它们的最小公倍数就是 240。

    上面的示例就遵循了这一不易察觉的随机性,所以我们需要增大平铺条纹块的大小。感谢数学的存在,无需漫长和痛苦的计算我们就可以实现它,因为我们已经知道了答案。为了达到最大的最小公倍数,那么这些数之间必须互质。在本例中,最小公倍数就是由它们得出来的。比如,3/4/5 就互为质数,所以它们的最小公倍数就是 3 × 4 × 5 = 60。让数值互为质数的最简单方式就是让它们是质数,在数学上质数和其他任何数都互为质数。质数的列表在网络上随处可见。

    为了保持最大的随机性,我们甚至使用质数来设计条纹的宽度。这就是我们的代码:

    background: hsl(20, 40%, 90%);

    background-image:

    linear-gradient(90deg, #fb3 11px, transparent 0),

    linear-gradient(90deg, #ab4 23px, transparent 0),

    linear-gradient(90deg, #655 41px, transparent 0);

    background-size: 41px 100%, 61px 100%, 83px 100%;

    是的,代码很难看,但是效果如下图所示:

    e8bea807596d195bbc61e64fb261bf07.png

    图注:最终的条纹,使用质数来增加随机性

    现在我们的条纹至少 41 × 61 × 83 = 207583px 才会平铺一次,完全超出了一个屏幕分辨率所能容纳的数量。

    上面的技巧(使用质数增加背景平铺时的随机性)被称为 “The Cicada Principle”,由 Alex Walker 第一次提出。值得注意的是,这不仅仅对背景有用,而且对需要平铺的任何事情都有用。其他的应用包括但不限于:

    为一个图库中图片的旋转角度增加一点点随机性,可以使用 :nth-child(an) 选择器,其中 a 为质数。

    为动画的运动过程添加一些随机性,那么可以添加多个以质数为时间长度的持续时间(点击这里查看示例)向提出这一技巧的 Alex Walker 致敬, The Cicada Principle and Why It Matters to Web Designers。 Eric Meyer 随后提出了 Cicadients 这一概念, 其中就包含了将该技巧通过 CSS 渐变添加到背景图片上。Dudley Storey 也就该概念发表了大量非常有价值的文章.

    总结

    前面介绍的内容,不管是使用渐变实现的线性渐变还是径向渐变,或者说是复杂的纹理背景,都是具有一定的规律性。在这一节中主要向大家阐述了如何实现随机性的背景图效果。

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

    本文属于 CSS 绘图技巧其中一篇,系列文章:

    将介绍一些利用 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-modemask,创建复杂图案的灵魂
    • 使用随机变量,它能让一个 idea 变成无数美丽的图案

    接下来,开始组合之旅。

    使用 mix-blend-mode

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

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

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

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

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

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

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

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

    尝试不同的 mix-blend-mode

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

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

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

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

    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,快速随机的创建各种基于此规则的图案:

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

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

    尝试使用径向渐变

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

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

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

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

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

    借助 CSS-Doodle 随机生成图案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    CodePen Demo -- Graideint background mix

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

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

    CodePen Demo -- Graideint background mix 2

    借助 CSS-Doodle 随机生成图案

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

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

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

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

    CodePen Demo -- CSS Doodle Mix Gradient


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

    使用 mask

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

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

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

    简单而言,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

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

    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);
    }
    复制代码

    我们的 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

    借助 CSS-Doodle 随机生成图案

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

    是不是很类似万花筒?

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

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

    CodePen Demo -- CSS Doodle - CSS MASK Background

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

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

    CodePen Demo -- CSS Doodle - CSS MASK Background 2

    CodePen Demo -- CSS Doodle - CSS MASK Background 3

    总结一下

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

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

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

     

    展开全文
  • 杜婧子 刘烜塨摘要文章主要对互联网+背景之下虚拟现实技术进行了简单的分析,对其主要特征、关键技术以及在各个行业中的应用进行了分析。【关键词】互联网+ 虚拟现实技术1 联网+背景下的虚拟现实技术1.1 虚拟现实...

    杜婧子 刘烜塨

    摘要

    文章主要对互联网+背景之下虚拟现实技术进行了简单的分析,对其主要特征、关键技术以及在各个行业中的应用进行了分析。

    【关键词】互联网+ 虚拟现实技术

    1 联网+背景下的虚拟现实技术

    1.1 虚拟现实技术的特征

    1.1.1 多感知性

    多感知性就是在计算机自身的视觉感知之外,其具有的一种听觉感知、触觉感知、运动感知、味觉感知、嗅觉感知等等。最为理想的虚拟现实技术就是具备人可以感受到的全部的感知功能。

    1.1.2 存在感

    存在感就是用户通过自己的视角在模拟环境中生产的一种真实感觉。最为理想的虚拟现实模拟环境可以给人们一种真实的感觉,无法辨别真假。

    1.1.3 交互性

    就是用户在虚拟的世界中,可对模拟环境中的各种物体进行操作的一种程度,是一种在自然环境中反馈以及交互的能力。

    1.2 联网+背景下的虚拟现实技术的关键技术

    虚拟现实技术是多种技术的综合,其主要就是三维计算机图形技术手段、广角立体的显示技术手段,这样就可以在虚拟的世界中對观察者的头、眼睛、手等进行跟踪处理、进而触觉反馈技术、立体声技术、网络传输技术、语音输入以及输出技术等等也是联网+背景下的虚拟现实技术的关键内容。

    1.2.1 实时三维计算机图形

    通过计算机模型产生的图形图像的技术相对较为简单。在具有精准的模型基础之上,在足够的时间中可以生产不同光照条件之下的不同精确的图形,而此种技术中作为关键的要求实时。

    1.2.2 显示

    在人们观察周围的世界过程中,因为人的眼睛位置的不同,其获得的图像也是不同的,不同的图像在大脑中融合,就会构建一个立体的、形象的景象,而这些景象也包括了距离远近的信息等内容。

    在虚拟现实系统中,人体双目的立体视觉有着较为重要的价值与作用。使用者的眼睛看到的景象是不同的,分别产生的,在不同的显示器上显示。一些系统会通过单个显示器进行控制,而用户在戴上眼睛之后,其中一个眼睛可以看到奇数帧图像而另一只眼睛则看到的则是偶数帧图像。因为奇、偶帧的不同就会导致其出现视差的立体感。

    1.2.3 用户(头、眼)的跟踪技术

    在虚拟的环境中,不同的物体对于系统坐标系统均有对应的位置以及姿态,而用户也是入菜,用户自己看到的景象主要是综合用户的位置以及头、眼睛的位置确定。

    其中跟踪头部运动,则是通过虚拟现实头套实现。在以往的计算机图形技术中,主要就是通过鼠标以及键盘改变视场;而用户自己的视觉系统以及运动感知系统二者是独立的,通过头部的跟踪就可以转变图像的视角,而用户的视觉系统以及运动感知系统之间则可以有效融合,这样就会有一种身临其境的感觉。通过虚拟现实头套可以通过双目立体视觉认知环境,通过头部的运动以及观察环境问题。

    拟环境中,还是无法做到此点,声音的方向与头部运动之间并没有关系。

    2 互联网+背景下的虚拟现实技术应用

    2.1 互联网+医学中的虚拟现实技术的应用

    在互联网+医学中应用虚拟现实技术具有一定的价值与意义。在虚拟的环境中,可以构建虚拟的人体模型,通过跟踪球技术、HMD技术、感觉手套技术等方式,就可以让学生了解人体结构的各个器官,此种方式相对于其他类型的的应用,效果较为显著。在互联网+的医学中,应用虚拟显示技术可以通过虚拟外科手术训练器的方式,模拟手术。在虚拟的环境中,可以通过真实模拟具体的环境、外科工具、人体模型以及器官等,利用HMD技术以及感觉手套,就可以给人们一种真实的感受。而现阶段,其还是存在一定的不足,还有极大的提升空间。在今后的发展中,随着互联网+技术的不断完善,虚拟现实技术也在逐步的优化,这对于提升手术质量有着较为重要的意义。

    2.2 互联网+娱乐的虚拟现实技术的应用

    虚拟现实技术是一种在互联网+背景之下形成的独立的艺术特征。虚拟现实技术是一种现代科技的综合彰显,是一种利用人机界面对一些复杂信息数据进行可视化操作以及交互形成的艺术语言模式,将思维与科技工具进行了有效融合,进而获得的全新的认知体验。相对于传统的视觉操作媒体艺术来说,通过交互性以及具有拓展性的人机对话的特征进行创作,这也是现阶段虚拟现实技术的关键特征与优势。在整体上来说,其主要的优势是构建作品、参与者的互动与对话模式。

    2.3 互联网+教育中的虚拟现实技术应用

    在教育中,互联网+的技术手段越来越成熟,而在一些重点且抽象的知识教育过程中,可以通过此种技术构建虚拟的场景。例如,可以构建虚拟的量子物理实验室,解释一些物理概念、位置以及速度等。这种虚拟现实技术就是一种欺骗大脑的“终极媒介”,通过“虚拟现实”可以进入到真实的环境中,通过真实的感触与了解,给学生最为真实的体验。

    2.4 互联网+军事航天的虚拟技术应用

    模拟训练是军事以及航天工业中的重点。而虚拟现实技术有着较为良好的发展空间。通过虚拟现实技术可以模拟一个零重力的环境,这样就可有替非标准的传统的水下训练宇航员训练方式,效果更为显著。

    3 结束语

    在互联网+背景之下,虚拟现实技术得到了有效的发展,而相关研究也在逐渐的深入,这样可以将传统的产业模式与互联网+进行系统的融合,通过虚拟现实技术的应用,可以创造出全新的生态发展模式进而增强社会的创造力以及生产量。而在虚拟现实技术的发展中,其提升空间还是较为广泛的,在今后的发展中,随着互联网+产业模式的逐渐成熟,虚拟现实技术也会不断的完善。

    参考文献

    [1]侯明,姚国强.互联网+背景下的虚拟现实视听新技术展望[J].现代电影技术,2017(05):29-35.

    [2]卢薇朵.网络购物平台上的虚拟现实技术研究[ J].信息与电脑(理论版),2017(02):48-49.

    [3]杨海丽,刘光然,马海娇.互联网+虚拟现实的技能训练模式设计[J].中国教育技术装备,2016(20):58-60.

    展开全文
  • 通过本文,你将会了解到 CSS background 中更为强大的一些用法,并且学会利用 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前端趣闻 微信公众号

    展开全文
  • 他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。龟叔作为一个语言设计爱好者,已经有过设计语言的尝试。这一次,也不过是一次纯粹的hacking行为。
  • 使用Python移除背景

    2021-03-14 00:35:10
    iterations=mask_dilate_iter) mask = cv2.erode(mask, None, iterations=mask_erode_iter) mask = cv2.GaussianBlur(mask, (blur, blur), 0) 像之前一样,对蒙版进行膨胀和腐蚀在技术上是可选的,但创造了...
  • Geiger等[8],针对高分辨率图像立体匹配运算时间长的问题,创造性的提出了使用强约束点(纹理或特征信息较为丰富)作为支撑点,在强约束点之间通过三角剖分对视差图进行插值计算,结合OpenMP技术在通用CPU上实现了...
  • 《信息时代背景下的英语教学(原稿).doc》由会员分享,可免费在线阅读全文,更多与《信息时代背景下的英语教学(原稿)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、境。在现代信息技术环境下,...
  • 大数据建设背景介绍

    千次阅读 2021-02-22 16:14:42
    人类在日常学习、生活、工作中产生的数据量正以指数形式增长,呈现“爆炸”状态。“大数据问题”(Big DataProblem)就是在这样的背景下产生的,成为科研学术界和相关产业界的热门话题,并作为信息技术领域的重要...
  • CSS奇思妙想 -- 使用 background 创造各种美妙的背景(下篇)... 使用 mask 除去混合模式,与背景相关的,还有一个非常有意思的属性 -- MASK。 mask 译为遮罩。在 CSS 中,mask 属性允许使用者通过遮罩或者裁切...
  • 互联网背景下高校《计算机应用基础》课程教学模式探究互联网+背景下高校《计算机应用基础》课程教学模式探究 摘要:在这个崭新的21世纪,人们充满了幻想,勇于超越自我。本世纪的发展,离不开各种有创新意识和能力的...
  • 你们也知道作者一直都是创作鬼才来的,所以我肯定不会一本正经的写,我想了好几个切入点,最后决定用一个完整的电商系统作为切入点,带着大家看看,我们需要学些啥,我甚至还收集配套视频和资料,暖男石锤啊,这期是...
  • Metasploit 渗透测试01-背景和功能介绍

    千次阅读 2021-01-16 22:26:37
    0x00背景 渗透测试的定义:通过实际攻击进行安全测试与评估,Metasploit是一个免费的、可下载的渗透框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞...
  • 感谢数学的存在,无需漫长和痛苦的计算我们就可以实现它,因为我们已经知道了答案。为了达到最大的最小公倍数,那么这些数之间必须互质。在本例中,最小公倍数就是由它们得出来的。比如,3/4/5 就互为质数,所以它们...
  • 《信息时代背景下的英语教学(原稿).doc》由会员分享,可免费在线阅读全文,更多与《信息时代背景下的英语教学(原稿)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、参考文献张正东英语教育学科学...
  • 文章对融媒体背景下传统新闻采编流程中存在的问题进行分析,并就其流程再造策略进行探讨。 流程再造 技术的发展进步也转变了媒体传播方式,随着生活水平的提高,传统媒体已经不能满足当前的传播需求,人们逐渐通过网络...
  • 大数据背景下的分布式存储

    千次阅读 2021-03-02 14:48:01
    海量数据在被分析、挖掘中创造出无限价值。 互联网企业纷纷对数据存储和管理,出重金加大数据中心的建设,阿里投2000亿用于云操作系统、服务器、芯片等技术的研发事项,以应对海量数据的到来,腾讯乘胜追击出资5000...
  • 为了促进计算机科学技术的快速前进,理当科学把握信息时代背景所带来的动力与阻力,方可真正发挥出计算机科学技术的内在能量。但就当前局势来看,计算机科学技术发展过程中仍存在些许问题而阻碍其向前发展。为此,...
  • 背景知识对问题解决的重要性 在日益重视学习能力培养和训练的教育思潮影响下,我们对基础知识——事实性知识的认识存在着一定的偏见,以为强调学习能力就可以轻视基础知识或者能力提升得以知识量的减少为代价。如果...
  • 对内容进行标记时,只宜将元素用于它们原定的用途,不要创造自有的语义。如果找不到适合自己所要含义的元素,可以考虑使用通用元素(如span或div),并且用全局属性class表明其含义。CSS样式不是类属性唯一的用途。 ...
  • 点击上方“计算机视觉工坊”,选择“星标”干货第一时间送达作者丨Kissrabbit、CK1998来源丨知乎问答编辑丨极市平台导读本文汇总了一些知乎上关于anchor-free存在的缺点的...
  • 网页作品简介​​ :一款非常大气实用的html5全屏下雪动画背景用户登录注册表单切换模板,登录、注册、忘记密码三个表单窗口可自由切换。更有趣的是,当点击密码输入框时,猫头鹰会蒙上眼睛。​​2.网页作品编辑​​...
  • 刚开始每天下班就期待着开始自己所谓的创作,而现在每晚发愁该写些什么来满足大家的口味;起初媳妇儿大力支持我学习,如今因为写公众号没时间陪家人,时而会引发矛盾。细数两个月更新56篇的文章,用一位简书朋友的...
  • 新零售价值创造在C2B 这一业务系统有着很明显的体现,换句话来说也是消费者在促进企业价值的生产,需多个利益主体参与到价值创造当中,与此同时还要借助大数据的手段,数据化企业交易活动,寻找新的价值创造方向。...
  • 身为一个前端开发者,背景是开发中的常客。大到整个网站的主题背景,小到一个按钮的背景。CSS 的 background 属性基本上每天开发都会遇到,绝大多数情况下我们都只会使用到了纯色背景或者图片背景。如果你想让你开发...
  • “行”作为最基本的一项生活需求,在老龄化程度不断加深的背景下,老年人出行安全问题备受社会关注。对此,公安部道研中心研究人员对近三年60岁及以上老年人交通事故进行统计分析,剖析事故暴露的主要问题,研究提出...
  • 英雄联盟:你所不知道的蒸汽机器人,布里茨的背景故事在英雄联盟里面每一个英雄人物都有着自己的光辉故事,不然也不能被称为英雄了,就算是机器也是有感情,有着自我意识的,在祖安科技和魔法结合的程度水平是十分高...
  • 互联网不再是单一存在的状况,而是将传统的行业联系起来,从而创造新的发展生态。“互联网+”的产生可以很好地带动全国各个行业的发展,促进形成良性的竞争关系,使得各个产业发展成为一个有利于人们生活方式的情况...
  • 不容置疑,本科院校背景在保研过程中起着不容小视的作用,好的本科背景能为你提供一个更高的平台,这一优势在材料初审环节体现得尤为显著。但这并不是说本科院校背景就是保研院校衡量你实际水平的唯一标准,如果你...
  • 《计算机科学与技术专业发展存在的问题研究.pdf》由会员分享,提供在线免费全文阅读可下载,此文档格式为pdf,更多相关《计算机科学与技术专业发展存在的问题研究.pdf》文档请在天天文库搜索。1、计算机科学与技术...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,113
精华内容 24,045
关键字:

存在创作背景