【问题标题】:Jade adds empty `style` element to `head`Jade 将空的 `style` 元素添加到 `head`
【发布时间】:2026-01-31 17:05:02
【问题描述】:

我使用Jade 作为我的 Express 驱动的 node.js 应用程序的模板引擎。也许是深夜,但我不知道在生成的 HTML 中插入了空 style 元素的位置。

实时示例:http://quotation-mark.herokuapp.com/(注意到<style type="text/css"></style>head 的末尾?)


Express 的模板设置:
app.set('views', settings.projectDir + '/views');
app.set('view engine', 'jade');
app.set('view options', {layout: false});


布局.jade
!!!html

include /helpers/css.jade

html(lang='ru')
  head
    meta(http-equiv='content-type', content='text/html; charset=utf-8')
    noscript
      meta(http-equiv="refresh", content="0; url=/noscript")

    title= title

    block css
      mixin css('/css/bootstrap/bootstrap.css')


  body
    block content


索引.jade
extends layout

append content
  h1= title
  p Добро пожаловать в #{title}.


我检查了几次,但一切似乎都很好(代码、模板、验证器)。没有线索……它应该发生吗?我在哪里弄错了吗?

即使模板本身没有head,浏览器中也有一个(Chrome 19.0.1084.53),也许浏览器添加了一些东西?简单的 HTML 页面没有它:

<!DOCTYPE html>

<html>

<head>
<title>Test</title>
<style>h1{color:red;}</style>
</head>

<body>
<h1>Hi!</h1>
</body>

</html>

【问题讨论】:

    标签: node.js google-chrome template-engine pug


    【解决方案1】:

    您的服务器生成的 HTML 实际上并没有空的 &lt;style&gt; 块。

    <!DOCTYPE html><html lang="ru">
    <head>
     <meta http-equiv="content-type" content="text/html; charset=utf-8">
     <noscript><meta http-equiv="refresh" content="0; url=/noscript"></noscript>
     <title>«Кавычки»</title>
     <link rel="stylesheet" href="/css/style.css">
    </head>
    <body>
      <h1>«Кавычки»</h1><p>Добро пожаловать в «Кавычки».</p>
    </body>
    </html>
    

    您是否使用任何浏览器扩展程序,例如 AdBlock?打开 AdBlock 后,我在访问的每个页面中都会看到那个空的样式块。禁用扩展程序会使其消失。

    【讨论】:

    • 哦……你说得对。非常感谢,现在我可以安心睡觉了:)
    • 谢谢!这让我发疯了。无法弄清楚它来自哪里。
    • 这将是我检查的最后一件事谢谢!