console 打印图像

2024/01/23
共 647 字
约 2 分钟
归档: 技术

在控制台打印图片,炫酷但没太大实用性的小知识。


控制台

如果你在百度首页打开过浏览器的开发者工具-控制台,一定能看到百度的招聘信息。还有的网站,用 ASCII 字符拼出 logo 与文字,用于显示版权与版本等信息,这对于当时的我来说,觉得非常新奇有趣。后来知道,这种图形被称为 ASCII art,借助一些工具,可以轻松地创建出来,如ascii art generatorpatorjk

见多了,也就让我以为,控制台只能输出文本,不能打印图片,直到今天看到这篇文章

定义样式

控制台本身支持定义样式,关键点在于 %c,学过 C 语言的都很熟悉,这是个占位符,在这里也起到类似的作用,指令前的文本不会受到影响,指令后的文本将会使用参数中声明的 CSS 样式。下面代码为 example 添加红底白字的样式,可以粘贴到控制台中查看效果:

console.info(
  "This is an %cexample",
  "color: white; background-color: lightcoral;padding: 2px",
);

还可以按顺序指定多个样式,如下有三个 %c,This is 为红色字体,another 维持默认样式,example 为红底白字。

console.info(
  "%cThis is %canother %cexample",
  "color: lightcoral;",
  "",
  "color: white;background-color: lightcoral;padding: 2px",
);

注意:控制台信息的默认行为与行内元素相似。如果要使用 padding、margin,需设置 display: inline-block。

%c 语法可用的属性

不同浏览器的兼容性可能有些不同,大概支持如下属性:

  • background 与其全写版本

  • border 与其全写版本

  • border-radius

  • box-decoration-break

  • box-shadow

  • clear 和 float

  • color

  • cursor

  • display

  • font 与其全写版本

  • line-height

  • margin

  • outline 与其全写版本

  • padding

  • text-transform 这类 text-* 属性

  • white-space

  • word-spacing 和 word-break

  • writing-mode

实际上,一个 background 就能实现大部分效果,因为他可以直接嵌入 base64 图片(在 Chrome 120 中在线图片会加载不出来)。如果是单张图片,需要在 %c 后添加个空格,因为它创建了一个内联元素,这个元素的宽度和高度取决于其内容(也就是我们的CSS样式),可以简单理解为只有样式没有 div 当然就看不到图片。

console.info(
  "%c ",
  "padding-left: 36px; line-height: 20px; background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDE0IDE0Ij48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0ibTguNSAxMy41bDUtMTNsLTEzIDVsNiAybDIgNnoiLz48L3N2Zz4='); background-size: 20px; background-repeat: no-repeat;",
);

写在最后

这算是一个奇技淫巧,因为一般开发中基本用不上,在控制台打印图片,属于纯好玩。

留言

本站已运行
© 2024 Jack  由 Hexo 驱动
复制成功