通过构建背景图学习CSS径向渐变

简介: 通过构建背景图学习CSS径向渐变

本文翻译自 Learn CSS radial-gradient by Building Background Patterns,作者:Temani Afif 略有删改

如果你是CSS渐变的新手,你可能听说过radial-gradient()。如果以前从未使用过它,那么这篇文章适合你。

在本教程中,我将重点介绍一些真实的和实用的示例,以解释radial-gradient()背后的秘密以及它是如何工作的。

CSS渐变通常用于创建花哨的图案,因此我选择了其中一些仅使用radial-gradient()制作的图案。通过构建它们,我们将了解有关这些渐变的一切。

径向渐变模式#1

让我们从最基本的模式开始。

fc22a7e9555a211dc01a7de7f54889c.png

看上面的图并没有什么复杂的,我们只是重复循环画圆。圆、椭圆、半圆、四分之一圆等等我们都可以使用radial-gradient()创建。

为了简单起见,我们可以考虑椭圆作为主要形状,然后通过隐藏一些部分,我们可以得到半个圆,四分之一个圆等等。

我们放大上面的一个圆来具体分析。

0836ea1639237d7a865e376c743c4c5.png

我们正在绘制一个尺寸为100px*100px的区域,该区域是我们的background-size。我们将考虑水平半径等于50%,垂直半径等于50%,形状的中心将是区域的中心。

椭圆由两个半径定义,称为“水平半径”和“垂直半径”。如果两者相等(就像我们的例子一样),我们得到的就是一个圆。

到此我们可以得到以下代码:

html {
  background-image: radial-gradient(50% 50% at center, ???);
  background-size: 100px 100px   
}

我们定义了渐变的设置,现在我们需要定义颜色配置。我们将绘制一个不会接触background-size区域边缘的圆。从50%,我们将有80%的颜色,其余部分将是透明的。

