Я просто хотел бы сказать, что это довольно грязно. Это не проверено, но используется минимально возможное количество элементов. Это раздвижная дверь с четырьмя путями.
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; }
Если вы избавитесь от одного из ограничений размера (например, ширины или высоты), вы можете опустить два div
с (то есть сделать раздвижную дверь с двусторонним движением).
Используя любую технику, вы можете оптимизировать изображение, создав GIF или PNG с достаточной прозрачностью между сегментами, чтобы превысить максимальные границы ширины и высоты, которые будут испытывать ваши кнопки. По одному на каждое состояние, это позволит вам требовать только два изображения вместо восьми.
Немного подумав, вы, вероятно, сможете выяснить, как объединить оба состояния в одно изображение, используя фоновое позиционирование в процентах или пикселях. Это также позволит вам упростить CSS.