Ruby on rails 3 如何使我的较少变量可用于Rails中的所有CSS文件? 我所拥有的:

Ruby on rails 3 如何使我的较少变量可用于Rails中的所有CSS文件? 我所拥有的:,ruby-on-rails-3,twitter-bootstrap,asset-pipeline,less,Ruby On Rails 3,Twitter Bootstrap,Asset Pipeline,Less,在Rails 3.2.2中,我有以下样式表: app/assets/stylesheets | |-- application.css |-- bootstrap_and_overrides.css.less | |-- annotations.css.less |-- maps.css.less.erb `-- users.css.less.erb 当然,bootstrap和overrides.css.less包括Twitter boot

在Rails 3.2.2中,我有以下样式表:

app/assets/stylesheets | |-- application.css |-- bootstrap_and_overrides.css.less | |-- annotations.css.less |-- maps.css.less.erb `-- users.css.less.erb 当然,bootstrap和overrides.css.less包括Twitter bootstrap以及一些其他自定义less变量

@import "twitter/bootstrap/bootstrap";
@import "twitter/bootstrap/responsive";
// other stuff
@brown_text: #332820;

什么不起作用: 现在,在
annotations.css.less
中,我想使用
@brown_text
,但它给了我:

variable@brown\u文本未定义

我想这是因为
annotations.css.less
中没有对定义变量的“master”文件的引用。而且似乎
annotations.css.less
是首先编译的——请注意,我目前正在开发环境中

那么,如何使用自定义的LESS变量,并使它们在其他样式表文件中可用呢?我目前的“修复”是将所有自定义样式移动到
bootstrap\u和\u overrides.css.less.erb
,这看起来一点也不干净

什么也不起作用:
只导入
import
ing较少的文件是不可能的,因为它们使用Rails的资产路径助手。导入ERB文件也是不可能的,因为
@import
语句找不到该文件,因为它需要
.less
后缀。

twitter引导rails编译东西的方式,您需要将其他less样式表导入到覆盖文件中。因此,对于另一个文件,
annotations.less

@import "twitter/bootstrap/bootstrap";
@import "twitter/bootstrap/responsive";

//other LESS styles
@import "annotations"

更多信息,请查看此gem下面使用的less-rails。

您不需要将ERB用于资产路径帮助器–它们实际上被烘焙到less-rails gem中,您可以在此处参考:

您应该能够在使用ERB引用资产管道的任何位置使用资产路径或资产url

鉴于此,最好的方法是:

  • application.css
    转换为
    application.css.less
  • 删除所有链轮指令
  • @import
    目录中的每个文件
  • 从任何具有.erb扩展名的文件中删除该扩展名,并将erb资产帮助器更改为less rails资产帮助器
  • 确保
    annotations.css.less
    bootstrap\u和\u overrides
    之后导入-这就是为什么使用
    require\u树通常不是一个好主意。
    ,因为您无法控制加载文件的顺序。按照现在的方式,annotations.css.less将在引导_和_覆盖之前加载–甚至在您想要使用的变量存在之前

  • 希望有帮助

    我已经在使用
    less rails
    gem了,但是导入
    maps.css.less.erb
    怎么样?我如何在那里获得正确的资产路径?我使用
    erb
    ,因为我需要一些图像资源的路径,等等。它应该仍然有效。链轮从右到左处理文件,因此首先计算ERB,然后计算LESS,然后计算CSS.Oh,您需要将文件命名为*.LESS而不是*.CSS.LESS。抱歉。好的,对于一个简单的例子,这是可行的,但是我不能再导入
    less.erb
    文件了
    @import“foo”
    会说它找不到
    foo.less
    ,因为它实际上是
    foo.less.erb
    。导入
    foo.less.erb
    将尝试导入
    foo.less.erb.less
    …这似乎是一种非此即彼的情况。链轮一次只能运行一个文件,因此变量不能跨流,使用较少的导入也不会触发链轮。请澄清-什么是“链轮指令”?链轮指令是Rails(Rails依赖的真正的gem,称为链轮)用来加载JS/CSS文件以编译成一个文件的。因此,在上面的代码示例中,指令是:
    *=require\u self
    *=require\u tree。
    对于CSS,指令以
    *=
    开头;对于JS,指令以
    /=
    开头。使用LESS@import命令,您不再需要这些指令,因为您将使用LESS命令包含样式表。使用LESS的好处是,您仍然可以访问您的变量;使用这些指令,你不需要。这很有道理。关于资产管道和所有这些东西,还有很多需要了解的。我明天会设法修好的。同时谢谢你!
    @import "twitter/bootstrap/bootstrap";
    @import "twitter/bootstrap/responsive";
    
    //other LESS styles
    @import "annotations"