发布于 2026-01-06 2 阅读
0

让我们一起制作并享用这些 CSS3 进度条吧!🍭

让我们一起制作并享用这些 CSS3 进度条吧!🍭

你现在还吃糖果吗?条纹糖?🍭 我小时候超爱吃。那我现在喜欢什么呢?我喜欢CSS。🤩

咱们开始吧。我们要把一个“甜美”的条纹糖果棒变成进度条。因为……说实话,默认的 HTML 代码<progress>太糟糕了。你看这……

进度条

我们可以把它变成一个更“甜蜜”的版本,而且不需要任何<progress>……听起来很棒吧?让我们开始吧!

糖果 GIF

是时候让糖果重现昔日荣光了🥺

先把HTML代码写完🤪

因为……嗯,你需要一些东西来装饰一下?我们想要实现的是下面这种加载/旋转的糖果棒:

加载中糖果色 GIF

如果你戴上前端眼镜仔细观察,你会发现我们需要用到两个图层或元素。首先是条形图支架元素,它上面才是真正的红色糖果棒。所以,这就是我们开始的地方:



<div>
  <span></span>
</div>


Enter fullscreen mode Exit fullscreen mode

div是我们的容器,我们将在其上添加一个元素,span使其成为一个内联容器。以下是它在 Chrome 开发者工具中的显示效果:

层

肤色的元素是我们的 div 元素,蓝色的 span 元素就位于这个 div 元素之上。

让我们把它做成糖果的样子🍭

接下来是精彩的部分。首先,给它div添加一个类,loading-bar然后在 CSS 中,我们需要这样设置它的样式:



.loading-bar {
  position: relative;
  margin: 0 auto;
  height: 50px;
  width: 30%;
  border-radius: 50px;
}


Enter fullscreen mode Exit fullscreen mode

现在,relative这里的定位是可选的,因为我们没有显式地设置 `<div>` top、 `<span> ` 或left` <span>` 属性的值来定位它。我们只是通过将`<div> ` 的 `top` 和 `bottom` 属性设置为 `0` ,`left` 和 `right` 属性设置为 `0` 来将其居中于文档。设置默认值是必要的因为如果没有这些值,我们将无法看到该 div。这些值可以根据您希望加载条的大小而定。一个漂亮的圆形也是一个不错的选择,可以使其看起来像一个加载条。bottomrightbodymargin0autowidthheightborder

现在你什么都看不到,因为默认情况下,该 div 元素和 body 元素的颜色都是白色的。尝试background-color: orangered;向该 div 元素添加内容,你就能得到基础容器了。

接下来,我们需要添加那些时髦的糖果条纹,具体步骤span如下:



