Páginas

10 junio 2011

Alinear los distintos botones del footer

k_nelita pregunta cómo poner los distintos botones que ofrecen Facebook, Twiiter y otros servicios, debajo de las entradas, que se vean en una línea y que no se descompagine todo. Muchas veces me preguntan lo mismo y lo cierto es que no hay una solución universal porque todo depende de qué tipo de cosas se agregan, de cuales son sus tamaños y propiedades, etc, etc.

Algunos, sólo son enlaces, otros, iframes, otros scripts, otros, códigos especiales como los de Facebook o Google. Hay tantas posibilidades como sitios y servicios existen y por lo tanto, cada caso es diferente pero la base es siempre la misma, debemos saber qué ponemos y qué hace eso que ponemos ¿es un bloque y por lo tanto se generará un salto de línea?, ¿flota?, ¿tiene bordes? Demasiadas preguntas.

Normalmente, basta con usar propiedades como float y margin para acomodarlos pero, eso no siempre resulta y entonces, debemos volver a las fuentes y usar una simple tabla para evitar dolores de cabeza (Ver Malditas Tablas: 1, 2, 3, 4, 5).

Una tabla es como una hoja cuadriculada donde hay filas y columnas. En este caso, sólo requerimos una fila y una cantidad indeterminada de columnas; básicamente, esto es una tabla con tres columnas:
<table>
  <tr>
    <td> la celda de la izquierda </td>
    <td> la celda del centro </td>
    <td> la celda de la derecha </td>
  </tr>
</table>
¿Qué hace que usar estas etiquetas facilite las cosas? Que están pensadas para "acomodar" contenidos diversos y adaptarse a ellos.

En este ejemplo, voy a poner cinco contenidos diferentes:

el botón de Twitter que es un enlace y un script
<a class="twitter-share-button" data-count="horizontal" data-lang="es" data-via="Vagabundia" data-url="http://vagabundia.blogspot.com/" data-text="Vagabundia en Blogger" href="http://twitter.com/share" target="_blank">Tweet</a>
<script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
el botón Me Gusta de Facebook con un iframe al que dimensionaré para que no sea tan ancho y tan alto:
<iframe src='http://www.facebook.com/plugins/like.php?href=http://vagabundia.blogspot.com/&amp;layout=button_count&amp;show_faces=false&amp;width=450&amp;height=60&amp;action=likefont=tahoma&amp;colorscheme=light' allowTransparency='true' frameborder='0' scrolling='no' style='border:none; overflow:hidden; width:110px; height:25px'></iframe>
un enlace común a las etiquetas del blog y un par de imágenes cualesquiera.

Ahora, armaré la tabla:
<table class="tablapostfooter" cellspacing="0" cellpadding="0">
  <tr>
    <td>
      ....... el código de Twitter .......
    </td>
    <td style="padding-top: 17px;">
      ....... el código de Facebook .......
    </td>
    <td>
      ....... una imagen .......
    </td>
    <td>
      ....... enlaces a etiquetas .......
    </td>
    <td>
      ....... otra imagen .......
    </td>
  </tr>
</table>
Y le agregaré propiedades elementales:
<style>
  .tablapostfooter {margin: 0 auto; border:none; width: 100%;}
  .tablapostfooter td {text-align: center; vertical-align: top;}
</style>

Por defecto, la tabla tendrá la altura de la celda más alta y los contenidos quedarán alineado verticalmente en su parte superior (vertical-align:top); luego, corregimos esos detalles usando padding-top si quermos "moverlos" individualmente una cantidad de pixeles que dependerán del contenido o bien usamos vertical-align:middle para centrarlos.

Obviamente, no es la única solución porque jamás hay una sola solución pero es simple y no requiere andar peleando con propiedades CSS que tal vez, no comprendemos.

Las tablas son odiadas por algunos pero, son como las lentejas: si quieres las usas y si no, las dejas.

