酷炫的阴影3D进度条:CSS/Sass

Posted 前端大牛爱好者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了酷炫的阴影3D进度条:CSS/Sass相关的知识,希望对你有一定的参考价值。

今天我想给大家分享的是一个关于如何用CSS/Sass创建一些有趣的3D进度条的教程。了解如何使用框阴影和渐变创建逼真的外观皮肤。(源码下载在文章末尾)

我们将向您展示如何创建一些纯CSS进度条与一个特殊的3D外观。考虑本教程的一个高级CSS练习,它将让您深入了解许多有趣的3D属性和着色技术。仅使用CSS创建UI组件将训练您跳出固有思维模式的能力,在本教程中,我们将向您展示如何创建更复杂的形状、如何将其用作进度条和动画。

注意:某些CSS属性仅在现代浏览器中受支持。IE仍然不支持transform-style:preserve-3d,这是一个用于创建嵌套3D结构的关键属性;所以进度条在IE浏览器中将是扁平/无效的。


浏览器支持:Chrome  Firefox  Internet  Explorer  Safari  Opera

酷炫的阴影3D进度条:CSS/Sass

我们将在本教程中使用Sass(与Compass一起使用),因此请确保设置并了解其基础知识:

安装Sass和Sass基础


安装Compass样式表创作框架和Compass CSS3


如果你想对动画进度条使用完整的解决方案,那么你应该查看Kimmo Brunfeldt的ProgressBar.js或HubSpot的PACE,以获得出色的页面加载进度条。

为了生成所有必要的前缀,你可以使用像Autoprefixer或用于Sublime Text的插件。

我们将使用许多有趣的CSS属性,如transform,perspective和box-shadow。我们还将大量使用SASS,以节省生成进度条的位置和外观所需的很多时间。通过使用相对大小(em,百分比),我们可以确保进度条的大小易于调整。


构建面

酷炫的阴影3D进度条:CSS/Sass


我们先从构建一个包含所有六个面的框开始。这个框将作为我们的主要容器,用来设置进度条的尺寸及其视点。我们还将使用一个包装器用于透视图,并且这个包装器的font-size属性将允许使用某些em单位魔法的帮助来扩展进度条。

为了确保所有的面都是我们3D空间的一部分,我们需要将transform-style: preserve-3d应用于框。

所以让我们从初始化一些颜色变量开始来编写样式吧:

 1$light-gray#e0e0e0;
2$magenta#ec0071;
3$white#f5f5f5;
4
5.perspective {
6    font-size5em; // sets the main scale size
7    perspective12em; // sets the perspective
8    perspective-origin50% 50%;
9    text-align: center;
10}
11
12.bar {
13    display: inline-block;
14    width1em;
15    height1em;
16    margin-top1em;
17    position: relative;
18    transformrotateX(60deg);      // sets the view point
19    transform-style: preserve-3d;   // perspective for the children
20}


现在,我们来看看这些面。如果我们想要能够毫无困难地重新调整我们的主框,里面包含的面必须得像液体一样具有流动行为以及具备绝对位置。

 1.bar {
2    // -> The SCSS written before
3    .bar-face {
4        display: inline-block;
5        width100%;
6        height100%;
7        position: absolute;
8        bottom0;
9        left0;
10        background-colorrgba($light-gray, .6); // just to see what is happening
11    }
12}


写标记并且确保它是可以访问的:

 1<div class="perspective">
2    <div class="bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
3        <div class="bar-face"></div>
4        <div class="bar-face"></div>
5        <div class="bar-face"></div>
6        <div class="bar-face"></div>
7        <div class="bar-face"></div>
8        <div class="bar-face"></div>
9    </div>
10</div>

设置面

酷炫的阴影3D进度条:CSS/Sass


这是非常重要的一部分。进度条的面必须准确定向,这样当我们开始添加百分比填充时,就不会陷入困境。

 1.bar {
2    // -> The SCSS from before
3    .bar-face {
4        // -> The SCSS from before
5        transform-origin50% 100%;
6        &.roof {
7            transformtranslateZ(1em);
8        }
9        &.front {
10            transformrotateX(-90deg);
11        }
12        &.right {
13            left: auto;
14            right: -.5em;
15            width1em;
16            transformrotateX(-90deg) rotateY(90deg) translateX(.5em);
17        }
18        &.back {
19            transformrotateX(-90deg) rotateY(0deg) translateZ(-1em);
20        }
21        &.left {
22            width1em;
23            transformrotateX(-90deg)rotateY(-90deg) translateX(-.5em) translateZ(.5em);
24        }
25    }
26}


 1<div class="perspective">
2    <div class="bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
3        <div class="bar-face roof"></div>
4        <div class="bar-face front"></div>
5        <div class="bar-face left"></div>
6        <div class="bar-face right"></div>
7        <div class="bar-face back"></div>
8        <div class="bar-face floor"></div>
9    </div>
10</div>


酷炫的阴影3D进度条:CSS/Sass

