css颜色变淡和变浅方法收集(模拟sass的darken和lighten函数)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <style> :root{ --color: rgb(211,68,52); } .list{ display: flex; } .list > div{ width: 100px; height: 100px; margin-left: 20px; margin-top: 20px; } /* bg start */ @keyframes lightenBgColor { from { background-color: var(--color) } to{ background-color: #fff } } @keyframes darkenBgColor { from { background-color: var(--color) } to{ background-color: #000 } } /* bg end */ /* property start */ @keyframes lightenColor { from { --lightenColor: var(--color) } to{ --lightenColor: #fff } } @keyframes darkenColor { from { --darkenColor: var(--color) } to{ --darkenColor: #000 } } @property --lightenColor { syntax: '<color>'; inherits: false; initial-value: #fff; } @property --darkenColor { syntax: '<color>'; inherits: false; initial-value: #000; } /*color-mix获取中间色*/ .con1{ --darken: color-mix(in srgb, var(--color), #000 20%); background-color: var(--darken); } .con2{ --lighten: color-mix(in srgb, var(--color), #fff 20%); background-color: var(--lighten); } /*用黑透明或白透明遮罩蒙层获取中间色*/ .con4{ background: linear-gradient(rgba(255,255,255,.2) 0 0), linear-gradient(var(--color) 0 0); } .con3{ background: linear-gradient(rgba(0,0,0,.2) 0 0), linear-gradient(var(--color) 0 0); } /*动画获取中间色*/ .con5{ animation: darkenBgColor .001s 0.2 linear forwards; } .con6{ animation: lightenBgColor .001s 0.2 linear forwards; } /*@property颜色变量获取中间色,比直接使用属性更具通用性*/ .con7{ background-color: var(--darkenColor); animation: darkenColor .001s 0.2 linear forwards; } .con8{ background-color: var(--lightenColor); animation: lightenColor .001s 0.2 linear forwards; } /*滤镜和透明度获取中间色*/ .con9{ background-color: var(--color); filter: brightness(.8); } .con10{ background-color: var(--color); opacity: .8; /* filter: brightness(1.2) */ /* 效果不同 */ } </style> <div class="list"> <div class="con1"></div> <div class="con2"></div> </div> <div class="list"> <div class="con3"></div> <div class="con4"></div> </div> <div class="list"> <div class="con5"></div> <div class="con6"></div> </div> <div class="list"> <div class="con7"></div> <div class="con8"></div> </div> <div class="list"> <div class="con9"></div> <div class="con10"></div> </div> </body> </html>
颜色变浅和变淡的方法主要有,color-mix混合,多背景颜色重叠,动画渐变截断,亮度滤镜,透明度等。
动画获取中间色的原理,animation可以颜色动画,即从一种颜色变化到另一种颜色。动画播放次数可以是小数,比如0.2次。再给动画一个极小的播放时间,就可以在页面上直接显示出一个中间色。