Rails CSS加载,但不应用样式

时间:2012-10-16 10:17:48

标签: ruby-on-rails-3 sass

我正在关注这本书http://pragprog.com/book/rails4/agile-web-development-with-rails,我的scss文件无效。

css文件就是这个:

.store {
  h1 {
    margin: 0;
    padding-bottom: 0.5em;
    font:  150% sans-serif;
    color: #226;
    border-bottom: 3px dotted #77d;
  }

  /* An entry in the store catalog */
  .entry {
    overflow: auto;
    margin-top: 1em;
    border-bottom: 1px dotted #77d;
    min-height: 100px;

    img {
      width: 80px;
      margin-right: 5px;
      margin-bottom: 5px;
      position: absolute;
    }

    h3 {
      font-size: 120%;
      font-family: sans-serif;
      margin-left: 100px;
      margin-top: 0;
      margin-bottom: 2px;
      color: #227;
    }

    p, div.price_line {
      margin-left: 100px;
      margin-top: 0.5em; 
      margin-bottom: 0.8em; 
    }

    .price {
      color: #44a;
      font-weight: bold;
      margin-right: 3em;
    }
  }
}

和html文件如下:

<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>

<h1>Your Pragmatic Catalog</h1>

<% @products.each do |product| %>
  <div class="entry">
    <%= image_tag(product.image_url) %> 
    <h3><%= product.title %></h3>
    <p><%= sanitize(product.description) %></p>
    <div class="price_line">
      <span class="price"><%= product.price %></span>
    </div>
  </div>
<% end %>

CSS正确加载,但未应用。但是,如果添加一个带有“store”类的周围div,它就可以工作。这本书没有提到这种情况,我相信它应该“自动”应用这种风格,对吗?

感谢。

** 修改 * ** * ****

我发现了问题。对于可能遇到相同问题的人,请检查文件:

应用程序/资产/视图/布局/ application.html.erb

body 标记应包含以下代码:

<body class="<%= controller.controller_name %>">

2 个答案:

答案 0 :(得分:2)

很高兴您找到了解决方案。但我试图解释幕后发生的事情。

您使用css 的方式不是一般约定。这个设施附带一些额外的宝石。点击此链接 https://stackoverflow.com/a/4564922/1160106 。通过这些宝石,您可以更加DRY方式设计您的CSS。


一般公约

如果要将样式应用于以下h1元素

# Here "store" class is the parent element of "h1"
<div class="store">
     <h1> some text </h1>
</div>

需要以下css方式

#Here also "store" is written before "h1"
.store h1 
{ 
   #some designs
}

您的案件发生了什么?

可能你正在维护控制器智能css文件。假设你有一个stores_controller。这就是为什么stores_controller的类被封装在.store {}块中的原因。像

.store {
    h3 {font-size: 120%;}
}

很明显,您的h3元素需要具有store类的父元素。您正在通过class="<%= controller.controller_name %>"标记添加body来实现这一目的。毫无疑问,<body>标记是以下所有节点的父标记。现在,当您点击stores_controller时,它会设置class="store"并且您的样式正在运行。

该方法确实是DRY并且值得推荐。

答案 1 :(得分:0)

根据您的代码,所有样式都在.store { }块之间,因此只要您使用“store”类围绕div,它就不会反映出来

例如

.store {
  h3 {
      font-size: 120%;
      font-family: sans-serif;
      margin-left: 100px;
    }
}

相同
.store h3 {
      font-size: 120%;
      font-family: sans-serif;
      margin-left: 100px;
      margin-top: 0;
      margin-bottom: 2px;
      color: #227;
    }