html:如何向源代码块添加行号
我想用行号显示源代码,方式如下:html:如何向源代码块添加行号,html,css,Html,Css,我想用行号显示源代码,方式如下: 根据换行符、空格和制表符,可以在不使用行号的情况下复制和粘贴代码 这些数字是正确的 这段代码可以循环使用 我尝试了以下方法 有序列表 这几乎奏效,但2号失败。另外还有一个问题,即换行符继续位于行号(左边距旁边)下,而不是行首(列表)下 同步线路和预同步 这是我在中发现的一个建议,但它明确指出必须禁用换行,因此#3失败。这也让我感到非常不安,因为我在一些网站上看到这些区块被破坏 是否有一种方法可以在不使用JavaScript的情况下完成此操作?我建议使用code
是否有一种方法可以在不使用JavaScript的情况下完成此操作?我建议使用codemirror来完成此操作,而不是自己编写 您可以免费获得您描述的功能和许多其他很棒的东西:
您需要将
display:inline块
添加到::在
伪元素之前:
例如
pre.code code::before {
content: counter(listing) ". ";
display: inline-block;
width: 8em;
padding-left: auto;
margin-left: auto;
text-align: right;
}
那么你所有的其他风格都可以
解释:默认情况下,
:在
之前和::在
之后,伪元素具有显示
样式的内联
如果要开始设置宽度
,文本对齐
等,则需要明确声明块的显示
样式
或内联块
示例:
pre.code{
空白:预包装;
}
pre.code::before{
计数器复位:挂牌;
}
预编码{
反增量:挂牌;
}
pre.code::before{
内容:柜台(挂牌)“.”;
显示:内联块;
宽度:8em;/*现在可以工作了*/
左填充:自动;/*现在可以工作了*/
左边距:自动;/*现在可以工作了*/
文本对齐:右;/*现在可以工作了*/
}
第一行
缩进行后跟空行
下一行由一个空格组成
此行末尾有一个空格
;以及一个前导和结束选项卡 代码>
填充到
10个
行
虽然从技术上讲,鲁宁已经回答了我的问题(谢谢),但事实是,我对结果并不完全满意,因为我在发布问题后没有陈述一些我认为重要的其他条件,而这些条件在解决方案中失败了:
当一条线环绕时,它应该在上面的线下,而不是在行号下面
数字和文本列都应该是可风格化的(值得注意的是,整个列的背景应该很容易改变)
我尝试了另一个内联块的解决方案
,但失败了#5,并且在调整任何宽度时出现问题
非常接近,但不太接近。我知道
不会飞的另一种选择是使用桌子。它不会飞,因为浏览器需要
以及HTML:
缩进行
未缩进行
;以制表符 开头和结尾的行代码>
上述行应为空
我希望这行太长了,因为它太长了,应该会溢出浏览器中网页的右侧边距
最多填充十个
要检查的行
对齐
编号的
更新:由于我发布了这个问题,了解到GeSHi语法highlighter可以选择使用以下模式,该模式也满足所有必要条件,并且对于那些对表过敏的人来说可能更容易接受:
代码
代码
您有什么理由需要自己实施吗?似乎在做这件事,更多地看看你能用xmp标签做些什么。@dave我现在已经检查了代码美化。它不符合上面的必要条件#1(Python所必需的前导空格在复制粘贴时丢失),并且行号在我的浏览器中没有正确显示(只有空行有行号)。谢谢,但我不想使用JS。我编辑了这个问题来澄清这一点。有没有关于该工具生成什么HTML的提示?嗯,没有。我前面没有编辑器,所以我无法测试这个解决方案。嗯,不是真的。我前面没有编辑器,因此无法测试此解决方案。您是否尝试过为每个代码的内容添加一个带有类的嵌套span,然后应用一个左边距来缩进它?我已经查看了CodeMirror。虽然它确实做到了我所要求的(除了需要JS的部分),但它实际上是一个成熟的编辑器,对于仅仅展示代码片段来说太重了。它似乎依赖于底层的textarea来允许文本选择,因此它实际上需要两份代码副本。滚动需要JS活动才能工作。这不是我想要的,但是谢谢。一个更轻量级的版本是,但我没有亲自使用过。这就成功了,谢谢!仍然存在一个问题,即包装的行位于行号之下,而不是列表。关于如何解决这个问题有什么提示吗?我在上面添加了一个稍微不同的CSS方法,使用浮动和清除,这意味着换行不会从行号下面开始。谢谢。它并没有像我期望的那样工作,但是我已经成功地使用了一个单独的内联块
来组合文本部分(以及垂直对齐
用于数字部分)。在编写上述CSS三年半后,我发现我需要类似的东西来启用按钮(用于移动浏览器)它可以在屏幕上显示网页的HTML源代码(与使用查看源代码:
在URL栏中预先显示URL相比,点击按钮更不方便)。请参阅:不使用浮动<
<style type="text/css">
pre.code {
white-space: pre-wrap;
}
pre.code:before {
counter-reset: listing;
}
pre.code code {
counter-increment: listing;
}
pre.code code:before {
content: counter(listing) ". ";
width: 8em; /* doesn't work */
padding-left: auto; /* doesn't work */
margin-left: auto; /* doesn't work */
text-align: right; /* doesn't work */
}
</style>
...
<pre class="code">
<code>first line</code>
<code> indented line followed by empty line</code>
<code></code>
<code>the following line consists of one single space</code>
<code> </code>
<code>this line has a space at the end </code>
<code>	and one leading and ending tab	</code>
<code>fill to</code>
<code>ten</code>
<code>lines</code>
</pre>
CodeMirror.fromTextArea(document.getElementById("myDiv"), {
lineNumbers: true,
mode: "htmlmixed"
});
pre.code code::before {
content: counter(listing) ". ";
display: inline-block;
width: 8em;
padding-left: auto;
margin-left: auto;
text-align: right;
}