Rails stylesheet_link_tag 会把目录下所有的 CSS 文件加载???

tiseheaini · 2012年08月21日 · 最后由 tiseheaini 回复于 2012年09月06日 · 7644 次阅读

为什么 stylesheet_link_tag 会把目录下所有的 CSS 文件加载??? 今天打开 log 日志文件时发现,server 把 javascripts 目录下所有的 JS 文件都加载了进去,把 stylesheets 目录下所有的文件也都加载了进去。这使我的很困惑。 是不是哪里配置错了,还是在开发的模式下都是这个样子的??

那是应为你的 application.css 里面有一句 require_self

#1 楼 @huacnlee 不光有 require_self 还有 require_tree,难道 /**/ 里的不是注释吗??困惑了

我,我说错了,就是 require_tree 的原因

#3 楼 @huacnlee 我把 require_self 前面的 = 去掉了。把 stylesheet_link_tag 改城了 <%= stylesheet_link_tag "application", params[:controller] %>
这样就可以动态的根据控制器的名称加载相应的 CSS 文件 出处 http://caterpillar.onlyfun.net/Gossip/Rails/Assets.html

#4 楼 @tiseheaini 你这样就惨了。。。 而且这是 rails3.2 的一个很好的特性,你给他干了干啥。。。

#5 楼 @ywencn 不明白你的意思。如果我在两个 CSS 文件里都写了一个相同的属性,如 我在 A 文件写了 A 属性,B 文件 写了 B 属性。那第二个一定会覆盖第一次写的那个。 如果我改了 A 文件的 A 属性。而 B 文件 的 B 是不变的。那 B 会 覆盖 A。而且时间长了。该改哪个都不知道了。会很麻烦的

#6 楼 @tiseheaini 你在开发环境是没问题,你到生成环境试试,一定报错。 你得在 application.rb 搞一堆 config.assets.precompile += ,不是自找麻烦么。 对于单个 controller 特有的样式,很简单,在 application.html 里加上 <body class="<%= controller.controller_name%>"> 然后你 Topic 里特有的样式就 .topic .xxxx {} 这样区分 这个特性就是合并 css 来减少 http 请求次数,加快网站访问速度的

#7 楼 @ywencn 这个还真是不知道。前端的 CSS 弄的我好头疼。我就是因为后面写的把前面的覆盖了,才想出这么笨的方法。CSS 写的太少了。没经验真可怕。

@tiseheaini 我最近也有这个方面的困扰,你最终是怎么做的。难道要手工改写前端发回来的样式文件?

我把 application.css 中 *= require_tree . 这一行去掉了,然后在 layouts / application.html.erb 中 stylesheet_link_tag 这一行该成了 <%= stylesheet_link_tag "application", params[:controller] %> 这虽然能临时解决一些问题,不过按照 @ywencn 说的那样做,我将来也会把他改过来

需要 登录 后方可回复, 如果你还没有账号请 注册新账号