Depende de su público. Apunto solo a los últimos navegadores, así que elijo el último CSS. Casi todo es posible en CSS. Si debe admitir navegadores antiguos, utilice JS como alternativa.
Esto es lo que hice en CSS puro en aproximadamente 20 minutos. Por supuesto, podría ser mucho mejor, pero no quería dedicarle más tiempo, solo quería que comenzaras si decides ir por ese camino.
Aquí está la demostración: http://jsfiddle.net/ThinkingStiff/PHTsb/
HTML:
<div id="bedrooms" class="button">
<div id="walking">Walking</div>
<div class="body">Bedroom</div>
<div class="count">1</div>
<div class="down">▼</div>
</div>
CSS:
@import url(http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz|Satisfy);
body
{
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAAGklEQVQI12Pw8fH5X19fD8YMMAZIkAHGANEAiZwUkmznO8QAAAAASUVORK5CYII=);
}
#bedrooms
{
width: 146px;
}
.button
{
background-color: #65c3e6;
background-image: linear-gradient(
top, rgba(255, 255, 255, .4) 0%, rgba(255, 255, 255, .0) 60%);
background-image: -webkit-linear-gradient(
top, rgba(255, 255, 255, .4) 0%, rgba(255, 255, 255, .0) 60%);
background-image: -moz-linear-gradient(
top, rgba(255, 255, 255, .4) 0%, rgba(255, 255, 255, .0) 60%);
background-image: -o-linear-gradient(
top, rgba(255, 255, 255, .4) 0%, rgba(255, 255, 255, .0) 60%);
background-image: -ms-linear-gradient(
top, rgba(255, 255, 255, .4) 0%, rgba(255, 255, 255, .0) 60%);
border-bottom: 1px solid #4998b8;
border-radius: 22px;
border-top: 1px solid #cbeef7;
box-shadow: 0 0 0 5px rgba(71,71,71,.65);
-webkit-box-shadow: 0 0 0 5px rgba(71,71,71,.65);
-moz-box-shadow: 0 0 0 5px rgba(71,71,71,.65);
-o-box-shadow: 0 0 0 5px rgba(71,71,71,.65);
-ms-box-shadow: 0 0 0 5px rgba(71,71,71,.65);
color: white;
height: 36px;
margin: 30px 0 0 30px;
position: relative;
}
#walking
{
font: bold 24px Satisfy;
left: -17px;
letter-spacing: -2px;
position: absolute;
text-shadow: 3px 3px 3px rgba(69,69,69,.2), -1px 1px 1px rgba(69,69,69,.1);
top: -13px;
transform:rotate(-15deg);
-webkit-transform:rotate(-15deg);
-moz-transform:rotate(-15deg);
-o-transform:rotate(-15deg);
-ms-transform:rotate(-15deg);
}
.body
{
border-right: 1px solid #73c7e6;
display: inline-block;
font: normal 24px/24px Yanone Kaffeesatz;
height: 30px;
margin-left: 10px;
padding: 6px 8px 0 0;
text-shadow: 1px 1px 1px rgba(69,69,69,.2), -1px 1px 1px rgba(69,69,69,.1);
text-transform: uppercase;
vertical-align: top;
}
.count
{
border-left: 1px solid #8fd4eb;
color: #185269;
display: inline-block;
font: bold 16px/16px Helvetica, Arial;
height: 25px;
padding: 11px 6px 0 8px;
margin-left: 1px;
text-shadow: 1px 1px 1px rgba(255,255,255,.3), -1px 1px 1px rgba(255,255,255,.2);
vertical-align: top;
}
.down
{
color: #42778c;
display: inline-block;
font: normal 14px/14px Helvetica, Arial;
height: 24px;
padding-top: 12px;
text-shadow: 1px 1px 1px rgba(255,255,255,.3), -1px 1px 1px rgba(255,255,255,.2);
vertical-align: top;
}
Fondos solo se pueden estirar. –
@Dave Newton - Suponiendo que esté contento de que solo funcione en los navegadores que implementan esa característica de CSS 3 y que las curvas sean de diferentes longitudes en diferentes botones, ya que se escalan según el ancho del botón. – Quentin
@Quentin Los extremos son imágenes separadas. –