格式 console.log 带有颜色和围绕非格式化文本的变量

Format console.log with color and variables surrounding non-formatted text

问题

我编写了一个函数来演示如何以多种方式格式化 Chrome 开发人员控制台 console.log() 消息。但是,我遇到的问题是在左侧打印一个带有配色方案的变量,然后在中间打印一个没有样式的字符串,然后是另一个已设置样式的变量。这里有一张图来说明:

此外,此 HTML/CSS 代码将演示我试图在开发人员控制台中生成的内容:

    <p>Array values printed out (equals sign not formatted):</p>

    <span style="background: #ffa600; color: #ffe4b3;">Array[index0]</span> = <span style="background: yellow; color: black; font-style: italic;">http://www.google.com</span><br>
    <span style="background: #ffa600; color: #ffe4b3;">Array[index1]</span> = <span style="background: yellow; color: black; font-style: italic;">http://www.pinterest.com</span><br>
    <span style="background: #ffa600; color: #ffe4b3;">Array[index2]</span> = <span style="background: yellow; color: black; font-style: italic;">http://www.facebook.com</span><br>


    <p>Multiple combinations of formatted and non formatted text:</p>
    <p>
        <span style="background:red;">Red</span>
        <span> and </span>
        <span style="background:aliceblue">AliceBlue</span>
        <span> OR </span>
        <span style="color:forestgreen; font-style: italic; font-weight: bold;">Forest Green</span>
        <span style="background: orange">Orange</span>
        <span>, also this: <span>
        <span style="background:pink; color: brown">  Error Styling </span>
        <span>, etc ...</span>
    </p>

我试过但没有用

Colors in JavaScript console 中来自 christianvuerings 的这段代码可以连续打印两种不同的样式:

console.log("%cHello, "+"World","color:red;","color:blue;")

我的尝试基于该代码。问题是,Christian 的代码没有考虑到格式化代码之间夹着非格式化代码,也没有考虑到有多个变量。我做了很多尝试来找到代码和顺序的正确组合,但最有前途的三个(对我来说)是这些:

console.log("%c%s"+" is "+"%c%d"+"years old.", "color:red","Bob", "color:blue", 42).

console.log("%c%s"," is ","%c%d","years old.", "color:red","Bob", "color:blue", 42).

console.log("%c%s is %c%d years old.", "color:red", "Bob", "color:blue", 42).

我的问题

如何在同一行打印 console.log() 消息,其中包含格式化和非格式化代码的多种组合?

为了使 console.log() 的格式允许在同一行中显示格式化和未格式化的文本,您必须 "reset" 您在格式化 css 之后更改的 css =38=]。例如,要使日志显示格式如下面的代码

<span style="background: #ffa600; color: #ffe4b3;">Array[index0]</span> = <span style="background: yellow; color: black; font-style: italic;">http://www.google.com</span>

您的 console.log() 调用需要如下所示:

代码

console.log("%c%s%c = %c%s","background:orange", "Array[index0]", "background:inherit;", "background:yellow;font-style: italic;", "google.com")

结果

注意在第一个字符串插入字符串后,我如何插入另一个 %c 格式化程序并赋予它 background:inherit 的值,这会重置元素背景,使它们继承来自控制台在浏览器中定义 css。这是您的代码中唯一缺少的东西。

我最近想解决同样的问题,并构建了一个小函数来只为我关心的关键字着色,这些关键字很容易通过花括号括起来 {keyword}

这很有效:

var text = 'some text with some {special} formatting on this {keyword} and this {keyword}'
var splitText = text.split(' ');
var cssRules = [];
var styledText = '';
for (var split of splitText)  {
    if (/^\{/.test(split)) {
        cssRules.push('color:blue');
    } else {
        cssRules.push('color:inherit')
    }
    styledText += `%c${split} `
};
console.log(styledText , ...cssRules)

示例:

console.log('%c\uD83D\uDE09 Giant Rainbow Text!', 
            'font-weight:bold; font-size:50px;color:red; ' +
            'text-shadow:3px 3px 0 red,6px 6px 0 orange,9px 9px 0 yellow, ' +
            '12px 12px 0 green,15px 15px 0 blue,18px 18px 0 indigo,21px 21px 0 violet');

生产:

改编自here

另见 documentation console.log