我有预处理器导入问题。我有供应商css,我想复制功能。不幸的是,我不控制html 这种情况..所以基本上我有供应商css&不同的供应商html,我试图将一个css规则的功能扩展到另一个。
现在,许多css预处理器的基本概念是扩展规则。
// Vendor
.foo { font-weight: bold; }
.bar { text-color: red; }
// Mine
.bar { .foo }
在上面的示例中,您无权访问.foo
或.bar
,但使用预处理器,您可以将功能从.foo
扩展到.bar
,非常适合更少/手写笔/等。问题是,供应商规则仅在原始css中定义。
所以说,最明显的解决方案是让Stylus / Less将原始css导入为stylus / less。然而,似乎都没有能够真正做到这一点..我至少找到了。 Less似乎不能(@import "foo.css"
指令被忽略)虽然Stylus有一个实际包含导入的原始CSS的选项,但它似乎并没有真正处理它。也就是说,它会包含css,但@extend
指令失败(也许我错了?)。
我能想到的另一个选择就是将.css文件重命名为预处理器语言扩展。由于我们希望保持供应商的东西不受控制,允许正确的版本控制/等,这涉及一个构建过程,它复制目标css文件并将它们重命名为目标语言扩展,但这很容易出错。 Stylus会立即遇到语法错误,而Less可能很容易(因为并非所有CSS都有效,而不是所有CSS都是,但不是全部)。
那么......关于这方面的任何其他想法?希望有一个选项,我可能会失踪?或许SCSS可以更好地处理这个问题?
目前,我发现的是/不可能..我觉得唯一稳定的方式是简单地将原始css位复制到我的css代码中。如果供应商代码发生变化,我将不得不手动更新,但至少我不会冒更换供应商的风险,并且突然之间构建过程失败,因为供应商引入了一些不受/更少支持的CSS语法。它远非好......但可能发生的最糟糕的事情是我的css看起来很有趣,我需要更新。
修改:
我接下来要尝试SCSS ..我们会看到它是怎么回事。在网站上,他们声称所有CSS(仅限3个?)语法都是有效的SCSS
edit2:为了清晰起见。我的问题是,给出上面的场景,你做什么?无法导入.css文件(请参阅下面的注释!),将.css文件重命名为.less / .stylus又可能容易出错,因为较少不是CSS的完美超集(即由于专有特征)。
!注意!:我一直在寻找可以采取哪些措施来解决这个问题,而不是解决这个问题,并且在这个问题上遇到了十几张支持票据。 。其中的主要讨论似乎发生在#issue 1185,更重要的是,查看*(我相信)解决此问题的更改日志! CHANGELOG 1.4.0 Beta
所以说到这里,@import (less) "file.css"
可能就是胜利的场景,即使由于beta状态可能会有一些错误。耶:)
答案 0 :(得分:1)
你最好的选择是@Lee Olayvar所说的,或者在LESS中使用新的“:extend()”功能。听起来你可能已经尝试过扩展功能,但是你使用了“SASS指令”语法(IMO不适当地使用了规则),而LESS使用类似CSS的伪选择器语法:
.foo:extend(.bar) {}
如果你有耐心(在接下来的几天/几周内),你会看到一个新功能完美,你想做什么,而且它是LESS特有的。 它允许您扩展或混合外部“静音”样式。这意味着您将能够“@import”和外部样式表,但样式将不会显示在已编译的代码中,除非您扩展它们或将它们用作mixin。
我是Less.js btw的核心团队,所以如果您有任何其他问题或者我是否可以提供进一步的帮助,请告诉我。
答案 1 :(得分:0)
看起来所有导入的.css
文件都不会被less
预处理,但只会在顶部添加@import
。
您可以导入CSS和LESS文件。仅处理LESS文件导入语句,CSS文件导入语句保持原样。如果要导入CSS文件,并且不希望LESS处理它,只需使用.css扩展名
你能做的最好的事情就是重新命名。
答案 2 :(得分:0)
虽然仍处于测试阶段,但新添加的@import (less) "file.css"
语法应正确处理所有CSS文件。由于“官方”支持,也可以预期/假设任何打破LESS的专有语法将被修复(尽管可能不“支持”)。
所以理论上这是最好的选择!除非SCSS,我在这种情况下还没有尝试过。在我的测试中,手写笔仍有问题。
有关详细信息,请查看this issue或this changelog。