【CSS】333- 使用CSS自定义属性做一个前端加载骨架
点击上方“前端自习课”关注,学习起来~
我们在打开APP或者网站的时候,经常可以看到这样的效果,在内容加载完成之前,会有一个骨架动画的出现,这种加载方式比传统的进度条方式要友好的多,但是很多朋友都不知道这种效果是如何做出来的,下面我们一步步的来看看吧。
设计Web上的加载状态常常被忽略或被认为是事后考虑。性能不仅是前端开发人员的职责,构建与慢速连接一起工作的体验也是设计挑战。虽然前端开发人员需要注意一些事情,比如压缩和缓存,但是设计人员必须考虑UI处于“加载”或“离线”状态时的外观和行为。
速度幻觉
随着我们对移动体验的期望发生变化,我们对性能的理解也在变化。我们期望网络应用程序感觉像本机应用程序一样快速响应,无论其当前的网络覆盖范围如何。
感知性能是衡量用户感觉速度的尺度。这个想法是用户更有耐心,并且如果他们知道正在发生什么,并且在内容实际存在之前能够预测内容,那么他们会认为系统更快。这在很大程度上与管理期望和保持用户知情有关。
对于Web应用程序,这个概念可能包括显示文本,图像或其他内容元素的“模型” 称为骨架屏。可以在网上可以看到,Facebook,Google,Slack等公司使用:
(Facebook的骨架屏)
(Slack的骨架屏)
例子
假设你正在构建一个Web应用程序,这是一种旅行建议类型的东西,人们可以分享他们的旅行和推荐地点,所以你的主要内容可能看起来像这样:
您可以将该卡片缩小到其基本视觉形状(UI组件的骨架)
每当有人从服务器请求新内容时,您可以立即开始显示骨架,同时在后台加载数据。内容准备就绪后,只需将骨架换成实际卡即可。这可以使用普通的 JavaScript 或使用像 Vue/React 这样的库来完成。
现在我们可以使用图像来显示骨架,但这会引入额外的请求和数据开销。我们已经在这里加载了东西,所以等待另一个图像首先加载并不是一个好方式。此外,它没有响应,如果我们决定调整一些内容卡的样式,我们将不得不复制骨架图像的更改,以便它们再次匹配。
一个更好的解决方案是只用CSS创建整个东西。没有额外的请求,最小的开销,甚至没有任何额外的标记。我们可以用下面的方式来构建它,使以后更改设计变得更容易。
通过CSS绘制骨架
首先,我们需要绘制构成卡片骨架的基本形状。我们可以通过 background-image 属性添加不同的渐变来实现这一点。默认情况下,线性渐变从上到下运行,有不同的颜色停止过渡。如果我们只定义一个颜色停止,并使其余颜色保持透明,我们可以绘制形状。
请记住,在这块,多个背景图像堆叠在一起,因此顺序非常重要。最后一个渐变定义在后面,第一个位于前面。
这些形状拉伸来填充整个空间,就像常规的块级元素一样。如果我们想要改变它,我们必须为它们定义明确的尺寸。background-size 的值来设置每个图层的宽度和高度,保持我们使用的相同顺序 background-image:
最后一步是将元素放在卡片上。这与 position:absolute 类似,表示 left 和 top 属性的值一样。例如,例如:我们可以给头像和标题 模拟24px的填充,以匹配真实内容卡的外观。
使用自定义属性将其分解
这在一个简单的例子中效果很好, 但是如果我们想要构建一些稍微复杂的东西,那么CSS会很快变得混乱并且很难阅读。如果代码交接给另外一个前端开发人员,他们就不知道所有这些神奇的数字来是从哪里来的,显然这是不易难维护的。
于是乎,这里提出用自定义CSS属性,以更加简洁,更有利于前端开发人员的方式编写骨架样式 ,甚至可以考虑不同值之间的关系:
这不仅可读性更好,而且以后更改一些值也更容易。另外,我们还可以使用一些变量(比如头像大小、卡片填充)来定义实际卡片的样式,并始终使其与骨架版本保持同步。添加一个媒体查询来调整不同断点的骨架部分现在也非常简单:
ps:浏览器对自定义属性的支持很好,但不是100%。基本上,所有现代浏览器都有支持,IE / Edge有点晚了。对于这个特定用例,使用Sass变量很容易添加回退。
添加动画
为了使这更好,我们可以为我们的骨架设置动画,并使其看起来更像是一个加载指示器。我们需要做的就是在顶层放置一个新的渐变,然后使用它来设置其位置的动画 @keyframes 以下是成品骨架卡外观的完整骨架屏-demo:
当然你可以使用 :empty 选择器和伪元素来绘制骨架,因此它只适用于空卡片元素,一旦注入了内容,框架屏幕就会自动消失。
codercao
https://juejin.im/post/5bd07157f265da0ad221cd19
▼
原创系列推荐
▼
7. 59篇原创系列汇总
点这,与大家一起分享本文吧~
【CSS】333- 使用CSS自定义属性做一个前端加载骨架的更多相关文章
- 初识canvas,使用canvas做一个百分比加载进度的动画
canvas作为H5中重要的新增特性,使开发者可以用它来创作各种令人惊叹的作品.先来看一下浏览器对canvas的支持情况. <canvas> 标签定义图形,比如图表和其他图像,我们使用脚本 ...
- 一个link加载多个css文件
细看正则时匹配慕课网链接时发现的,一个link加载多个css文件 http://static.mukewang.com/static/css/??base.css,common/common-less ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法(转)
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 《前端之路》之 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏
目录 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & ...
- 用C3中的animation和transform写的一个模仿加载的时动画效果
用用C3中的animation和transform写的一个模仿加载的时动画效果! 不多说直接上代码; html标签部分 <div class="wrap"> <h ...
- paip.前端加载时间分析之道优化最佳实践
paip.前端加载时间分析之道优化最佳实践 1.另存为 ,查看文件尺寸..和图片. 2.view the 另存为的htm静态的文件单个的加载,看时间...可以排除编程语言的问题and 数据库.. ## ...
- 《动手实现一个网页加载进度loading》
loading随处可见,比如一个app经常会有下拉刷新,上拉加载的功能,在刷新和加载的过程中为了让用户感知到 load 的过程,我们会使用一些过渡动画来表达.最常见的比如"转圈圈" ...
随机推荐
- window,sts安装python
1.先在python官网下载最新的python安装,安装的时候勾上所有选项 官网:https://www.python.org/downloads/ 2.在sts里安装pyDev插件,我当时直接sea ...
- hdu 1087 Super Jumping! Jumping! Jumping!(动态规划DP)
Super Jumping! Jumping! Jumping!Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Java的内存分配机制
Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可 见JVM的重要性 ...
- node 后台使用增删改查(4)
无论node还是java增删改查都是一样的原理,变得是配合框架使用时候有简便方法而已. 这里我接着上一篇开始讲,使用同一个数据库(数据库创建)这里必须创建了数据库 优化:为了维护方便这里我们把sql语 ...
- vue 原生添加滚动加载更多
vue中添加滚动加载更多,因为是单页面所以需要在跳出页面时候销毁滚动,要不会出现错乱.我们在mounted建立滚动,destroyed销毁滚动. mounted () { window.addEven ...
- 记一次安卓app上线应用宝
背景:前几个月开发了一个安卓app(用的是Dcloud公司的uniapp框架),已经成功上线华为应用市场和小米应用市场.之前上线应用宝是因为没有软著,所以一直也没上线.近期甲方又提出了上架应用宝,于是 ...
- DG中模拟failover故障与恢复
问题描述:情形是当主库真正出现异常之后,才会执行的操作,那么我们执行过failover 之后,如何在重新构建DG,这里我们利用flashback database来重构.模拟前主库要开启闪回区,否则要 ...
- 程序员的进阶课-架构师之路(14)-B+树、B*树
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- 【Android - IPC】之Messenger简介
参考资料: 1.<Android开发艺术探索>第二章2.4.3 2.[Messenger完全解析] 1.Messenger概述 Messenger,译为“信使”,是Android中一种基于 ...
- C语言I作业10
问题 回答 这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10100 我在 ...