jueves, 31 de enero de 2013

Widget para que sigan y recomienden tu blog. Incluye: Botones de Twitter, Facebook, Insignia de Google+ y RSS

Creo que todos estamos de acuerdo en la importancia que tiene el tener en nuestro blog las vías que permitan estar en contacto con nuestros lectores/seguidores a través de las distintas redes sociales que usamos. Por ello, ponemos botones de Twitter, Facebook y Google+, de ese modo cualquier usuario puede acceder a nuestras páginas en dichas redes sociales, seguirnos o recomendarnos.



Pensado en eso y en alternativas efectivas para que puedas poner en tu blog, y así facilitarle a tus usuarios que sigan y/o recomienden tu contenido, vamos a integrar todos esos botones en una cajita contenedora para que todas las opciones estén siempre accesibles.



Esta cajita contendrá:

1. El botón de seguir de "Twitter para que te puedan seguirte desde ahí, sin tener que ingresar a tu página de Twitter".

2. El botón de Facebook, para que los usuarios recomienden tu blog.

3. La insignia standar de Google+, para que puedan agregarte a un círculo y hacer +1 a tu blog.

4. Agregaremos también la vía para que se suscriban al blog, pensando en que usas FeedBurner. También un icono para que puedan suscribirse usando algún agregador, de los muchos disponibles.



Tal y como la puedes ver a continuación:






Widget con botones redes sociales




Cómo agregar la cajita




Notas: Para la cajita tenga la apariencia que puedes ver, he hecho ajustes claves. En el caso de la insignia de Google+ por ejemplo, el ancho de ésta es mayor al ancho de la cajita contenedora, ésto para que no se vea una caja dentro de otra caja (la de la insignia dentro del contenedor).



El ancho de la cajita contenedora, es de 275 pixeles, por lo tanto, tu columna lateral deberá tener un ancho mayor a éste. Se puede reducir la cajita y hacer los ajustes para que todo se vea bien proporcionado, pero ésto lo recomiendo a usuarios que ya sepan algo de CSS y además hay que considerar que casi todos los botones e insignia, requieren un ancho mínimo para que se muestren con sus características.



