mix-blend-mode
这个css属性估计很多人都不熟悉,在写这篇文章之前我甚至都没在项目中使用过它,阅读了相关的文章,发现这个属性非常的强大,可以代替ps做一些图层合并加滤镜的效果。
先看下效果图
他描述元素的内容与元素的父元素的内容和背景如何混合。
初始值 normal
适用元素 all elements
是否是继承属性 否
他的可选枚举值如下:这里的示例背景使用这两张图片进行说明。
示例css代码如下
.container{
width: 300px;
height: 300px;
background: url(pic1.jpg),
url(pic2.jpg);
background-size: cover;
background-blend-mode: ***;
}
首先,先上html
<div className="App">
<h1>Larva</h1>
<div className="bar"/>
</div>
- 当前文字也需要小角度左右偏移
- 需要一个横条模拟故障线条,需要垂直移动
- 文字左右有两个重影,需要水平移动
h1{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) skewX(0deg);
font-size: 64px;
font-family: Raleway, Verdana, Arial, sans-serif;
animation: skewX 5s ease-in infinite;
color:$t1;
}
@keyframes skewX {
78% {
transform: translate(-50%, -50%) skewX(0);
}
79% {
transform: translate(-50%, -50%) skewX(10deg);
}
80% {
transform: translate(-50%, -50%) skewX(-10deg);
}
81% {
transform: translate(-50%, -50%) skewX(0);
}
}
&>.bar{
position: relative;
z-index: 4;
top: 58%;
left: 50%;
transform: translate(-50%, -50%) skewX(0deg);
width: 28%;
height: 3px;
background: #fa7268;
animation: whiteMove 3s ease-out infinite;
mix-blend-mode: luminosity; // 注意这里使用了mix-blend-mode
}
}
@keyframes whiteMove {
8% {
top: 60%;
}
10% {
top: 59%;
}
12% {
top: 55%;
}
99% {
top:58%;
}
}
使用::before
和::after
这两个伪元素实现,使代码更“dry”。
&>h1::before{
display: inline-block;
content: 'Larva';
position: absolute;
top: 0;
left: 2px;
height: 0px;
color: rgba(255, 0, 0, 0.9);
z-index: 2;
animation: redShadow 1.5s ease-in infinite;
text-shadow: 0.1px 0 0 red;
mix-blend-mode: color-burn;// 注意这里使用了mix-blend-mode
}
&>h1::after{
display: inline-block;
content: 'Larva';
position: absolute;
top: 0;
left: -3px;
height: 64px;
overflow: hidden;
z-index: 3;
animation: redHeight 2s ease-out infinite;
-webkit-filter: contrast(200%);
mix-blend-mode: hard-light;// 注意这里使用了mix-blend-mode
}
@keyframes redShadow {
20% {
left: -1px;
height: 32px;
}
60% {
left: 2px;
height: 6px;
}
100% {
left: -2px;
height: 42px;
}
}
@keyframes redHeight {
20% {
height: 42px;
}
35% {
height: 12px;
}
50% {
height: 40px;
}
60% {
height: 20px;
}
70% {
height: 34px;
}
80% {
height: 22px;
}
100% {
height: 0px;
}
}