【问题标题】:CSS-hack - Adding css in the body of a websiteCSS-hack - 在网站正文中添加 CSS
【发布时间】:2012-08-03 17:19:25
【问题描述】:

我陷入了只能访问网站正文而不是头部的情况。我必须使用新的样式表。现在我遇到的解决方案是在网站正文中添加 CSS 文件。当然,这是一个 hack,所以我想知道是否有更好的解决方案?

【问题讨论】:

  • 您可以在运行时使用 javascript 将样式表添加到头部。
  • @SvenBieder:我对 javascript 不太熟悉,所以我只想将解决方案保留在 html/css 中。不过,感谢您的解决方案。
  • @voodoo417:只要头部包含 jQuery,就可以了。
  • .innerHTML += "<link ="#">"; 应该只适用于 javascript。

标签: css


【解决方案1】:

我们有不同的方式来加载 CSS 文件。

1 - HTML - 在页面上加载外部 CSS 文件的常规方式是:

<head>
   <link rel="stylesheet" type="text/css" href="file.css" />
</head>

2 - CSS - 使用 CSS 文件中的标签 import

@import  url("another_file.css");

3 - JavaScript - 只使用 JavaScript 来做,你应该创建一个 Javascript 函数:

<script type="text/javascript">

   function loadCSS(filename){ 
      var file = document.createElement("link");
      file.setAttribute("rel", "stylesheet");
      file.setAttribute("type", "text/css");
      file.setAttribute("href", filename);
      document.head.appendChild(file);
   }

   //just call a function to load your CSS
   //this path should be relative your HTML location
   loadCSS("path_to_css/file.css");
</script>

4 - JavaScript - 您可以添加动态定义,例如:

<script type="text/javascript">

   var sheet = (function() {
      var style = document.createElement("style");
      style.appendChild(document.createTextNode(""));
      document.head.appendChild(style);
      return style.sheet;
   })();

   sheet.insertRule("span { visibility: hidden }", 1);
</script>

【讨论】:

【解决方案2】:

怎么样:

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

【讨论】:

  • 他需要它。 $("head").append() 是一个东西吗?
  • 除非从头部调用,否则这个 jquery hack 不会起作用。否则不会解析 css 文件。至少这是我的经验。
  • Javascript 是在所有其他 html 之后运行的最佳实践?没关系,我做了 css 的花边负载,所以我之前只显示关键 - 不同问题的相同解决方案
【解决方案3】:

你的意思是重新定义 CSS 并覆盖之前的 CSS 吗?:

​<html>
    <head>
        <style type='text/css'>
            * {color:red;}
            p {background-color:yellow;}
        </style>
    </head>
    <body>
        <style type='text/css'>
            * {color:green;}
            p {background-color:black;}
        </style>
        <p>"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."    </p>
        "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."
        <p>"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."    </p> 
    </body>   
</html>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

您可以在那里复制整个样式表,当然也可以将其包含在 php 或 javascript 中。但是像这样,查看头部 CSS 样式表并覆盖出现在正文中的所有样式应该可以工作。不过不确定这是否干净。

【讨论】:

  • 这不是有效的 HTML。
  • 我在validator.w3.org 中检查了这个 HTML。它指出Error: Element style not allowed as child of element body in this context. (Suppressing further errors from this subtree.) 我认为@Bachsau 的评论是正确的,尽管根据其他答案听起来很多(也许是大多数?也许是全部?)浏览器支持这种非标准形式。但目前尚不清楚它是否会在现在或将来破坏某些浏览器。
  • @DavidParks 浏览器支持很多非标准的东西,而且一直都支持。但是人们应该遵循标准,否则,我们最终会遇到与几年前相同的情况,即网站在每个浏览器中看起来都不同,并且创建者开始针对单个浏览器进行优化,从而将其他所有人拒之门外。跨度>
  • 好吧,它不是一个很好的解决方案,但它是一个选项,因为标题明确指出 CSS hack 甚至无效,将在有效的标准 html 无法使用的地方工作,例如将样式附加到头部javascript 如果用户代理禁用了 js(我不知道需要这个 hack 的上下文)。我倾向于认为不是每个人都是博学的,只编写有史以来最好的代码,有时你需要一个有效的解决方案,解决一个快速破解的问题,然后继续,比如“这个”,上下文就是一切,人们不应该有任何人都应该超过他们自己的真实应该
【解决方案4】:

您可以使用@import url("your_styles.css"); 方法。

如果您有权访问在文档开头调用的样式表,则可以将其添加到 CSS 文档的顶部。

您也可以尝试在您的文档中添加一个备用 &lt;head&gt;,我不建议这样做,但如果您必须这样做,您也可以这样做:

<style type="text/css">
  @import url("your_style.css");
</style>

如果您不关心向后兼容性,还有 HTML5 scoped 属性已在此问题中得到解决:Does <STYLE> have to be in the <HEAD> of an HTML document?

希望这会有所帮助!

编辑:

找到两个关于@import 功能的链接。一个是来自 Mozilla 开发者中心的工作草案,最后更新于 2012 年 7 月 31 日:

https://developer.mozilla.org/en-US/docs/CSS/@import

还有一篇包含浏览器支持统计信息的 Sitepoint 参考文章:

http://reference.sitepoint.com/css/at-import

我想这在必要时仍然是一个实用的、可用的功能。

【讨论】:

  • @StartupCrazy 据我所知它仍然是有效的代码。如有必要,我会在紧要关头使用。
  • 这是我研究时被告知的,stackoverflow.com/questions/9884182/…
  • 这是正确的答案...
【解决方案5】:

显然,它似乎对我有用,如果它看起来像的话

<link href="/main.css"  rel="stylesheet" type="text/css"  />

但不是,如果它包含/cssin rel.

<link href="/main.css"  rel="stylesheet/css" type="text/css"  />

刚刚自己测试了这个,想发布这个来强调这个陷阱。

【讨论】:

  • 样式表链接为body-ok,这意味着它们可以在页面的&lt;body&gt; 部分中使用。 stylesheet/css 甚至是 rel 的有效值吗?据我所知,可以有多个值,但它们必须用空格分隔。
  • @BananaAcid,您的 rel="stylesheet/css" 无效,这就是它不起作用的原因。请参阅w3.org/TR/html52/links.html#linkTypes 处的有效值
【解决方案6】:

您可以在正文部分放置&lt;head&gt;&lt;/head&gt; 标签。

【讨论】:

  • +1 不错。是否比将链接直接放在正文中更好?
  • 我刚刚做到了。它对我有用,但有一些小问题。
  • 这是我真正的小部件:widgetsinabottle.com/saad_widget/effect.html 这是我根据您的建议创建的小部件:widgetsinabottle.com/home
  • “head”元素不属于“body”元素。
  • 投了赞成票,因为让我笑得很厉害:D 上帝,你疯了
猜你喜欢
  • 2016-12-08
  • 2014-08-10
  • 2016-12-05
  • 2022-09-26
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多