簡體   English   中英

如何在rails應用程序的大型ruby中管理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM