我想在我的rails应用程序中为不同的页面制作不同的布局,但是如果我在资产文件夹中为特定页面创建不同的文件,那么它会从不同的页面中获取一些值,而从不同的文件中获取一些值。我对此很生气。我为此制作了一个不同的布局文件,并将其包含layout'home'
在每个控制器中(主页的主页)。请帮忙。
4 回答
我找到了答案。实际上这不是一个好习惯,除非并且直到您想要在您的 Web 应用程序中使用与其他页面完全不同的视图的不同页面。您需要做的如下:
假设我想要控制台页面的完全不同的布局。所以这里是步骤
- 在布局文件夹中创建
console.html.erb
布局。 - 将此行更改
<%= stylesheet_link_tag "application", :media => "all" %>
为<%= stylesheet_link_tag "console_layout", :media => "all" %>
. javascript_include_tag
如果您想包含不同的 javascript,也请更改该行。- 去
assets/stylesheets
。 console_layout.css.scss
如果要为该特定页面添加样式表,请在该文件夹中创建一个文件并包含任何样式表。假设我想包含bootstrap_and_overrides.less
此控制台页面的文件。像这样写/* *= require 'bootstrap_and_overrides' *= require 'console' */
最后
self_tree .
从 application.css 中删除。
这样做意味着您实际上是在为该控制台页面创建不同的布局、不同的样式表。创建它之后,它将永远不会从其他样式表中获取值。我想提一下,仅当您需要创建一个样式完全不同且与其他页面样式无关的页面时才这样做。
谢谢。:)
要创建新的 CSS,您必须创建一个视图或控制器。
我不建议创建单独的文件。我建议你使用 rails 生成器。
例如,如果您想创建一个新视图,您必须编写:
rails generate controller credit_cards open debit credit close
这会生成一个文件控制器credit_cards
、视图debit credit
、close
资产credit_cards.scss
和 javascript credit_cards.js.coffee
,
您的credit_cards.scss
文件优于其他 scss 文件以供查看credit_cards/debit
,credit_cards/credit
并且credit_cards/close
.
您必须手动创建布局并将其添加到您的控制器或控制器内的操作:
layout "name_layout"
或在每个动作中:
respond_to do |format|
format.html { render :layout => 'name_layout' }
end
到特定的.carousel:
在你的view.html.erb
<div class="credit_card">
<div class="carousel">
content here..........
</div>
</div>
在你的file.scss
.credit_card > .carousel { margin-bottom:0px; width: 10px;}
最好的祝福!
我认为有这样一行:
*= 要求自我
在你的application.css
文件里面assets/stylesheets
。
这些管线被链轮用于资产管道内衬。您可以避免要求所有文件并明确声明您需要的文件。
同样在你的app/views/layouts/application.html.erb
,你有这条线。
'全部' %>
我宁愿不碰它,而是为其中的特定视图声明特定样式表。
阅读有关资产管道的更多信息以及它如何有助于加速您的应用程序。这是一本很棒的书。
旁注:我不确定您是否想要同一班级的不同风格。感觉您正在尝试做从长远来看难以维护的事情。我宁愿添加一个新课程。而不是使用现有的类,而是使用新的类。命名约定将与控制器名称或视图名称相关。
我觉得你越来越糊涂了。*= require_tree .
如果在application.css
清单文件中,每个控制器生成的 css 文件(以及所有其他文件)都将包含在每个请求中。我建议您的每个布局文件都可能在 div 上具有唯一的 id,可能是控制器名称。然后,在每个控制器的 sass 文件中,使用 id,您将不再有冲突的 css。
例子
div#homeController.container
color:red