使用CSS圆锥渐变创建背景图案

本文翻译自 How to create background pattern using CSS & conic-gradient,作者: Temani Afif, 略有删改。

拥有一个好的背景图案可以使你的网站设计与众不同。多亏了CSS渐变,我们可以使用几行代码创建花哨炫酷的图案。在这篇文章中,我们将学习conic-gradient并使用它来创建不同的CSS图案。

圆锥梯度如何工作?

圆锥渐变从指定圆心开始,类似于径向渐变,不同之处在于圆锥渐变色标放置在圆的圆周周围,而不是从圆心出现的直线上,从而使颜色在围绕圆心旋转时平滑过渡,而不是从圆心向外过渡。

这是MDN页面上的一张图:

举一个基本的例子来看看它是如何工作的:

background: conic-gradient(at 75% 25%, red, blue, yellow)

我们将中心点放置在X=75%和Y=25%处,然后在红色,蓝色和黄色之间创建颜色过渡。

在大多数情况下,我们不需要平滑的过渡,而是不同的颜色值。要做到这一点,我们需要使颜色从上一个结束的地方开始:

background: conic-gradient(at 75% 25%, red 90deg, blue 90deg 225deg, yellow 225deg)

注意两种颜色(90deg和225deg)之间使用相同的角度。代码可以进一步优化,就像下面这样。

background: conic-gradient(at 75% 25%, red 90deg, blue 0 225deg, yellow 0)

通过指定0(小于前一个值),浏览器将自动使其等于前一个值。这样可以避免我们两次写入相同的值。最终的效果如下:

和上面的效果图保持有相同的中心点,但没有颜色之间的过渡效果。红色填充90deg。蓝色从红色结束的地方开始,一直持续到225deg,所以它填充了135deg。黄色填充了剩余的135deg空间。

如果我们定义一个background-size,我们就创建了一个图案:

这不是一个好看的图案效果,但说明了我们将在本文中使用的技术来构建更好的图案效果!

棋盘图案

我们从一个基本图案开始:

下面的图来理解这种模式的逻辑:

可以看到我们的圆心被放置在背景区域的中心(默认位置),所以我们不需要定义它。然后我们有4种颜色(2白2黑),每种颜色填充90deg(区域比例为25%)。代码为:

