【问题标题】:Dynamically create nested CSS动态创建嵌套 CSS
【发布时间】:2014-06-23 11:23:05
【问题描述】:

我想在 CSS 中创建一种“范围”,以便特定样式标签中的所有 CSS 只影响特定的 html 节点。

更简单:我想要这样的东西:

<style id="style1">
  .foo { color: red; }
  .bar { color: green; }
</style>
<style id="style2">
  .dor { color: blue; }
</style>

动态变成这样的:

<style id="style1">
  #scope1 .foo { color: red; }
  #scope1 .bar { color: green; }
</style>
<style id="style2">
  .dor { color: blue; }
</style>

使用 PHP 或 JavaScript(最好使用 jQuery)

有简单的方法吗?

【问题讨论】:

  • 如果你用 JS 重写 CSS,你必须注意 CSS 不会被解析和渲染两次——第一次是原始格式,第二次是在重写后。在服务器上提供完整的 CSS 会更好......
  • 确实如此,用 PHP 重写 CSS 似乎是最好的选择。唯一的问题仍然是如何优雅地做到这一点,并且不会在 CSS 代码中产生错误。
  • “不可能在 CSS 代码中创建错误”使用 CSS 预处理器,如下面的答案中建议的那样。

标签: javascript php css scope


【解决方案1】:

我不知道有什么专门做这件事的,但我建议研究一下sass/scss。它提供了类似的嵌套 css 的方式(以及更多)

例如。

#style1 {
  .foo {
    color: red;
  }
  .bar {
    color: green;
  }
}
#style2 {
  .dor { color: blue; }
}

【讨论】:

  • 不错!这正是我正在寻找的功能。但是因为我需要在我请求一个网页(每次使用不同的 (S)CSS 代码)时进行 Sass 的预处理,所以这一切都变得有点复杂。然后我需要创建一个临时 SCCS 文件,并对该文件执行单独的 (ajax) 请求,以便对其进行预处理并获得正确的代码..
  • @oogie “我需要在我请求网页的那一刻进行 Sass 的预处理(每次使用不同的 (S)CSS 代码)”这听起来像是一个非常奇怪的要求。当然,CSS 应该只在每次更改源之后才呈现。如果您在每个页面调用上都这样做,您可能会遇到性能问题。例如,页面已交付给用户,但 CSS 文件尚未呈现……
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多