如何在Rails 3站点中为每个页面设置不同的背景图像?

时间:2012-06-21 18:26:19

标签: css ruby-on-rails ruby-on-rails-3 background-image

我正在试图弄清楚如何为我的Rails 3网站的每个页面设置不同的背景图像。如何在不必重复每页css文件中的内容的情况下完成此操作?

application.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Site title</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>
<div class="container">
<div class="content">
    <%= yield %>
</div>
<%= render 'layouts/footer' %> 
</div>
</body>
</html>

pages.css.scss

.container {
    width: 800px;
    height: 640px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-top: -320px;
    margin-left: -400px;
    background-image: url(amber1.jpg); 
    background-repeat: no-repeat; 
    background-color: black;
    font-family: times new roman, serif;
    text-align: center;
    }

3 个答案:

答案 0 :(得分:3)

我认为你不能用css做到这一点。即使使用scss,您必须先将其编译为纯css,然后才能使用它,这样您就无法动态更改它。但是你可以省略css中的背景图像然后再做

<div class="container" style="background: url(<%= @my_computed_image_path %>)">
</div>

然后你需要做的就是在控制器中以某种before_filter设置@my_computed_image_path。

答案 1 :(得分:0)

您可以直接在html中设置background-image属性,如下所示:

<!DOCTYPE html>
<html>
<head>
  <title>Site title</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>
<div class="container" style="background-image: url(<%=@page.background_image%>); ">
<div class="content">
    <%= yield %>
</div>
<%= render 'layouts/footer' %> 
</div>
</body>
</html>

您可以直接从@page变量或您想要的方式设置背景图像。

如果您愿意,还可以使用如下样式表为每个页面设置不同的类:

.page_one{background-image: url(your_first_image.jpg)}
.page_two{background-image: url(your_second_image.jpg)}
.
.

在你的HTML中:

<div class="container <%=dynamically set here the class from you @page%>">

答案 2 :(得分:0)

您可以创建 my_styles.scss.erb 文件并设置如下变量:

$body-background-color: <%= @page.body_background_color %>

然后你可以在你的scss文件中使用它。