好的,这是一个很棒的立方体,但是我们要为进度条创建一个矩形。如果你还记得的话,我们已经用一种液体化的方法构建了面,所以如果我们只是增加.bar类的width,那么这样就可以。在这个例子中,我们使用了4em的宽度。

酷炫的阴影3D进度条:CSS/Sass


构建百分比填充

酷炫的阴影3D进度条:CSS/Sass


百分比填充将包含在面内,并且,为了保持html代码的最小化,我们将使用伪类:before。这样生成的:before元素将显示相对于面宽度的百分比。

 1.bar {
2    // -> The SCSS from before
3    .bar-face {
4        // -> The SCSS from before
5        &.percentage:before {
6            content: '';
7            display: block;
8            position: absolute;
9            bottom0;
10            width0;
11            height100%;
12            margin0;
13            background-colorrgba($magenta, .8);
14            transition: width .6s ease-in-out;
15        }
16    }
17}


 1<div class="perspective">
2    <div class="bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
3        <div class="bar-face roof percentage"></div>
4        <div class="bar-face front percentage"></div>
5        <div class="bar-face left"></div>
6        <div class="bar-face right"></div>
7        <div class="bar-face back percentage"></div>
8        <div class="bar-face floor percentage"></div>
9    </div>
10</div>


酷炫的阴影3D进度条:CSS/Sass

现在我们需要编写百分比填充样式。手动编写一百个类将会非常繁琐,所以让我们写一些可靠的循环来从HTML中获取aria-valuenow属性的所有值。

 1.bar {
2    // -> The SCSS from before
3    .bar-face {
4        // -> The SCSS from before
5    }
6
7    @for $i from 0 to 101 {
8        &[aria-valuenow='#{$i}'] {
9            .percentage:before {
10                width: $i * 1%;
11            }
12        }
13    }
14}


如果你想立竿见影地看到成果,那么只需将HTML中的aria-valuenow属性从0更改至100。


构建皮肤

酷炫的阴影3D进度条:CSS/Sass


为了构建皮肤,我们将使用Sass mixins。为了得到一个现实化的外观,我们将使用box-shadow属性。这个属性支持一个数组的值,并且这个数组将允许我们模拟照明。我们将在这个属性中包含地面阴影和面的采光。

 1@mixin build-skin($color, $name) {
2    &.#{$name} {
3        .floor {
4            box-shadow:
5                0 -0.2em 1em rgba(0,0,0,.15),
6                0 0.2em 0.1em -5px rgba(0,0,0,.3),
7                0 -0.75em 1.75em rgba($white,.6);
8        }
9        .left {
10            background-colorrgba($color, .5);
11        }
12        .percentage:before {
13            background-colorrgba($color, .5);
14            box-shadow0 1.6em 3em rgba($color,.25);
15        }
16
17    }
18}
19.bar {
20    // -> The SCSS from before
21    @include build-skin(#57caf4, 'cyan');
22}


 1<div class="perspective">
2    <div class="bar cyan" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
3        <div class="bar-face roof percentage"></div>
4        <div class="bar-face front percentage"></div>
5        <div class="bar-face left"></div>
6        <div class="bar-face right"></div>
7        <div class="bar-face back percentage"></div>
8        <div class="bar-face floor percentage"></div>
9    </div>
10</div>


酷炫的阴影3D进度条:CSS/Sass

此外,我们需要一个照亮面的技巧。如果我们以正确的顺序输入面的DOM节点,我们将看到奇迹:

 1<div class="perspective">
2    <div class="bar cyan" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
3        <div class="bar-face roof percentage"></div>
4        <div class="bar-face back percentage"></div>
5        <div class="bar-face floor percentage"></div>
6        <div class="bar-face left"></div>
7        <div class="bar-face right"></div>
8        <div class="bar-face front percentage"></div>
9    </div>
10</div>


酷炫的阴影3D进度条:CSS/Sass

这里发生了什么?很简单:当浏览器渲染一个绝对元素时,默认情况下它会添加一个自动递增的z-index(如果我们不编辑此属性的话)。所以,如果我们通过先放置底部的面来改变渲染顺序,那么它的阴影就会覆盖在背面的所有面上。这就是我们实现现实化阴影的原理。

关于如何实现进度条就都在这里了!现在,请查看所有DEMO演示和源代码文件,然后开始构建皮肤来训练自己此技能吧。

感谢各位的阅读,希望本教程能对你有所帮助!

https://tympanus.net/codrops/2015/09/30/shaded-progress-bars-css-sass-excercise/


有你想看的 精彩 酷炫的阴影3D进度条:CSS/Sass



  


前端大牛爱好者:每天一篇前端技术文章,不定时前端干货发送

欢迎长按(扫描)二维码关注:前端大牛爱好者

   


以上是关于酷炫的阴影3D进度条:CSS/Sass的主要内容,如果未能解决你的问题,请参考以下文章

Android 酷炫的3d立体圆柱动画效果实现

仿智能社官网:原生JS实现简单又酷炫的3D立方体时钟

CSS3进阶酷炫的3D旋转透视

CSS进阶试试酷炫的 3D 视角

css3制作酷炫的相册集动画

CSS3进阶:酷炫的3D旋转透视