49 comentarios:

  1. La verdad que yo me había dado por vencida con lo de alinear los botones y opté por la solución más fácil que para mí ( que no tengo muchos conocimientos técnicos), me la ofreció Add this. Pero extraño mis botones de antes, sobre todo porque marcaban las veces que se había recomendado y ahora todo volvió a cero; voy a intentar regresarlos con tus instrucciones a ver si me quedan prolijos.
    Gracias por tus lecciones.

    ResponderBorrar
    Respuestas
    1. Genial tio, muy bueno el consejo de meter el codigo en una tabla, tan simple pero bueno, pude utilizarlo en www.golesdelbarsa.com

      Borrar
  2. Mariela:
    No probé con AddThis porque no lo uso pero, en principio, debería funcionar con cualquier cosa.

    Pozo+10™:
    No recuerdo ese botón pero, parece que es algo que ya Facebook no ofrece aunque debe seguir funcionando, eso no lo sé. Te conviene colocar cualquiera de los plugins sociales que ofrece ahora, ya sea el Me Gusta o el más nuevo que se llama Enviar y tiene funciones similares pero ampliadas. Para eso, fijate en esta entrada

    ResponderBorrar
  3. Esta tarde había de esos problemas que vienen siendo habituales y la página nos da error, decía en mi comentario que por lo que he leído entendidos en la materia aseguran que las tablas son cosa de la prehistoria y digo yo, usar o no usar tablas ¿es cosa de moda? ¿qué les hace pesar así? es que no lo entiendo :S

    ResponderBorrar
  4. Yo tampoco y, a decir verdad, pienso exactamente lo contrario. La "modernidad" no es desechar herramientas sino sumarlas y l oque está fuera de moda es el academicismo, no desde ahora, desde hace dos siglos :-)

    No existen etiquetas malas ni etiquetas buenas, sólo existen personas que las usan bien o las usan mal y, hasta eso es bastante subjetivo.

    ResponderBorrar
  5. Pozo+10™:
    Pués, como dije, desconozco cuál es ese codigo ya ue no lo veo en ninguno de los que provee Facebook en la actualidad asi qeu no sé cuales son los parámetros.

    ResponderBorrar
  6. Gracias JM por mencionarme! Me puse a hacer esto y algo estoy haciendo mal porque me da error la plantilla, no me deja guardar ni ver la vista previa, el sitio para poner la tabla es el mismo donde tengo el botón de Twitter no?

    Te mando por correo lo que puse a ver si lográs ver el error, de cualquier forma en este momento está puesto así de mal que no lo puedo ver, si querés darle una mirada...

    Mil gracias :)

    ResponderBorrar
  7. Por favor ¿donde meto la tabla? ¿en que parte de la plantilla? =(

    ResponderBorrar
  8. Ya descubrí donde ubicar la tabla, por favor una última consulta ¿Cómo hago para que el botón de twitter me twitee el post y no la página… ¿Cómo debo configurar el gadget?

    ResponderBorrar
  9. Creo que estoy resultando muy molesto, mil disculpas si es así, pero me encuentro con un problema, cuando añado las propiedades elementales me sale en la parte superior de mi blog una flechita! En serio! Le adjunto una imagen para que vea donde sale la flechita (http://dl.dropbox.com/u/4861167/problema.jpg), y cuando quito el código desaparece… ¿Qué puedo hacer?

    ResponderBorrar
  10. Si añadaes la propeidades dentro de <b:skin> </b:skin>, no debes incluir las etiquteas <style> y </style>

    ResponderBorrar
  11. Gracias! Se solucionó el problema =)

    ResponderBorrar
  12. Muchas gracias, anduve buscando por casi un mes la respuesta y me daban unos tecnisismos que me hacian hasta doler la cabeza. Siempre la solución mas simple es la mejor.

    ResponderBorrar
  13. Me alegra que sirviera para algo, Wilson. Los tecnicismos, a veces son inevitables :D

    ResponderBorrar
  14. ¡Muchas gracias! Me ha sido muy útil!

    ResponderBorrar
  15. Amigo, una consulta: He colocado en mi blog los botones de Facebook, Twitter y el PlusOne de Google bajo las entradas. En Chrome y Mozilla, se ven correctamente los tres, pero cuando uso explorer no se ve el +1... porque sucederá esto. He probado en dos maquinas diferentes...

    Muchas gracias!
    Saludos.

    ResponderBorrar
  16. No veo los botones en los blogs de tu Perfil ¿están en otro?

    ResponderBorrar
  17. Disculpa, lo que sucede es que tuve que quitar los botón de facebook y twitter, porque no estaban funcionando, me han dado mucho dolor de cabeza...

    Ya me he dado cuenta que el problema por el cual no se ve el botón +1 es la versión que tengo de Explorer, pues dice que no es compatible.

    Pero tengo una duda más amigo, es que he colocado el botón en cada entrada del blog, (debajo de data:post.body) pero cuando se le hace click, hace +1 a todo el blog en general y no a la entrada en particular; ¿donde tendría que colocarlo para que se vea en la pagina principal, pero haga +1 a la entrada en particular?

    el blog es:
    feromenoi.blogspot.com

    Muchas gracias de antemano.

    ResponderBorrar
  18. Sí; eso es lo que ocurrirá; los botones, salvo que se indique lo contrario, tomarán al URL de la página; para hacer algo distinto, esa URL debe ser indicada explícitamente:

    <g:plusone expr:src='data:post.url' size='medium'></g:plusone>

    ResponderBorrar
  19. Hola JM, estaba poniendo los botones en otro blog, al que ayer le cambié la plantilla por una Mínima de Blogger (volviendo a las raíces) :) y el de G+ no me lo toma, o sea no se ve, lo copié todo del otro blog http://www.sonando-porbailar.com.ar tal cual está ahí en tablas, y en ese blog se ve perfecto pero en el que te digo no :( es http://fotosbailando.blogspot.com/
    Que será?

    ResponderBorrar
  20. Muchas gracias por tu respuesta;
    pero aún tengo el mismo inconveniente... me toma la página principal...
    He puesto el código tal como lo has escrito debajo de data:post.body

    luego lo coloqué debajo del post-footer-line-1, para ver, pero nada... lo dejé allí.

    Disculpa la molestia amigo, ojalá me puedas indicar que estoy haciendo mal allí.

    Muchas gracias.

    ResponderBorrar
  21. Fero:
    Discupa. No se agrega src sino href; prueba de este modo:

    <g:plusone expr:href='data:post.url' size='medium'></g:plusone>

    k_nelita:
    Me parece que te has olvidado de colocar el script. Por lo menos, no lo veo en el código fuente.

    ResponderBorrar
  22. Que sería de mi sin vos JM!! Claro que me había olvidado de poner el script :S
    Ahora se ve bien, y también corregí lo que le decías a Fero para que se comparta la entrada y no todo el blog, no se muy bien como funciona eso, donde sale que se ha compartido esa entrada?

    Mil gracias :)

    ResponderBorrar
  23. Otra cosita JM, no tiene que ver con la entrada pero si con el blog de las fotos que te puse antes, no puedo configurarle el title y descripción, a pesar de haberlo copiado tal cual del otro blog, cambiando solo el contenido.
    No sale ni título ni descripción a menos que estés en una entrada individual, en la home no sale nada... que otro lío habré hecho?

    ResponderBorrar
  24. La etiqueta TITLE se ve en el código fuente del home pero n ose ven etiquetas META. Debe ser que están condicionadas de alguna manera. No es algo que pueda observarse online.

    ResponderBorrar
  25. Te lo mando por mail porque soy completamente inutil para poner un código aquí...

    ResponderBorrar
  26. Muchas gracias Jmiur!!
    Ha funcionado muy bien!!

    Saludos!

    ResponderBorrar
  27. hola jmiur, me parece genial este codigo y vi que funciona con un codigo que pelea mucho y es el de add this pero al poner los dos codigos uno sale más arriba que el otro por el tamaño del mas grande y sale ep borde en gris, como quitaría esas dos cosas?

    http://www.animextremo.com/2011/11/hellsing-1_18.html

    ResponderBorrar
  28. La pagina que indicas, no parece existir.

    ResponderBorrar
  29. esque tuve que reacer la entrada. esta si que funciona bien
    http://www.animextremo.com/2011/11/hellsing-1_4764.html

    ResponderBorrar
  30. No ve que allí estés usando una tabla para organizar esa parte.

    ResponderBorrar
  31. ya lo puse perfecto ;) gracias buen código, es el único que encontré que sirve para poner addthis alineado

    ResponderBorrar
  32. Como me gusta tu blog ya que siempre que me atoro en algo en tu blog encuentro la solución.

    ResponderBorrar
  33. Mil Gracias! Aquí en Vagabundia siempre encuentro cosas sumamente útiles para mi blog, pero en esta ocasión me has dado una gran solución a un problema que hace mucho no podía solucionar, y era alinear esos benditos botones sociales, y aun mas, este código me sirvió para alinear un anuncio con un cuadro de búsqueda, justo debajo del header... De nuevo muchísimas gracias!

    ResponderBorrar
  34. Hola. Me suena muy interesante tus consejos porque he pataleado para poder poner los botones sociales que me interesan alineados y bonitos. Al final her logrado ponerlos, sin pegas, pero lo único malo es que en IE se ve bien pero en Firefox y Chrome el botón de Pinterest se desalinea del resto. Mi web es Perros Entrenamiento. Voy a probar lo e tus tablas para ver si se arregla el temita. Gracias!

    ResponderBorrar
  35. Hola! Muchas gracias por este post. Como bien dices, no siempre funcionan las propiedades float y margin. No podía alinear los botones sociales en horizontal (siempre salían en vertical) y por fin lo he conseguido siguiendo tus instrucciones. Muy útil y claro. Gracias !! :)

    ResponderBorrar
  36. Tablas... pareciese que hoy en día es un tema taboo, casi prohibitivo decir que una tabla puede solucionarte algo, lo que sea... que chistoso es cuando después de darle 1000 vueltas a una pequeñez y nada puede solucionar el inconveniente llega una simple tabla y sin hacer nada mas te soluciona el problema...

    ResponderBorrar
  37. ^_^ muy buen aporte! Me sirvió de mucho :)

    ResponderBorrar
  38. hola Jmiur, la otra vez me ayudaste, me estoy rompiendo la cabeza con los botones sociales de la parte superior de los posts en mi blog (no de la portada sino de cada post), si gustas y tienes tiempo te agradecería me des una mano, gracias de antemano.

    ResponderBorrar
  39. Pues me salen separados y a lo largo, no los puedo juntar a la izquierda uno tras otro, lo he intentado, arreglé los de abajo pero los de arriba no he podido, gracias x atenderme :)

    ResponderBorrar
    Respuestas
    1. Si vas a usar las mismas clases para los botones superiores e inferiores, deberías comenzar por eliminar todas las propiedades ya que hay varias reglas que dicen cosas distintas. Por un lado, .tablapostfooter dice margin: 0 auto; width: 70%; y por otro margin: 0; width: 40%;

      La forma lógica es empezar sin definir ninguna.

      .tablapostfooter td {}



      .tablapostfooter td {padding-right: 10px;}

      Borrar
    2. ok Jmiur gracias, no entiendo mucho de códigos, hice lo q me dijiste pero quedó igual, sorry si no sé q más ponerle, es un tanto complicado para mí. Aprovecho para hacerte otra consulta: al poner la tabla de los botones me salían los bordes, por más q ponía en el código de la tabla border none, así q descubrí q poniéndole borde none a un código más arriba (de tablas) q encontré se solucionaba el problema. Hasta ahí todo bien, pero me acabo de dar cuenta q en otros posts donde si pongo tablas con borde 1 han desaparecido =/ (ej. http://goo.gl/6sdFsp ). Si tienes tiempo pa darme otra ayuda te agradeceré infinitivamente.

      Borrar
    3. Las reglas de estilo sobrescriben los atributos de las etiquetas. Si la etiqueta dice border="1" pero, como en ese caso, hay una regla que dice que no tienen borde:

      .post-body table, th, td {
      border: 0 solid #CCCCCC;
      }

      la que vale es esa última.

      El uso de atributos en lugar de reglas de estilo es algo no recomendable.

      Borrar
  40. Gracias Jmiur, ya lo arreglé, gracias :).

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.