如何删除<pre>/<code>块中的前导空格而不删除HTML中的缩进?

Dou*_*ith 17 html css pre

我有以下HTML:

<body>
    Here is some code:

    <pre><code>
        Here is some fun code!    
    </code></pre>
</body>
Run Code Online (Sandbox Code Playgroud)

但是当我预览它时,因为代码是缩进的,所以pre完全没有了.我可以通过将内容带回缩进来解决这个问题,但它看起来很傻.我可以使上面的文字看起来没有缩进吗?

zgo*_*ood 8

你可以试试这个:

pre, code{
    white-space:normal;
}
Run Code Online (Sandbox Code Playgroud)

小提琴

  • 它对我有用!`white-space:normal;`删除所有空格.我不得不使用`white-space:pre-line;`因为它只删除了开头的空格. (6认同)
  • 我投了赞成票,因为它有效。将`&lt;pre&gt;`的空白设置为正常,但`&lt;code&gt;`的空白应该是`pre`。 (2认同)

ctw*_*els 8

好了,我决定想出一些比改变方式precode工作更具体的方法。所以我做了一些正则表达式来获取第一个换行符\n(前面有可能的空格 -\s*用于清除代码行末尾和换行符之前的额外空格(我注意到你有))并找到选项卡或跟在它后面的空白字符[\t\s]*(这意味着制表符、空白字符(0 或更多)并将该值设置为一个变量。然后在正则表达式替换函数中使用该变量来查找它的所有实例并将其替换为\n(换行符)。由于第二行(pattern设置的地方)没有全局标志(g在正则表达式之后),它将找到第一个实例\n换行符并将pattern变量设置为该值。因此,在一新行的情况下,接着2个制表符,的值pattern将是技术上\n\t\t,其中,每其将被替换\n的字符在所发现pre code元件(因为它是通过每个功能运行)中,用替换\n

$("pre code").each(function(){
    var html = $(this).html();
    var pattern = html.match(/\s*\n[\t\s]*/);
    $(this).html(html.replace(new RegExp(pattern, "g"),'\n'));
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body>
    Here is some code:

    <pre><code>
        Here is some fun code!
        More code
          One tab
            One more tab
            
            Two tabs and an extra newline character precede me
    </code></pre>
</body>
Run Code Online (Sandbox Code Playgroud)

  • 工作得很好,我写了一个没有 jQuery 的 ES6 版本。需要它https://gist.github.com/wintersolutions/4f3471954db73bf2d8f4e0ab541cf724 (2认同)