いくつかのボタンと画像でスタイリングの問題をエレガントに解決しようとしています。私の目標は、次のようなボタンを持つことです。
(Hacky mspaint モックアップ)
(ソース: robhruska.com )
ただし、満たしたい一連の基準があります。
- また、アイコン イメージをテキストなしのボタンとしてのみ存在させる必要があります (つまり、ボタンの背景はアイコン イメージであり、ボタンの幅/高さ = アイコン イメージの幅/高さ)。
- アイコンのみのボタンは
:hover
、背景アイコンを変更する状態をサポートする必要があります。 - テキスト ボタンは、グラデーション背景の変更をサポートする必要
:hover
がありますが、アイコン自体は変更する必要はありません。
アイコン画像とグラデーション画像の両方を垂直 CSS スプライト画像で使用できます。
現在、次の行に沿って、テキスト ボタンとアイコンのみのボタンの個別のスタイル セットでこれを行うことしか考えられません。
<!-- text-button -->
<!-- button.text-button would have gradient background and border -->
<!-- button.text-button:hover would change to the hover gradient -->
<!-- .icon would have the icon background (icon border is included in image) -->
<button class="text-button">
<div class="icon-delete">Button Text</div>
</button>
<!-- icon-only button -->
<!-- button.icon-button would have the specific icon image background -->
<!-- button.icon-button:hover would change to the hover state background -->
<!-- button styling is different than .text-button, since icon border is included in image -->
<button class="icon-button-delete"></button>
<div>
不要なマークアップを追加するように見えるので、テキスト ボタンにインナーを使用するのは特に好きではありません。また、後で戻ってボタンにテキストを追加したい場合は、ボタン クラスを変更するだけでなく、いくつかのコンポーネントを変更する必要があります。また、DRY ではない、ボタン/div スタイルのいくつかの異なる組み合わせに対して、アイコン スプライトの画像位置をおそらく定義する必要があることも意味します。
私の質問を要約すると:アイコンとテキストのボタンにネストされた要素や個別のスタイルを使用するのではなく、単一のトップレベルのスタイルでこれを行うにはどうすればよいですか? <button>
必ずしも<button>
いずれかである必要はありません。これをエレガントに実現するのであれば、どの要素でもかまいません。
完全なコード サンプルは必要ありません。最適な方法を提案するだけです。