span {
  display: block;
  position: relative;
  height: 100%;
  width: 100%;
  border-radius: 50px;
  background-image: linear-gradient(to bottom, #fac4c0, #f60000 60%);
  box-shadow: 
    inset 0 2px 9px  rgba(255,255,255,0.3),
    inset 0 -2px 6px rgba(0,0,0,0.4);
  overflow: hidden;
}


Enter fullscreen mode Exit fullscreen mode

块级显示确保元素框为块级样式,且元素前后留有相等的空间。这次我们需要它占据父元素(即 div)100% 的面积,因此我们为其设置了相应的宽度、高度和边框半径值。任何超出 span 范围的元素(如果存在)都会被裁剪掉,方法是将 `width` 的值设置为overflow`0` hidden

不过,你还是什么都看不到 :( 我们需要添加一些颜色!我们通过使用一个linear-gradient180° 角的渐变来实现这一点。鲜红色#f60000占据了总渐变值的 60%。这样一来,你就能看到我们的加载器有了渐变效果!

完全可选……

现在要增加一些层次感,让它看起来更像糖果。我们添加两个阴影值。第一个是顶部的白色阴影,第二个是底部的黑色阴影。关键是要使用阴影,inset让它看起来像是从一侧照射过来的。这类阴影绘制其容器内。

加条纹!🌈

我们快成功了!对我来说,没有条纹的糖果看起来很糟糕。要做到这一点,我们需要了解::afterCSS 中的伪元素。根据Mozilla 开发者网络 (MDN) 的文档:

在 CSS 中,`::after`会创建一个伪元素,该伪元素是所选元素的最后一个子元素。它通常用于向具有 `content` 属性的元素添加装饰性内容。默认情况下,它是行内元素。

它对我们有什么帮助呢?嗯,我们用 ::after! 创建条纹伪元素。



span:after {
  content: "";
  position: absolute;
  top: 0px; left: 0; bottom: 0; right: 0;
  background-image: linear-gradient(
    -45deg, 
    rgba(255, 255, 255, .2) 25%, 
    transparent 25%, 
    transparent 50%, 
    rgba(255, 255, 255, .2) 50%, 
    rgba(255, 255, 255, .2) 75%, 
    transparent 75%, 
    transparent
  );
  z-index: 1;
  background-size: 50px 50px;
  border-top-right-radius: 8px;
  border-bottom-right-radius: 8px;
  border-top-left-radius: 20px;
  border-bottom-left-radius: 20px;
  overflow: hidden;
}


Enter fullscreen mode Exit fullscreen mode

每个伪元素都必须有一个contentcontent 属性。无论 content 的值是什么,它都会用新生成的值替换原元素。例如content: "🍬";,如果你添加了 `::after`,那么之前 div 显示的内容现在将被替换为“🍬”。很棒吧?但是我们不希望新创建的 `::after` 元素内有任何内容。它会显示在 `span` 元素内,完全没用……直到我们什么都不放!这就是为什么我们直接使用' '空值的原因。

Stripe 的神奇之处就在这里!我们使用background-image属性来添加一个大渐变。让我们逐一解读:

  • -45deg这就是我们梯度倾斜的角度。
  • rgba(255, 255, 255, .2) 25%:白色(RGB 格式中值为 255 表示白色),不透明度为 0.2。25% 是它在整个元素中所占的面积。
  • transparent 25%:一种透明的颜色值,其面积占总面积的 25%。

我们主要关注三个价值观。如果您只遵循这三个价值观,不会有太大改变。现在,请仔细观察条纹图案……

进步糖果静止

我们可以看到,如果多个颜色停止点位于同一位置,它们会产生从第一个到最后一个的过渡效果。因此,最终呈现的效果是颜色在该位置突然改变,而不是平滑过渡。这一切都得益于 CSS3 中支持颜色停止点的属性,该属性在W3C 草案background-image中有所规定

这样,在整个跨度上重复几次之后(这次不要忘记使用绝对定位),我们就得到了非常适合我们糖果的条纹图案!

默认background-size将元素宽度和高度都设置为 50%,这似乎比较合理。此外,我们需要在容器内创建这些条纹,因此我们使用 overflow 属性,并border针对所有四个方向设置父级 div 的特定属性。

让它动起来!🎬

真正的加载现在开始。我们选中新创建的 ::after 元素,创建一个animate类,然后选择它下面的 span 元素。定义动画持续1s时间,使其无限循环。



.loading-bar > span:after, .animate > span > span { 
  animation: load 1s infinite;
}


Enter fullscreen mode Exit fullscreen mode

现在很简单了。我们想要实现的是条纹位置的动画效果。初始的div元素保持固定位置,条纹在其上方移动,表示后台正在加载内容。



@keyframes load {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: 50px 50px;
  }
}


Enter fullscreen mode Exit fullscreen mode

我们从零开始,宽度和高度分别设置为 50 像素。瞧!看起来真不错。🤤

以下是实现这个糖果加载器的 CodePen 代码:

那么,谁准备好吃那颗糖了?👀

吃糖果


接下来去哪儿?🤔

来点儿小技巧!这次我们刚做了个加载器,不如再做一个真正的糖果“进度条”?这次,条纹会在支架上移动,从左到右移动,就像在加载一样。这就是我说的:

糖果装载机 GIF

如果你在制作过程中遇到困难,别担心,可以看看我制作的CodePen 示例

感谢阅读,非常感谢!祝您今天过得愉快。(✿◕‿◕✿)


你试过用 Microsoft Docs 了吗?

我们不是说它会改变你的编程方式,但也不是说它不会。😉

快来看看:https://t.co/4o3bkwcdoq

图片来源:https://t.co/h1wgHdR7Uc #DevHumour #Programming pic.twitter.com/TPl6vZCc5Z

— Microsoft Developer UK (@msdevUK) 2020年6月17日

📫 订阅我的每周开发者简讯 📫

PS:从今年开始,我决定在 DEV Community 上发表文章。之前我是在 Medium 上写作。如果有人想看看我的文章,是我的 Medium 个人主页。
文章来源:https://dev.to/vaibhavkhulbe/let-s-make-and-eat-those-css3-progress-bars-217a