只用 CSS 就能做到的像素画/像素动画

这篇文章将会介绍只用 CSS 就能制作像素画·像素动画的方法。虽说纯 CSS 就能做到,但是为了更高的可维护性,也会顺便介绍使用 Sass 的制作方法。

上面的马里奥和 Minecraft 方块都没有使用 JavaScript,单纯使用 CSS 动画制作。

关于 box-shadow 属性

绘制像素点可以借助 box-shadow 属性。

原本 box-shadow 属性用于制作阴影效果,先介绍一下基本用法。

该属性的写法有几种:

box-shadow: offset-x offset-y color

box-shadow: offset-x offset-y blur-radius color

box-shadow: offset-x offset-y blur-radius spread-radius color

box-shadow: inset offset-x offset-y color

offset-x 和 offset-y 用于指定阴影偏移位置。以元素的左上角为原点,指定 XY 轴移动的位置。

color 字面意思,指定阴影颜色。

blur-radius 指定模糊效果的半径。跟 border-radius 差不多。

spread-raduis 模糊范围的扩大与缩小。

inset 关键字可以使阴影效果显示在元素内则。

文字说明或许不够形象,我们可以直接看效果:

实际效果如下,每个值会造成什么影响应该能很直观地看懂。

基础:描绘一个像素点

box-shadow 基础都明白了,就可以进入下一步:描绘一个像素点。

对一个边长 100px 的正方形使用 box-shadow:

* {

/* 为了方便看到元素而添加的边框(不加也行) */

box-sizing: border-box;

}

.container {

/* 长和宽包括 box-shadow */

width: 200px;

height: 200px;

}

.box {

/* 元素属性 */

width: 100px;

height: 100px;

border: 2px solid #777;

/* 在元素右下角相同大小的方块 */

box-shadow: 100px 100px rgba(7,7,7,.3);

}

如图所示,使用 box-shadow 描绘了一个与元素相同大小的阴影。代码的意思是把一个 100px 的方形的影子放到 (100px, 100px) 的位置。

进阶:用 box-shadow 属性绘制像素画

完成预想图

这两个都是 5✖️5 的像素画,我们先从左边开始:

.container {

/* 像素画的大小 */

width: 100px;

height: 100px;

}

.pixel {

/* 使伪元素的位置可调整 */

position: relative;

}

.pixel::before {

content: "";

/* 一个点的大小(例:20px x 20px) */

width: 20px;

height: 20px;

/* box-shadow 着色,伪元素设为透明 */

background-color: transparent;

/* 调整伪元素位置,让左上角成为(0,0) */

position: absolute;

top: -20px;

left: -20px;

}

.pixel.one::before {

box-shadow:

/* 列 行 色 */

/* 第1列 */

20px 20px #FB0600,

20px 40px #FC322F,

20px 60px #FC6663,

20px 80px #FD9999,

20px 100px #FECCCB,

/* 第2列 */

40px 20px #60169F,

40px 40px #7A23B0,

40px 60px #964DC2,

40px 80px #B681D9,

40px 100px #D8BEED,

/* 第3列 */

60px 20px #1388BC,

60px 40px #269DC9,

60px 60px #55B3D7,

60px 80px #88CAE2,

60px 100px #BFE3EF,

/* 第4列 */

80px 20px #ACD902,

80px 40px #BDE02D,

80px 60px #CDEA5E,

80px 80px #DBEF8E,

80px 100px #F4FBC8,

/* 第5列 */

100px 20px #FB8F02,

100px 40px #FDA533,

100px 60px #FDBB64,

100px 80px #FED39A,

100px 100px #FDE8C9;

}

首先,box-shadow 生产的影子大小不包括本体元素的大小,container 类的大小设为像素画完成后的大小就行。

接着,box-shadow 的影子大小由,pixel 类的大小决定,所以把 width 和 height设定为 20px。

实际的点是 before 伪元素绘制的,pixel 的 20px 正方形会在左上角留下空位,为此可以使用 position: absolute 调整。

最后使用 box-shadow 逐格绘制像素画。

接着实现右边的像素画。

