导读:本期聚焦于比特币程序员创作的《css loading条想做条纹斜向移动怎么办?利用linear-gradient与keyframes模拟光栅流动效果》,敬请观看详情。进度条只会横向铺开已经不够看了,条纹斜向流动的加载效果是怎么做出来的?其实核心就两个知识点:用linear-gradient配合repeating-linear-gradient画出等宽斜条纹背景,再借助background-size把条纹铺成可平铺的图案,最后用@keyframes驱动background-position做循环位移,光栅流动感就出来了。本文会拆解background-position百分比位移的坑、background-size为什么要设成整数倍、以及如何用will-change提升动画流畅度,还会给出按钮内嵌loading条纹和环形条纹加载的完整代码。

条纹斜向移动的loading效果在各种后台系统、上传组件里出镜率极高:一段斜着的条纹像流水一样不断滑过进度条,既提示了“正在处理”,又比干巴巴的转圈更有质感。很多同学第一次尝试时容易踩坑,比如条纹明明画出来了却怎么也“动不起来”,或者一动就错位断裂。这篇就把整套实现思路掰开讲清楚,从画条纹到让它斜向流动,一步不落。

css loading条想做条纹斜向移动怎么办?利用linear-gradient与keyframes模拟光栅流动效果

一、先用linear-gradient画出等宽斜条纹

斜条纹的本质是一个重复的背景图案。原生CSS里linear-gradient本身只能画一次渐变,但只要让渐变的色标紧挨着形成硬边,再配合repeating-linear-gradient,就能得到无限平铺的斜纹。关键点在于两个颜色各占50%且没有过渡区间,这样出来的就是干净利落的条纹而不是柔和渐变。

.bar {
  height: 14px;
  border-radius: 7px;
  background: repeating-linear-gradient(
    -45deg,
    #4a90d9 0 12px,
    #2c5f9e 12px 24px
  );
}

这里的角度-45deg决定了条纹的倾斜方向,正值向左斜,负值向右斜。每个循环单元是24px(亮色12px加暗色12px),这个数值后面要用来计算位移距离,务必记住它。如果你希望条纹更细腻,把12px改小即可,但两个色段加起来的总宽度最好保持整数,方便后面做无缝循环。

另外提一句,repeating-linear-gradient和直接用linear-gradientbackground-size是等价思路,后者可控性更强,适合需要精确控制平铺尺寸的场景,下面第二节会用到这种写法。

二、用background-size铺出可平铺单元,keyframes驱动位移

要让条纹“流动”,原理是让背景图案沿着某个方向持续位移。最稳妥的做法是先用background-size把条纹限定成一个完整单元,再用@keyframes修改background-position。这里有个非常经典的坑:background-position的百分比位移计算方式很特殊——百分比值参照的是容器尺寸减去背景尺寸的差值,当背景尺寸小于容器时,百分比位移的实际距离会很难推算。所以更推荐用像素值位移。

.bar {
  height: 14px;
  background-image: linear-gradient(
    -45deg,
    #4a90d9 25%,
    #4a90d9 25%,
    #2c5f9e 25%,
    #2c5f9e 50%,
    #4a90d9 50%,
    #4a90d9 75%,
    #2c5f9e 75%
  );
  background-size: 24px 24px;
  animation: stripe-move 0.8s linear infinite;
}

@keyframes stripe-move {
  from { background-position: 0 0; }
  to   { background-position: 24px 24px; }
}

位移量为什么是24px 24px?因为45度斜条纹沿斜向移动一个完整单元,投影到x轴和y轴上正好各是24px(也就是background-size的一倍)。位移距离等于一个完整平铺单元的宽高,动画循环时首尾衔接,视觉上就是无缝的无限流动。如果你把to写成48px 48px也可以,只是速度快了一倍且同样无缝;但如果写成24px 0,条纹会在循环点断裂跳变,因为图案没有回到起点。

角度如果不是45度,位移量的计算就要按斜边投影来算。比如30度斜纹,水平位移量应为单元宽度除以对应角度的余弦值。不想算数学的话,直接用第一种repeating-linear-gradient写法,配合较大的位移值(比如200px)也能绕开精确计算,因为repeating渐变本身就是无限平铺的,只要保证位移量是单元总宽度的整数倍即可。

三、进阶:动画性能与几个实用变体

background-position动画会触发重绘,在低端机上可能出现掉帧。缓解办法是给元素加上will-change: background-position提前告知浏览器,或者把条纹层单独拆成一个绝对定位的伪元素,只对它做动画,避免影响文字层。更极致的方案是改用transform:把条纹画在一个宽度200%的内部元素上,用translateX平移它,能完全走合成器,性能最好。

/* 方案A:伪元素 + background-position */
.btn-loading::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: repeating-linear-gradient(-45deg,
    rgba(255,255,255,.35) 0 10px,
    rgba(255,255,255,.15) 10px 20px);
  animation: flow 1s linear infinite;
  will-change: background-position;
}
@keyframes flow {
  to { background-position: 28.28px 0; } /* 20px条纹单元沿水平方向的无缝位移 */
}

/* 方案B:transform 平移,性能更佳 */
.stripes {
  width: 200%;
  height: 100%;
  background: repeating-linear-gradient(-45deg, #fff 0 10px, transparent 10px 20px);
  animation: slide 1s linear infinite;
}
@keyframes slide {
  to { transform: translateX(-25%); }
}

再给两个常用变体思路。一是按钮内嵌条纹:用伪元素叠加半透明白色条纹在按钮底色上,按钮文字放上层,提交时加上loading类即可,交互成本几乎为零。二是环形条纹加载:把条纹作为某个圆形元素的背景,再用-webkit-maskmask裁出圆环形状,条纹流动加上圆环造型,观感非常接近专业组件库的spinner。

最后总结一句:条纹流动三要素——硬边渐变画条纹、background-size或repeating语法铺单元、keyframes按整数倍单元位移。掌握了这个套路,横条、斜条、环形光栅都能随手做出来,无需引入任何第三方动画库。

css loading动画linear-gradient条纹进度条修改时间:2026-09-05 21:12:49

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/51146.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。