使用 CSS 实现一个简单的骨架屏(Skeleton Screen)

使用 CSS 实现一个简单的骨架屏(Skeleton Screen)

前言

在加载网络数据时,为了提升用户体验,通常会使用一个转圈圈的loading动画,或者使用skeleton screen占位。相比与loading动画,skeleton screen的效果要更生动,实现起来来也很简单。利用css就可以实现一个简单的skeleton screen。(什么是骨架屏(skeleton screen)?)

推荐学习:CSS视频教程、CSS教程(图文)

思路

HTML搭建骨架

CSS加样式

CSS加动画

从搭建骨架开始

骨架结构很简单,只是随意的放几个你喜欢的块级元素就ok了。

立即学习“前端免费学习笔记(深入)”;

你看,就是这样简简单单。

CSS上色

我们常看到的骨架屏是这个样子的

使用 CSS 实现一个简单的骨架屏(Skeleton Screen)

为了方便描述,增强对比,我会先做一个鬼畜版的

使用 CSS 实现一个简单的骨架屏(Skeleton Screen)

首先利用css的 linear-gradient 属性画一个红中带点绿的渐变图片,并把它当作背景填充给li标签

linear-gradient()可以创建一个多种颜色线性渐变的图片,想了解更多可以看这里

li{    background-image: linear-gradient(90deg, #ff0000 25%, #41de6a 37%, #ff0000 63%);    width: 100%;    height: 0.6rem;    list-style: none;}
使用 CSS 实现一个简单的骨架屏(Skeleton Screen)

实际使用中将渐变图换成正常的颜色,如:background-image: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%)

让它动起来

剩下要做的就是让中间的绿色动起来

你可以想一下有什么办法让它动?

这里用到的是,通过拉伸背景图片,动态设置背景定位百分比,改变背景定位,从而计算得到图片相对容器的不同偏移值,以此实现了动画的效果。

li{    background-image: linear-gradient(90deg, #ff0000 25%, #41de6a 37%, #ff0000 63%);    width: 100%;    height: 0.6rem;    list-style: none;    background-size: 400% 100%;    background-position: 100% 50%;    animation: skeleton-loading 1.4s ease infinite;}@keyframes skeleton-loading {  0% {    background-position: 100% 50%;  }  100% {    background-position: 0 50%;  }}

这里给background-position属性设置了两个值,第一个值代表水平位置相对容器的偏移,第二个代表垂直位置相对容器的偏移。

使用百分比设置background-position值时,它会执行一个计算实际定位值公式(container width - image width) * (position x%) = (x offset value),即容器和图片的宽度差乘上设置的百分比定位值,得到的结果就是实际的偏移值,将background-size的宽度设置为400%的其中一个目的就是,这样就会和容器产生宽度差。

有同学可能会问,将background-size值设为50%,也可以和容器产生宽度差。是的,但是这样,背景图片会平铺整个容器,你会惊喜的发现,绿点变成了double。

你可以试着给background-size设置不同的值,观察它的表现,并想一下为什么会这样。

最后利用关键帧动画,设置background-position在x坐标的值从100%0%

@keyframes skeleton-loading {  0% {    background-position: 100% 50%;  }  100% {    background-position: 0 50%;  }}

假设容器的宽度是100px,那么背景图片的宽度就是400px,利用上边的公式,第一帧的动画中,背景图相对容器偏移的真实值是

(100px-400px)*100% = -300px

最后一帧实际偏移

(100px-400px)*0% = 0

动画的过程实际就是一个3倍容器宽的线性背景图片相对于容器的偏移从-300px0的变化的过程。

更多相关教程推荐:《PHP编程入门教程》

以上就是使用 CSS 实现一个简单的骨架屏(Skeleton Screen)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1615442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 04:54:03
下一篇 2025年12月24日 04:54:19

相关推荐

  • css中一个冒号和两个冒号分别代表什么?

    一个冒号是伪类,两个冒号是伪元素。 (推荐学习:css快速入门) 伪类可以独立于文档的元素来分配样式,且可以分配给任何元素,逻辑上和功能上类类似,但是其是预定义的、不存在于文档树中且表达方式也不同,所以叫伪类。 伪元素所控制的内容和一个元素控制的内容一样,但是伪元素不存在于文档树中,不是真正的元素,…

    好文分享 2025年12月24日
    000
  • CSS结构性伪类选择器—nth-of-type实现自定义导航菜单案例解析(代码实例)

    本文目标: 1、掌握css中结构性伪类选择器—nth-of-type的用法 问题: 1、实现以下自定义导航菜单,且使用纯DIV+CSS,必须使用结构性伪类选择器—nth-of-type 附加说明: 1、导航宽800px,高90px,居中显示 立即学习“前端免费学习笔记(深入)”; 2、雪花背景图片宽…

    2025年12月24日 好文分享
    000
  • css选择器有哪些?哪些属性是可以继承的?

    css选择器: id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel=”external”])、伪类选择器(a:hover,…

    2025年12月24日
    000
  • 如何合理使用CSS框架?

    现在的网站风格已经与它们很早之前的样子有了很大的不同。如果现在再回过头去看有些公司最初的网站UI,我想大多数互联网用户都很难认得出来。所以也多亏了网页设计技术的创新,现在网站不仅仅是只能显示信息,它们同样也可以拥有有趣的动画、多样的布局和互动的元素。而其中,这些大部分都是由CSS来实现的。 所以CS…

    2025年12月24日
    000
  • 如何实现css代码复用

    如何实现css代码复用? (推荐学习:css快速入门) 建议如下: 1、在做CSS项目规划时,首先写好reset类代码; 因为浏览器对于标签是有默认样式的。 立即学习“前端免费学习笔记(深入)”; 2、划分CSS原子类; 一个大型的项目,会有一些常用的css规则,比如text-align,float…

    2025年12月24日
    000
  • CSS 实现拖拽改变布局大小

    利用浏览器非overflow:auto元素设置resize可以拉伸的特性实现无JavaScript的分栏宽度控制。 推荐视频教程:《CSS视频教程-玉女心经版》 webkit浏览器下滚动条可以自定义,其中resize区域大小就是scrollbar的大小,于是,我们可以将整个拉伸区域变成和容器一样高。…

    2025年12月24日 好文分享
    000
  • css实现背景图片拉伸填充

    首先我们知道用作背景图片的有两类: (推荐学习:css快速入门) 1、一整张大图,尺寸和区域大小刚好吻合; 2、一个很小的条状图,通过repeat后,形成一个很规则的大图背景。 那么如何实现背景图片拉伸填充呢? 立即学习“前端免费学习笔记(深入)”; 方法如下: 背景图尺寸(数值表示方式): 代码如…

    2025年12月24日
    000
  • 10个 你可能不熟悉的 css伪类 及其用例介绍

    css 伪类是用于向某些选择器添加特殊的效果,是动态的,指当前元素所处的状态或者特性。只有一个元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。 这篇文章在一定程度上鼓励你在构建UI时使用更简单的CSS和更少的 JS。熟悉 CSS 所提供的一切是实现这一目标的一种方…

    2025年12月24日 好文分享
    000
  • CSS Position 属性值有哪些?

    CSS Position属性值有:1、static,是position的默认值;2、fixed,生成固定定位的元素;3、absolute,生成绝对定位的元素;4、relative,生成相对定位的元素;5、inherit,继承父级属性值。 1、position: relative;相对定位 不影响元素…

    2025年12月24日
    000
  • 使用CSS如何绘制五角星?(附代码)

    下面本篇文章给大家介绍一下如何使用纯CSS绘制五角星、六角形、五边形、六边形、心形。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 1、五角星 #star-five { margin: 50px 0; position: relative; display: block; colo…

    2025年12月24日 好文分享
    000
  • 你一定要知道的css属性值规范

    1、如果值是0,通常都不用带单位 例如: .list{ border: 1px solid 0px; margin: 0px;} 改成: .list{ border: 1px solid 0; margin: 0;} 但是有个特例,就是和时间有关的时间单位都要带上秒s,如下两个都是不合法的: tra…

    2025年12月24日
    000
  • 纯css实现加号“+”效果(代码示例)

    本篇文章来给大家通过代码示例介绍一下使用纯css实现加号“+”效果的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 实现下图的加号效果: 若想实现这个效果, 只需一个div元素即可搞定。 立即学习“前端免费学习笔记(深入)”; 需要用到css的为了before和after, …

    2025年12月24日 好文分享
    000
  • 为什么不建议使用@import引入css

    不建议使用@import主要有以下两点原因: 原因一、使用@import引入CSS会影响浏览器的并行下载 使用@import引用的CSS文件只有在引用它的那个css文件被下载、解析之后,浏览器才会知道还有另外一个css需要下载,这时才去下载,然后下载后开始解析、构建render tree等一系列操作…

    2025年12月24日
    000
  • CSS 预处理器

    CSS 预处理器是什么?一般来说,它们基于 CSS 扩展了一套属于自己的 DSL(Domain Specific Language),来解决我们书写 CSS 时难以解决的问题: 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;没有变量和合理的样式复用机制,使得逻辑上相关的属性…

    好文分享 2025年12月24日
    000
  • CSS 中伪类的使用(干货)

    css 伪类是用于向某些选择器添加特殊的效果,是动态的,指当前元素所处的状态或者特性。只有一个元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。 这篇文章在一定程度上鼓励你在构建UI时使用更简单的CSS和更少的 JS。熟悉 CSS 所提供的一切是实现这一目标的一种方…

    2025年12月24日 好文分享
    000
  • 使用CSS实现皮卡丘

    前言 当我学完css和js后,冒出来一个想法。自己去实现一个可爱的卡通人物。于是我就去codepen找素材,最终选择了皮卡丘,如下图。 准备工作 在开始写皮卡丘之前,我先观察了皮卡丘的整个页面。发现如果要很好的实现这个皮卡丘你不能像写传统网页那样从左到右布局,而是要从中间布局,因为左右两边对称。理清…

    2025年12月24日 好文分享
    000
  • 如何使用css来控制页面

    使用css对页面进行全方位的控制,主要的方法有四种:行内样式、内嵌式、链接式和导入式,下面我们来分别看一下这四种方式: 一、行内样式 1、特点:最为直接的一种。 2、使用方式 直接在HTML的标记中,使用style属性,将CSS代码写在其中。 立即学习“前端免费学习笔记(深入)”; 3、举例说明 页…

    2025年12月24日 好文分享
    000
  • 利用css动画属性rotate来实现镜像翻转

    要实现镜像翻转,有两种实现方法: 方法一:利用css动画属性rotate旋转来实现 具体代码: .mirrorRotateLevel { transform: rotateY(180deg); /* 水平镜像翻转 */}.mirrorRotateVertical { transform: rotat…

    2025年12月24日
    000
  • css中实现背景透明的三种方式

    css中实现背景透明通常有如下3种方式,以下是这三种方式的不透明度为80%的写法: css3的opacity:x,x 的取值从 0 到 1,如opacity: 0.8 css3的rgba(red, green, blue, alpha),alpha的取值从 0 到 1,如rgba(255,255,2…

    2025年12月24日
    000
  • 结构性伪类选择器—nth-child实现彩色表格案例(代码实例 )

    本文目标: 1、掌握css中结构性伪类选择器—nth-child的用法 问题: 1、实现以下效果,且使用纯DIV+CSS,必须使用结构性伪类选择器—nth-child 当鼠标悬停在某个单元格上时,背景变成紫色 附加说明: 1、每个单元格宽145,带1个像素边框,左边padding为5,上下paddi…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信