background: conic-gradient(#000 90deg, #fff 0 180deg, #000 0 270deg, #fff 0);

继续优化语法使用重复渐变代码:

background: repeating-conic-gradient(#000 0 90deg, #fff 0 180deg);

我们也可以用百分比来代替度数:

background: repeating-conic-gradient(#000 0 25%, #fff 0 50%);

我们要做的就是更新background-size来控制图案显示格子的比例。

background-size: 100px 100px;

Z字形图案

接下来我们创建一个更花哨的图案效果,这次我们将使用两个渐变。

此效果中我们将学习from选项,该选项允许我们控制渐变的旋转。

在上面的例子中,每个渐变都由两种颜色组成。第一种颜色填充90deg,而第二种颜色填充剩余的空间。两种渐变之间的唯一区别是旋转。 第一渐变旋转-45deg,而第二渐变旋转135deg。

这两个梯度加在一起会给予下面的结果。

上面的(1)对应的代码如下:

background:
  conic-gradient(from -45deg,#ECEDDC 90deg,#0000   0),
  conic-gradient(from 135deg,#ECEDDC 90deg,#29AB87 0);
background-size: 100px 100px;

这不是我们想要的结果。为了得到我们想要的结果,我们需要移动第二个渐变代码,如(2)所示,以获得以下代码:

background:
  conic-gradient(from -45deg,#ECEDDC 90deg,#0000   0),
  conic-gradient(from 135deg,#ECEDDC 90deg,#29AB87 0) 50px 0;
background-size: 100px 100px;

50px 0只是第二梯度的background-position50pxbackground-size的一半。

可以通过引入CSS变量进一步优化代码:

--s: 100px; 
  
--_g: #ECEDDC 90deg,#0000 0;
background:
  conic-gradient(from -45deg,var(--_g)),
  conic-gradient(from 135deg,var(--_g)) calc(var(--s)/2) 0,
  #29AB87;
background-size: var(--s) var(--s)

图纸图案

这个图案我们将使用两个类似的梯度,但这次有不同的大小。 除了background-position,我们还将看到使用background-size也可以帮助我们创建图案。

第一梯度定义如下:

设置100px后的background-size最终效果如下:

第二个渐变是相同的,但不是2px 2px,我们使用1px 1px来拥有更细的线条,我们将大小除以5。这将给予我们一个更大的正方形内的小正方形(5x5网格)的逻辑结果。

background: 
 conic-gradient(from 90deg at 2px 2px,#0000 90deg,#366 0) 0 0/100px 100px,
 conic-gradient(from 90deg at 1px 1px,#0000 90deg,#366 0) 0 0/20px  20px;

使用CSS变量的优化代码:

--s: 100px; 
  
--_g: #0000 90deg,#366 0;
background: 
 conic-gradient(from 90deg at 2px 2px,var(--_g)) 0 0/var(--s) var(--s),
 conic-gradient(from 90deg at 1px 1px,var(--_g)) 0 0/calc(var(--s)/5) calc(var(--s)/5);

三角形图案

在这三个简单的图案之后,我们可以使用相同的技术来处理更复杂的图案效果,接下来创建一些三角形图案。

对于这个图案效果可以分解以下的渐变代码:

与Z字形图案类似,我们使用background-position的第二个梯度的偏移,以获得以下代码:

--s: 120px;
  
background:
  conic-gradient(from 150deg at 50% 33%,#FA6900 60deg,#0000 0) 
      calc(var(--s)/2) calc(var(--s)/1.4),
  conic-gradient(from -30deg at 50% 66%,#D95B43 60deg,#ECD078 0);
background-size: var(--s) calc(var(--s)/1.154);

以下还有两个三角形的图案。这里就不一一解析详细的代码实现过程,有兴趣的可以尝试实现看看。

代码可能看起来很复杂,但如果你遵循上面的实现过程,你可以很容易地理解它。

星型图案

为什么不尝试星星的图案呢!

下面是一个逐步演示来说明不同的梯度

正如你所看到的,每一个梯度都很容易理解,所有的组合给了我们一个很好的结果。这就是渐变的力量,我们将基本形状组合在一起,得到一个复杂的图案。

更多的图案效果

在我们结束之前,我们来看看其他的图案效果例子,向你展示conic-gradient()在创建花哨的图案时是多么强大!

结论

在我们看到不同的例子之后,你应该能够使用conic-gradient()创建很酷的模式。你可能会发现这很难,但通过一些练习你会对不同的技术感到舒服,你可以很容易地创建你的图案。

组合不同的渐变是获得更多图案的另一种方法。我做了很多例子,你可以在这个网站css-pattern.com上发现更多有趣的图案效果。


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

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CSS3渐变背景颜色动画是通过使用CSS3的transition和animation属性来实现的。首先,我们可以使用linear-gradient函数定义一个渐变背景颜色: div { background: linear-gradient(to right, red, blue); } 这将创建一个从左到右的红色到蓝色的渐变背景。然后,我们可以使用transition属性来定义过渡效果: div { transition: background 0.5s ease-in-out; } 这将使背景颜色的变化在0.5秒内平滑过渡,并且动画效果的速度采用了"ease-in-out"的缓动函数,使过渡更加自然。接下来,我们可以使用animation属性来创建一个动画: @keyframes colorChange { 0% { background: red; } 50% { background: blue; } 100% { background: red; } } div { animation: colorChange 3s infinite; } 这里我们定义了一个名为colorChange的动画,它会在3秒钟内循环播放,并且背景颜色会在动画的不同阶段中从红色到蓝色再返回红色。最后,我们将动画应用到div元素上。通过这些CSS属性和函数的组合,我们就可以实现一个具有渐变背景颜色动画的效果。 ### 回答2: CSS3渐变背景颜色动画可以通过使用@keyframes和animation属性来实现。首先,我们需要定义一个@keyframes规则,用于指定渐变动画的关键帧。 在@keyframes规则中,我们可以通过调整背景颜色的透明度或色值来创建渐变效果。例如,我们可以从一个颜色过渡到另一个颜色,或者让背景颜色从透明变为不透明。通过定义多个关键帧,我们可以创造出更加复杂的渐变效果。 接下来,我们将@keyframes规则应用到要应用渐变动画的元素上,通过animation属性设置动画的名称、时间和动画类型等属性。 例如,下面是一个使用CSS3渐变背景颜色动画的示例代码: ``` <style> @keyframes gradientAnimation { 0% { background-color: red; } 50% { background-color: yellow; } 100% { background-color: blue; } } .box { width: 200px; height: 200px; animation: gradientAnimation 5s linear infinite; } </style> <div class="box"></div> ``` 在上面的代码中,我们定义了一个名为gradientAnimation的@keyframes规则,它将背景颜色从红色过渡到黄色,再过渡到蓝色。然后,我们在class为box的元素上应用了这个动画,并设置动画的持续时间为5秒,动画类型为线性动画,且无限循环播放。 通过上述代码,我们可以在浏览器中看到一个长方形元素,它的背景颜色会不断从红色过渡到黄色,再过渡到蓝色,然后重新开始。这就是一个简单的CSS3渐变背景颜色动画的实现。 ### 回答3: CSS3渐变背景颜色动画是通过使用CSS3的渐变属性和动画属性来实现的。首先,我们可以使用渐变属性来定义一个渐变背景,例如使用linear-gradient(线性渐变)或radial-gradient(径向渐变)函数来定义渐变方向和颜色范围。 然后,我们可以使用动画属性来创建一个背景颜色的动画效果。我们可以定义动画的持续时间、动画类型和动画延迟等属性。通过这些属性的组合,我们可以创建出各种不同的渐变背景颜色动画效果。 例如,我们可以创建一个线性渐变背景颜色动画,让背景颜色从红色渐变到蓝色。可以使用以下CSS代码实现: ```css div { width: 200px; height: 200px; background: linear-gradient(to right, red, blue); animation: bg-animation 3s linear infinite; } @keyframes bg-animation { 0% { background: linear-gradient(to right, red, blue); } 50% { background: linear-gradient(to right, blue, green); } 100% { background: linear-gradient(to right, green, red); } } ``` 在上面的代码中,我们创建了一个div元素,并且设置了它的宽度和高度。然后,我们使用linear-gradient函数来定义一个红色到蓝色的线性渐变作为背景颜色。 接下来,我们使用@keyframes规则创建了一个名为bg-animation的动画。在动画的关键帧中,我们定义了背景颜色在0%、50%和100%时的值,分别是红色到蓝色、蓝色到绿色和绿色到红色的线性渐变。 最后,我们把动画应用到了div元素上,设置了动画的持续时间为3秒,动画类型为线性(linear),并且让动画无限循环播放。 通过这种方式,我们就可以创建出一个使用CSS3渐变背景颜色动画的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南城FE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值