.pixel.two::before {

box-shadow:

20px 20px #704b16,

40px 20px #704b16,

60px 20px #704b16,

80px 20px #704b16,

100px 20px #704b16,

20px 40px #704b16,

40px 40px #fdb778,

60px 40px #fdb778,

80px 40px #fdb778,

100px 40px #704b16,

20px 60px #fdb778,

40px 60px #333333,

60px 60px #fdb778,

80px 60px #333333,

100px 60px #fdb778,

20px 80px #fdb778,

40px 80px #fdb778,

60px 80px #fdb778,

80px 80px #fdb778,

100px 80px #fdb778,

20px 100px #fdb778,

40px 100px #c70300,

60px 100px #c70300,

80px 100px #c70300,

100px 100px #fdb778;

}

应用:使用 Sass 编写可维护像素画

上面写的几个例子,至少我是没什么信心去维护好他们。5x5 的像素画要写 25 次属性值,一般的 16x16 则是多达 256 个值。

所以,我们可以使用 Sass 编写可维护像素画。

Sass 环境搭建可以参考以下文章(日语)

https://kuroeveryday.blogspot...

Sass 使用 mixin(function 亦可)生成样式的方法:

@mixin pixelize($matrix, $size, $colors) {

$ret: "";

@for $i from 1 through length($matrix) {

$row: nth($matrix, $i);

@for $j from 1 through length($row) {

$dot: nth($row, $j);

@if $dot != 0 {

@if $ret != "" {

$ret: $ret + ",";

}

$color: nth($colors, $dot);

$ret: $ret + ($j * $size) + " " + ($i * $size) + " " + $color;

}

}

}

box-shadow: unquote($ret + ";");

}

