我是CSS / stylesheets的新手。如何将我在vendors文件夹下创建的样式表应用到我的用户显示页面?这是个人资料缩略图。
show.html.erb:
<div class="parent-container">
<% @user.photos.each do |photo| %>
<%= link_to image_tag(photo.image_url(:thumb)), photo.image_url%>
<% end %></div></p>
答案 0 :(得分:1)
rails资产管道分为3个不同的部分。
app / assets适用于应用程序拥有的资产,通常由您自己编写。
lib / assets适用于您自己的库代码,它们并不适合 进入应用程序的范围或共享的库 跨应用程序。
供应商/资产用于第三方资产,例如js插件和框架。
开始在公用文件夹中添加资源通常是不好的做法。当您的资产管道尝试在生产中编译和压缩它们时,它将无法找到它们,因为它只查找app,lib和vendor文件夹。
<%= stylesheet_link_tag :application %>
这将自动查看app / assets文件夹,并检索名为“application”的文件。从而在您的应用程序中呈现新样式!
要将新样式表包含到您的应用程序中,只需将该文件放入应用程序文件中,例如
/* ...
*= require_self
*= require_tree .
*= require custom_stylesheet_name
*/
require会自动查看上述文件夹(app / lib / vendor)。
如果您需要有关资产的进一步帮助,请查看RailsGuides;他们有很多有用且深入的内容。
http://guides.rubyonrails.org/asset_pipeline.html
您可以使用params[:controller]
值设置控制器特定资产。例如,如果您有store_controller.rb,则可以包含store.css文件。解决方案有三个步骤:
您需要从application.css中删除*= require_tree .
,否则控制器特定的css文件将被包含两次。
确保资产管道预编译器收到新文件的通知 - 除非另有说明,否则将忽略除application.css之外的所有文件。您可以在production.rb文件中执行以下操作:config.assets.precompile << "*.css"
。
最后,您需要包含控制器特定文件:
<%# this would now only load application.css, not the whole tree %>
<%= stylesheet_link_tag :application, :media => "all" %>
<%# and this would load the controller specific file %>
<%= stylesheet_link_tag params[:controller] %>
另一方面,具有特定样式表可能不是最佳做法。拥有多个文件将导致多个服务器调用,减少响应时间并创建负载顺序混乱的样式。此外,资产管道旨在提供客户端可以缓存的单个样式表。
另一种方法可能是为每个控制器设置一个定制的全局类,即
body.controller-users {
background-color:#000000;
}
<body class="controller-<%= params[:controller] %>">
#...
答案 1 :(得分:0)
从layouts / application.html.erb
中提取所有HTML文件的资产本文档包含所有<head>
&amp; <body>
个属性。你应该在那里看到以下内容:
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
这将使您资产中显示的所有css保留在所有html文件中。确保将文件保存为index.html.erb
这里有一些阅读:
http://guides.rubyonrails.org/asset_pipeline.html
享受。