如何用纯 CSS 创作一个永动的牛顿摆
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/qKmGaJ
可交互视频教程
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/cPpkyUK
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
https://github.com/comehope/front-end-daily-challenges
代码解读
定义dom,容器中包含 5 个子元素:
<div class="loader">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
</div>
居中显示:
body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: beige;
}
画出小球的挂线:
.loader {
    position: absolute;
    display: flex;
    width: 12em;
    font-size: 10px;
    justify-content: space-between;
}
.loader span {
    position: relative;
    width: 0.2em;
    height: 10em;
    background-color: black;
    transform-origin: top;
}
画出小球:
.loader span::before {
    content: '';
    position: absolute;
    bottom: 0;
    width: 3em;
    height: 3em;
    border-radius: 50%;
    background-color: black;
    left: -1.4em;
}
画出牛顿摆的挂架:
.loader {
    border-style: solid;
    border-color: black;
    border-width: 0.4em 0.1em 4em 0.1em;
    padding: 0 4em 2em 4em;
}
让最左侧的摆线晃动:
.loader span:first-child {
    animation: moving-up 0.75s cubic-bezier(0.215, 0.61, 0.355, 1) infinite alternate;
    --direction: 1;
}
@keyframes moving-up {
    0%{
        transform: rotate(0deg);
    }
    50%{
        transform: rotate(0deg);
    }
    100%{
        transform: rotate(calc(45deg * var(--direction)));
    }
}
最后,让最右侧的摆线晃动:
.loader span:last-child {
    animation: moving-up 0.75s cubic-bezier(0.215, 0.61, 0.355, 1) infinite alternate-reverse;
    --direction: -1;
}
大功告成!
原文地址:https://segmentfault.com/a/1190000015270808
如何用纯 CSS 创作一个永动的牛顿摆的更多相关文章
- 前端每日实战:50# 视频演示如何用纯 CSS 创作一个永动的牛顿摆
		效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qKmGaJ 可交互视频教程 此视频 ... 
- 50.纯 CSS 创作一个永动的牛顿摆
		原文地址:https://segmentfault.com/a/1190000015270808#articleHeader0 感想: 动画效果 + ::before + 2D转换 HTML code ... 
- 如何用纯 CSS 创作一个荧光脉冲 loader 特效
		效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/erRzzR 可交互视频教程 此视 ... 
- 前端每日实战:11# 视频演示如何用纯 CSS 创作一个荧光脉冲 loader 特效
		效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/erRzzR 可交互视频教程 此视频是可以交 ... 
- 如何用纯 CSS 创作一个渐变色动画边框
		效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odpRKX 可交互视频教 ... 
- 如何用纯 CSS 创作一个冒着热气的咖啡杯
		效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/xjXxoz 可交互视频教程 此视 ... 
- 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效
		效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/OZmXQX 可交互视频教程 此视 ... 
- 如何用纯 CSS 创作一个充电 loader 特效
		效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/deNqdV 可交互视频教程 此视 ... 
- 如何用纯 CSS 创作一个金属光泽 3D 按钮特效
		效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此 ... 
随机推荐
- day01 继承
- max函数的用法
			题目是 给你一段全英文本,求这段文本中出现次数最多的字母 import string def checkio(text): text = text.lower() return max(strin ... 
- 小程序video置顶
			page { overflow-y: none; height: 100vh; } .page__hd_media { position: fixed; width:100vw; top:; heig ... 
- JS面向对象方法(二)  面向对象方法实现橱窗式图面预览以及放大功能
			效果图: HTML结构如下: <div id="preview"> <div id="mediumDiv"> <img id=& ... 
- 【模板】平衡树——Treap和Splay
			二叉搜索树($BST$):一棵带权二叉树,满足左子树的权值均小于根节点的权值,右子树的权值均大于根节点的权值.且左右子树也分别是二叉搜索树.(如下) $BST$的作用:维护一个有序数列,支持插入$x$ ... 
- 工作的时候 用到了  获取时间 DateTime 整理了一下
			获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = DateTime ... 
- eclipse导入mavn工程报Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 的解决办法
			详细报错: Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from http://10.74. ... 
- 【转】Effective C#观后感之提高Unity中C#代码质量的21条准则
			转自:http://blog.csdn.net/swj524152416/article/details/75418162 我们知道,在C++领域,作为进阶阅读材料,必看的书是<Effectiv ... 
- 《javascript设计模式》笔记之第四章:继承
			一:首先,一个简单的继承实例: 首先是创建一个父类Person: function Person(name) { this.name = name; } Person.prototype.getNam ... 
- imageview加载本地和网络图片
			ImageView是Android程序中经常用到的组件,它将一个图片显示到屏幕上. 在UI xml定义一个ImageView如下: public void onCreate(Bundle savedI ... 
