Una de las cosas que symfony como framework no tiene ( y no tiene por que tenerlo ) y que toda aplicación debe tener, es un set de botones coherente, liviano, simple, con código reutilizable y atractivo.
Teniendo tiempo buscando una solución para esto me encontré con múltiples opciones que no eran funcionales por que implicaban diseñar una imagen por cada botón, o era un diseño muy simple, o una etiqueta CSS por cada botón, o usaba javascript ( lo cual no es muy accesible ), pero a la final la perseverancia dio resultados y me conseguí este método de hacer botones y que era justo lo que estaba buscando y además funciona muy bien con cualquier navegador.
Acá voy a explicar como se usa en el framework symfony, sin embargo lo puedes adaptar a cualquier aplicación web.
Primero creamos un archivo css, llamado buttons.css y lo metes en el directorio web/css con el siguiente contenido:
/* BUTTONS */
.buttons a, .buttons button{
display:block;
float:left;
margin:0 7px 0 0;
background-color:#f5f5f5;
border:1px solid #dedede;
border-top:1px solid #eee;
border-left:1px solid #eee;
font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif;
font-size:100%;
line-height:130%;
text-decoration:none;
font-weight:bold;
color:#565656;
cursor:pointer;
padding:5px 10px 6px 7px; /* Links */
}
.buttons button{
width:auto;
overflow:visible;
padding:4px 10px 3px 7px; /* IE6 */
}
.buttons button[type]{
padding:5px 10px 5px 7px; /* Firefox */
line-height:17px; /* Safari */
}
*:first-child+html button[type]{
padding:4px 10px 3px 7px; /* IE7 */
}
.buttons button img, .buttons a img{
margin:0 3px -3px 0 !important;
padding:0;
border:none;
width:16px;
height:16px;
}
/* STANDARD */
button:hover, .buttons a:hover{
background-color:#dff4ff;
border:1px solid #c2e1ef;
color:#336699;
}
.buttons a:active{
background-color:#6299c5;
border:1px solid #6299c5;
color:#fff;
}
/* POSITIVE */
button.positive, .buttons a.positive{
color:#529214;
}
.buttons a.positive:hover, button.positive:hover{
background-color:#E6EFC2;
border:1px solid #C6D880;
color:#529214;
}
.buttons a.positive:active{
background-color:#529214;
border:1px solid #529214;
color:#fff;
}
/* NEGATIVE */
.buttons a.negative, button.negative{
color:#d12f19;
}
.buttons a.negative:hover, button.negative:hover{
background:#fbe3e4;
border:1px solid #fbc2c4;
color:#d12f19;
}
.buttons a.negative:active{
background-color:#d12f19;
border:1px solid #d12f19;
color:#fff;
}
Para darle un carácter de individualidad a sus botones se necesita colocar una pequeña imagen o icono a un lado y para ello nos bajamos el arsenal de 700 iconos 16x16px de FAMFAMFAM los cuales solo ocupan 1mb y además son libres de usar ya que tienen licencia Creative Commons Attribution, el archivo que nos descargamos lo extraemos y la carpeta icons la pasamos íntegramente al directorio web/images/
Ahora pasamos al código de nuestra aplicación, donde vayamos a usar un icono debemos incluir el archivo css, sin embargo si lo van a usar en la mayoría de vistas sugiero que lo incluyan en el archivo layout.php en mi caso lo tengo en app/frontend/templates/layout.php, simplemente agregamos la siguiente linea en la parte superior, debajo de todos los css que hayas declarado:
<?php echo stylesheet_tag(‘buttons’) ?>
Luego de esto ya podemos hacer disposición de usar nuestros botones en la vista
Por ejemplo en un formulario podríamos hacer lo siguiente, sustituyendo el código del botón por defecto y del enlace de cancelar:
El class negative hace que el rolover dle botón sea de color rojo, el class positive hace que el rolover del botón sean verde y si no declaran ninguna clase, el rolover del botón sera en un bonito color azul claro.
Si quieren saber más al respecto, pueden visitar el enlace que tome como referencia en:
http://particletree.com/features/rediscovering-the-button-element/
Bueno esto mas bien es CSS, el lenguaje del lado servidor queda inútil porque la funcionalidad es del lado cliente, asi que funciona con symfony, KumbiaPHP, Spring, RoR, Catalyst, Grails y gran etc…
@Cachi: Si en realidad es así, solo hice este tuto como una nota mental para que no se me olvide y bueno, por si le sirve a alguien más, en el post si dije que se podía usar con cualquier otra cosa, debido a que solo es CSS
Hey.. muy buena nota mental.. a mi me sirve mucho..