我有彩色,动画,垂直线这样一个:
@keyframes colored { 0% { background-image: -webkit-linear-gradient(left,#c4e17f,#c4e17f 12.5%,#f7fdca 12.5%,#f7fdca 25%,#fecf71 25%,#fecf71 37.5%,#f0776c 37.5%,#f0776c 50%,#db9dbe 50%,#db9dbe 62.5%,#c49cde 62.5%,#c49cde 75%,#669ae1 75%,#669ae1 87.5%,#62c2e4 87.5%,#62c2e4); background-image: -moz-linear-gradient(left,#62c2e4); background-image: -o-linear-gradient(left,#62c2e4); background-image: linear-gradient(to right,#62c2e4); } 12.5% { background-image: -webkit-linear-gradient(left,#62c2e4,#62c2e4 12.5%,#c4e17f 25%,#f7fdca 37.5%,#fecf71 50%,#f0776c 62.5%,#db9dbe 75%,#c49cde 87.5%,#669ae1); background-image: -moz-linear-gradient(left,#669ae1); background-image: -o-linear-gradient(left,#669ae1); background-image: linear-gradient(to right,#669ae1); } 25% { background-image: -webkit-linear-gradient(left,#669ae1,#669ae1 12.5%,#62c2e4 25%,#c4e17f 37.5%,#f7fdca 50%,#fecf71 62.5%,#f0776c 75%,#db9dbe 87.5%,#c49cde); background-image: -moz-linear-gradient(left,#c49cde); background-image: -o-linear-gradient(left,#c49cde); background-image: linear-gradient(to right,#c49cde); } 37.5% { background-image: -webkit-linear-gradient(left,#c49cde,#c49cde 12.5%,#669ae1 25%,#62c2e4 37.5%,#c4e17f 50%,#f7fdca 62.5%,#fecf71 75%,#f0776c 87.5%,#db9dbe); background-image: -moz-linear-gradient(left,#db9dbe); background-image: -o-linear-gradient(left,#db9dbe); background-image: linear-gradient(to right,#db9dbe); } 50% { background-image: -webkit-linear-gradient(left,#db9dbe,#db9dbe 12.5%,#c49cde 25%,#669ae1 37.5%,#62c2e4 50%,#c4e17f 62.5%,#f7fdca 75%,#fecf71 87.5%,#f0776c); background-image: -moz-linear-gradient(left,#f0776c); background-image: -o-linear-gradient(left,#f0776c); background-image: linear-gradient(to right,#f0776c); } 62.5% { background-image: -webkit-linear-gradient(left,#f0776c,#f0776c 12.5%,#db9dbe 25%,#c49cde 37.5%,#669ae1 50%,#62c2e4 62.5%,#c4e17f 75%,#f7fdca 87.5%,#fecf71); background-image: -moz-linear-gradient(left,#fecf71); background-image: -o-linear-gradient(left,#fecf71); background-image: linear-gradient(to right,#fecf71); } 75% { background-image: -webkit-linear-gradient(left,#fecf71,#fecf71 12.5%,#f0776c 25%,#db9dbe 37.5%,#c49cde 50%,#669ae1 62.5%,#62c2e4 75%,#c4e17f 87.5%,#f7fdca); background-image: -moz-linear-gradient(left,#f7fdca); background-image: -o-linear-gradient(left,#f7fdca); background-image: linear-gradient(to right,#f7fdca); } 87.5% { background-image: -webkit-linear-gradient(left,#f7fdca,#c4e17f); background-image: -moz-linear-gradient(left,#c4e17f); background-image: -o-linear-gradient(left,#c4e17f); background-image: linear-gradient(to right,#c4e17f); } 100% { background-image: -webkit-linear-gradient(left,#62c2e4); } } .colored { margin-top: 5px; margin-bottom: 5px; height: 7px; border-top: 0; background: #c4e17f; border-radius: 5px; background-image: -webkit-linear-gradient(left,#62c2e4); background-image: -moz-linear-gradient(left,#62c2e4); background-image: -o-linear-gradient(left,#62c2e4); background-image: linear-gradient(to right,#62c2e4); animation-name: colored; animation-duration: 2s; animation-iteration-count: infinite; }
<hr class="colored">
我想知道它是否可以在一些更好的(阅读:更聪明的方式)完成.花费我一些时间来计算和准备所有的动画步骤(正在使用excell),我觉得很愚蠢.
第二个问题(基于其中一个意见)是否这个动画可以更流畅?如何完成?
解决方法
保持结构最大化,这里是我的解决方案
.colored { margin-top: 5px; margin-bottom: 5px; height: 7px; border-top: 0; background: #c4e17f; border-radius: 5px; background-image: linear-gradient(to right,#62c2e4); padding-right: 50%; background-origin: content-Box; background-size: 200%; animation-name: colored; animation-duration: 2s; animation-iteration-count: infinite; animation-timing-function: steps(8); } @keyframes colored { from {background-position: 0% 0%;} to {background-position: 200% 0%;} }
<hr class="colored">
我用步骤功能来动画化背景位置,所以颜色的离散变化很容易实现.
使用一个单一的梯度,响应和动画有点棘手.
最简单的解决方案是什么,表示背景大小为100%,不受百分比的背景位置更改的影响.
诀窍是将背景设置为只有一半的元素(用填充技巧实现),然后将尺寸设置为200%