使用Rails应用程序的页面特定CSS
我想为我的Rails应用程序测试两个不同的接口。理想情况下,我希望有两个单独的css文件,一个与每个接口关联(例如,new_interface.css和old_interface.css)。我目前有两个不同的接口部分,一个叫做_new_interface.html.erb,另一个叫做_old_interface.html.erb。如果我想在加载特定视图时调用正确的css文件,我该怎么做?例如,如果我加载_new_interface.html.erb,我希望它加载新的_interface.css文件并忽略旧的_interface.css文件 My application.css:使用Rails应用程序的页面特定CSS,css,ruby-on-rails,Css,Ruby On Rails,我想为我的Rails应用程序测试两个不同的接口。理想情况下,我希望有两个单独的css文件,一个与每个接口关联(例如,new_interface.css和old_interface.css)。我目前有两个不同的接口部分,一个叫做_new_interface.html.erb,另一个叫做_old_interface.html.erb。如果我想在加载特定视图时调用正确的css文件,我该怎么做?例如,如果我加载_new_interface.html.erb,我希望它加载新的_interface.css文
/*
*= require_tree
*/
这个问题似乎是针对你需要做什么: 简而言之,您需要将app/assets/stylesheet文件夹重新组织到一些子目录中,并更改清单文件,以便在运行时不会将所有内容捆绑在一起 然后,您可以在视图中放置一些条件逻辑,以便它为作业加载正确的css。标签的内容在这里可能会很有用。您可以编辑app/views/layouts/application.html.erb,并在另一个javascript后面添加一行。然后在视图文件中可以使用
<% content_for :view_specific_css do %>
<%= stylesheet_link_tag "whatever %>
<% end %>
您应该将它们作为application.css的一部分保留,并执行以下操作
application.html.haml/erb
body{:class => @old_layout ? "old_layout" : "new_layout"}
然后,当您处于脱离控制器中旧布局的操作中时,将
@old_layout = true
然后在你的css文件中,要么用body.old_layout或body.new_layout在所有内容前加上前缀,要么使用scss,sass的子集,像这样敲打你当前的css文件
body.old_layout{
#all your old layout css goes here, all but body statements of course
}
body.new_layout{
#all your new layout css goes here, all but body statements of course
}
通过这种方式,只需一个css文件就可以让事情变得简单。使用一种解决方案,您可以轻松地一次切换每个控制器操作。请检查前面的问题,这是关于JavaScript的,但解决方案与CSS相同。我最终使用了这个解决方案。谢谢你的回复!如果你需要的话,我在这里回答了这个问题。谢谢你的回复。你能解释一下这句话的意思吗?body{:class=>@old_layout?“old_layout”:“new_layout”}这是否意味着它检查old_layout的值,并使body类old_layout为真,而new_layout为假?是的,这差不多是正确的。但请记住,如果(at)old_layout也为nil,它也将执行new_layout,因此在处理使用新布局的方法时,不必在控制器操作中设置(at)old_layout。这也是指出哪些方法仍然需要升级的好方法,因为它们中的每一个都将包含(at)old_layout=true。