2009-06-12 4 views
17

インライン疑似スタイルを作成することはできますか?インライン疑似スタイルを作成することはできますか?

たとえば、次のようなことができますか?

<a href="#" style="background-color:green;{hover:background-color:red;}">Coding Horror</a> 

私はUIエレメントを作成する.NETライブラリを開発しています。私は外部スタイルシートを使用せずにホバー状態を設定できるHTML要素を生成したい。

+1

@robbotic:関数foo(文字列u、文字列color1、文字列color2)が出力されたとします。Coding Horror インラインホバースタイルを使用する方が簡単です。これは良いアイデアですか?私はちょうどスタイルをとったような機能を持っているのですが、これは私のクラスを使っている人々が自分自身でCSSを使うように強制します。これにより、短期間で少し配備されます。 – Brian

+1

@Brian私は可能な限りインラインスタイルを避けようとしています。私は彼らがセットアップがより速いことを知っていますが、あなたは同じスタイルを他の場所に複製する必要がある場合、あなたは失うと思います。私はむしろ私のサイトのすべてのスタイルを持つ大きなCSSファイル(または複数のCSSファイル)を持っています。このようにすれば、私が簡単に望むものにアクセスすることができ、自分のサイト全体で1つの変更を行い、すべてを効果的にすることができます。 –

+0

これは正確には何の目的ですか?インライン・スタイリングは、懸念の分離の毒性違反です。 CSSに任せてください。 – annakata

答えて

13

残念ながら、インラインCSSを使用してホバー効果を実装することはできません。

この問題の回避策は、レンダリング時にコントロールがスタイルブロックをレンダリングするようにすることです。あなたは自分のページの上部にある「スタイルの管理」をドロップするようにユーザーを強制することができれば、あなたがそこにすべてのカスタムクラスをレンダリングする代わりに、次の各にそれらをレンダリングすることができ

<style type="text/css"> 
    .custom-class { background-color:green; } 
    .custom-class:hover { background-color:Red; } 
</style> 
<a href="#" class="custom-class">Coding Horror</a> 

:たとえば、あなたのコントロールはとしてレンダリングすることができ(ブラウザがスタイルブロックを遭遇するたびにレンダリングを再開し、ページの周りに多くのスタイルブロックが散在するとレンダリングが遅くなります)。

残念ながら、この問題に対する洗練された解決策はありません。

+0

これはなぜ「貧弱な」回避策ですか...なぜ、CSS疑似スタイルが存在するのはまさにその理由ではありませんか? – dsdsdsdsd

-1

jQueryhover機能を使用して、背景色を設定することができます。

+1

はい、これはJSソリューションが必要です:/ – annakata

5

これはCatch-22のような状況です。

一方で、要素がページに挿入される直前にスタイルブロックを追加できますが、Chris Pebbleはその問題を指摘しています。 (あなたがこれを決める場合、セレクタが間違って他のものを選択したりスタイルしたりすることがないように、要素の一意のIDを選択するようにしてください。それは、マークアップ、プレゼンテーション、行動、および他のものの全体の束を結びつけるとしてそれはそれ自体では厄介だ、

<a href="#" onmouseover="this.style.color=red;" onmouseout="this.style.color='blue';">...</a> 

しかし:

一方で、あなたはこのような何かを行うことができます。

また、リンクタグを書き込むか、document.stylesheetsを操作してスタイルシートを挿入することもできますが、それはダウンロードをトリガーすることになります。

私は通常、大規模で行われた最初の方法(スタイルブロックの追加)を見ました。 "モジュラー"ポータルサイトはこのようなことをしているので、デファクトスタンダード(JavaScriptをそこに詰め込むよりも、少なくとも読みやすく、保守が簡単かもしれません)。 JavaScriptメソッドは、プレゼンテーションを自分自身に任せているときに、DOMと全体のページに与える影響が最も小さいようです。

これは、あなたが選択したすべての回答がある程度間違っているフロントエンドデベロッパーの1つです。そのため、オプションを評価し、作成して維持するのが最も簡単なものを選んでください。

+0

はい、私はあなたの最後の段落がそれを要約すると思います:) –

0

すべてのコントロールを解析するときにCSSファイルを動的に作成し、ホバーまたはその他の擬似クラススタイルを含むコントロールにサーバーサイド属性を追加します。

<a style="color:blue" styleHover="color:blue" id="a1">Click!</a> 

あなたのコードは、これらの属性を探して、フライ

#a1:hover { 
    color:blue 
} 

あなたは、属性の解析のこのタイプを行うにするために、.NETが許すならば、私は知らないのCSSファイルを生成することができます私はPHPのために作成したフレームワークで同様のことをしています。