Bien, pues dicho lo anterior, ahora veamos cómo agregaras la cajita, y como ya todo está integrado, tú sólo tendrás que agregar los códigos a tu blog, y editarlos con tus datos.




  1. Primero, agregas el CSS de la cajita, yendo a Plantilla > Personalizar > Avanzado > Añadir CSS. De ese modo, podrás hacer cambios y ver el resultado desde ahí. No olvides aplicar los cambios en Aplicar al blog.



    CSS


    /* Caja Redes */

    ul#caja-redes{

    width:275px

    padding:0;

    margin:0;

    list-style:none;

    background:#f7f7f7;

    border:1px solid #dcdcdc;

    overflow:hidden;

    }

    ul#caja-redes strong, li.c-rss{

    color:#848484;

    font-size:12px;

    }

    ul#caja-redes li{

    overflow:hidden;

    }

    li.cg-plus{

    height:108px;  

    padding-bottom:6px;     

    border-right:1px solid #dcdcdc;

    border-bottom:1px solid #dcdcdc;

    margin:0 -1px 0 -5px;

    }

    li.c-fb{

    border-bottom:1px solid #dcdcdc;

    padding:8px 3px 2px;

    margin:5px;

    }

    li.c-tw, li.c-mail{

    margin:5px;

    padding:6px 3px 0;

    }

    li.c-rss{

    float:left;

    margin:5px;

    padding:0 4px 4px;

    }

    a.c-rss {

    background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2c14hk33exbYBIkrR8WTVo1xAD22YjRp7y7q3L-_9Mvd3Ue_yYuKifRDpqTdErns3eOJ-eaquKFJEKSSGyFz7InTzUsQWJ_hbjPXE39Wf7pjoL_TX0bFqkWrLK6-yIoK5xm7qYfLyO0/s1600/rss1.png) no-repeat 25% 40%;

    display:inline;

    padding:0 0 1px 26px;

    color:#848484;

    }

    input[type="text"].campo, input[type="submit"].enviar {

    border:1px solid #dcdcdc;float:left;color:#848484;display:block; height:20px;font-size:11px;}

    input[type="text"].campo{text-indent:3px;width:145px; margin-right:-3px;}

    input[type="submit"].enviar {height:24px;cursor:pointer;text-shadow:0 1px 0 #fff;

    background:-webkit-linear-gradient(top,white,#d8d8d8); 

    background:-moz-linear-gradient(top,white,#d8d8d8); 

    background:-ms-linear-gradient(top,white,#d8d8d8); 

    background:-o-linear-gradient(top,white,#d8d8d8);}


  2. Luego, Vas a "Diseño" y seleccionas un gadget en la sección de la columna lateral, con la opción de HTML/Javascript, y pones el siguiente código que tendrás que editar con tus datos. Una vez editados, guarda los cambios.


  3. <ul id="caja-redes"><li class="c-fb"><iframe src="//www.facebook.com/plugins/like.php?locale=es_ES&amp;href=http%3A%2F%2Fwww.compartidisimo.com&amp;send=false&amp;layout=standard&amp;width=260&amp;show_faces=false&amp;font&amp;colorscheme=light&amp;action=like&amp;height=42" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:260px; height:42px;" allowtransparency="true"></iframe> </li> <li class="c-tw"><a href="https://twitter.com/compartidisimo" class="twitter-follow-button" data-dnt="true"  data-lang="es" data-dnt="true">Seguir a @compartidisimo</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> </li> <li class="cg-plus"><div class="g-plus" data-width="286" data-href="//plus.google.com/109627432877953314897" data-rel="publisher"></div> <!-- Inserta esta etiqueta después de la última etiqueta de insignia. --> <script type="text/javascript">   window.___gcfg = {lang: 'es'};   (function() {     var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;     po.src = 'https://apis.google.com/js/plusone.js';     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);   })(); </script> </li> <li class="c-mail"> <form action='http://feedburner.google.com/fb/a/mailverify' method='post' onsubmit='window.open(&apos;http://feedburner.google.com/fb/a/mailverify?uri=compartidisimo&apos;, &apos;popupwindow&apos;, &apos;scrollbars=yes,width=550,height=520&apos;);return true' target='popupwindow'><strong>Compartidísimo directamente a tu e-mail</strong><p><input class='campo' name='email' placeholder='ingresa tu e-mail' type='text'/></p><input name='uri' type='hidden' value='compartidisimo'/><input name='loc' type='hidden' value='es_ES'/><input class='enviar' type='submit' value='Suscríbete'/></form> </li> <li class="c-rss">O suscríbete por otras vías:<a class="c-rss"  href="//feeds.feedburner.com/compartidisimo" title="Vía RSS" target="_blank">RSS</a></li> </ul>


      Edita los datos, de arriba hacia abajo tomando en cuenta que en:

      • www.compartidisimo.com pones la URL de tu blog, omitiendo el http:// pondrías por ejemplo miblog.blogspot.com, pensado que usas subdominio. 

      • compartidisimo ahí pones el nombre de usuario de Twittter.

      • Seguir a @compartidisimo  es el texto del botón de twitter.

      • 109627432877953314897 ahí pones el ID de tu página de Google+, o el del perfil. Para conseguir ese número tienes que ir a la página en Google+, y copiar la numeración que aparece en la barra de direcciones de tu navegador.

      • compartidisimo ahí pones la URI de FeedBurner. Puedes obtenerla accediendo a la página de FeedBurner,y luego haces click en el icono de RSS que está a un lado del nombre de tu blog, luego se abrirá una ventana con tus feeds. El nombre de la URI es el texto que aparece después de la barrita diagonal "/" en la barra de direcciones. 

      • Compartidísimo directamente a tu e-mail ese es el texto que aparece antes del campo para que ingresen el e-mail para la suscripción del blog.

      • compartidisimo otra vez pones la URI de FeedBurner.

      • O suscríbete por otras vías: este es el texto que esta antes del icono de RSS.

      • compartidisimo ahí va de nuevo la URI de FeedBurner.






    ¡Y listo!, ya habrás agregado una cajita con todos los elementos para que sigan y recomienden tu blog ;)






    Notas finales:


    • El código que esta de morado es de los scripts de Twitter y Google+ respectivamente (de arriba hacia abajo) Si ya usas algunos de esos elementos, no vuelvas a agregar el script, y asegúrate que esté colocado hacia abajo después del último botón.

    • En el caso de la sección de facebook, no vayas a disminuir el alto en el código (si usas el mismo ancho) , ya que hasta ahora, se muestran distintas leyendas si has o no ingresado a tu cuenta de Facebook.



    Seccion de Facebook



    Ah!, a propósito de facebook, hace mucho que quité el botón para que hagas me gusta al blog, agradezco a quienes compartieron el enlace sin que yo tuviese el botón.  Todos los me gusta se perdieron al hacer el cambio de dominio, así que si te gusta el blog, no olvides compartirlo en Facebook haciendo "Me gusta" ;)



    ¿Quieres ver la cajita en acción?, entonces echa un vistazo a la demostración.






    Importante: Si vas agregar la insignia usando el perfil, y no una página de Google+, necesitarás cambiar el alto del espacio reservado para la insignia, (ya que ahí no se muestran los avatares, y por lo tanto, ésta es menos alta). Lo haces en esta parte del CSS (del paso 1)


    li.cg-plus{

    height:108px


    ...

    Cambia 108px,  por 52px. Ten cuidado de no borrar el punto y coma al final.



    Enlaces de las páginas de las distintas redes sociales, con los botones oficiales

    Botón de Seguir de Twitter

    Botón de Me gusta de Facebook

    Insignia de Google+





    miércoles, 30 de enero de 2013

    Ayuda Bloggers es parte ahora de "Todo Blogger en Español"

    Junto con saludarlos, orgullosamente les informo que Ayuda Bloggers es parte de Todo Blogger en español, una nueva comunidad para los usuarios que deseen compartir sus blogs y ayudar a otros, debatir temas relacionados a Blogger y además obtener recursos útiles para mejorar la apariencia y funcionamiento de sus blogs.

    La idea inicial fué por +Jesús González, autor y administrador de iniciaBlog, con el fin de crear un lugar de encuentro para muchos usuarios.

    todo blogger, todobloggerenespañol



    ¿Quienes formamos esta comunidad?

    El equipo de Todo Blogger en Español no sólamente lo formamos nosotros e iniciaBlog, sino también otros 4 excelentes Bloggers que con su esfuerzo han destacado y con su trabajo han maravillado a otros usuarios. La lista completa del equipo es la siguiente:


    Categorías y métodos de publicación:

    Todo Blogger en español
    La comunidad presenta variadas secciones, entre las cuales se encuentran:

    • Presenta tu Blog: Muéstranos quién eres, de donde eres y en donde escribes.
    • Debates: Espacio abierto para debatir, preguntar, argumentar, enseñar, etc.
    • Novedades Blogger: Espacio único para las noticias de la plataforma Blogger.
    • Primeros pasos: Artículos fundamentales para cualquier usuario que necesite orientación sobre el uso de Blogger.
    • Consejos: De todo tipo, siempre relacionados a Blogger. Pide consejos y/o aconseja.
    • Posicionamiento: Obtén mejores resultados en las búsquedas de Google o enseña a otros.
    • Redes sociales: Tips, marcadores y otros elementos sociales para tu blog.
    • Plantilla HTML: Todo lo relativo a cambios en la plantilla de Blogger.
    • Gadgets: Nuevos gadgets para tu(s) blog(s).
    • Monetización: Saca el máximo partido a tu blog monetizándolo.
    • Marketing: Aplica técnicas de mercadotecnia en tu blog.
    • Eventos: Anuncios de la comunidad.

    Si deseas compartir alguna cosa, no olvides hacerlo en la sección correspondiente, todo esto con el fín de hacer de la comunidad un lugar organizado.

    ¿Dudas, consultas, críticas o sugerencias?

    Si deseas ayudarnos para que la comunidad sea un mejor lugar, con gusto recibiremos tu feedback de vuelta, o si tienes alguna duda no vaciles y ponte en contacto con el equipo de la comunidad en sus respectivos blogs o directamente en Todo Blogger en Español.

    Sin mas, los invito a ser parte de esta gran comunidad, que a pocos días de su creación ha crecido bastante, esperamos que siga creciendo y para eso necesitamos que tú seas parte de ella.

    todo_blogger_español
    Esta entrada estará en constante modificación, y cualquier anuncio se hará en una nueva entrada o entre los usuarios de la comunidad.

    Para acceder a la comunidad presiona en la imagen que se encuentra a la izquierda.



    martes, 29 de enero de 2013

    Efecto Sepia en Photoshop

    En este sencillo tutorial, veremos cómo agregarle a nuestra fotografías o imágenes el efecto Sepia, dándole un toque de fotografía antigua.
    El link de los materiales lo encontrarán debajo del video.

    Materiales

    8 Tutoriales +1 para mejorar/personalizar las entradas de tu blog que no te puedes perder









    Gracias a la dedicación y al trabajo de diferentes blogueros que les apasiona todo lo relacionado a Blogger, podemos encontrar a nuestra disposición una gran cantidad de tutoriales que nos permiten personalizar el diseño del blog así como optimizarlo. A continuación una recopilación de interesantes y útiles tutoriales que te permitirán personalizar o mejorar las entradas de tu blog ;)




    1. Sumarios automáticos sin javascript para Blogger. Una entrada interesante que nos comparte +Oloman Oloman, con la cual podrás crear resúmenes automáticos para tus entradas sin usar Javacript, lo cual puede repercutir positivamente en la carga de tu blog. 

    2. Resúmenes tipo Mosaico Un artículo interesante de +Jorge Vilá, que te permitirá crear resúmenes en las entradas tipo mosaico (al estilo Pinterest). 

    3. Mostrar el primer post de forma diferente. Personaliza la primer entrada de tu blog, para que ésta se vea diferente al resto de tus entradas, con la ayuda de este sencillo tutorial que nos comparten desde +Ciudad Blogger.

    4. Entradas relacionadas en las entradas con imagen miniatura, de +Ayuda Bloggers, donde conseguirás agregar una sección de entradas relacionadas con imagen miniatura en tus entradas, lo cual puede tener un impacto positivo el tráfico de tu blog.

    5. Personalizar las entradas de Blogger según las etiquetas. Una entrada de +Emilio Cobos Álvarez, donde comparte una técnica que te permitirá darle la apariencia que desees a tus entradas, tomando en cuenta las etiquetas.

    6. Información del autor en las entradas. Otra entrada interesante de +Julia Yuste, que permitirá darle un toque más personal a tu contenido, mostrando información relevante del autor (es) de la entrada al final de ésta. 

    7. Comentarios anidados personalizados para Blogger.Una excelente alternativa al sistema de comentarios anidados recientemente implementado por Blogger. Dicha alternativa fue desarrollada por +Felipe Calvo, conocido como NicoNico, colaborador principal del foro de ayuda de Blogger, con la cual podrás habilitar comentarios anidados en tus entradas, y en donde el contenido de éstos es generado por el propio servidor de Blogger, permitiendo así una carga más rápida tanto de los comentarios como de la página del blog.

    8. 10 consejos SEO para optimizar las entradas de Blogger. Entrada que nos comparte +Jesús González, que no precisamente tiene que ver con códigos como en las anteriores, aunque resultará muy útil para todos aquellos interesados en mejorar el SEO desde las entradas del blog. 



    +1Ofrecer suscripción desde las entradas del blog. Captura a una mayor audiencia ofreciendo suscripción desde las entradas de tu blog. Aquí en +Compartidísimo te decimos cómo lograrlo paso a paso ;)




    Sin duda estos tutoriales te permitirán agregarle atractivo a tus entradas, mejorarlas en varios aspectos, u optimizarlas, pero recuerda que lo más importante de todo es el contenido mismo que tu aportas en tus entradas, eso no puedo ser compensado o sustituido por nada ;)



    lunes, 28 de enero de 2013

    One div: Iconos utilzando sólo CSS

    One div es un sitio donde podemos buscar y copiar el código necesario para utilizar íconos o símbolos creados exclusivamente con CSS; una técnica cuyo uso se va va extendiendo ya que tiene la ventaja de no utilizar imágenes y de ser flexibles porque podemos variar su tamaño con sencillez sin que se deformen.

    Además, basta un poco de imaginación para aprovechar las distintas propiedades, cambiar colores, agregar animaciones o utilizar efectos aunque, claro está, como todas estas cosas, la compatibilidad con los distintos navegadores es una limitación importante pero, poco a poco, es algo que deberíamos dejar de lado y empezar a aceptar que esas limitaciones existirán siempre y que nada es universal excepto que 2+2=4.

    Algunos ejemplos:

    <style>
    .mug_animate {
    box-shadow: 0 -3em 0 0 #0AF inset;
    height: 2.5em;
    position: relative;
    -moz-transition: all 1000ms linear 0s;
    -webkit-transition: all 1000ms linear 0s;
    -o-transition: all 1000ms linear 0s;
    -ms-transition: all 1000ms linear 0s;
    transition: all 1000ms linear 0s;
    width: 1.5em;
    }
    .mug_animate:after {
    border-color: #DDD transparent #DDD #DDD;
    border-image: none;
    border-radius: 0.75em 0 0 0.75em;
    border-style: solid none solid solid;
    border-width: 0.25em medium 0.25em 0.25em;
    content: "";
    height: 1.5em;
    left: -1em;
    position: absolute;
    top: 0.25em;
    width: 0.75em;
    }
    .mug_animate:before {
    border: 0.25em solid #DDD;
    border-radius: 0 0 0.2em 0.2em;
    content: "";
    height: 2.5em;
    left: -0.20em;
    position: absolute;
    top: -0.5em;
    width: 1.5em;
    }
    .mug_animate:hover {
    box-shadow: 0 0 0 0 #00F inset;
    }
    </style>

    <div class="mug_animate"></div>


    <style>
    .fir {
    box-shadow: 0em 0.9em 0 -0.8em #4D4,0em 1em 0 -0.8em #4D4,0em 1.1em 0 -0.8em #4D4,0em 1.2em 0 -0.8em #4D4;
    border-bottom: 1.7em solid #4D4;
    border-left: 1em solid transparent;
    border-right: 1em solid transparent;
    font-size: 20px;
    height: 0em;
    position: relative;
    width: 0em;
    }

    .fir:before {
    border-bottom: 1em solid #4D4;
    border-left: 0.7em solid transparent;
    border-right: 0.7em solid transparent;
    content: '';
    display: block;
    height: 0em;
    left: -0.7em;
    position: absolute;
    top: -0.2em;
    width: 0em;
    }

    .fir::after {
    border-bottom: 0.7em solid #4D4;
    border-left: 0.5em solid transparent;
    border-right: 0.5em solid transparent;
    content: '';
    display: block;
    height: 0em;
    left: -0.5em;
    position: absolute;
    top: -0.5em;
    width: 0em;
    }
    </style>

    <div class="fir"></div>


    <style>
    .pacman {
    background-image: -webkit-radial-gradient(1.75em .75em, circle, transparent 10%, #EE0 10%);
    background-image: -moz-radial-gradient(1.75em .75em, circle, transparent 10%, #EE0 10%);
    background-image: -o-radial-gradient(1.75em .75em, circle, transparent 10%, #EE0 10%);
    background-image: -ms-radial-gradient(1.75em .75em, circle, transparent 10%, #EE0 10%);
    background-image: radial-gradient(1.75em .75em, circle, transparent 10%, #EE0 10%);
    border-radius: 3em 3em 0 0;
    height: 1.5em;
    position: relative;
    -moz-transform: rotate(-45deg);
    -webkit-transform: rotate(-45deg);
    -o-transform: rotate(-45deg);
    -ms-transform: rotate(-45deg);
    transform: rotate(-45deg);
    width: 3em;
    }

    .pacman:after {
    background-color: #EE0;
    border-radius: 0 0 3em 0;
    content: '';
    height: 1.5em;
    left: 0em;
    position: absolute;
    top: 1.45em;
    -moz-transform: rotate(90deg);
    -webkit-transform: rotate(90deg);
    -o-transform: rotate(90deg);
    -ms-transform: rotate(90deg);
    transform: rotate(90deg);
    width: 1.5em;
    }
    </style>

    <div class="pacman"></div>


    sábado, 26 de enero de 2013

    Big catch



    Añadir un ícono a cada una de las etiquetas de Blogger

    Hace algún tiempo atrás vimos la manera de personalizar las etiquetas de las entradas de Blogger mediante CSS, y en otros blogs como Ciudad Blogger se ha visto la forma de incluir un ícono en las etiquetas, pero de manera grupal añadiendo una imagen al final de cada enlace.

    Gracias a las condicionales en Blogger añadiremos un ícono pero a cada etiqueta de manera distinta, es decir que si la categoría es de música, entonces el ícono que aparecerá a su lado será un instrumento musical, una nota, etc.

    blogger,tags

    Cómo añadir un ícono a las etiquetas del gadget de Blogger:

    Paso 1: Añadiendo el gadget de etiquetas modificado:

    Este paso es un poco más complicado debido a que necesitas ubicar correctamente el <b:section>. Para ello, deberás buscar una línea muy similar a esta (Búscala sin expandir los artilugios para que sea más sencillo):
    <b:section class='sidebar' id='sidebar-wrapper' showaddelement='yes'/>

    Recuerda que muy dificilmente la encontrarás idéntica a ésta, deberás fijarte en buscar el <b:section> con el atributo class='sidebar' (En caso de estar el gadget en la columna lateral del blog).

    Si ya tienes un gadget de etiquetas dentro de esta sección, entonces deberás suprimirlo, bastaría con buscar un código similar a éste, obviamente se encontrará en el <b:section> que hayamos identificado anteriormente:
    <b:widget id='Label1' locked='false' title='Etiquetas' type='Label'/>

    Este código lleva un atributo title, el cual corresponde al título del gadget. Si tu gadget lleva como título "Categorías" u otra cosa entonces deberás fijarte que el gadget lo lleve en éste atributo, o de lo contrario estarás suprimiendo otro en caso de tener varios.

    Si ya lograste identificar el gadget, entonces deberás reemplazarlo por este código:

    <b:widget id='Label99' locked='false' title='Etiquetas' type='Label'>
        <b:includable id='main'><div id="gadget-etiquetas">
                <h2><data:title/></h2>
            <ul>
                <b:loop values='data:labels' var='label'>
                    <li expr:class='data:label.name'>
                        <b:if cond='data:blog.url == data:label.url'>
                            <span expr:dir='data:blog.languageDirection'><data:label.name/></span>
                        <b:else/>
                            <a expr:dir='data:blog.languageDirection' expr:href='data:label.url'><data:label.name/></a>
                        </b:if>
                    </li>
                </b:loop>
            </ul>
        </div></b:includable>
    </b:widget>

    Previsualiza los cambios y si no hay ningún inconveniente procedes a guardar la plantilla.

    Nota: Te preguntará si deseas suprimir el gadget, deberás aceptar dicha modificación.

    Paso 2: Añadir CSS en cada etiqueta:

    Una vez que ya hayas realizado el paso anterior, deberás pegar el siguiente código antes de ]]></b:skin>:
    #gadget-etiquetas ul {
    margin:0;
    font-family:tahoma;
    }

    #gadget-etiquetas a {
    color:#777;
    cursor:pointer;
    }

    #gadget-etiquetas li[class="Etiqueta uno"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta dos"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta tres"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta cuatro"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta cinco"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta seis"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta siete"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta ocho"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta nueve"] {
    list-style-image:url(URL-IMAGEN);
    }
    #gadget-etiquetas li[class="Etiqueta diez"] {
    list-style-image:url(URL-IMAGEN);
    }

    Deberás reemplazar el nombre etiqueta-XXXX por la etiqueta que corresponda (Respetando mayúsculas, tíldes, separaciones, etc), junto con añadir un ícono en el atributo list-style-image. Observa un ejemplo:

    #gadget-etiquetas ul {
    margin:0;
    font-family:tahoma;
    }

    #gadget-etiquetas a {
    color:#777;
    cursor:pointer;
    }

    #gadget-etiquetas li[class="Música"] {
    list-style-image:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdJtbhUv4hxYCWDHwtzfkm_uVDwGaQh0kTgVi1fc4TbH_EjqllRqcLeHgM1d_-xNMJl5iGi-vebDNuA8auCqGlxHZsTc2C144W_U3fMkB_TbPBB8f5Hh9ufFGDv06AlAEHi8rUoDN6gyc/s1600/music-icon.png) !important;
    }
    #gadget-etiquetas li[class="Arte"] {
    list-style-image:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbpBStn9FwqqCyoMft_P9_WksyEM_9a3XGVr2rPBBiIuuOpmBDHDLd1_n2mocNaesjpawMb8LnnsYnIGSpusYLTBCo5BN94_QLhHwR2PdcGn3yQv3xiLRwA3_RPlapWeC-VMbZ_NZq2Cs/s1600/art_icon.png);
    }

    #gadget-etiquetas li[class="Vídeos"] {
    list-style-image:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-5UeZ3Xs_v3bpcRdZFNT1usQgIw7eellNugfilUfUIvKFQRnTe1xsXkEvlL8apAYkupZEZM-uCXzLcAHhg_QYq4_lPSJ-EkqGyl7QcZnX1qH0mpYzQijySXirkaeM1Ryd_0wZDi0V6AY/s1600/video_icon.gif);
    }
    #gadget-etiquetas li[class="Fotografías"] {
    list-style-image:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipa8rqVtdTKkiXGX2-dZBf-P3MkvLuRvPNgwkiywtpuKUR-wZupfxVnMMTplNehHHOVAwdAQq0caGCKSLcVVQd709x4sK8hmxIHO-HhWpbL1Ylc-0MozdpAuZXL9iWFGARl5gorXablZw/s1600/url.png);
    }

    El resultado será muy similar a este:



    Cómo añadir un ícono a las etiquetas de las entradas:

    Paso 1: Reemplazar las etiquetas por defecto:

    Lo primero que debes hacer en este caso, es buscar el siguiente código dentro de tu plantilla (Con las plantillas de artilugios expandidas):
    <span class='post-labels'>
    <!--
    Este contenido, junto a la etiqueta span deberá suprimirse
    -->
    </span>

    Deberás reemplazarlo con este código:
    <div class='post-labels'>
    <b:if cond='data:post.labels'>
    <data:postLabelsLabel/>
    <div class='labels'>
    <b:loop values='data:post.labels' var='label'>
    <a expr:class='data:label.name' expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != "true"'></b:if>
    </b:loop>
    </div>
    </b:if>
    </div>

    Si no lo encuentras, y si en tus entradas no aparecen las etiquetas, puedes añadirlo justo debajo de:
    <data:post.body/>

    Paso 2: Aplicando CSS a las etiquetas:

    Debido a que ya no manipulamos viñetas como lo hicimos en el método de los gadgets, tendremos que hacerlo levemente distinto. Copia y pega el siguiente código antes de ]]></b:skin>:
    .post-labels {
    margin:20px 0 10px 0;
    padding:10px;
    }

    .post-labels a {
    display:inline-block;
    padding-left:20px;
    margin: 0 8px 0;
    }

    .post-labels a[class="Etiqueta uno"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta dos"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta tres"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta cuatro"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta cinco"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta seis"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta siete"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta ocho"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta nueve"] {
    background:url(URL-ICONO) no-repeat left;
    }

    .post-labels a[class="Etiqueta diez"] {
    background:url(URL-ICONO) no-repeat left;
    }



    Recuerda reemplazar etiqueta-XXXX por la etiqueta que corresponda (Respetando mayúsculas, tíldes, etc), junto con añadir un ícono en el atributo background. Observa un ejemplo:
    .post-labels {
    margin:20px 0 10px 0;
    padding:10px;
    }

    .post-labels a {
    display:inline-block;
    padding-left:20px;
    margin: 0 8px 0;
    }

    .post-labels a[class="Música"] {
    background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdJtbhUv4hxYCWDHwtzfkm_uVDwGaQh0kTgVi1fc4TbH_EjqllRqcLeHgM1d_-xNMJl5iGi-vebDNuA8auCqGlxHZsTc2C144W_U3fMkB_TbPBB8f5Hh9ufFGDv06AlAEHi8rUoDN6gyc/s1600/music-icon.png) no-repeat left;
    }
    .post-labels a[class="Arte"] {
    background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbpBStn9FwqqCyoMft_P9_WksyEM_9a3XGVr2rPBBiIuuOpmBDHDLd1_n2mocNaesjpawMb8LnnsYnIGSpusYLTBCo5BN94_QLhHwR2PdcGn3yQv3xiLRwA3_RPlapWeC-VMbZ_NZq2Cs/s1600/art_icon.png) no-repeat left;
    }

    .post-labels a[class="Vídeos"] {
    background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-5UeZ3Xs_v3bpcRdZFNT1usQgIw7eellNugfilUfUIvKFQRnTe1xsXkEvlL8apAYkupZEZM-uCXzLcAHhg_QYq4_lPSJ-EkqGyl7QcZnX1qH0mpYzQijySXirkaeM1Ryd_0wZDi0V6AY/s1600/video_icon.gif) no-repeat left;
    }
    .post-labels a[class="Fotografías"] {
    background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipa8rqVtdTKkiXGX2-dZBf-P3MkvLuRvPNgwkiywtpuKUR-wZupfxVnMMTplNehHHOVAwdAQq0caGCKSLcVVQd709x4sK8hmxIHO-HhWpbL1Ylc-0MozdpAuZXL9iWFGARl5gorXablZw/s1600/url.png) no-repeat left;
    }

    El resultado:

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut odio. Nam sed est. Nam a risus et est iaculis adipiscing. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ut justo. In tincidunt viverra nisl. Donec dictum malesuada magna. Curabitur id nibh auctor tellus adipiscing pharetra. Fusce vel justo non orci semper feugiat. Cras eu leo at purus ultrices tristique.



    Actualización: Se han reemplazado los selectores de clases por selectores de atributos para que puedan reconocerse etiquetas de 2 palabras o más.

    jueves, 24 de enero de 2013

    Efecto clic explosión de estrellas en el cursor

    En tutoriales anteriores habíamos visto dos efectos diferentes para nuestro cursor: el efecto de burbujas que subían y el efecto de estrellas que caían al mover el cursor en nuestro blog.

    Hoy vamos a ver otro efecto más para el cursor de nuestro blog. Se trata de un efecto de explosión de estrellas de colores. Este efecto funciona al dar clic en cualquiera parte de nuestro blog (por ejemplo, al momento de seleccionar algo).

    Al momento de dar clic se producirá el efecto de explosión de varias estrellas de colores.

    ( Ver DEMO)

    Para agregar este efecto, seguimos estos sencillos pasos:

    1.§ Vamos a Plantilla - Edición de HTML.

    2.§ Con ayuda de CTRL+F buscamos </head> y justo antes de éste, pegaremos el siguiente script:


    3.§ Si dejamos el código tal como está, las estrellas cambiarán de color cada vez que demos clic; si queremos que las estrellas sean de un color único, cambiamos lo resaltado en negrita por el color de nuestra preferencia

    4.§ Damos clic a guardar y listo.

    Ver demo

    Diseño web a tu gusto, cosas a tener en cuenta


    Siempre hago la misma pregunta cuando me encuentro ante alguien que intenta primar lo visual a la hora de hacer un sitio web, una plataforma, etc ¿de que te vale que tu sitio te guste a ti si no posiciona correctamente?

    Uno entiende que no tienen por que conocer todo lo que hay detrás de un sitio web, pero tener un sitio web "bonito" y que no lo vea nadie ¿de que te vale?

    Esta es una discusión que tengo demasiadas veces ya cuando se diseña un sitio web para una marca o empresa, solo se ve "lo bonito", "lo que me gusta" y es complicado hacerles entender que "lo bonito" y "lo que te gusta" no es lo adecuado para posicionar.

    Muchos sitios están viendo como la mayoría de sus visitas provienen de redes sociales y se encuentran encantados con ello pero hay un pequeño detalle que no tienen en cuenta, normalmente entre un 60% y un 80% del trafico de un sitio web proviene de buscadores, Google en gran parte. Eso significa realmente que solo están aprovechando entre el 20% y 40% de todo el tráfico posible que podrían alcanzar con una buena estrategia de posicionamiento, están haciendo una buena labor de SMO (optimización de redes sociales) pero dejan de lado el SEO (optimización de buscadores).

    Además otro pequeño detalle, en cuanto dejas de estar activo en redes sociales, pierdes gran parte de ese tráfico, cosa que no ocurre con el SEO.

    Cuando uno va a contratar una pagina web debe olvidarse en gran parte de "sus gustos", cada uno de nosotros tiene "un gusto" diferente y es imposible satisfacer a todo el mundo. Uno debe de pensar en una pagina funcional, adaptada a todos los dispositivos y tiempos de cargas cortos (aun hay gente que usa modems). Actualmente para posicionar influyen los tiempos de carga, la usabilidad, el correcto marcado, etc y eso debe primar ante todo, no lo "que me gusta".

    La prioridad actualmente debe ser adecuar tu página para un correcto posicionamiento lo cual no es incompatible en absoluto con un diseño "bonito", algunas de las preguntas que deben hacerse a la hora de contratar una página o plataforma serian:

    ¿tiempos de carga inferiores a 8 segundos?
    ¿correcto marcado?
    ¿pruebas de usabilidad?
    ¿marcado de autor?
    ¿enlaces?
    ¿alternativas a los botones sociales?
    ¿google places?

    Son cuestiones lanzadas de forma escueta, sin profundizar y hay muchas más, pero hay información suficiente en la red para decidir si te convencen las respuestas y convencerte que debes dejar "tus gustos" a un lado.

    Un amigo mío, @carlosojeda, dice una frase muy cierta "existe un mundo mas allá de las redes sociales"...

    Actualización de jQuery y posibles problemas

    Quienes utilicen jQuery y actualicen la librería de manera sistemática o la enlacen desde los repositorios de Google, verá que la nueva versión es la 1.9.

    Esto, que es algo normal y suele ser una actualización sin demasiada importancia desde el punto de vista de un usuario, se puede transformar en un problema serio ya que, esta versión no sólo modifica ciertas funciones sino que elimina otras de manera definitiva por lo tanto, algo que tal vez usábamos de manera normal, al actualizarla, dejará de hacerlo.

    Lo mismo ocurrirá si queremos agregar algún plugin que vemos en la web y está pensado para una versión diferente.

    No existe ninguna solución genérica que permita resolver esto y, cada desarrollador deberá adaptar sus scripts a las nuevas reglas por lo tanto, si notan que algo no funciona con alguna de ellas, primero que nada, verifiquen si hay actualizaciones disponibles para esta versión.

    Los cambios están enumerados en la página de jQuery y son abundantes.

    Eventualmente, ellos recomiendan agregar un script extra que debe insertarse justo debajo de la librería y que cargará una serie de funciones que permitirán mostrar a los desarrolladores, cuál o cuales son los cambios que deberían hacer:

    <script src='//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js' type='text/javascript'></script>
    <script src='http://code.jquery.com/jquery-migrate-1.0.0.js'/></script>
    Según explican, el uso del plugin jQuery Migrate permite restaurar algunas de esas funciones eliminadas pero es una solución temporal y por lo que he visto, no parece funcionar siempre.

    Un detalle extra: la versión 2 que saldrá muy pronto, dejará de dar soporte a las versiones 6,7 y 8 de Internet Explorer.

    Resumiendo: mucho cuidado

    lunes, 21 de enero de 2013

    Truncar textos y resumir entradas con JQuery

    trunk8 es un plugin para jQuery pensado para mostrar textos largos en espacios pequeños.

    Una vez que lo descargamos desde la página del desarrollador y lo agregamos antes de </head&/gt; ya se copiándolo directamente entre etiquetas script, como haríamos con cualquier otro:
    <script type='text/javascript'>
    //<![CDATA[
    // acá pegamos el contenido del archivo
    //]]>
    </script>
    o alojándolo en un servidor externo:
    <script type='text/javascript' src='url_archivo'></script>
    No requiere nada más que ejecutar la función para que funcione, indicándole la clase o id de la o las etiquetas que queremos truncar. Por ejemplo, si el texto estuviera en un div de este tipo:
    <div id="ejemplo" class="truncar">
    ... cualquier texto ...
    </div>
    bastaría usar algo así:
    $(document).ready(function() {
    $('#ejemplo').trunk8();
    // o bien esto otro si queremos hacer referencia a la clase
    $('.truncar).trunk8();
    })
    En Blogger y otros sitios, se suele usar un resumen de ciertas entradas pero este plugin sólo está pensado para textos así que si queremos usarlo para aplicarlo en etiquetas que contienen otras etiquetas (imágenes, formatos, enlaces, etc) lo que debemos hacer es modificar levemente el script. En lugar de la versión minimizada, conviene bajar la versión normal desde github y abrir el archivo con cualquier editor de textos.

    Allí veremos esta línea:
    this.original_text = this.$element.html();
    y, simplemente, la cambiamos de este modo:
    var elhtml = this.$element.html();
    var eltxt = elhtml.replace(/<[^>]+>/g,'');
    this.original_text = eltxt;
    lo que hemos hecho es decirle al script que no use el texto sino que, primero, elimine las etiquetas.

    Vamos a lo concreto, supongamos que tenemos un contenido como este:
    <div class="truncar">
    ... cualquier contenido ...
    </div>

    Phasellus aliquet, orci at faucibus vehicula, quam arcu accumsan ipsum, eu porta nunc sapien vel arcu. Maecenas pretium venenatis pellentesque. Duis pretium nibh quis eros ultricies faucibus. Suspendisse potenti. Curabitur commodo metus elit, quis consequat ipsum. Nulla varius blandit arcu. Donec egestas orci sed lacus tincidunt sed cursus turpis molestie. Duis hendrerit gravida lorem quis placerat. Proin laoreet pellentesque tellus nec imperdiet.

    Nullam pretium pretium ornare. Proin bibendum, dolor non vestibulum volutpat, est felis consectetur justo, quis feugiat mauris sapien sed urna. Vivamus pharetra nulla quis magna pellentesque at bibendum.


    Aunque posee una serie de opciones, me parece que, para usarlo en Blogger, sólo nos interesarán algunas de ellas. La más importante sería la que nos permite definir la altura; para eso, podemos elegir entre:

    lines indica la cantidad de líneas de texto y debe ser un número (por defecto es 1)
    $('.truncar').trunk8({
    lines: 5
    });
    pero, si el contenedor es complejo porque tiene propiedades CSS, es mejor utilizar otra opción llamada width que, por defecto es 'auto' y que nos permite establecer la cantidad de caracteres a mostrar
    $('.truncar').trunk8({
    width:100
    });

    Phasellus aliquet, orci at faucibus vehicula, quam arcu accumsan ipsum, eu porta nunc sapien vel arcu. Maecenas pretium venenatis pellentesque. Duis pretium nibh quis eros ultricies faucibus. Suspendisse potenti. Curabitur commodo metus elit, quis consequat ipsum. Nulla varius blandit arcu. Donec egestas orci sed lacus tincidunt sed cursus turpis molestie. Duis hendrerit gravida lorem quis placerat. Proin laoreet pellentesque tellus nec imperdiet.

    Nullam pretium pretium ornare. Proin bibendum, dolor non vestibulum volutpat, est felis consectetur justo, quis feugiat mauris sapien sed urna. Vivamus pharetra nulla quis magna pellentesque at bibendum.

    100 | 200 | 300

    Más opciones:

    fill es una cadena de texto (o etiquetas html) que se insertan al final y por defecto es '&hellip;' o sea, tres puntitos …
    $('.truncar').trunk8({
    fill: '<span class="trunkfill"> ... y otras cosas</span>'
    });
    como en este ejemplo se usa una etiqueta con una clase (trunkfill) basta establecer una regla de estilo para ella para mostrarla de cualquier modo, diferenciándola del resto.

    Phasellus aliquet, orci at faucibus vehicula, quam arcu accumsan ipsum, eu porta nunc sapien vel arcu. Maecenas pretium venenatis pellentesque. Duis pretium nibh quis eros ultricies faucibus. Suspendisse potenti. Curabitur commodo metus elit, quis consequat ipsum. Nulla varius blandit arcu. Donec egestas orci sed lacus tincidunt sed cursus turpis molestie. Duis hendrerit gravida lorem quis placerat. Proin laoreet pellentesque tellus nec imperdiet.

    Nullam pretium pretium ornare. Proin bibendum, dolor non vestibulum volutpat, est felis consectetur justo, quis feugiat mauris sapien sed urna. Vivamus pharetra nulla quis magna pellentesque at bibendum.


    side nos permite seleccionar la forma en que se verá ese resumen y por defecto es 'right' o sea, se mostrarán una serie de palabras y al final los tres puntitos; pero podemos hacerlo al revés poniendo 'left' en cuyo caso, se mostrará el final del texto o bien 'center' y se mostrará un poco del inicio, los tres puntitos y un poco del final:
    $('.truncar').trunk8({
    width:80,
    side:'center',
    fill: ' &hellip; '
    });

    Phasellus aliquet, orci at faucibus vehicula, quam arcu accumsan ipsum, eu porta nunc sapien vel arcu. Maecenas pretium venenatis pellentesque. Duis pretium nibh quis eros ultricies faucibus. Suspendisse potenti. Curabitur commodo metus elit, quis consequat ipsum. Nulla varius blandit arcu. Donec egestas orci sed lacus tincidunt sed cursus turpis molestie. Duis hendrerit gravida lorem quis placerat. Proin laoreet pellentesque tellus nec imperdiet.

    Nullam pretium pretium ornare. Proin bibendum, dolor non vestibulum volutpat, est felis consectetur justo, quis feugiat mauris sapien sed urna. Vivamus pharetra nulla quis magna pellentesque at bibendum.


    Así como podemos utilizar cualquier etiqueta para agregar al final del texto, también podemos transformar esa etiqueta en un enlace que nos permita expandir o contraer su contenido, agregando un par de funciones extras:
    $('.truncar').trunk8({
    tooltip: false,
    fill: ' … <a class="trunkmas" href="#">expandir</a>'
    });

    $(document).on('click', '.trunkmas', function(e){
    e.preventDefault();
    $(this).parent().trunk8('revert').append(' <a class="trunkmenos" href="#">colapsar</a>');
    return false;
    });

    $(document).on('click', '.trunkmenos', function(e){
    e.preventDefault();
    $(this).parent().trunk8();
    return false;
    });
    Nuevamente, como usamos etiquetas y clases, podemos estabelcer reglas de estilo para trunkmas y trunkmenos:

    Phasellus aliquet, orci at faucibus vehicula, quam arcu accumsan ipsum, eu porta nunc sapien vel arcu. Maecenas pretium venenatis pellentesque. Duis pretium nibh quis eros ultricies faucibus. Suspendisse potenti. Curabitur commodo metus elit, quis consequat ipsum. Nulla varius blandit arcu. Donec egestas orci sed lacus tincidunt sed cursus turpis molestie. Duis hendrerit gravida lorem quis placerat. Proin laoreet pellentesque tellus nec imperdiet.

    Nullam pretium pretium ornare. Proin bibendum, dolor non vestibulum volutpat, est felis consectetur justo, quis feugiat mauris sapien sed urna. Vivamus pharetra nulla quis magna pellentesque at bibendum.


    ¿La última? Si ponemos el cursor encima de cualquiera de los divs, veremos que el tooltip nos muestra el contenido completo, eso, podemos eliminarlo con:
    tooltip: false


    Meny, un menú deslizante que voltea al blog en 3D



    Meny es un menú tridimencional bastante peculiar y llamativo, no sólo por la forma como muestra los enlaces, sino por la forma como "pone" al blog. Lo que hace este menú es que al pasar el cursor para mostrarlo, se desliza el contenido del menú mientras voltea al blog con un efecto 3D.
    La mejor forma de entenderlo es viendo el demo en este blog de pruebas, sólo pasa el cursor por la flecha para ver este menú en funcionamiento.

    El script es de Hakim El Hattab y para suerte de muchos no usa ni jQuery ni Scriptaculous, así que en la mayoría de los casos no debería haber problemas de compatibilidad.

    Implementar este menú que voltea la página en 3D es bastante sencillo, sólo entra en Plantilla | Edición de HTML y antes de ]]></b:skin> pega los estilos:
    /* Meny Menu
    ----------------------------------------------- */
    .meny {
    display: none;
    padding: 20px;
    overflow: auto;
    background: #333;
    color: #eee; /* Color de fondo del menú */
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    }
    .meny h4 {
    font-size: 24px; /* Tamaño del título del menú */
    color:#fff; /* Color del título del menú */
    text-align:center;
    }
    .meny ul {
    margin-top: 10px;
    }
    .meny ul li {
    display: inline-block;
    width: 200px;
    list-style: none;
    font-size: 20px;
    padding: 3px 10px;
    }
    .meny-arrow {
    position: absolute;
    z-index: 10;
    border: 10px solid transparent;
    -webkit-transition: opacity 0.4s ease 0.4s;
    -moz-transition: opacity 0.4s ease 0.4s;
    -ms-transition: opacity 0.4s ease 0.4s;
    -o-transition: opacity 0.4s ease 0.4s;
    transition: opacity 0.4s ease 0.4s;
    }
    .meny-left .meny-arrow {
    left: 5px;
    top: 350px;
    margin-top: -16px;
    border-left: 16px solid #333; /* Color de la flecha */
    }
    .meny-right .meny-arrow {
    right: 14px;
    top: 150px;
    margin-top: -16px;
    border-right: 16px solid #333; /* Color de la flecha */
    }
    .meny-top .meny-arrow {
    left: 150px;
    top: 14px;
    margin-left: -16px;
    border-top: 16px solid #333; /* Color de la flecha */
    }
    .meny-bottom .meny-arrow {
    left: 150px;
    bottom: 14px;
    margin-left: -16px;
    border-bottom: 16px solid #333; /* Color de la flecha */
    }
    .meny-active .meny-arrow {
    opacity: 0;
    -webkit-transition: opacity 0.2s ease;
    -moz-transition: opacity 0.2s ease;
    -ms-transition: opacity 0.2s ease;
    -o-transition: opacity 0.2s ease;
    transition: opacity 0.2s ease;
    }
    .contents {
    width: 100%;
    height: 100%;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    }
    Luego busca la etiqueta <body> o esta línea:
    <body expr:class='&quot;loading&quot; + data:blog.mobileClass'>
    Debajo de cualquiera de las dos agrega lo siguiente:
    <div class='meny'>
    <h4>Menú</h4>
    <ul>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    <li><a href='URL del enlace'>Texto del enlace</a></li>
    </ul>
    </div>

    <div class='meny-arrow'/>
    <div class='contents'>
    Por último añade antes de </body> este código:
    </div>
    <script>
    //<![CDATA[
    /*!
    * meny 1.2
    * http://lab.hakim.se/meny
    * MIT licensed
    * Created by Hakim El Hattab (http://hakim.se, @hakimel)
    */
    var Meny={create:function(a){return(function(){if(!a||!a.menuElement||!a.contentsElement){throw"You need to specify which menu and contents elements to use.";
    }if(a.menuElement.parentNode!==a.contentsElement.parentNode){throw"The menu and contents elements must have the same parent.";}var J="top",K="right",c="bottom",N="left";
    var F="WebkitPerspective" in document.body.style||"MozPerspective" in document.body.style||"msPerspective" in document.body.style||"OPerspective" in document.body.style||"perspective" in document.body.style;
    var D={width:300,height:300,position:N,threshold:40,overlap:6,transitionDuration:"0.5s",transitionEasing:"ease"};var e={menu:a.menuElement,contents:a.contentsElement,wrapper:a.menuElement.parentNode,cover:null};
    var A=e.wrapper.offsetLeft,z=e.wrapper.offsetTop,t=null,r=null,q=null,o=null,f=false,m=false;var l,j,G,n,O,V,S,x,d,B;var w,y,E;Meny.extend(D,a);i();g();
    v();C();Q();R();function i(){G="";S="";switch(D.position){case J:l="50% 0%";j="rotateX( 30deg ) translateY( -100% ) translateY( "+D.overlap+"px )";V="50% 0";
    x="translateY( "+D.height+"px ) rotateX( -15deg )";n={top:"-"+(D.height-D.overlap)+"px"};O={top:"0px"};d={top:"0px"};B={top:D.height+"px"};break;case K:l="100% 50%";
    j="rotateY( 30deg ) translateX( 100% ) translateX( -2px ) scale( 1.01 )";V="100% 50%";x="translateX( -"+D.width+"px ) rotateY( -15deg )";n={right:"-"+(D.width-D.overlap)+"px"};
    O={right:"0px"};d={left:"0px"};B={left:"-"+D.width+"px"};break;case c:l="50% 100%";j="rotateX( -30deg ) translateY( 100% ) translateY( -"+D.overlap+"px )";
    V="50% 100%";x="translateY( -"+D.height+"px ) rotateX( 15deg )";n={bottom:"-"+(D.height-D.overlap)+"px"};O={bottom:"0px"};d={top:"0px"};B={top:"-"+D.height+"px"};
    break;default:l="100% 50%";j="translateX( -100% ) translateX( "+D.overlap+"px ) scale( 1.01 ) rotateY( -30deg )";V="0 50%";x="translateX( "+D.width+"px ) rotateY( 15deg )";
    n={left:"-"+(D.width-D.overlap)+"px"};O={left:"0px"};d={left:"0px"};B={left:D.width+"px"};break;}}function g(){Meny.addClass(e.wrapper,"meny-"+D.position);
    e.wrapper.style[Meny.prefix("perspective")]="800px";e.wrapper.style[Meny.prefix("perspectiveOrigin")]=V;}function v(){e.cover=document.createElement("div");
    e.cover.style.position="absolute";e.cover.style.display="block";e.cover.style.width="100%";e.cover.style.height="100%";e.cover.style.left=0;e.cover.style.top=0;
    e.cover.style.zIndex=1000;e.cover.style.visibility="hidden";e.cover.style.opacity=0;try{e.cover.style.background="rgba( 0, 0, 0, 0.4 )";e.cover.style.background="-ms-linear-gradient("+D.position+", rgba(0,0,0,0.20) 0%,rgba(0,0,0,0.65) 100%)";
    e.cover.style.background="-moz-linear-gradient("+D.position+", rgba(0,0,0,0.20) 0%,rgba(0,0,0,0.65) 100%)";e.cover.style.background="-webkit-linear-gradient("+D.position+", rgba(0,0,0,0.20) 0%,rgba(0,0,0,0.65) 100%)";
    }catch(W){}if(F){e.cover.style[Meny.prefix("transition")]="all "+D.transitionDuration+" "+D.transitionEasing;}e.contents.appendChild(e.cover);}function C(){var W=e.menu.style;
    switch(D.position){case J:W.width="100%";W.height=D.height+"px";break;case K:W.right="0";W.width=D.width+"px";W.height="100%";break;case c:W.bottom="0";
    W.width="100%";W.height=D.height+"px";break;case N:W.width=D.width+"px";W.height="100%";break;}W.position="fixed";W.display="block";W.zIndex=1;if(F){W[Meny.prefix("transform")]=j;
    W[Meny.prefix("transformOrigin")]=l;W[Meny.prefix("transition")]="all "+D.transitionDuration+" "+D.transitionEasing;}else{Meny.extend(W,n);}}function Q(){var W=e.contents.style;
    if(F){W[Meny.prefix("transform")]=S;W[Meny.prefix("transformOrigin")]=V;W[Meny.prefix("transition")]="all "+D.transitionDuration+" "+D.transitionEasing;
    }else{W.position=W.position.match(/relative|absolute|fixed/gi)?W.position:"relative";Meny.extend(W,d);}}function R(){if("ontouchstart" in window){Meny.bindEvent(document,"touchstart",L);
    Meny.bindEvent(document,"touchend",H);}else{Meny.bindEvent(document,"mousedown",M);Meny.bindEvent(document,"mouseup",U);Meny.bindEvent(document,"mousemove",b);
    }}function u(){if(!f){f=true;Meny.addClass(e.wrapper,"meny-active");e.cover.style.height=e.contents.scrollHeight+"px";e.cover.style.visibility="visible";
    if(F){e.cover.style.opacity=1;e.contents.style[Meny.prefix("transform")]=x;e.menu.style[Meny.prefix("transform")]=G;}else{w&&w.stop();w=Meny.animate(e.menu,O,500);
    y&&y.stop();y=Meny.animate(e.contents,B,500);E&&E.stop();E=Meny.animate(e.cover,{opacity:1},500);}Meny.dispatchEvent(e.menu,"open");}}function I(){if(f){f=false;
    Meny.removeClass(e.wrapper,"meny-active");if(F){e.cover.style.visibility="hidden";e.cover.style.opacity=0;e.contents.style[Meny.prefix("transform")]=S;
    e.menu.style[Meny.prefix("transform")]=j;}else{w&&w.stop();w=Meny.animate(e.menu,n,500);y&&y.stop();y=Meny.animate(e.contents,d,500);E&&E.stop();E=Meny.animate(e.cover,{opacity:0},500,function(){e.cover.style.visibility="hidden";
    });}Meny.dispatchEvent(e.menu,"close");}}function M(W){m=true;}function b(Z){if(!m){var W=Z.clientX-A,aa=Z.clientY-z;switch(D.position){case J:if(aa>D.height){I();
    }else{if(aa<D.threshold){u();}}break;case K:var X=e.wrapper.offsetWidth;if(W<X-D.width){I();}else{if(W>X-D.threshold){u();}}break;case c:var Y=e.wrapper.offsetHeight;
    if(aa<Y-D.height){I();}else{if(aa>Y-D.threshold){u();}}break;case N:if(W>D.width){I();}else{if(W<D.threshold){u();}}break;}}}function U(W){m=false;}function L(W){t=W.touches[0].clientX-A;
    r=W.touches[0].clientY-z;q=null;o=null;Meny.bindEvent(document,"touchmove",P);}function P(X){q=X.touches[0].clientX-A;o=X.touches[0].clientY-z;var W=null;
    if(Math.abs(q-t)>Math.abs(o-r)){if(q<t-D.threshold){W=T;}else{if(q>t+D.threshold){W=p;}}}else{if(o<r-D.threshold){W=s;}else{if(o>r+D.threshold){W=h;}}}if(W&&W()){X.preventDefault();
    }}function H(W){Meny.unbindEvent(document,"touchmove",P);if(q===null&&o===null){k();}}function k(){var W=(D.position===J&&r>D.height)||(D.position===K&&t<e.wrapper.offsetWidth-D.width)||(D.position===c&&r<e.wrapper.offsetHeight-D.height)||(D.position===N&&t<D.width);
    if(W){I();}}function p(){if(D.position===K&&f){I();return true;}else{if(D.position===N&&!f){u();return true;}}}function T(){if(D.position===K&&!f){u();
    return true;}else{if(D.position===N&&f){I();return true;}}}function h(){if(D.position===c&&f){I();return true;}else{if(D.position===J&&!f){u();return true;
    }}}function s(){if(D.position===c&&!f){u();return true;}else{if(D.position===J&&f){I();return true;}}}return{open:u,close:I,isOpen:function(){return f;
    },addEventListener:function(W,X){e.menu&&Meny.bindEvent(e.menu,W,X);},removeEventListener:function(W,X){e.menu&&Meny.unbindEvent(e.menu,W,X);}};})();},animate:function(b,a,c,d){return(function(){var g={};
    for(var j in a){g[j]={start:parseFloat(b.style[j])||0,end:parseFloat(a[j]),unit:(typeof a[j]==="string"&&a[j].match(/px|em|%/gi))?a[j].match(/px|em|%/gi)[0]:""};
    }var i=Date.now(),e;function h(){var k=1-Math.pow(1-((Date.now()-i)/c),5);for(var m in g){var l=g[m];b.style[m]=l.start+((l.end-l.start)*k)+l.unit;}if(k<1){e=setTimeout(h,1000/60);
    }else{d&&d();f();}}function f(){clearTimeout(e);}h();return{stop:f};})();},extend:function(d,c){for(var e in c){d[e]=c[e];}},prefix:function(e,d){var b=e.slice(0,1).toUpperCase()+e.slice(1),g=["Webkit","Moz","O","ms"];
    for(var c=0,a=g.length;c<a;c++){var f=g[c];if(typeof(d||document.body).style[f+b]!=="undefined"){return f+b;}}return e;},addClass:function(b,a){b.className=b.className.replace(/\s+$/gi,"")+" "+a;
    },removeClass:function(b,a){b.className=b.className.replace(a,"");},bindEvent:function(a,c,b){if(a.addEventListener){a.addEventListener(c,b,false);}else{a.attachEvent("on"+c,b);
    }},unbindEvent:function(a,c,b){if(a.removeEventListener){a.removeEventListener(c,b,false);}else{a.detachEvent("on"+c,b);}},dispatchEvent:function(b,c,a){if(b){var d=document.createEvent("HTMLEvents",1,2);
    d.initEvent(c,true,true);Meny.extend(d,a);b.dispatchEvent(d);}},getQuery:function(){var a={};location.search.replace(/[A-Z0-9]+?=([\w|:|\/\.]*)/gi,function(b){a[b.split("=").shift()]=b.split("=").pop();
    });return a;}};if(typeof Date.now!=="function"){Date.now=function(){return new Date().getTime();};}


    var meny = Meny.create({
    menuElement: document.querySelector( '.meny' ),
    contentsElement: document.querySelector( '.contents' ),
    position: Meny.getQuery().p || 'left',
    height: 200,
    width: 260,
    threshold: 40
    });
    if( Meny.getQuery().u && Meny.getQuery().u.match( /^http/gi ) ) {
    var contents = document.querySelector( '.contents' );
    contents.style.padding = '0px';
    contents.innerHTML = '<div class="cover"></div><iframe src="'+ Meny.getQuery().u +'" style="width: 100%; height: 100%; border: 0; position: absolute;"></iframe>';
    }

    //]]>
    </script>
    Cambia las URLs de los enlaces y los nombres de los mismos donde se indica en color rojo. Luego guarda los cambios y listo.

    Si quisieras agregar más enlaces sólo pon antes de </ul> una línea como esta por cada enlace extra que desees:
    <li><a href='URL del enlace'>Texto del enlace</a></li>

    Adicionalmente puedes cambiar la orientación de la página cuando se voltea, puede ser a la izquierda como está por defecto, a la derecha, arriba o abajo. Eso se modifica donde dice left en el último código y podrás cambiarlo por right, top, o bottom

    Si tuvieras mucho contenido a lo largo entonces se verá mejor si lo cambias por top o bottom, aunque también cambiará la orientación del menú.

    viernes, 18 de enero de 2013

    miércoles, 16 de enero de 2013

    Efecto hover con Jquery y CSS3

    ... direction-aware hover effect using CSS3 and jQuery ... difícil de traducir; pero digamos que dada una serie de rectángulos con imagenes, al poner el puntero del ratón encima de cada uno de ellos, se mostrará un texto superpuesto que aparecerá mediante una transición cuya dirección varia según donde estemos ... y como mi intento de explicarlo es más confuso que el original en inglés, mejor, veamos el ejemplo y listo:



    Bien, de eso se trata así que veamos como se hace.

    Requiere tres cosas, el CSS (funcionará sólo en navegadores que interpreten la propiedad transition), un script que funciona con jQuery y el HTML que no es otra cosa que una lista.

    Empezamos con el HTML, como dije, una lista (etiqueta UL) donde cada item (etiqueta LI) contiene un enlace con una imagen que es la que veremos por defecto y un DIV con un texto que es el que se verá al poner el puntero del cursor encima:
    <ul id="da-thumbs" class="da-thumbs">
    <li>
    <a href="url_enlace" target="_blank">
    <img src="url_imagen" />
    <div>
    <span>el texto a mostrar</span>
    </div>
    </a>
    </li>
    <!-- ... y seguimos agregando imágenes y textos con la misma estructura -->
    </ul>
    Debajo de eso, colocamos el llamado a la función:
    <script type="text/javascript">
    $(function() {$('#da-thumbs > li').hoverdir();});
    </script>
    Y ahora, la función que podemos colocarla antes del </head> y que podemos descargar desde la página del desarrollador junto con los ejemplos.

    (function( $, undefined ) {
    $.HoverDir = function( options, element ) {
    this.$el = $( element );
    this._init( options );
    };
    $.HoverDir.defaults = {hoverDelay : 0,reverse : false};
    $.HoverDir.prototype = {
    _init : function( options ) {
    this.options = $.extend( true, {}, $.HoverDir.defaults, options );
    this._loadEvents();
    },
    _loadEvents : function() {
    var _self = this;
    this.$el.on( 'mouseenter.hoverdir, mouseleave.hoverdir', function( event ) {
    var $el = $(this),
    evType = event.type,
    $hoverElem = $el.find( 'div' ),
    direction = _self._getDir( $el, { x : event.pageX, y : event.pageY }),
    hoverClasses= _self._getClasses( direction );
    $hoverElem.removeClass();
    if( evType === 'mouseenter' ) {
    $hoverElem.hide().addClass( hoverClasses.from );
    clearTimeout( _self.tmhover );
    _self.tmhover = setTimeout( function() {
    $hoverElem.show( 0, function() {$(this).addClass( 'da-animate' ).addClass( hoverClasses.to );});
    }, _self.options.hoverDelay );
    } else {
    $hoverElem.addClass( 'da-animate' );
    clearTimeout( _self.tmhover );
    $hoverElem.addClass( hoverClasses.from );
    }
    });
    },
    _getDir : function( $el, coordinates ) {
    var w = $el.width(),
    h = $el.height(),
    x = ( coordinates.x - $el.offset().left - ( w/2 )) * ( w > h ? ( h/w ) : 1 ),
    y = ( coordinates.y - $el.offset().top - ( h/2 )) * ( h > w ? ( w/h ) : 1 ),
    direction = Math.round( ( ( ( Math.atan2(y, x) * (180 / Math.PI) ) + 180 ) / 90 ) + 3 ) % 4;
    return direction;
    },
    _getClasses : function( direction ) {
    var fromClass, toClass;
    switch( direction ) {
    case 0:
    ( !this.options.reverse ) ? fromClass = 'da-slideFromTop' : fromClass = 'da-slideFromBottom';
    toClass = 'da-slideTop';
    break;
    case 1:
    ( !this.options.reverse ) ? fromClass = 'da-slideFromRight' : fromClass = 'da-slideFromLeft';
    toClass = 'da-slideLeft';
    break;
    case 2:
    ( !this.options.reverse ) ? fromClass = 'da-slideFromBottom' : fromClass = 'da-slideFromTop';
    toClass = 'da-slideTop';
    break;
    case 3:
    ( !this.options.reverse ) ? fromClass = 'da-slideFromLeft' : fromClass = 'da-slideFromRight';
    toClass = 'da-slideLeft';
    break;
    };
    return { from : fromClass, to: toClass };
    }
    };
    var logError = function( message ) {if ( this.console ) {console.error( message );}};
    $.fn.hoverdir = function( options ) {
    if ( typeof options === 'string' ) {
    var args = Array.prototype.slice.call( arguments, 1 );
    this.each(function() {
    var instance = $.data( this, 'hoverdir' );
    if ( !instance ) {
    logError( "cannot call methods on hoverdir prior to initialization; " + "attempted to call method '" + options + "'" );
    return;
    }
    if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
    logError( "no such method '" + options + "' for hoverdir instance" );
    return;
    }
    instance[ options ].apply( instance, args );
    });
    } else {
    this.each(function() {
    var instance = $.data( this, 'hoverdir' );
    if ( !instance ) {
    $.data( this, 'hoverdir', new $.HoverDir( options, this ) );
    }
    });
    }
    return this;
    };
    })( jQuery );

    Y por último, la clave, como siempre, es el CSS que agregamos donde más nos guste:
    <style>
    .da-thumbs {margin: 0 !important}
    .da-thumbs li { /* cada item */
    background: #FFF; /* color de fondo para el borde */
    float: left;
    margin: 5px; /* separación entre items */
    padding: 8px; /* padding como borde */
    position: relative;
    }
    .da-thumbs li a, .da-thumbs li a img {
    display: block;
    height: 137px; /* el alto de la imagen */
    position: relative;
    width: 185px; /* el ancho de la imagen */
    }
    .da-thumbs li a {overflow: hidden;}
    .da-thumbs li a div { /* el contenedor de los textos */
    background: rgba(75,75,75,0.7); /* un poco de opacidad */
    height: 100%;
    position: absolute;
    width: 100%;
    }
    .da-thumbs li a div span { /* el texto en si mismo */
    color: #FFF;
    display: block;
    font-size: 16px;
    font-weight: bold;
    line-height: 1;
    margin: 15px 10px;
    padding: 10px 0;
    text-align: center;
    }
    .da-thumbs li a div.da-animate { /* la animación del hover */
    -moz-transition: all 0.3s ease-in-out;
    -webkit-transition: all 0.3s ease;
    -o-transition: all 0.3s ease-in-out;
    -ms-transition: all 0.3s ease-in-out;
    transition: all 0.3s ease-in-out;
    }
    /* la posición inicial de los textos ocultos */
    .da-slideFromTop {left: 0; top: -100%;}
    .da-slideFromBottom {left: 0; top: 100%;}
    .da-slideFromLeft {top: 0; left: -100%;}
    .da-slideFromRight {top: 0; left: 100%;}
    /* la posición final */
    .da-slideTop {top: 0;}
    .da-slideLeft {left: 0;}
    </style>
    REFERENCIAS:codrops