$heart-colors: (#333, #f11416, #831200);

$heart: (

(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),

(0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0),

(0,1,2,2,2,1,0,0,0,1,2,2,3,1,0,0),

(1,2,0,0,2,2,1,0,1,2,2,2,2,3,1,0),

(1,2,0,2,2,2,2,1,2,2,2,2,2,3,1,0),

(1,2,2,2,2,2,2,2,2,2,2,2,2,3,1,0),

(1,2,2,2,2,2,2,2,2,2,2,2,2,3,1,0),

(1,2,2,2,2,2,2,2,2,2,2,2,2,3,1,0),

(0,1,2,2,2,2,2,2,2,2,2,2,3,1,0,0),

(0,0,1,2,2,2,2,2,2,2,2,3,1,0,0,0),

(0,0,0,1,2,2,2,2,2,2,3,1,0,0,0,0),

(0,0,0,0,1,2,2,2,2,3,1,0,0,0,0,0),

(0,0,0,0,0,1,2,2,3,1,0,0,0,0,0,0),

(0,0,0,0,0,0,1,3,1,0,0,0,0,0,0,0),

(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),

(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

);

.icon {

width: 20px;

height: 20px;

@include pixelize($heart, 20px, $heart-colors);

}

定义名为 pixelize 的 mixin,把像素画的矩阵($heart)像素点的大小(20px)颜色列表($hearts-colors)传入其中,即可生成 box-shadow 属性。

像素画的矩阵用数字 0~N 表示,0 为透明,1~n 为颜色列表对应颜色。

如果有代码高亮的话,像素画的图案就一目了然啦。

与原生 CSS 相比,这样简单多了吧?

如果这样都觉得麻烦,可以使用 CSS 像素画生成器~

番外篇:制作像素动画

之前 icon 类直接使用 box-shadow 属性绘制像素画,在制作像素动画时,需要使用 CSS animation。

.mario {

width: 8px;

height: 8px;

animation:

jump 1s infinite,

sprite 1s infinite;

}

/* 跳跃动作(上下移動) */

@keyframes jump {

from, 25%, 75%, to {

transform: translateY(0);

}

50% {

transform: translateY(calc(8px * -8));

}

}

/* 普通状态和跳跃状态的像素画 */

@keyframes sprite {

/* 对比 animation-timing-function: steps(n)

* 使用百分比可以更细致的调整动画时间

*/

from, 24%, 76%, to {

box-shadow: /* 普通状态的像素画 */

}

25%, 75% {

box-shadow: /* 跳跃状态的像素画 */

}

}

使用 CSS 动画修改 box-shadow 和元素的位置,看起来就像是跳起来一样。

详细代码可以在 github 仓库中了解

https://github.com/BcRikko/cs...

python 生成excel像素画_【译】只用 CSS 就能做到的像素画/像素动画相关推荐

  1. 使用python生成excel表格

    使用python生成excel表格 import datetime import xlwt# Create your tests here.# 创建excel文件 workbook = xlwt.Wo ...

  2. python 生成excel像素画_用python写一个excel画像素图脚本时所用到的一些库

    首先 ,想法源于在果壳网看到的一个用excel画一幅像素图的活动 思路很简单: 先将一张像素图的每个像素点的rgb值取出来 然后用脚本操作excel,将rgb设置为单元格的背景色 主要就在于两点 一. ...

  3. python做excel表格代码_[宜配屋]听图阁

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xlrd 2.python写excel--xlwt 1.读excel数据,包括日期等数据 ...

  4. 用python生成excel文件_python通过openpyxl生成Excel文件的方法

    本文实例讲述了python通过openpyxl生成Excel文件的方法.分享给大家供大家参考.具体如下: 使用前请先安装openpyxl: easy_install openpyxl 通过这个模块可以 ...

  5. Python生成excel表格并设置样式

    python在做爬虫时会涉及到数据存储问题,下面说一下将数据存储在excel表格中,主要使用扩展类xlwt,下面详细说一下,主要涉及到了数据列,背景,名称等参数. 说明:python3.7.windo ...

  6. python设置excel套打_用强大的Python处理海量的Excel,工作从未如此简单

    excel 欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.面试集锦.学习资料等. 前言 成堆的数据如何导入Excel进行分析? 大量的表 ...

  7. python生成excel文件的三种方式

    在我们做平常工作中都会遇到操作excel,那么今天写一篇,如何通过python操作excel.当然python操作excel的库有很多,比如pandas,xlwt/xlrd,openpyxl等,每个库 ...

  8. python连接excel存放数据_有了这篇python操作Excel学习笔记,以后储存数据 办公很轻松!...

    最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理.以前正好在一本书上看到 ...

  9. python打开excel进行编辑_使用Python进行Excel文件处理

    本章节选自本人著<Python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于 ...

最新文章

  1. 索引键的唯一性(3/4):唯一聚集索引上的唯一和非唯一非聚集索引
  2. 消息队列入门案例-环境搭建
  3. websocket 和 ansible配合Tomcat实时日志给前端展示
  4. 煮茶社区AVR开发板第二版[转]
  5. SLAM--深度滤波器
  6. Harris角点检测原理分析
  7. Java8 lambda 的使用
  8. 6N137中文说明书 光耦资料 6N137资料
  9. IP归属地查询API
  10. java中文乱码_Java中文乱码问题的解决方案
  11. 成为excel高手必须掌握的54个函数
  12. A Novel Plug-in Module for Fine-Grained Visual Classification学习
  13. 波特率(baud)与比特率(bit/s)的差别
  14. delete和delete[]的理解
  15. html 苹果 地图,为什么苹果手机自带的地图是高德而不是谷歌?
  16. 【P4】解决本地文件修改与库文件间的冲突问题
  17. Swift实战-豆瓣电台(三)获取网络数据
  18. BA-业务架构_优化“价值主张画布”,助力企业数字化赋能
  19. x230黑苹果的一点经验
  20. 云计算导论课后习题第五章

热门文章

  1. hive中groupby优化_Hive 查询优化总结
  2. 服务器怎么做虚拟空间,服务器怎么做虚拟空间
  3. linux在生活中的应用例子,LINUX操作系统在教师学生日常生活中的应用(全).docx
  4. linux操作系统巡检报告,linux服务器巡检报告
  5. python打开指定路径的excel_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...
  6. java处理报错的快捷键_java快捷键
  7. springcloud整合php,详细讲解springcloud的组件之RestTemplate集成的Ribbbon
  8. mysql 10天以前_MySQL前10天7天前
  9. 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...
  10. Git 修改commit 相关操作