原文:fun-times-css-pixel-art

译者:nzbin

友情提示:由于国内网络的原因,CodePen可能会打不开或者非常慢,请耐心等待!

像素艺术作为一种遗失的艺术形式,与超清晰,高分辨率图片相比黯然失色。我在 CodePen 上浏览时偶然发现了一些像素艺术,它提醒我这种艺术是多么令人敬畏!

See the Pen Pikachu pixel css by Devi Krisdiansyah (@agilBAKA) on CodePen.

是不是很酷?像素化图形中简单友好,而这是高清晰图形和插图中缺失的。

这也是教我们如何用 HTML 和 CSS 创建像素艺术的一个很好的案例。让我们分析下这个概念,并创建一个可以在其他情况下使用的模式。

创建网格

第一件事,我们需要一张绘制我们像素化作品的画布。我们有多种方式来创建网格。一种方式是使用标准的 HTML <table>元素,它的每一行都包含固定宽度的单元格。比如我们画一个八行八列的完美的正方形。如果我们设置每一个单元格 10px 宽,那么我们会得到一个 80X80 的表格。

See the Pen CSS Pixels - Table Grid Example by Geoff Graham (@geoffgraham) on CodePen.

如果想获得更大的画布就给单元格一个更大的尺寸。如果想从 8-bit 分辨率改成 16-bit 的分辨率,只需要将表格的每一行的单元格数量翻倍。

另外一种建立网格的方法是用两个 div 代替表格。其中一个作为画布的容器;另一个代表画布上的元素,可以根据我们的需要重复多次。

  1. <div class="canvas">
  2. <div class="pixel"></div>
  3. <!-- Repeat as many times as needed -->
  4. </div><!-- end .canvas -->
这种方法需要明确知道需要创建多少像素块。为此,可以通过将每行的像素数和每列像素数相乘得到。举个例子,如过我们像上面一样想创建80px的正方形,并且希望每行有8个像素点,就可以算出总共需要64个像素点。著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文: http://www.w3cplus.com/css/fun-times-css-pixel-art.html © w3cplus.com

这种方法需要明确知道要创建多少像素块。为此,可以通过将每行的像素数和每列像素数相乘得到。举例来说,如果和上面一样创建 80px 的正方形,并且希望得到 8X8 像素的网格,就可以算出总共需要 64 个像素点。

  1. .canvas {
  2. /* Perfectly square */
  3. width: 80px;
  4. height: 80px;
  5. }
  6.  
  7. .pixel {
  8. /* We'll need 64 total pixels in our HTML */
  9. width: 10px;
  10. height: 10px;
  11. float: left;
  12. }

See the Pen CSS Pixels - Div Example by Geoff Graham (@geoffgraham) on CodePen.

我喜欢这一方式的原因是它对于我们定义的画布尺寸更加真实。而且我觉得这种方式更加简单,无需编写来自 table 元素的额外的 HTML 标签。

如果我们想要更多的像素来创建更清晰的图案,那么我们可以在 HTML 标签中将像素数翻两倍,并且将每个像素的尺寸减半。这就如同你在 Photoshop 中创建了一张你打算在网页中使用的图像,为了获得更高分辨率,你把它的尺寸扩大了一倍。

  1. .canvas {
  2. /* Perfectly square */
  3. width: 80px;
  4. height: 80px;
  5. }
  6.  
  7. .pixel {
  8. /* We'll need 256 total pixels in our HTML */
  9. width: 5px;
  10. height: 5px;
  11. float: left;
  12. }

开始画图

我们给像素添加颜色在某种意义上说犹如橡胶遇到路面。我们可以使用 nth-child 属性选择网格中的元素。

  1. /* The third cell in our grid */
  2. .pixel:nth-child(3) {
  3. background: orange;
  4. }

正如你想象的那样,这个列表会很长,它取决于网格中的单元格的数量和设计的细节。文章开头的例子中使用了 1920 个像素并且超过 300 个子类选择器。天哪!

一个简单的例子

我决定做一张像素化的自画像。这个例子很简单,因为它的像素很少并且总共只有四种颜色。

See the Pen CSS Pixels - Self Portrait by Geoff Graham (@geoffgraham) on CodePen.

作为Icon的CSS像素艺术

既然我们已经有了素材,我们可以 使用 transform 性缩小图片把它作为 icon 使用。

See the Pen CSS Pixels - Self Portrait - Icon by Geoff Graham (@geoffgraham) on CodePen.

其他的像素绘制技术

box-shadow

你可以用一个元素通过复杂的 box-shadow 属性绘制像素艺术。如果你声明一个 box-shadow 的垂直和水平偏移,而没有模糊值及阴影半径,你将得到一个可以随意移动的元素形状的彩色复制体。

以下是概念实例。黑色元素是初始形状,我已经在左下角创建了一个橙色像素以及在右下角创建了一个红色像素。

See the Pen Basics of Pixel Art by Chris Coyier (@chriscoyier) on CodePen.

你可以疯狂的使用这种方式绘制整个图案。

See the Pen Pixel Hellboy by servin (@servinlp) on CodePen.

预处理

变量可以更容易地调整颜色和大小等。

以下是 less 编写的例子。

See the Pen Pixel-art hipster pacwoman by Mario Sanz (@msanz) on CodePen.

