挑战!如何一行CSS实现花式条纹

难题

无论是在网页设计中还是杂志墙纸中,条纹总是无处不在。如何实现或者获取这些条纹呢?最简单的方法当时就直接切图,但其实可以直接CSS中创建丰富且美丽的条纹图案。

解决方案

第一次尝试

假设我们现在已经有一条基本的垂直线性渐变,颜色从 #fb3 过度到 #58a

这么美丽的图案用一句linear-gradient属性就可以实现!

background: linear-gradient(#fb3, #58a);

第二次尝试

现在我们可以进一步,将俩个色标拉得更近一些,添加第二个属性值 background: linear-gradient(#fb3 20%, #58a 80%);

这样就实现了容器顶部20%的区域被填充#fb3 底部20%的区域填充#58a 真正的渐变颜色只出现在容器虚线之间的60%的区域。 如果我们将参数设为40% 和 60% 那么相应的渐变区间就只有中间的20%了

突破性发现

如果我们将参数均分 也就是都为50%又是什么效果呢? 一起见证一下!

那么其实这样就实现了俩条巨大的水平条纹

但是如果就是这样的话那也太贫乏了,我们加上background-size属性来调节尺寸

css 复制代码
background: linear-gradient(#fb3 50%, #58a 50%);
 background-size: 100% 60px;

background-size第一个参数设置宽度,第二个参数设置高度。 我们将俩条条纹单位总共设置为60px 那么每个就均分30px。由于背景在默认情况下时重复平铺的,整个容器其实已经被填满了水平条纹。

再次尝试

我们可以创建不等宽的条纹,只需调整色标的位置即可

css 复制代码
 background: linear-gradient(#fb3 20%, #58a 20%);
 background-size: 100% 60px;

总结计算方法就是:

第一个色素的高度 = background-size.height * percentage

第一个色素的高度 = background-size.height * (1 - percentage)

应用到上面的例子

#fb3的高度 = 60px * 20 % = 12px

#fb3的高度 = 60px * (1 - 20 %) = 48px

那么其实第二个色块百分之值就可以简化, 也可以实现同样的效果

css 复制代码
background: linear-gradient(#fb3 20%, #58a 0);
 background-size: 100% 60px;

如果按照这样的规则要实现三条条纹该怎么写?四条呢?

揭晓答案!

background: linear-gradient(#fb3 33.3%, #58a 0,#58a 66.6%, yellowgreen 0);

background: linear-gradient(#fb3 25%, #58a 0,#58a 50%,yellowgreen 0,yellowgreen 75%,red 0);

现在我们水平条纹已经写的很6了,那看看垂直条纹该如何实现呢

垂直条纹

垂直条纹其实就是增加一个参数来制定渐变的方向,同时background-size 也需要交换一下

css 复制代码
background: linear-gradient(to right,//或者90deg
  #fb3 33.3%, #58a 0,#58a 66.6%, yellowgreen 0);
 background-size: 60px 100% ;

那么顺着一想,如果我们想实现斜向条纹是不是改个角度比如45deg就可以实现呢

css 复制代码
background: linear-gradient(45deg,
  #fb3 50%, #58a 0);
 background-size: 30px 30px ;

看起来好像不太妙,其实单个贴片包是包含四条条纹,这样才能做到无线连接 ,因此我们需要加一些色带

css 复制代码
background: linear-gradient(45deg,
  #fb3 25%, #58a 0,#58a 50% ,
  #fb3 0,#fb3 75%, #58a 0);
 background-size: 30px 30px ;

但是可以观察其实这里的宽度并没有我们预想的30px,应该只是 (30 / 根号2)px, 如果想要条纹的宽度有30px 那么我们属性设置时 background-size: (30px * 根号2) (30px * 根号2) ;

但是如果想要倾斜30度或者60度其他的度数呢,如何保证预想的宽度值呢?

其实, 我们还有更好的办法来创造斜向条纹,一个比较鲜为人知的属性:repeating-linear-gradient()

css 复制代码
 background:repeating-linear-gradient(45deg,
   #fb3, #58a 30px);

那用这个属性如何实现上一个图像呢

css 复制代码
background:repeating-linear-gradient(45deg,
   #fb3 0,#fb3 15px, #58a 0,#58a 30px);

灵活的同色系条纹

在大多数情况下,我们其实不需要对比性那么强烈的色差,我们需要的颜色往往属于同一色系,我们来看看接下来的这个图案:

css 复制代码
 background:repeating-linear-gradient(45deg,
   #79b 0,#79b 30px, #58a 0,#58a 60px);

图中可以看到条纹是由一个主色调#58a和它的浅色调组成的, 我们其实还有一个办法,就是把最深的颜色作为背景色,浅色的条纹叠加在背景色之上来得到图形:

css 复制代码
  background : #58a;
  background-image : repeating-linear-gradient(30deg,
  hsla(0, 0%, 100%, .1),
  hsla(0, 0%, 100%, .1) 30px,
  transparent 0, transparent 60px);

这样就可以实现上面一样的效果,虽然看起来代码量要多一些,但是现在只需要修改background颜色就又可以得到新的图案,还可以对不支持CSS渐变的浏览器起到回退的作用✨

最后

更多实现css美丽图案~ projects.verou.me/css3pattern...

相关推荐
Leyla12 分钟前
【代码重构】好的重构与坏的重构
前端
影子落人间15 分钟前
已解决npm ERR! request to https://registry.npm.taobao.org/@vant%2farea-data failed
前端·npm·node.js
世俗ˊ40 分钟前
CSS入门笔记
前端·css·笔记
子非鱼92140 分钟前
【前端】ES6:Set与Map
前端·javascript·es6
6230_44 分钟前
git使用“保姆级”教程1——简介及配置项设置
前端·git·学习·html·web3·学习方法·改行学it
想退休的搬砖人1 小时前
vue选项式写法项目案例(购物车)
前端·javascript·vue.js
加勒比海涛1 小时前
HTML 揭秘:HTML 编码快速入门
前端·html
啥子花道1 小时前
Vue3.4 中 v-model 双向数据绑定新玩法详解
前端·javascript·vue.js
麒麟而非淇淋1 小时前
AJAX 入门 day3
前端·javascript·ajax
茶茶只知道学习2 小时前
通过鼠标移动来调整两个盒子的宽度(响应式)
前端·javascript·css