有趣的 CSS 像素艺术
原文: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 代替表格。其中一个作为画布的容器;另一个代表画布上的元素,可以根据我们的需要重复多次。
<div class="canvas">
<div class="pixel"></div>
<!-- Repeat as many times as needed -->
</div><!-- end .canvas -->
这种方法需要明确知道需要创建多少像素块。为此,可以通过将每行的像素数和每列像素数相乘得到。举个例子,如过我们像上面一样想创建80px
的正方形,并且希望每行有8
个像素点,就可以算出总共需要64
个像素点。著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文: http://www.w3cplus.com/css/fun-times-css-pixel-art.html © w3cplus.com
这种方法需要明确知道要创建多少像素块。为此,可以通过将每行的像素数和每列像素数相乘得到。举例来说,如果和上面一样创建 80px
的正方形,并且希望得到 8X8 像素的网格,就可以算出总共需要 64 个像素点。
.canvas {
/* Perfectly square */
width: 80px;
height: 80px;
}
.pixel {
/* We'll need 64 total pixels in our HTML */
width: 10px;
height: 10px;
float: left;
}
See the Pen CSS Pixels - Div Example by Geoff Graham (@geoffgraham) on CodePen.
我喜欢这一方式的原因是它对于我们定义的画布尺寸更加真实。而且我觉得这种方式更加简单,无需编写来自 table
元素的额外的 HTML 标签。
如果我们想要更多的像素来创建更清晰的图案,那么我们可以在 HTML 标签中将像素数翻两倍,并且将每个像素的尺寸减半。这就如同你在 Photoshop 中创建了一张你打算在网页中使用的图像,为了获得更高分辨率,你把它的尺寸扩大了一倍。
.canvas {
/* Perfectly square */
width: 80px;
height: 80px;
}
.pixel {
/* We'll need 256 total pixels in our HTML */
width: 5px;
height: 5px;
float: left;
}
开始画图
我们给像素添加颜色在某种意义上说犹如橡胶遇到路面。我们可以使用 nth-child
属性选择网格中的元素。
/* The third cell in our grid */
.pixel:nth-child(3) {
background: orange;
}
正如你想象的那样,这个列表会很长,它取决于网格中的单元格的数量和设计的细节。文章开头的例子中使用了 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,很聪明的方法。
// Setting the colors we're syncing up with
$pixel-color-map: (
'r' : #f00,
'w': #fff,
'k': #000,
'o': transparent,
't': #83401f,
'p': #ffbc77,
'b': #06f,
'y': #ff0,
'n': #ff8000,
'g': #5ac528
);
// Mario pixel art matrices!
$pixel-art:(
mushroom: (
(o o o o o k k k k k k o o o o o)
(o o o k k r r r r w w k k o o o)
(o o k w w r r r r w w w w k o o)
(o k w w r r r r r r w w w w k o)
(o k w r r w w w w r r w w w k o)
(k r r r w w w w w w r r r r r k)
(k r r r w w w w w w r r w w r k)
(k w r r w w w w w w r w w w w k)
(k w w r r w w w w r r w w w w k)
(k w w r r r r r r r r r w w r k)
(k w r r k k k k k k k k r r r k)
(o k k k w w k w w k w w k k k o)
(o o k w w w k w w k w w w k o o)
(o o k w w w w w w w w w w k o o)
(o o o k w w w w w w w w k o o o)
(o o o o k k k k k k k k o o o o)
)
);
有很多函数可以把它转换成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>
定可以绘制矩形。
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(53, 41, 15)";
ctx.fillRect(48, 0, 8, 8);
ctx.fillStyle = "rgb(238, 187, 68)";
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.
该你了
我们会一直热衷于你以自己的方式做事,但需要了解现在已经有了很多绘制像素图的工具。
- Ludvig Lindblom's Canvas box-shadow pixel art generator
- Jenn Schiffer's make 8-bit art!
- XOXCO's Make Pixel Art
- CTF中RSA题型解题思路及技巧
- 技术解析 | Web缓存欺骗测试
- SSH僵尸主机挖矿木马预警
- 看我如何通过Tor Onion在Windows中执行远程Shell
- 某租车系统JAVA代码审计
- 深入挖掘APP克隆实验
- Sickle:推荐一款优质ShellCode开发工具
- 看我教你如何修改QQ安装包实现绕过QQ语音红包验证来领红包
- “奇幻熊”(APT28)组织最新攻击
- GDB调试CVE-2018-5711 PHP-GD拒绝服务漏洞
- 高效与争议并存:大规模自动化渗透工具AutoSploit
- Android应用测试速查表
- ADB配置提权漏洞(CVE-2017-13212)原理与利用分析
- Fuzz自动化Bypass软WAF姿势
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- Android实现强制下线功能的示例代码
- 如何用HMS Nearby Service给自己的App添加近距离数据传输功能
- Android自定义控件之圆形进度条动画
- Android 使用 Scroller 实现平滑滚动功能的示例代码
- Android文件操作工具类详解
- Android之RecycleView实现指定范围的拖动效果
- Android 通过代码安装 APK的方法详解
- Android ListView实现无限循环滚动
- ignite:一个漂亮的多用户SS/SSR面板
- FreshRSS:开源免费的RSS阅读器
- 使用snap快速安装RocketChat你的聊天服务器
- CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能
- Baidu Sitemap Generator在PHP7无法生成XML的解决方法
- MFC实现的Socket通信
- 128-在线翻译