html {
  background-image: radial-gradient(50% 50% at center, #c39f76 0% 80%,#0000 81% 100%);
  background-size: 100px 100px   
}

我们首先定义椭圆的中心和大小(50% 50% at center),然后用渐变色填充它(c39f76 0 80%,#0000 81% 100%)。在这种情况下,我们得到一个完整的圆,因为两个半径相等(50%和100px),并且因为我们在颜色之间没有过渡。

我们有从0%到80%的主色和从81%到100%的透明色。(应该使用80%而不是81%,但我们保留了一个小的过渡以避免锯齿状边缘。)

我们可以通过删除默认值来优化上面的代码,以获得以下内容:

html {
  background-image: radial-gradient(50% 50%,#c39f76 80%,#0000 81%);
  background-size: 100px 100px   
}

默认情况下位置是中心,我们可以从颜色配置中省略0%和100%。

以上并不是实现该模式的唯一语法。我们还可以使用以下方式:

html {
  background-image: radial-gradient(40% 40%,#c39f76 99%,#0000);
  background-size: 100px 100px   
}

我们减小了圆圈的半径,增加主颜色的百分比。请注意这里没有定义任何透明颜色的百分比,因为它应该是100%(默认值),我们可以省略。

我们还可以使用以下方式:

我们省略半径,浏览器将使用默认设置,需要另一种颜色配置。不必记住所有的案例,只要坚持一种简单的方法(我推荐第一种)。稍后将通过实践,您将发现实现相同结果的不同方法,并且能够优化语法以减少所使用的代码量。

径向渐变模式#2

d65c0c15bac1e35d46d46c52691d48b.png

这一次用了两个radial-gradient()。我们可以使用尽可能多的背景层,这是一个很不错的功能,它允许我们通过将不同的渐变与不同的配置相结合来构建复杂的图案。

4d89b8108b0e75bc743be23c5968d7c.png

我们在这里保持相同的background-size,但我们使用不同的位置为我们的圈子。代码如下:

css
复制代码
html {
   background-image: 
     radial-gradient(?? at 25% 25%,??),
     radial-gradient(?? at 75% 75%,??);
   background-size: 100px 100px; 
}

对于半径配置,如果我们做一些数学计算,我们可以发现我们需要25%使两个圆接触边缘。我们可以使用这个代码:

html {
   background-image: 
     radial-gradient(25% 25% at 25% 25%,#c39f76 80%,#0000 81%),
     radial-gradient(25% 25% at 75% 75%,#c39f76 80%,#0000 81%);
   background-size: 100px 100px; 
}

我们也可以使用closest-side代替25% 25%。这是一个奇怪的值,但它的意思是“使用一个半径值,允许圆接触最接近其中心的边”。这个值很有用,可以使我们避免处理一些复杂的计算。

html {
   background-image: 
     radial-gradient(closest-side at 25% 25%,#c39f76 80%,#0000 81%),
     radial-gradient(closest-side at 75% 75%,#c39f76 80%,#0000 81%);
   background-size: 100px 100px; 
}

radial-gradient()为我们提供了其他3个类似的值(closest-cornerfarthest-sidefarthest-corner)。我们要么为半径定义一个明确的大小,要么使用这些值,浏览器将根据特定规则自动查找半径。

径向渐变模式#3

4d070562266c682b0d26953b58772ff.png

在第一和第二模式之后,我们现在可以尝试更复杂的模式。这一次使用两个渐变,使用两个半圆的组合,不绘制整个圆。

下面是一个例子来帮助你理解这个谜题。我使用不同的颜色来轻松识别每个渐变。

065af0d719bf238db659ff6afa1e939.png

第一个渐变的中心位于50% 100%,而第二个渐变的中心位于50% 0%,但我们也可以使用top和bottom作为它们的等效值。

html {
   background-image: 
     radial-gradient(?? at top   ,??),
     radial-gradient(?? at bottom,??);
   background-size: 100px 100px; 
}

对于半径,我们可以像以前一样使用50% 50%,但这次我将尝试不同的东西,并考虑50px,它是background-size的一半。

当使用像素值或任何不同于百分比的单位时,我们只能指定一个半径,浏览器将理解我们想要一个具有该半径的圆。这是另一种定义形状大小的方法,除了百分比和特定值。

我们的圆将接触边缘,最终的代码如下:

html {
   background-image: 
     radial-gradient(50px at top   ,#c39f76 99%,#0000),
     radial-gradient(50px at bottom,#c39f76 99%,#0000);
   background-size: 100px 100px; 
}

上面的代码并不是我们最终想要的模式,我们还需要最后的润色。如果您检查上一个插图,您会注意到第二个渐变(绿色的)向右移动了一半大小。换句话说,我们需要更新它的background-position

html {
   background-image: 
     radial-gradient(50px at top   ,#c39f76 99%,#0000),
     radial-gradient(50px at bottom,#c39f76 99%,#0000);
   background-position: 0 0, 50px 0;
   background-size: 100px 100px; 
}

我们可以通过使用简写版本来优化代码:

html {
   background: 
     radial-gradient(50px at top   ,#c39f76 99%,#0000),
     radial-gradient(50px at bottom,#c39f76 99%,#0000) 50px 0;
   background-size: 100px 100px; 
}

由于我们处理的是像素值,我们可以添加一个CSS变量,使代码易于调整。

html {
   --s: 100px;
   background: 
     radial-gradient(calc(var(--s)/2) at top   ,#c39f76 99%,#0000),
     radial-gradient(calc(var(--s)/2) at bottom,#c39f76 99%,#0000) calc(var(--s)/2) 0;
   background-size: var(--s) var(--s); 
}

径向渐变模式#4

1c040ac2a36d466efde2bf74ae0b03e.png

乍一看,这个背景看起来有点复杂。但如果我们能识别出正确的模式,那就很容易了。直觉上,你可能认为模式就是这个,你会很难找到渐变的方式。

2fed7f69d5a77cfd985575467793e5f.png

但事实并非如此真实的的模式是这个

8d6608339cef2b385e45e3f961c84e3.png

我们有4个圆圈放置在角落。代码如下:

html {
   background: 
     radial-gradient(closest-corner at 20% 20%,#c39f76 98%,#0000),
     radial-gradient(closest-corner at 80% 20%,#c39f76 98%,#0000),
     radial-gradient(closest-corner at 20% 80%,#c39f76 98%,#0000),
     radial-gradient(closest-corner at 80% 80%,#c39f76 98%,#0000);
   background-size: 100px 100px;
}

closest-corner定义半径的一个很好的用法。对于每个层,浏览器将绘制一个放置在特定位置的圆,并触摸最近的边缘。此设置允许我们使用一个简单的颜色配置,同时有所需的溢出。

我们也可以使用closest-side,如下所示:

html {
   background: 
     radial-gradient(closest-side at 20% 20%,#c39f76 140%,#0000 141%),
     radial-gradient(closest-side at 80% 20%,#c39f76 140%,#0000 141%),
     radial-gradient(closest-side at 20% 80%,#c39f76 140%,#0000 141%),
     radial-gradient(closest-side at 80% 80%,#c39f76 140%,#0000 141%);
   background-size: 100px 100px;
}

上面代码中唯一的新内容是颜色配置,其中我使用的值大于100%。由于我使用closest-side来定义半径,所以我需要比100%更大才能创建溢出的效果。

径向渐变模式#5

ddd5b15a63311324babdd215eb892ba.png

这是另一个非直观的模式,可能会让很多人感到困惑。你可能会把它看作是一个半满的圆圈,但实际上它是两个半圆的组合,如下所示:

31de6440a42e6e3fc861fec5c5b2a80.png

代码如下:

html {
  background:
    radial-gradient(50% 50% at left ,#0000 70%,#c39f76 71% 80%,#0000 81%),
    radial-gradient(50% 50% at right,#c39f76 0 80%,#0000 81%);
  background-size: 100px 100px;
}

这一次我们将每一个使用不同的颜色配置。第一个有3种颜色(透明,然后是主颜色,然后再次透明)。第二个具有与我们在前面的示例中使用的相同的颜色配置。

这个图案是一个很好的例子,展示了不同的颜色配置如何成为获得复杂背景图案的另一种方法。

径向渐变模式#6

2cd3bd067a1b11af07a6bd7293131c0.png

这是另一个不容易识别的模式,但如果我们仔细观察,我们可以看到两个圆圈。

69e5744174e82a507608698d5d53217.png

大圆圈是我们的第一层。

57e3a1a7265bd7968599b5d96eed08c.png

它是一个放置在区域中心的圆圈(像往常一样用background-size定义),但这次颜色配置不像往常一样。我使用透明的颜色为内部和外部的主要颜色。值得注意的是,我们也有一个小的溢出,如下代码所示使用了54%而不是50%来创建溢出。

html {
  background-image: radial-gradient(54% 54%,#0000 98%,#c39f76);
  background-size: 100px 100px;
}

第二层是一个较小的圆圈,以白色为主色。整个代码将是:

html {
  background: 
    radial-gradient(10% 10%,#fff 98%,#0000),
    radial-gradient(54% 54%,#0000 98%,#c39f76) 50px 50px;
  background-size:100px 100px;
}

注意50px 50px的用法。与第三个图案一样,我们需要将其中一个层移动一半大小以获得正确的结果-否则两个圆将具有相同的中心,这不是预期的结果。

径向渐变模式#7

这是我们结束前的最后一个模式:

2a2208e5a269ddd992108d041c8955f.png

在最后一个例子中,我想介绍repeating-radial-gradient(),这是编写radial-gradient()的另一种方式。

我们的模式如下:

bdeb8d486035259975094c5a22196d7.png

我们可以使用radial-gradient()来实现上面的功能,但是颜色配置会变得太长(透明,主颜色,透明,主颜色,等等)。

在这种情况下,颜色配置只不过是“透明,主色”的重复图案,并且repeating-radial-gradient()是为了这样的目的而制作的。

html {
  background-image: repeating-radial-gradient(#0000 0% 12%,#c39f76 13% 26% );
  background-size:100px 100px;
}

上面的意思是我们有12%的透明颜色,然后有13%的主要颜色(26-13=13),然后我们重复相同的步骤直到覆盖整个区域。

最后

通过探索如何创建不同的背景图案,我们涵盖了radial-gradient()的基础知识。文章到此结束,但这仅仅是个开始,有兴趣的可以继续尝试使用radial-gradient()构建自己的模式。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

目录
相关文章
|
7月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
384 1
|
7月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
371 0
|
8月前
|
前端开发 JavaScript
HTML/CSS/JavaScript基础学习day03-作业
本教程通过多个实例讲解JavaScript中for循环的常见用法,包括遍历数组、元素加1、求最大值/最小值、计算平均值、过滤偶数及字符串拼接等操作,并附有代码示例和运行结果图。
119 3
|
9月前
|
前端开发 JavaScript
HTML/CSS/JavaScript基础学习day01
阿铭学习HTML基础,包括VSCode快捷生成代码、常用标签如head、title、body、img、a、p等的使用,以及CSS选择器的优先级和基本样式设置,适合前端入门学习。
270 12
|
8月前
|
前端开发 JavaScript 算法
HTML/CSS/JavaScript基础学习day03-作业
本内容包含多个 JavaScript 编程示例,涵盖数组遍历、条件筛选、字符串处理、数值计算等常见操作,适合练习基础算法与逻辑思维。
179 5
|
8月前
|
前端开发 JavaScript
HTML/CSS/JavaScript基础学习day02-作业
本教程介绍了JavaScript基础编程练习,包括使用for循环打印数字、判断奇偶数、计算总和以及用if语句判断正数的方法。每部分均配有示例代码和运行结果图,帮助初学者理解循环与条件判断的应用。最后通过思维导图回顾所学内容,强化知识点记忆。
133 2
|
9月前
|
XML 人工智能 前端开发
HTML/CSS/JavaScript基础学习day02
阿铭学习day02内容涵盖VSCode常用插件安装与配置,如中文语言包、路径提示、Vue开发工具等,同时介绍了通义灵码AI编程助手的使用方法,提升开发效率。
143 1
|
8月前
|
前端开发 JavaScript 索引
HTML/CSS/JavaScript基础学习day04
阿铭学习JavaScript函数与对象的基础知识,包括函数定义、调用方式及参数使用,以及Array和String对象的常用操作。
155 0
|
8月前
|
JavaScript 前端开发 Java
HTML/CSS/JavaScript基础学习day03
本内容为阿铭学习JavaScript的第三天笔记,涵盖JavaScript基础概念、引入方式、基础语法、变量声明、数据类型、运算符、类型转换及流程控制语句等内容,适合初学者了解JavaScript编程语言的核心知识点。
165 0
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
836 7

热门文章

最新文章

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