1

cssRails アプリのページの上部に汎用ヘッダー イメージを含むベース レイアウトがあります。コース モデルにはオプションのロゴ画像があり、ユーザーがコース資料を表示しているときにヘッダー画像が存在する場合は、それを置き換えることが期待されます。これは可能ですか?どうすればいいですか?

ヘッダーのcssは以下です...

#header{height:116px;width:100%;background:url('logo.jpg') top center no-repeat;}

アプリは...にあり、ユーザーがログインしてコースをクリックすると、コースのロゴがヘッダー画像に置き換わります。

4

3 に答える 3

1

あなたの問題を正しく理解していれば、一部のモデルはロゴを定義しています。そのような場合、CSS を台無しにすることはありません。アセット ファイルは静的であると想定されるため、少なくともアセット ファイルを台無しにすることはありません。

レイアウトでロゴを定義できます。次のapp/viev/layouts/application.html.erbようなものを作成してください。

<head>
  ..
  <style type="text/css">
    #header { background-image: url("<%= @logo_path || 'logo.jpg' %>"); }
  </style>

また

<head>
  <% if @logo_path %>
    <style type="text/css"> #header { .... } </style>
  <% end %>

次に、一部のコントローラー、アクション、または一部のビューで@logo_path、ロゴをデフォルトとは異なるものにしたい場合は、インスタンス変数を設定するだけです。

静的 CSS でデフォルトの背景画像を定義し、レイアウトのこのルールが静的アセットのルールよりも重要であることを確認してください。疑問がある場合は!important、レイアウトのルールに条項を追加してください。

もちろん、動的に JavaScript を意味する場合は、スクリプトとロゴ パスonclickを特定の要素の属性に直接含めることができます。次のようにします。

<span onclick="replace_logo('<%= model.logo_path %>')">....</span>

関数replace_logoを書くのは難しくありません。

于 2012-06-11T14:39:31.160 に答える
0

ヘッダーに表示する画像ごとに異なるクラスを定義してから、claaを変更する方法は、変数(コントローラーまたはアクション名など)に依存するか、yield:styleをheadに追加し、ヘッダースタイルを上書きすることで2つの方法で実行できます。 content_for:styleを使用して要件を調整します。

于 2012-06-11T13:45:42.053 に答える
0

css の特定の小さな部分をメイン コードに含めて、単純な if...else ステートメントを使用し、ユーザーがログインしているかどうかに応じて「logo.jpg」を変更します。

たとえば、ユーザーがログインしている場合、ロゴの変数はデフォルト値から変更されます。ユーザーがログインしていない場合は、元のロゴを使用してください。

作業するコードがないため、詳細を提供することはできません。

于 2012-06-11T14:15:57.700 に答える