不确定是否有人遇到过这个问题。我使用PrismJS语法高亮工具来突出显示代码。应用程序是用Reactjs编写的,我正在尝试做的是在一个所见即所得编辑器中,当用户想要插入代码块时,我用pre +代码包装用户选择的文本。正如您所期望的那样,PrismJS似乎正确地对元素进行了标记:

但是,正如您可能从上图中看到的,所有内容都放在一行中。而不是漂亮的代码块:

我不知道出了什么问题,我在prismjs网站上使用css:
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #dd4a68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}下面是输出的html:

编辑:
如果添加word-wrap: pre-wrap,则结果如下:

发布于 2018-06-04 23:55:58
发布于 2020-06-26 19:41:06
在手动初始化元素时,我也遇到了类似的问题。我偶然发现了这个讨论,其中有一个对我有效的修复方法:https://github.com/PrismJS/prism/issues/1764
HTML -加载带有标记数据的脚本-手动:
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/prism.min.js" data-manual></script>JS -添加以下钩子:
Prism.hooks.add("before-highlight", function (env) {
env.code = env.element.innerText;
});
Prism.highlightElement(code);发布于 2020-08-29 02:36:32
如果这对其他人有帮助,我有一个textarea,它会在您键入时更新代码块,这对我很有效:
<textarea onkeyup="this.onchange();" onchange="document.getElementById('query-highlighted').textContent = this.value; Prism.highlightAll();"></textarea>
<pre><code class="language-sql" id="query-highlighted"></code></pre>也就是说,我使用了.textContent =而不是.innerText = (后者没有像预期的那样保留换行符)。
我得到了Sever van Snugg's answer和他链接的issue的帮助。
https://stackoverflow.com/questions/50683201
复制相似问题