使用 JavaScript 将 CSS 添加到 <head>?

新手上路,请多包涵

有没有办法将 javascript 文件中的字符串中的 css 添加到带有 javascript 的文档的头部?

假设我们有一个网页,其中有一个灯箱脚本,这个脚本需要一个 css 文件才能运行。

现在添加这个带有 <link> 的 css 文件将使 css 文件下载,即使对于没有启用 js 的人也是如此。

我知道我可以使用脚本动态加载 css 文件,但这也意味着会有 2 个 http 请求,并且在文件中几乎没有 css 的情况下,我发现效率很低。

所以我想,如果你可以将你在 css 文件中的 css 放入脚本,让脚本解析 css 并将其添加到头部,或者甚至更好的是让脚本直接将 css 添加到文档的 <head>

但是我在网上没有找到任何提示这是可能的,那么是否可以用js在头部添加css呢?

编辑+解决方案:

我编辑了 roryf 的答案以跨浏览器工作(IE5 除外)

Java脚本:

  function addcss(css){
    var head = document.getElementsByTagName('head')[0];
    var s = document.createElement('style');
    s.setAttribute('type', 'text/css');
    if (s.styleSheet) {   // IE
        s.styleSheet.cssText = css;
    } else {                // the world
        s.appendChild(document.createTextNode(css));
    }
    head.appendChild(s);
 }

原文由 Timo Huovinen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
2 个回答

当您尝试使用 JavaScript 添加一串 CSS 到 <head> 时?将一串 CSS 注入页面,使用 <link> 元素比使用 <style> 元素更容易做到这一点。

以下将 p { color: green; } 规则添加到页面。

 <link rel="stylesheet" type="text/css" href="data:text/css;charset=UTF-8,p%20%7B%20color%3A%20green%3B%20%7D" />

您可以简单地通过 URL 编码您的 CSS 字符串并将其添加到 HREF 属性来在 JavaScript 中创建它。比 <style> 元素或直接访问样式表的所有怪癖要简单得多。

 var linkElement = this.document.createElement('link');
linkElement.setAttribute('rel', 'stylesheet');
linkElement.setAttribute('type', 'text/css');
linkElement.setAttribute('href', 'data:text/css;charset=UTF-8,' + encodeURIComponent(myStringOfstyles));

这将在 IE 5.5 向上工作

您标记的解决方案将起作用,但此解决方案需要较少的 dom 操作并且只需要一个元素。

原文由 moefinley 发布,翻译遵循 CC BY-SA 4.0 许可协议

编辑:正如 Atspulgs 评论所建议的那样,您可以使用 querySelector 在没有 jQuery 的情况下实现相同的效果:

 document.head.innerHTML += '<link rel="stylesheet" href="styles.css" type="text/css"/>';

下面的旧答案。


您可以使用 jQuery 库来选择您的 head 元素并将 HTML 附加到它,方式如下:

 $('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />');

您可以 在此处 找到有关此问题的完整教程

原文由 thomaux 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题