为什么要加before,有何作用?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>loading</title>
    <style>
        .loader { 
            position: relative;
            margin: 0 auto;
            width: 100px;/*改变这个值可以改变loading大小*/

        }

        .loader:before {
            content: '';
            display: block;
            padding-top: 100%;
        }

        .circular {
            -webkit-animation: rotate 2s linear infinite;
            -o-animation: rotate 2s linear infinite;
            animation: rotate 2s linear infinite;
            height: 100%;
            transform-origin: center center;
            width: 100%;
            position: absolute;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            margin: auto;
        }

        .path {
            stroke-dasharray: 1,200;
            stroke-dashoffset:0;
            -webkit-animation: dash 1.5s ease infinite , color 6s ease infinite;
            -o-animation: dash 1.5s ease infinite , color 6s ease infinite;
            animation: dash 1.5s ease infinite , color 6s ease infinite;
            stroke-linecap: round;
        }

        @keyframes rotate {
            100%{
                transform: rotate(360deg);
            }
        }

        @keyframes dash {
            0%{
                stroke-dasharray: 1,200;
                stroke-dashoffset:0;
            }
            50%{
                stroke-dasharray: 89,200;
                stroke-dashoffset:-35px;
            }
            100%{
                stroke-dasharray: 89,200;
                stroke-dashoffset:-124px;
            }
        }

        @keyframes color {
            100%,0%{
                stroke: red;
            }
            40%{
                stroke: blue;
            }
            60%{
                stroke: green;
            }
            90%{
                stroke: yellow;
            }
        }
    </style>
</head>
<body>
    <div class="loader">
        <svg class="circular" viewBox="25 25 50 50">
            <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" ></circle>
        </svg>
    </div>
</body>
</html>

这是一个loading的svg图,不理解其中.loader:before 的作用,求大神解答。

阅读 4.1k
4 个回答

:before 绑定到loader上的伪元素,可以不要 但是loader样式就得加上高度
这里的before是为了占位,等同于

<div class="loader">
  <div class="before">
    <svg class="circular" viewBox="25 25 50 50">
        <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2"></circle>
    </svg>
  </div>
</div>


.before {
  padding-top: 100%;
}

这种问题 应该直接问 baidu 或者 google 就可以标准详细的知道了

有时候可以使用伪元素来实现标签的效果,在标签的类名中书写before和after,使用定位的方式,制作图标、层叠等,页面渲染的标签个数减少了,实际效果一样可以用JS去控制。

你可以把before那段代码去掉,然后就知道为什么了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题