Esas botoneras: centrándolas
Uno de los temas más complicados a la hora de estructurar y diagramar un sitio, es cuando existen formularios. Creo que es el más difícil, ya que a pesar de tener [un buen CSS reseter][1] a mano que te ayude a setear esas propiedades en todos los browsers, aún así hay elementos que no obedecen como querríamos que lo hicieran. Algunos trucos se deben usar, y finalmente no queda totalmente exacto en todas las plataformas y navegadores. Imagínate esos formularios gigantescos, donde sobran campos y la usabilidad es nula… un lío.
Lo que se va a ver aquí, será específicamente cómo abordar la estructuración de una botonera de formularios (o de cualquier otro en realidad), y cómo lograr que se estén siempre centradas a pesar de cuántos botones tengan. El ejemplo gráfico a continuación:
![Ejemplo Botonera Centrado en CSSLab][2]
He visto muchas soluciones a esto, la mayoría de ellas complicadas (mi slogan siempre es facilitar la vida en su máxima expresión). Por ejemplo, se hacen class’es para cada botón (.boton_aceptar_1, .boton_aceptar_2 etc etc etc) y se posicionan absolutamente. También se hacen class’es a cada botón y se marginan, incluso negativamente (lo que IE6 no ve con buenos ojos). Imagínense si son varias páginas de formularios y los botones se repiten (por ejemplo, el ‘Aceptar’ o el ‘Enviar’ son los más comunes) pero no siempre van de a 2, sino que a veces van solos o de a 3, 4…. enfin. Hacer class’es para cada situación no es la mejor solución, ya que llenaremos la hoja de estilos de propiedades de posicionamiento en vez de aplicar una solución global, independiente de la cantidad de botones que estén involucrados. Bueno, esa es la idea de este artículo.
Es frecuente que los temas que escribo para CSSLab se den mientras estoy en algún proyecto, y me topo con dificultades que logro solucionar, y luego las muestro y explico aquí cómo se resolvió finalmente. Este es otro de esos casos, sólo que este tema lo había resuelto hacía mucho pero se dió nuevamente a manos de otro profesional web con quien trabajo. Lo ayudé con esto y finalmente me tomo el tiempo de explicarlo aquí para todos quienes tengan la misma situación.
Vamos a lo que nos reúne. [Construído el lindo formulario][3], con , , varios , y quizás, llega la hora de poner los botones de Enviar y No Enviar como en el ejemplo gráfico anterior. Mi método implica utilizar listas, ya que me gustan para [contener botones como menúes][4] (aunque puede ser un Como habrán notado, en vez de poner cada botón dentro de un y flotarlos a la izquierda (como usualmente se usa para los [menúes horizontales][5]), puse todos los botones dentro de un mismo , caso contrario no podrían ser centrados. Entonces, si es sólo un botón, o todos los que sean necesarios, deberán ir consecutivamente uno al lado del otro dentro de un único . Ahora, el CSS que hará la magia: Bastante simple. Si se han fijado, lo que hace que se centren los elementos dentro del es el text-align: center; ya que como es una etiqueta lineal, se alineará tal como lo haría un texto cualquiera. Ese es todo el truco. Lo otro es darle al un margin-left de unos 10px para que se separen un poco si son 2 o más botones (he visto usar para ello… no es correcto). Saco 3 conclusiones de esta solución: [Ver Ejemplo][7]{.verejemplo} [1]: http://www.csslab.cl/2007/10/18/css-reseter/ “Enlace en CSSLab a “CSS Reseter””
[2]: http://www.csslab.cl/wp-content/uploads/2008/03/ejemplo_1.gif
[3]: http://www.csslab.cl/2006/10/13/formularios-semanticos-ii/ “Enlace en CSSLab a “Formularios Semánticos: el regreso””
[4]: http://www.csslab.cl/2007/12/28/videocast-2-menu-con-listas/ “Enlace en CSSLab a " Videocast 2: menú con listas”"
[5]: http://www.csslab.cl/2006/02/20/menu-horizontal-y-algo/ “Enlace en CSSLab a “Menú horizontal y algo +””
[6]: http://www.csslab.cl/2006/07/20/flotando-en-la-incertidumbre/ “Enlace en CSSlab a “Flotando en la incertidumbre””
[7]: http://www.csslab.cl/ejemplos/botonera/index.html “Enlace en CSSLab a “Ejemplo Centrando Botonera””<ul id="botonera"><br />
<li><input type="submit" value="Enviar" /><input type="reset" value="No Enviar" /></li><br />
</ul>
#botonera {<br />
width: 400px;<br />
margin: 20px auto;<br />
}<br />
#botonera li {<br />
list-style: none;<br />
text-align: center;<br />
}<br />
#botonera input {<br />
margin-left: 10px;<br />
}