css - 现有按钮上的循环渐变效果
问题描述
我有一个已经存在的按钮:
<div class="button-loader locationButton brandBlue fontMediumTitle " id="locationButton"></div>
我希望能够button-loader
向这个按钮或任何其他按钮添加一个类,并且
- 保持当前的背景颜色
- 在一个循环中从左到右再返回动画- 所以我从原始颜色开始并从左到右更改它
opacity
并返回到原始颜色。(比如说它从左侧变为 0.5 的不透明度,从右侧变为 1.0)
.button-loader {
width: 100%;
height: 100%;
display: block;
background: linear-gradient(to right, rgba(245, 245, 245, 0.95), rgba(255, 255, 255, 0.0));
background-size: 200% 100%;
background-position: right bottom;
transition: all 1.5s ease-out;
}
.button-loader:hover {
background-position: left bottom;
}
当前代码不会永远循环并且不会在动画开始之前保持原始颜色(它已经渐变)
解决方案
考虑伪元素上的渐变,而不是您可以轻松保留初始背景颜色的地方:
.button-loader {
width: 100px;
height: 100px;
border:1px solid;
background-size: 200% 100%;
transition: all 1.5s ease-out;
position:relative;
z-index:0;
}
.button-loader:before {
content:"";
position:absolute;
z-index:-1;
top:0;
right:0;
left:0;
bottom:0;
background: linear-gradient(to right,rgba(255, 255, 255, 0.0), rgba(245, 245, 245, 0.95) 40% 60%, rgba(255, 255, 255, 0.0));
background-size:600% 100%;
background-position:right;
transition:1s all;
}
.button-loader:hover:before {
background-position:left;
}
<div class="button-loader" style="background:blue;"></div>
<div class="button-loader" style="background:red;"></div>
<div class="button-loader" style="background:linear-gradient(red,purple);"></div>
对于无限动画,您可以用动画替换过渡:
.button-loader {
width: 100px;
height: 100px;
border:1px solid;
background-size: 200% 100%;
transition: all 1.5s ease-out;
position:relative;
z-index:0;
}
.button-loader:before {
content:"";
position:absolute;
z-index:-1;
top:0;
right:0;
left:0;
bottom:0;
background: linear-gradient(to right,rgba(255, 255, 255, 0.0), rgba(245, 245, 245, 0.95) 45% 55%, rgba(255, 255, 255, 0.0));
background-size:600% 100%;
background-position:right;
animation:change 1s infinite linear;
}
@keyframes change {
to {
background-position:left;
}
}
<div class="button-loader" style="background:blue;"></div>
<div class="button-loader" style="background:red;"></div>
<div class="button-loader" style="background:linear-gradient(red,purple);"></div>
您还可以为翻译设置动画以获得更好的性能:
.button-loader {
width: 100px;
height: 100px;
border:1px solid;
background-size: 200% 100%;
transition: all 1.5s ease-out;
position:relative;
z-index:0;
overflow:hidden;
}
.button-loader:before {
content:"";
position:absolute;
z-index:-1;
top:0;
right:0;
width:600%;
bottom:0;
background: linear-gradient(to right,rgba(255, 255, 255, 0.0), rgba(245, 245, 245, 0.95) 45% 55%, rgba(255, 255, 255, 0.0));
animation:change 1s infinite linear;
}
@keyframes change {
to {
transform:translate(84%);
}
}
<div class="button-loader" style="background:blue;"></div>
<div class="button-loader" style="background:red;"></div>
<div class="button-loader" style="background:linear-gradient(red,purple);"></div>
推荐阅读
- c# - 反序列化列表
从 fetch 调用时...C# - unity3d - 我们如何在 Unity3D 的实体组件系统中获得刚体行为?
- vb.net - 我可以为从我的程序启动的进程设置标识属性吗?
- nativescript - 运行 tns 资源生成图标杀死 iOS 应用程序
- angularjs - 如何修复此代码以在网页上显示内容?
- css - 如何居中一个很棒的图标和跨度
- java - 在 Android Studio 中找不到 getExternalFilesDir() 函数的上下文
- r - 如何将套索和岭回归拟合(Glmnet)叠加到数据上?
- python - 删除第一组之后出现的重复组
- python - 了解 Pandas DataFrame 中 dtypes 支持类型的简单方法