效果预览

在线演示

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

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

可交互视频教程

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

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

https://scrimba.com/c/czPkasr

源代码下载

本地下载

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

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

代码解读

定义 dom,一个容器中包含 3 个 <span>:

&lt;div class="penrose"&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;/div&gt;

居中显示:

html,
body {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
}

定义容器尺寸:

.penrose {
width: 20em;
height: 20em;
}

画出包含 3 条边的容器:

.penrose {
position: relative;
} .penrose span {
position: absolute;
width: 100%;
height: 100%;
} .penrose span:nth-child(1) {
transform: rotate(0deg);
} .penrose span:nth-child(2) {
transform: rotate(120deg);
} .penrose span:nth-child(3) {
transform: rotate(240deg);
}

为 3 条边所属的容器上色:

.penrose {
color: red;
} .penrose span {
background-color: currentColor;
} .penrose span:nth-child(1) {
filter: brightness(1);
} .penrose span:nth-child(2) {
filter: brightness(0.66);
} .penrose span:nth-child(3) {
filter: brightness(0.33);
}

用遮罩切出每一条边,组成彭罗斯三角形:

.penrose span {
clip-path: polygon(57% 0, 75% 0, 26% 85%, 89.5% 85%, 98.4% 100%, 0 100%);
} .penrose span:nth-child(2) {
top: 18.3%;
left: 43.3%;
} .penrose span:nth-child(3) {
top: 46.5%;
left: 5.9%;
}

定义旋转动画效果:

.penrose {
animation: rotating 30s linear infinite;
transform-origin: 66% 66%;
} @keyframes rotating {
0% {
transform: rotate(0deg);
} 100% {
transform: rotate(360deg);
}
}

最后,增加旋转时变色的效果:

@keyframes rotating {
0% {
color: red;
transform: rotate(0deg);
} 20% {
color: yellow;
} 40% {
color: lime;
} 60% {
color: blue;
} 80% {
color: fuchsia;
} 100% {
color: red;
transform: rotate(720deg);
}
}

大功告成!

原文地址:https://segmentfault.com/a/1190000014946883

如何用纯 CSS 绘制一个世界上不存在的彭罗斯三角形的更多相关文章

  1. 28.纯 CSS 绘制一个世界上不存在的彭罗斯三角形

    原文地址:https://segmentfault.com/a/1190000014946883 感想:三个平面图形旋转 HTML代码: <!-- penrose: 彭罗斯 --> < ...

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

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/zaqKPx 可交互视频教 ...

  3. 前端每日实战:43# 视频演示如何用纯 CSS 绘制一个充满动感的 Vue logo

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/zaqKPx 可交互视频教程 此视频 ...

  4. 如何用纯 CSS 创作一个记事本翻页动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qKOPGw 可交互视频教 ...

  5. 如何用纯 CSS 创作一个容器厚条纹边框特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/YLqbXy 可交互视频教程 此视 ...

  6. 前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jeaOrw 可交互视频 此视频是可 ...

  7. 前端每日实战:2# 视频演示如何用纯 CSS 创作一个矩形旋转 loader 特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/vjLQMM 可交互视频教程 此视频是可以交 ...

  8. 如何用纯 CSS 创作一个单元素抛盒子的 loader

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qKwXbx 可交互视频 ...

  9. 如何用纯 CSS 创作一个雷达扫描动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VdbGvr 可交互视频 ...

随机推荐

  1. super 和 this 的区别

    一 this和super关键字区别 1.子类的构造函数如果要引用super的话,必须把super放在函数的首位.2.super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)3.t ...

  2. python3网络编程

    网络编程(定义) 网络编程的本质就是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机,数据传递本身 没有多大难度,不就是把一个设备中的数据发送给一个设备,然后接收另一个设备的反馈的数据. ...

  3. Nginx-rtmp之 ngx_rtmp_send.c 文件分析

    1. 简述 1.1 RTMP 消息类型 /* RTMP message types */ #define NGX_RTMP_MSG_CHUNK_SIZE 1 #define NGX_RTMP_MSG_ ...

  4. Win10环境:使用VLC搭建RTSP服务器

      VLC 是一款自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD.音频 CD.VCD 及各类流媒体协议.既可以作为客户端来播放远程视频,也可以作为RTSP服务器对外发布视频 ...

  5. 【编程漫谈】PHP

    PHP是个很古老的脚本技术了,当年CGI比较让人诟病,于是PHP横空出世.PHP即写即用特性,吸引了一大批粉丝,而且类似C语言的编程风格,让那些C程序员非常容易地转到这个平台上来.当然PHP刚出来的时 ...

  6. nacos 使用笔记

    启动命令: 单机模式启动 start.sh -m standalone

  7. jxbrowser 监听所有网络请求 jxbrowser 系列教程2

    原文:https://blog.csdn.net/shuaizai88/article/details/73649322

  8. mysql常用操作与日志

    在linux上的mysql命令 mysql -e "mysql内部命令" #可在外部显示myslq内的输出,-e可跟多条命令用;隔开 在mysql内的mysql命令 system ...

  9. 自定义一个数组对象工具demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. JNI知识扩展

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? |- 首先,Java语言提 ...