在Rails中如何根据URL更改导入的样式

时间:2017-03-03 10:39:53

标签: css ruby-on-rails materialize material-design-lite

在Rails 4.2中,我希望从使用" Materialise"将视图设置为使用" Material Design Lite"

Materialise样式要求我@import 'materialize';中有application.scss,MDL样式要求我在同一个文件中包含@import 'material';

我的问题是,当我导入Materialize样式时,它会破坏MDL样式。如果我删除了Materialize import语句,MDL样式可以正常工作,但任何我没有转换为MDL样式的页面都会完全没有样式。

它是一个太大的应用程序,无法一次性过渡到MDL。我希望有一些页面用MDL设置样式,而其他页面在过渡过程中使用Materialize设置样式。

有没有办法让application.scss中的import语句以用户正在查看的页面为条件?

1 个答案:

答案 0 :(得分:0)

我从while($result = $statement->fetch(PDO::FETCH_ASSOC, N)) 删除了materialize import语句,然后在application.scss内设置了条件,它根据当前路径设置了一个标志。如果当前路径是已转换为MDL的路径,则它将views/layouts/application.html.erb标志设置为true。 (目前只转换登录页面。)

mdl

然后在页面头部我导入Materialize css和js到CDN,除非页面使用MDL

<%
  if current_page?(login_path)
    mdl = true
  else
    mdl = false
  end
%>

我认为这样做的后果就是Materialise不再存在于资产管道中,这可能会使事情变慢一些,直到转换完成为止。

我现在还有两个标题栏的部分,我根据<% unless mdl %> <!-- Compiled and minified CSS and JS for Materialize --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/css/materialize.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/js/materialize.min.js"></script> <% end %> 标志呈现正确的部分。