这是 Una Kravets 编写的例子, 他更进一步地使用 Sass map 创建 box-shadow,很聪明的方法。

  1. // Setting the colors we're syncing up with
  2. $pixel-color-map: (
  3. 'r' : #f00,
  4. 'w': #fff,
  5. 'k': #000,
  6. 'o': transparent,
  7. 't': #83401f,
  8. 'p': #ffbc77,
  9. 'b': #06f,
  10. 'y': #ff0,
  11. 'n': #ff8000,
  12. 'g': #5ac528
  13. );
  14.  
  15. // Mario pixel art matrices!
  16. $pixel-art:(
  17. mushroom: (
  18. (o o o o o k k k k k k o o o o o)
  19. (o o o k k r r r r w w k k o o o)
  20. (o o k w w r r r r w w w w k o o)
  21. (o k w w r r r r r r w w w w k o)
  22. (o k w r r w w w w r r w w w k o)
  23. (k r r r w w w w w w r r r r r k)
  24. (k r r r w w w w w w r r w w r k)
  25. (k w r r w w w w w w r w w w w k)
  26. (k w w r r w w w w r r w w w w k)
  27. (k w w r r r r r r r r r w w r k)
  28. (k w r r k k k k k k k k r r r k)
  29. (o k k k w w k w w k w w k k k o)
  30. (o o k w w w k w w k w w w k o o)
  31. (o o k w w w w w w w w w w k o o)
  32. (o o o k w w w w w w w w k o o o)
  33. (o o o o k k k k k k k k o o o o)
  34. )
  35. );

有很多函数可以把它转换成box-shadow并且应用它。下面是最终结果。

See the Pen Sass-Generated Box Shadow Pixel Art! by Una Kravets (@una) on CodePen.

记住box-shadow也可以做动画。

See the Pen Ash and Pikachu box-shadow Pixel Art by Andrew (@AstroDroid) on CodePen.

canvas

<canvas> 定可以绘制矩形。

  1. var canvas = document.getElementById("canvas");
  2. var ctx = canvas.getContext("2d");
  3.  
  4. ctx.fillStyle = "rgb(53, 41, 15)";
  5. ctx.fillRect(48, 0, 8, 8);
  6. ctx.fillStyle = "rgb(238, 187, 68)";
  7. ctx.fillRect(56, 0, 8, 8);

See the Pen Canvas Ark from Terranigma by Max (@MyXoToD) on CodePen.

svg

虽然 <svg> 有 <rect> ,但是你可以投机取巧使用包含更多像素的 <polygon>

See the Pen Pixel me by Aloïs De Schepper (@Alo62) on CodePen.

3D!

好吧,我想我们已经做得够多了。

See the Pen 3D Pixel Art by cx20 (@cx20) on CodePen.

该你了

我会鼓励你用自己的方式绘制像素图,但需要知道的是现在已经有了很多绘制像素图的工具。

有趣的 CSS 像素艺术的更多相关文章

  1. Vue.js快速介绍-超级马里奥像素艺术

    原文出处:Quick Introduction to Vue.js - Super Mario Pixel Art ::代码我已经归纳在github上:[vue2-pixel-art]::::__查看 ...

  2. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  3. 谈谈一些有趣的CSS题目(七)-- 消失的边界线问题

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  4. 谈谈一些有趣的CSS题目(十七)-- 不可思议的颜色混合模式 mix-blend-mode

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  5. CSS 故障艺术

    本文的主题是 Glitch Art,故障艺术. 什么是故障艺术?我们熟知的抖音的 LOGO 正是故障艺术其中一种表现形式.它有一种魔幻的感觉,看起来具有闪烁.震动的效果,很吸引人眼球. 故障艺术它模拟 ...

  6. [UWP]抄抄《CSS 故障艺术》的动画

    1. 前言 什么是故障艺术(Glitch Art 风)?我们熟知的抖音的 LOGO 正是故障艺术其中一种表现形式.它有一种魔幻的感觉,看起来具有闪烁.震动的效果,很吸引人眼球.故障艺术它模拟了画面信号 ...

  7. 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  8. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  9. 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

随机推荐

  1. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  2. Electron使用与学习--(基本使用与菜单操作)

    对于electron是个新手,下面纯属个人理解.如有错误,欢迎指出.   一.安装 如果你本地按照github上的 # Install the `electron` command globally ...

  3. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  4. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  5. 基于注解的bean配置

    基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...

  6. 自定义鼠标光标cursor

    通过css属性 Cursor:url()自定义鼠标光标. {cursor:url('图标路径'),default;} url是自定义鼠标图标路径 default指的是定义默认的光标(通常是一个箭头), ...

  7. “风投云涌”:那些被资本看中的IT企业的风光与辛酸

         进入七月份以来,纷享销客获得D轮融资1亿美元,撼动业界,资本与IT联姻令一部分创业者眼红的同时,没有人注意到背后的风险. 科技与资本的结合,是当今经济社会前行的宏大主题.相关统计显示,软件行 ...

  8. git 命令总结

    1 删除分支 git push origin :branch name(Task_******) //删除远程分支 git branch -D branch name(Task_******)     ...

  9. linux下使用shell 自动执行脚本文件

    以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 文件内容: #将tomcat ...

  10. 企业shell面试题:获取51CTO博客列表倒序排序考试题

    #!/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HTMLFILE=/home/oldboy/ht ...