2011-05-23 95 views
23

我剛剛在Rails 3.1中學習新的資產管道。我遇到的一個特殊問題是Sprockets將所有找到的CSS樣式表合併爲一個大型樣式表。我明白爲什麼這比手動合併樣式表和縮小生產效率更有優勢。但我希望能夠選擇性地將樣式表級聯起來,而不是將所有規則全部混合在一起。舉例來說,我想:如何在Rails 3.1中管理CSS樣式表資產?

master.css

通過在Rails應用程序的所有頁面加載,但我想

admin.css只能由管理部分內頁/視圖被加載/命名空間。

如何利用Rails 3.1結合樣式表的優秀方式並將它們縮小到生產中,而且還具有以前的靈活性,能夠在每個佈局中僅加載某些樣式表組合?

還是應該通過增加一個類體標籤layouts-

體類=「admin」的

然後瞄準樣式規則適當地進行。使用SASS範圍選擇器這可能是一個合理的解決方案。

回答

0

到目前爲止,我一直在做的方式是使用兩個獨立的文件夾a /和u /,其中a /爲管理視圖,u /爲用戶視圖。然後在佈局中,我使用assets/u/application.css(js)指向相應的application.css。疼痛的位必須每次移動自動生成的文件,但要比清單中單獨要求每個文件少很多。

+1

感謝您的答覆。我決定這樣做的方式是使用兩種不同的佈局,一種用於管理系統,另一種用於主站點。每個佈局鏈接到不同的CSS清單文件。 – Ben 2011-05-24 14:41:22

+1

@Ben:可否請您在真實答案中詳細解釋這一點?我對你如何做到這一點非常感興趣。謝謝。 – nathanvda 2011-08-06 16:33:01

+0

@nathanvda:我認爲他的意思就像[this](http://stackoverflow.com/questions/7134034/using-rails-3-1-assets-pipeline-to-conditionally-use-certain-css/7273333# 7273333) – 2011-09-05 20:49:06

8

這是我如何解決問題的造型:(原諒Haml的)

%div{:id => "#{params[:controller].parameterize} #{params[:view]}"} 
    = yield 

這樣,我開始所有特定.css.sass文件與頁面:

#post 
    /* Controller specific code here */ 
    &#index 
    /* View specific code here */ 
    &#new 
    &#edit 
    &#show 

這樣你可以輕鬆避免任何衝突。

希望這對一些人有所幫助。

0

我使用類似

application.html.erb 「>

show.html.erb

content_for:body_id做 page_specific_body_id 結束

1

@nathanvda:肯定。 ..

我們利用了多個佈局文件,所以在我們的ap P /視圖/佈局,而不必只是application.html.haml(我們使用HAML),我們其實忽略了應用程序的佈局和使用3個自定義佈局:

admin.html.haml(管理部分觀點只)

registered.html。HAML(註冊/只在用戶簽署意見)

unregistered.html.haml(未註冊/無符號只在用戶視圖)

所以我admin.html.haml文件的頂部,我將有我的樣式錶鏈接標記到單獨的admin.scss(我們使用SCSS)清單。該清單將只爲管理部分加載任何必要的子樣式表。這使我們可以爲管理部分指定規則,同時還可以使用常用樣式。例如,我們在整個站點中使用jquery-ui,所以與jquery-ui相關的樣式位於它們自己的樣式表中,並將它們包含在所有3個css清單文件的清單中。

此解決方案不會給你一個可以緩存的CSS文件,但它最終會給你3個CSS文件,每個文件都可以被緩存。這允許在性能和組織CSS規則的一些靈活性之間進行權衡,所以我們不必擔心CSS規則衝突。

+0

我應該補充一點,我們現在需要明確調用我們使用的佈局,因爲我們不使用默認的應用佈局。這可以針對整個控制器或針對每個操作單獨完成。我們還寫了一個幫手來檢查是否有當前登錄的用戶,然後選擇適當的佈局。 – Ben 2011-08-25 11:33:19