[解決済み] Rails 3.1 の assets pipeline を使って特定の css を条件付きで使用する
質問
Rails 3.1.rc5を使用して、初めての単独Railsアプリを構築しているところです。私の問題は、私のサイトに様々なCSSファイルを条件付きでレンダリングさせたいということです。私はBlueprint CSSを使用しており、sprockets/railsが以下をレンダリングするようにしようとしています。
screen.css
ほとんどの場合
print.css
は印刷時のみ、そして
ie.css
Internet Explorerからアクセスした場合のみ。
残念ながら、デフォルトの
*= require_tree
コマンドを
application.css
マニフェストに含まれるすべての
assets/stylesheets
ディレクトリの中に入ってしまい、不快なCSSのごちゃごちゃになってしまいます。私の現在の回避策は、すべてを個別に指定する、一種のブルートフォース方式です。
application.cssで。
*= require_self
*= require home.css
...
*= require blueprint/screen.css
私のスタイルシートのパーシャル(haml)で。
<!--[if lt IE 9]
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
![endif]-->
= stylesheet_link_tag "application"
= stylesheet_link_tag 'blueprint/print', media: 'print'
<!--[if lt IE8]]
= stylesheet_link_tag 'blueprint/ie'
![endif]-->
= javascript_include_tag "application"
これは動作しますが、特にきれいではありません。ここまで来るのに数時間検索しましたが、私が見落としているだけで、もっと簡単な方法があるのではないかと思っています。もし、特定のディレクトリを(サブディレクトリを含めずに)選択的にレンダリングすることができれば、全体のプロセスをより簡単にすることができるのですが。
ありがとうございます。
解決方法は?
私は、アセットパイプラインを使用しながらも、スタイルシートをグループ化することで、硬直的でなく、将来性のある方法を発見しました。あなたの解決策よりもずっとシンプルというわけではありませんが、この解決策によって、構造全体を再び編集することなく、新しいスタイルシートを自動的に追加することができます。
あなたがやりたいことは、別々のマニフェストファイルを使って、物事を分割することです。まず
app/assets/stylesheets
フォルダーに格納されます。
app/assets/stylesheets
+-- all
+-- your_base_stylesheet.css
+-- print
+-- blueprint
+-- print.css
+-- your_print_stylesheet.css
+-- ie
+-- blueprint
+ ie.css
+-- your_ie_hacks.css
+-- application-all.css
+-- application-print.css
+-- application-ie.css
次に、3つのマニフェストファイルを編集します。
/**
* application-all.css
*
*= require_self
*= require_tree ./all
*/
/**
* application-print.css
*
*= require_self
*= require_tree ./print
*/
/**
* application-ie.css
*
*= require_self
*= require_tree ./ie
*/
次に、アプリケーションのレイアウトファイルを更新します。
<%= stylesheet_link_tag "application-all", :media => "all" %>
<%= stylesheet_link_tag "application-print", :media => "print" %>
<!--[if lte IE 8]>
<%= stylesheet_link_tag "application-ie", :media => "all" %>
<![endif]-->
最後に、これらの新しいマニフェストファイルを config/environments/production.rb にインクルードすることを忘れないでください。
config.assets.precompile += %w( application-all.css application-print.css application-ie.css )
更新してください。
Maxが指摘したように、この構造に従うなら、画像参照に気をつけなければならない。いくつかの選択肢があります。
-
同じパターンになるように画像を移動させる
- この機能は、画像がすべて共有されていない場合にのみ動作することに注意してください。
- 物事を複雑にしすぎるため、ほとんどの場合、これは非対策であると予想されます。
-
画像のパスを修飾します。
-
background: url('/assets/image.png');
-
-
SASSヘルパーを使用します。
-
background: image-url('image.png');
-
関連
-
cssで背景色の半透明化を実現する2つの方法
-
[CSS3] CSS3リスト無限スクロール/回転効果
-
[CSSチュートリアル】CSSプリグラミング言語と詳細解説の違いについて
-
[CSSチュートリアル】CSS複合セレクタの具体的な使用方法
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] CSSコンテンツによるHTMLエンティティの追加
-
[解決済み] CSSだけでリンクを無効化する方法
-
[解決済み] Rails 3.1 を使用して、「ページ固有」の JavaScript コードをどこに置くか?
-
[解決済み] Ruby on Rails 3.1でアセットパイプライン(sprockets)メッセージのロギングを無効にするにはどうすればよいですか?
-
[解決済み】CSSを使用して、すべてのブラウザでdiv要素を垂直方向に中央に配置するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】 css border add four corners コード
-
[CSSチュートリアル】CSSアニメーション 途中で止める方法とポーズを維持する方法
-
[CSSチュートリアル】CSSの新機能には、ページの再描画や並び替えの問題をコントロールする機能が含まれています。
-
[css3]グレーモードやブラックモードを実現するCSS3フィルター(フィルター)サンプルコード(Webページ用
-
[Div+CSSチュートリアル】divの背景を透明にする設定例
-
[css3]css3アニメーションマウスが絵の上に置かれると徐々に大きくなり、マウスが絵から離れると徐々に縮む効果
-
[CSSチュートリアル】ピュアCSSでDIVホバーを実現するサンプルコード(固定位置編)
-
[CSSチュートリアル】CSSプロパティ*-gradientの有用性を探る
-
[css3]css3によるフレックスレイアウト幅の解決方法が有効でない件
-
[CSSチュートリアル】CSSで実現できるのなら、わざわざJavaScriptを使う必要はない