如何用纯 CSS 绘制一个充满动感的 Vue logo

简介: 效果预览在线演示按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。https://codepen.io/comehope/pen/zaqKPx可交互视频教程此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/zaqKPx

可交互视频教程

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cw9WzuV

源代码下载

本地下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,一个容器中包含 3 个子元素:

<div class="vue">
    <span class="outer"></span>
    <span class="middle"></span>
    <span class="inner"></span>
</div>

居中显示:

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: radial-gradient(circle at center,lightgreen, white);
}

定义 3 层三角形的尺寸:

:root {
    --outer-w: 49em;
    --outer-h: 40em;
    --middle-w: 32em;
    --middle-h: 26em;
    --inner-w: 16em;
    --inner-h: 13em;
}

定义容器的尺寸:

.vue {
    width: var(--outer-w);
    height: var(--outer-h);
    font-size: 8px;
}

画出 3 层三角形:

.vue {
    position: relative;
    display: flex;
    justify-content: center;
}

.outer,
.medium,
.inner {
    position: absolute;
    border-style: solid;
    border-color: transparent;
    border-top-width: var(--h);
    border-top-color: var(--c);
    border-left-width: calc(var(--w) / 2);
    border-right-width: calc(var(--w) / 2);
}

.outer {
    --w: var(--outer-w);
    --h: var(--outer-h);
    --c: #42b883; /* aragon green */
}

.middle {
    --w: var(--middle-w);
    --h: var(--middle-h);
    --c: #35495e;  /* derk denim */
}

.inner {
    --w: var(--inner-w);
    --h: var(--inner-h);
    --c: white;
}

定义动画效果:

.outer,
.middle,
.inner {
    animation: animate 3s in ease-out infinite;
}

.middle {
    animation-delay: 0.1s;
}

.inner {
    animation-delay: 0.2s;
}

@keyframes animate {
    0%, 5% {
        top: -100%;
    }

    15%, 80% {
        top: 0;
        filter: opacity(1);
        transform: scale(1);
    }

    90%, 100% {
        top: 100%;
        filter: opacity(0);
        transform: scale(0);
    }
}

最后,隐藏容器外的内容:

.vue {
    overflow: hidden;
}

大功告成!

原文地址:https://segmentfault.com/a/1190000015177284
相关文章
|
JSON 前端开发 JavaScript
CSS模块postcss-modules,在jsx中实现vue里的scoped
CSS模块postcss-modules,在jsx中实现vue里的scoped
287 1
|
JavaScript 前端开发
【快捷键配置】常用HTML类名、CSS样式名称、JS方法变量名、vue代码片段
【快捷键配置】常用HTML类名、CSS样式名称、JS方法变量名、vue代码片段
|
前端开发 JavaScript
vue 动态改变css样式
vue 动态改变css样式
327 0
|
前端开发
vue+ts或者react+ts如何使用animate.css
vue+ts或者react+ts如何使用animate.css
200 0
|
前端开发
HTML+CSS动画实现动感3D卡片墙:现代Web设计的视觉盛宴
HTML+CSS动画实现动感3D卡片墙:现代Web设计的视觉盛宴
|
前端开发 JavaScript
使用Vue+CSS实现汉堡图标过渡为叉号图标,有点意思
本文分享了如何使用Vue和CSS实现一个汉堡图标在点击时过渡为叉号图标的动画效果,并提供了详细的实现代码和效果演示。
201 0
使用Vue+CSS实现汉堡图标过渡为叉号图标,有点意思
|
JavaScript 前端开发
react Or vue中引入animate.css
本文介绍了如何在React或Vue项目中引入animate.css库来使用动画效果,包括通过npm安装或在线链接引入,并展示了如何在React组件和Vue路由过渡中使用动画类。
311 0
|
JavaScript 前端开发 容器
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
377 2
若依修改,This relative module was not found:* ./@/assets/logo/logo.png in ./node_modules/css-loader/dist
若依修改,This relative module was not found:* ./@/assets/logo/logo.png in ./node_modules/css-loader/dist
若依修改,This relative module was not found:* ./@/assets/logo/logo.png in ./node_modules/css-loader/dist
|
JavaScript 前端开发
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
211 1