CSS3之渐变

164 阅读3分钟

  开篇词,建议熟悉 正则表达式的基础关键词,如: ?、+等,加深了解css的数据格式

linear-gradient

  语法: linear-gradient([ <angle> | to <side-or-corner> ,]? <color-stop-list>)

如果多个色标具有相同的位置,它们会产生一个无限小的过渡区域, 过渡的起止色分别是第一个和最后一个指定值。从效果上看,颜色会在那 个位置突然变化,而不是一个平滑的渐变过程

<color-stop-list> 类型知识点属性值写法
1、渐变颜色至少要两个颜色值linear-gradient(white, skyblue)
2、位置值必须在颜色值后面linear-gradient(white, skyblue 30%, yellow 50%, green)
3、可以不指定颜色的位置,不指定时,将按照颜色值个数进行等分linear-gradient(red, orange, yellow, green)
4、起点颜色和终点颜色与相邻颜色一致时,则 起点色值和终点色值可以省略linear-gradient(white, white 25%, skyblue 75%, skyblue)linear-gradient(white 25%, skyblue 75%)
5、渐变的断点位置可以是负数,也可以大于100%linear-gradient(white -25%, lightseagreen, skyblue 110%)
6、在同一个渐变中,不同类型的断点位置值可以同时使用linear-gradient(white 100px, skyblue 50%)
7、若存在多个渐变断点,前一个断点位置值大于后一个断点位置值。则后一个断点位置值会按前一个断点位置值计算linear-gradient(white 20px, lightseagreen 0px, skyblue 50%)
8、渐变断点值支持一次性设置两个位置值linear-gradient(white 40%, skyblue 40% 60%, white 50%)
<div class="least-two">渐变颜色至少两个值</div>
<div class="color-after">位置值必须在颜色值后面</div>
<div class="none-position">不指定位置值时,将按颜色值个数进行等分</div>
<div class="start-end">起点颜色和终点颜色与相邻颜色一致时,则 起点色值和终点色值可以省略</div>
<div class="none-limit-num">渐变断点位置可以为负数,也可以大于100%</div>
<div class="together">在同一个渐变中,不同类型的断点位置可以同时使用</div>
<div class="max-before">前一个断点位置值大于后一个断点位置值,后一个断点位置值以前一个断点位置值计算</div>
<div class="two-position">渐变断点值支持一次性设置两个位置值</div>
  
// css
<style>
div {
  width: 150px;
  height: 150px;
  margin: 20px;
  padding: 20px;
  float: left;
  border: 1px solid gold;
}

.least-two {
  background-image: linear-gradient(white, skyblue);
}

.color-after {
  background-image: linear-gradient(white, skyblue 30%, yellow 50%, green);
}

.none-position {
  background-image: linear-gradient(red, orange, yellow, green);
}

.start-end {
  background-image: linear-gradient(white, white 25%, skyblue 75%, skyblue);
}

.none-limit-num {
  background-image: linear-gradient(white -50%, lightseagreen, skyblue 110%);
}

/* 50%比110px小,则蓝色断点 位置值为110px,前后断点一致 颜色急变 */
.together {
  background-image: linear-gradient(white 110px, skyblue 50%);
}

.max-before {
  background-image: linear-gradient(white 20px, lightseagreen 0px, skyblue 50%);
}

.two-position {
   /* 等同于: linear-gradient(white 40%, skyblue 40%, skyblue 60%, white 50%) */
  background-image: linear-gradient(white 40%, skyblue 40% 60%, white 50%);
}
</style>

image.png

repeating-linear-gradient

  语法:repeating-linear-gradient([ <angle> | to <side-or-corner> ,]? <color-stop> [, <color-stop>]+) 是线性渐变的重复表现形式。

<div class="repeating"></div>
// css
<style>
.repeating {
  width: 150px;
  height: 150px;
  border: 1px solid salmon;
  background-image: repeating-linear-gradient(lightseagreen, lightseagreen 10px, lightskyblue 10px 20px);
}
</style>

radial-gradient

  radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list>)

数据结构
<ending-shape>默认值: 圆 circle, ellipse
<size>径向渐变的半径 默认值:终止于元素边框内边缘 <extent-keyword> | <length [0,∞]> |<length-percentage [0,∞]>{2}
<position>默认值:正中央 距离左上角x y两个方向的距离,指定圆中心位置
<color-stop-list>参考 linear-gradient
<extent-keyword>closest-corner | closest-side | farthest-corner | farthest-side
<div class="radial-gradient">radial-gradient</div>
<div class="position">调整圆心范围-position</div>
<div class="keyword">调整渐变范围 extent-keyword</div>
<div class="length">调整渐变范围 length</div>
  
// css
<style>
div {
  float: left;
  width: 200px;
  height: 100px;
  margin: 20px;
  padding: 20px;
  border: 1px solid lightcoral;
}
.radial-gradient {
  background-image: radial-gradient(circle, red 1px, white 1px 20%, lightseagreen, lightskyblue);
}

.position {
  background-image: radial-gradient(at right 20px top 20px, red 1px, white 1px 20%, lightseagreen 40%, lightskyblue);
}

.keyword {
  background-image: radial-gradient(farthest-side at top 20px left 20px, red 1px, white 1px 20%, lightseagreen 20%, lightskyblue);
}

.length {
      background-image: radial-gradient(circle 100px at top 20px left 20px, red 1px, white 1px 20%, lightseagreen 20% 40%, red 40%, 99%, lightskyblue);
}
</style>

image.png

repeating-radial-gradient

conic-gradient

  语法:conic-gradient( [ [ from <angle> ]? [ at <position> ]? ] || <color-interpolation-method> , <angular-color-stop-list> )

  conic-gradient 锥形渐变主要由 3 部分组成:起始角度中心位置角渐变断点。具体语法: MDN语法参考

<div class="basic"></div>
<div class="pie-charts"></div>
<div class="cell"></div>

<style>
div {
  width: 100px;
  height: 100px;
  margin: 25px;
  float: left;
  border: 1px solid salmon;
}
.basic {
  background-image: conic-gradient(from 45deg at 30% 30%, red 40deg, orange 40deg 80deg, yellow 80deg 180deg, green 180deg 240deg, blue 240deg 300deg, cyan 300deg 330deg, purple 330deg);
}

.pie-charts {
  background-image: conic-gradient(lightseagreen 40deg, lightgreen 40deg 200deg, salmon 200deg);
  border-radius: 50%;
}

.cell {
  background-image: conic-gradient(#eee 90deg, transparent 90deg 180deg, #eee 180deg 270deg, transparent 270deg 0deg);
  background-size: 20px 20px;
}
</style>

image.png

repeating-conic-gradient

综合运用主要是结合 background-imageborder-image属性。需要练习,推荐 b站前端小智,每天一个练习~~~