Css 简明教程

CSS - Loaders

CSS loaders 是在网页加载过程中用来表明加载进度的一些动画效果。这些效果可以利用 CSS 技术实现,并且可以应用于网页的各个元素,例如旋转指示器或加载进度条。CSS 加载器通常用于改善用户体验,可以通过视觉效果来表明内容正在加载或处理。

Sample of CSS Loaders

在这里你可以看到 CSS 加载器是什么,你可能在不同的网站上看到过这种加载动画。

Table of Contents

How to Create a CSS Loader?

要使用 CSS 创建加载器,按照以下步骤操作。

  1. Create the HTML Structure: 定义一个外部 div 容器元素来保存加载器内容,和一个内部 div 容器来保存加载器。

  2. Style the Loader Container: 为加载器容器设置 * width* 和 * height* 。使用 flex 布局,将加载器元素适当居中在容器内。

  3. Style the Loader Element: 还为加载器元素设置高度和宽度。然后根据你需要的加载器的宽度和颜色设置 * border-top* 属性。此外,使用 border-radius 值 50%,来确保创建一个圆形加载器。

  4. Add Animation to the Loader: 使用 * CSS animation* 来创建加载效果。你可以利用它添加旋转效果、缩放效果以及任何其他转换效果。

  5. Define Keyframes for Animation: 为动画指定 * @keyframes rules* ,详细说明加载器如何随着时间移动或改变。

你可以使用各种颜色组合、形状、图案和动画技巧来设计加载器。使用 CSS 属性来创建你的加载器。

Basic CSS Loaders Example

以下示例演示了如何使用 CSS 创建加载器,就像在上一节中论述过的:

Example

<!DOCTYPE html>
<html>

<head>
    <style>
        .container {
            display: flex;
            justify-content: space-around;
            align-items: center;
            height: 150px;
            background-color: #e0f7e9;
            margin: 0;
        }

        .loader {
            border: 8px solid #e0f7e9;
            border-top: 8px solid #34a853;
            border-radius: 50%;
            width: 60px;
            height: 60px;
            animation: innerFrame-spin 2s ease infinite;
        }

        @keyframes innerFrame-spin {
            0% {
                transform: rotate(0deg);
            }
            100% {
                transform: rotate(360deg);
            }
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="loader"> </div>
    </div>
</body>

</html>

Create Pulsing Dots Loader

脉冲波点加载器在启动系统时常在 Windows 操作系统中使用。我们用伪类 * :nth-child* 在加载器内部设置了六个不同的 div 元素,并为每个元素设置了不同的动画延迟,从而实现了这个效果。

Example

<!DOCTYPE html>
<html>

<head>
    <style>
        .container {
            display: flex;
            justify-content: space-around;
            align-items: center;
            height: 150px;
            background-color: #e0f7e9;
            margin: 0;
        }

        .PulsingDotsLoader {
            display: flex;
            justify-content: space-around;
            align-items: center;
            width: 60px;
            height: 60px;
        }

        .PulsingDotsLoader div {
            width: 12px;
            height: 12px;
            background-color: #34a853;
            border-radius: 50%;
            animation: PulsingDotsLoader-animation 1.2s ease infinite;
        }

        .PulsingDotsLoader div:nth-child(1) {
            animation-delay: -0.6s;
        }
        .PulsingDotsLoader div:nth-child(2) {
            animation-delay: -0.5s;
        }
        .PulsingDotsLoader div:nth-child(3) {
            animation-delay: -0.4s;
        }
        .PulsingDotsLoader div:nth-child(4) {
            animation-delay: -0.3s;
        }
        .PulsingDotsLoader div:nth-child(5) {
            animation-delay: -0.2s;
        }
        .PulsingDotsLoader div:nth-child(6) {
            animation-delay: -0.1s;
        }

        @keyframes PulsingDotsLoader-animation {
            0%, 100% {
                transform: scale(1);
                opacity: 1;
            }
            50% {
                transform: scale(0.5);
                opacity: 0.3;
            }
        }

    </style>
</head>

<body>
    <div class="container">
        <div class="PulsingDotsLoader">
            <div> </div>
            <div> </div>
            <div> </div>
            <div> </div>
            <div> </div>
            <div> </div>
        </div>
    </div>
</body>

</html>

Different Types of Spinning Loaders

这个示例展示了带有多个旋转指示器的加载器。

  1. 第一个加载器有两个旋转指示器,因为我们定义了属性 * border-top* 和 * border-bottom* 。

  2. 对于第二个加载器,我们在之前定义的上方和下方值的基础上,定义了 * border-right* ,这就创建了三个旋转指示器加载器。

  3. 对于第三个加载器,我们为 border 属性定义了四个不同的值,这会创建一个四个旋转指示器加载器。

Example

<!DOCTYPE html>
<html>

<head>
    <style>
        body {
            display: flex;
            justify-content: space-around;
            align-items: center;
            height: 200px;
            background-color: #f0f0f0;
        }
        .loader {
            border: 16px solid #f3f3f3; /* Light grey */
            border-top: 16px solid blue;
            border-bottom: 16px solid blue;
            border-radius: 50%;
            width: 70px;
            height: 70px;
            animation: spin 2s linear infinite;
        }
        .second{
            border-right: 16px solid blue;
        }
        .third{
            border-top: 16px solid #ADD8E6;   /* Light Blue */
            border-right: 16px solid #87CEEB; /* Sky Blue */
            border-bottom: 16px solid #1E90FF; /* Dodger Blue */
            border-left: 16px solid #4169E1;  /* Royal Blue */
        }

        @keyframes spin {
            0% {
                transform: rotate(0deg);
            }
            100% {
                transform: rotate(360deg);
            }
        }
    </style>
</head>

<body>
    <div class="loader"> </div>
    <div class="loader second"> </div>
    <div class="loader third"> </div>
</body>
</html>

CSS Loaders Using Gradient

CSS * gradients* 可用于通过两个或更多种颜色之间平滑过渡,为加载器元素设计自定义颜色。

Example

<html>

<head>
    <style>
        .loader-test {
            width: 50px;
            height: 50px;
            padding: 10px;
            aspect-ratio: 1;
            border-radius: 50%;
            margin: 20px;
            background: linear-gradient(10deg,#ccc,red);
            mask: conic-gradient(#0000,#000),
                  linear-gradient(#000 0 0)
                  content-box;
            -webkit-mask-composite: source-out;
            mask-composite: subtract;
            animation: load 1s linear infinite;
        }
        @keyframes load {
            to{
                transform: rotate(1turn)
            }
        }
    </style>
</head>

<body>
    <div class="loader-test"> </div>
</body>

</html>