これはかなり厄介だと言いたいだけです。これはテストされていませんが、可能な限り最小限の要素を使用しています。四方引き戸です。
HTML:
<a href="your-url-here" class="button">
<div class="inner-1">
<div class="inner-2">
<div class="inner-3">
Your stuff
</div>
</div>
</div>
</a>
CSS:
a.button {
background: url('topleft-image-url') no-repeat top left;
display: block;
float: left;
}
a.button .inner-1 { url('topright-image-url') no-repeat top right; }
a.button .inner-2 { url('bottomright-image-url') no-repeat bottom right; }
a.button .inner-3 {
url('bottomleft-image-url') no-repeat bottom left;
padding: 0.5em;
}
// You still need to re-speicify the extra attributes of background for browser compatibility
a.button:hover { background: url('topleft-image-url-over') no-repeat top left; }
a.button:hover .inner-1 { url('topright-image-url-over') no-repeat top right; }
a.button:hover .inner-2 { url('bottomright-image-url-over') no-repeat bottom right; }
a.button:hover .inner-3 { url('bottomleft-image-url-over') no-repeat bottom left; }
サイズの制約 (例: 幅または高さ) の 1 つを取り除く場合、2 つdivの を削除できます (つまり、双方向の引き戸を作成します)。
どちらの手法でも、ボタンが経験する幅と高さの最大境界を超えるようにセグメント間に十分な透明度を持つ gif または png を作成することで、画像を最適化できます。各州に 1 つずつ、これにより、8 つではなく 2 つの画像のみが必要になります。
少し考えれば、パーセンテージ ベースまたはピクセル ベースの背景配置を使用して、両方の状態を 1 つの画像にマージする方法もおそらくわかるでしょう。これにより、CSS も簡素化できます。