![](/img/trans.png)
[英]Ruby on Rails stylesheet rendering files and application.css with common css
[英]How do you manage css stylesheet files and inclusions in a large ruby on rails application?
假設你沒有使用框架,你應該如何管理在rails應用程序上的大型ruby中組織css文件和包含? 當然,你有自己的應用程序級別樣式(例如reset.css,applcation.css)。 但那之后什么是最好的方法? 我可以看到使用特定於控制器的工作表或更具粒度的視圖特定工 還有其他合理的選擇嗎? 什么是利弊?
順便說一下,我現在正在使用3.1之前的軌道,似乎包含資產管道可能會影響到這里的答案 - 但我很高興聽到前資產管道或后資產管道方面的解決方案。
謝謝!
將其轉化為答案,因為它(僅僅是一點點)對評論很重要,即使我發現它不是您正在尋找的確切答案。
我還沒有進入rails 3.1,但是我已經使用Compass / Sass很長一段時間了,我可以松散地描述我的(有些不斷變化的)練習。
在這里查看指南針: http : //compass-style.org/
我的目標是盡可能模塊化,並以幾種不同的方式將我的風格分為幾類。 示例結構可能如下所示。 我正在將注釋與文件層次結構一起嵌入,所以希望它是可讀的。
- stylesheets
# at top level, the files which are eventually concatenated and output, the main
# sheet, "screen", a stripped version for a wysywyg editor, and some overrides.
- screen.scss
- print.scss
- ie.scss
- wysiwg.scss
# also in this folder I tend to keep a reset
- _reset.scss
# and then separated, "includes" and "partials", includes being purely definitions
# and mixins, while partials being their application (actual CSS output)
- _includes.scss
- includes
- _definitions.scss # some global variable defs
- _typography.scss # typography mixins and defs
- _colors.scss # colors mixins and defs, and so on
- ...
- _partials.scss
- partials
- _application.scss # top level layout + tweaks that don't belong anywhere else
- _typography.scss # the generation of typography CSS
- _colors.scss # the generation of colors CSS, and so on
- ...
- _layouts.scss
- layouts # layout specific styles
- _controllers.scss
- controllers # controller specific styles
- _modules.scss
- modules # modular, reusable pieces (widgets, breadcrumbs, navs, etc)
- _vendor.scss
- vendor # everything vendor, (jquery-ui, qtip, colorbox)
基本思想是將所有內容編譯到頂級* .scss文件中,唯一不是以“下划線”為前綴的“部分”文件。 這些文件非常簡單,看起來像這樣。
# screen.scss, import all partials
@import 'reset';
@import 'partials';
# wysiwyg.scss doesn't need all the partials, but needs the basic stuff
# and the semantic classes for wysiwyg users, e.g. ".red", etc.
@import 'reset';
@import 'partials/typography';
@import 'partials/colors';
@import 'partials/semantic';
_layouts.scss
和共享文件夾名稱的其他文件是各自目錄中文件的簡單集合導入。
一般的想法是,部分保持盡可能薄,主要是在mixins中完成工作。 感謝指南針提供了一個完整的抓包,我也大量使用。
對於某些人來說,這種類型的文件結構可能很笨重,但我發現它適用於我的目的。 特別是一旦你獲得了一個很好的mixin庫和可交換的部分庫。 這使得調整一些變量定義或者將一個部分或mixin替換為另一個變量定義以便快速進行全局更改變得有些容易。
在我的項目中,我有一些幫助器根據控制器和動作加載樣式表和javascripts。 我還加載了默認值,東西在公共目錄和供應商目錄中。 這都是在我的application.html.haml布局中完成的,所以這些包含都在標題中。
假設一個名為my_apps_controller.rb的控制器,我的樣式表和javascripts目錄看起來像這樣:
public/javascript/
vendors/
common/
my_apps/
common/
index/
edit/
show/
...etc...
我的樣式表/ sass /目錄看起來很相似。
這里的好處是我為我的資產建立了一個內置的基於約定的組織,而不是必須玩配置游戲。 挑戰在於我發現不清楚它進入的行動目錄的情況。 到目前為止,它很適合我。
我的助手基本上是:
module ApplicationHelper
def load_javascript_for_directory(directory_name)
glob_string = "#{directory_name}/**/*.js"
javascript_include_tag Dir.chdir(File.join(Rails.root, "public", "javascripts")) { Dir.glob(glob_string).sort }
end
def load_css_for_directory(directory_name)
glob_string = "#{directory_name}/**/*.css"
stylesheet_link_tag Dir.chdir(File.join(Rails.root, "public", "stylesheets")) { Dir.glob(glob_string).sort }
end
end
沒有什么棘手的,但在我的應用程序布局中,我可以調用它們:
= load_javascript_for_directory "#{controller_name}/#{action_name}"
這會加載控制器/操作特定的資產,而正常的樣板資產會定期獲取我需要的東西。
我不是試圖把它作為唯一的方法出售。 這只是一個替代方案,不僅解決了我的問題,而且它幫助我真正理解我的資產結構以及如何將它們干掉。
是的,SASS為我的樣式表和coffeescript為我的javascripts :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.