miércoles, 31 de octubre de 2012

prefix-free y basta de prefijos en el CSS

prefix-free es un script que habría que tener muy en cuenta ya que nos ayuda a resolver uno de los problemas más molestos a la hora de escribir reglas de estilo "modernas" ya que lo que hace es agregar de modo automático, los prefijos correspondientes para cada navegador de tal modo que no sería necesarios escribir algo así:
.una-regla {
background-image: -moz-linear-gradient(#000,#FFF);
background-image: -webkit-linear-gradient(#000,#FFF);
background-image: -o-linear-gradient(#000,#FFF);
background-image: -ms-linear-gradient(#000,#FFF);
background-image: linear-gradient(#000,#FFF);
}
y todo ese exceso de líneas (que, inevitablemente uno termina equivocando u olvidando) se transformaría en es esto:
.una-regla {
background-image: linear-gradient(#000,#FFF);
}
es decir, sólo deebría usarse la propiedad especificada por la w3.org y del resto, se encargará el script.

¿En que navegadores funcionará? En todos aquellos que usen ese tipo de prefijos, Firefox, Chrome, Safari, Opera, IE9 en adelante y las versiones móviles más comunes. Obviamente, como IE8 no soporta la mayoría de las propiedades CSS3, nada ocurrirá allí pero tampoco tendrá influencia alguna, todo seguirá como antes.

¿Funciona en Blogger? Si, no debería haber problemas ya que el script se ejecuta tanto sobre etiquetas <style> </style>, estilos externos agregados con la etiqueta LINK o incluso, en estilos agregados inline con el atributo style en la misma etiqueta.

¿Cómo lo usamos? Descargamos el script desde la página del desarrollador (es muy pequeño) y lo alojamos en un servidor:
<script src='URL/prefixfree.min.js' type='text/javascript'/>
o simplemente lo copiamos y pegamos en la plantilla entre etiquetas
<script type='text/javascript'>
//<![CDATA[
....... acá pegamos el contenido del archvo js .......
//]]>
</script>
y, en ambos casos, conviene hacerles caso a los desarrolladores y agregarlo justo antes de </head>

Tres ejemplo rápidos:
/* un fondo con gradiente */
#pf1{background-image:linear-gradient(#000,#FFF);}

/* una transición */
#pf2{font-size: 0;line-height: 100px;border-radius:0;background-color: #000;transition:all 1s;}
#pf2:hover{background-color:#F0F8FF;border-radius:50px;background-color: #F00;font-size: 80px;}

/* una animación*/
#pf3{background-color:#000;animation: recrojo 1s infinite alternate;}
@keyframes recrojo {from {background-color:#000;} to {background-color:#F00;}}

Gadget de posts (entradas) recientes con imagen en miniatura

En un post anterior habíamos visto cómo añadir un gadget de entradas recientes de forma sencilla, pero sin una imagen en miniatura del post.
Hoy veremos cómo agregar un gadget que nos permita mostrar una lista con las últimas entradas de nuestro blog, con resumen, imagen en miniatura y con algunos datos (como la fecha de publicación del post y el número de comentarios).


1.§ Vamos a Diseño - Añadir un gadget - HTML/Javascript.

2.§ Dentro del gadget pegaremos el siguiente código, conformado por los estilos y los scripts:


3.§ Reemplazamos AQUITUBLOG por el nombre de nuestro blog. Ahora les explicaré algunos parámetros que podemos personalizar:
» var numposts = 5; es el múmero de posts a mostrar.
» var showpostthumbnails = true;es para mostrar las imágenes en miniatura; si no queremos que aparezcan, cambiamos a false.
» var displaymore = true; es para mostrar el enlace Más; si no queremos que aparezca, cambiamos a false
» var displayseparator = true; es para mostrar una línea de separación entre posts; si no queremos que aparezca, cambiamos a false
» var showcommentnum = true; es para mostrar el número de comentarios del post; si no queremos que aparezca, cambiamos a false.
» var showpostdate = true; es para mostrar la fecha de publicación del post; si no queremos que aparezca, cambiamos a false.
» var showpostsummary = true; es para mostrar un pequeño resumen del post; si no queremos que aparezca, cambiamos a false.
» var numchars = 80; es el número máximo de caracteres que se mostrará en el resumen del post; podemos aumentar o disminuir el valor.

4.§ Una vez modificados los datos, damos clic a Guardar.

Visto en : Webaholic | Vía: Chica Blogger

Wallpapers Halloween 2012

REFERENCIA Y DESCARGAWallpapers a full

Iniciativa #EmpujonAiniciaBlog en los premios Bitácoras 2012


iniciaBlog ha subido al puesto 6 según la Calificación parcial del 30 de Octubre de 2012. Nuestro amigo Jesús González necesita mas que nunca tu apoyo para estar entre los 3 mejores blogs de la categoría "Mejor Blog Personal", así que si aún no haz votado te invitamos a hacerlo.
Recuerda que tu voto es decisivo en este concurso, ya que los 3 primeros ganadores obtendrán el premio final.

Progreso de iniciaBlog en las clasificaciones en #bitacoras12:



Por favor difunde este artículo en las redes sociales que utilices, también agradeceremos infinitamente tu participación y voto a iniciaBlog.




URL para compartir en otros servicios:


Enlace: Dale un #EmpujonAiniciaBlog para situarlo en el top 3 de #Bitacoras12 - Por Jesús González.

lunes, 29 de octubre de 2012

Galería de videos para el blog



En esta entrada vamos a ver cómo crear una galería de videos de YouTube usando jQuery. Es una elegante galería a la que le caben 5 videos y que por sus dimesiones la pondremos debajo de la cabecera del blog. En realidad puedes ponerla en cualquier parte, pero se recomienda en esa área por los 765px que mide de ancho la galería.
Puedes verla funcionando en este demo.

Para agregar este slider de videos en tu blog entra en Plantilla | Edición de HTML y antes de </head> agrega los scripts:
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' type='text/javascript'/>

<script>
//<![CDATA[
/*hoverscroll v.0.2.4*/
(function($) {
$.fn.hoverscroll = function(params) {
if (!params) { params = {}; }
params = $.extend({}, $.fn.hoverscroll.params, params);
this.each(function() {
var $this = $(this);
if (params.debug) {$.log('[HoverScroll] Trying to create hoverscroll on element ' + this.tagName + '#' + this.id);}
if (params.fixedArrows) {
$this.wrap('<div class="fixed-listcontainer"></div>')
}
else {
$this.wrap('<div class="listcontainer"></div>');
}

$this.addClass('list');
var listctnr = $this.parent();
listctnr.wrap('<div class="ui-widget-content hoverscroll' +
(params.rtl && !params.vertical ? " rtl" : "") + '"></div>');
//listctnr.wrap('<div class="hoverscroll"></div>');

var ctnr = listctnr.parent();

var leftArrow, rightArrow, topArrow, bottomArrow;
if (params.arrows) {
if (!params.vertical) {
if (params.fixedArrows) {
leftArrow = '<div class="fixed-arrow left"></div>';
rightArrow = '<div class="fixed-arrow right"></div>';

listctnr.before(leftArrow).after(rightArrow);
}
else {
leftArrow = '<div class="arrow left"></div>';
rightArrow = '<div class="arrow right"></div>';

listctnr.append(leftArrow).append(rightArrow);
}
}
else {
if (params.fixedArrows) {
topArrow = '<div class="fixed-arrow top"></div>';
bottomArrow = '<div class="fixed-arrow bottom"></div>';

listctnr.before(topArrow).after(bottomArrow);
}
else {
topArrow = '<div class="arrow top"></div>';
bottomArrow = '<div class="arrow bottom"></div>';

listctnr.append(topArrow).append(bottomArrow);
}
}
}
ctnr.width(params.width).height(params.height);

if (params.arrows && params.fixedArrows) {
if (params.vertical) {
topArrow = listctnr.prev();
bottomArrow = listctnr.next();

listctnr.width(params.width)
.height(params.height - (topArrow.height() + bottomArrow.height()));
}
else {
leftArrow = listctnr.prev();
rightArrow = listctnr.next();

listctnr.height(params.height)
.width(params.width - (leftArrow.width() + rightArrow.width()));
}
}
else {
listctnr.width(params.width).height(params.height);
}

var size = 0;

if (!params.vertical) {
ctnr.addClass('horizontal');
$this.children().each(function() {
$(this).addClass('item');

if ($(this).outerWidth) {
size += $(this).outerWidth(true);
}
else {
size += $(this).width() + parseInt($(this).css('padding-left')) + parseInt($(this).css('padding-right'))
+ parseInt($(this).css('margin-left')) + parseInt($(this).css('margin-right'));
}
});
$this.width(size);

if (params.debug) {
$.log('[HoverScroll] Computed content width : ' + size + 'px');
}
if (ctnr.outerWidth) {
size = ctnr.outerWidth();
}
else {
size = ctnr.width() + parseInt(ctnr.css('padding-left')) + parseInt(ctnr.css('padding-right'))
+ parseInt(ctnr.css('margin-left')) + parseInt(ctnr.css('margin-right'));
}

if (params.debug) {
$.log('[HoverScroll] Computed container width : ' + size + 'px');
}
}
else {
ctnr.addClass('vertical');
$this.children().each(function() {
$(this).addClass('item')

if ($(this).outerHeight) {
size += $(this).outerHeight(true);
}
else {
size += $(this).height() + parseInt($(this).css('padding-top')) + parseInt($(this).css('padding-bottom'))
+ parseInt($(this).css('margin-bottom')) + parseInt($(this).css('margin-bottom'));
}
});
$this.height(size);

if (params.debug) {
$.log('[HoverScroll] Computed content height : ' + size + 'px');
}
if (ctnr.outerHeight) {
size = ctnr.outerHeight();
}
else {
size = ctnr.height() + parseInt(ctnr.css('padding-top')) + parseInt(ctnr.css('padding-bottom'))
+ parseInt(ctnr.css('margin-top')) + parseInt(ctnr.css('margin-bottom'));
}

if (params.debug) {
$.log('[HoverScroll] Computed container height : ' + size + 'px');
}
}
var zone = {
1: {action: 'move', from: 0, to: 0.06 * size, direction: -1 , speed: 16},
2: {action: 'move', from: 0.06 * size, to: 0.15 * size, direction: -1 , speed: 8},
3: {action: 'move', from: 0.15 * size, to: 0.25 * size, direction: -1 , speed: 4},
4: {action: 'move', from: 0.25 * size, to: 0.4 * size, direction: -1 , speed: 2},
5: {action: 'stop', from: 0.4 * size, to: 0.6 * size},
6: {action: 'move', from: 0.6 * size, to: 0.75 * size, direction: 1 , speed: 2},
7: {action: 'move', from: 0.75 * size, to: 0.85 * size, direction: 1 , speed: 4},
8: {action: 'move', from: 0.85 * size, to: 0.94 * size, direction: 1 , speed: 8},
9: {action: 'move', from: 0.94 * size, to: size, direction: 1 , speed: 16}
}

ctnr[0].isChanging = false;
ctnr[0].direction = 0;
ctnr[0].speed = 1;
function checkMouse(x, y) {
x = x - ctnr.offset().left;
y = y - ctnr.offset().top;

var pos;
if (!params.vertical) {pos = x;}
else {pos = y;}

for (i in zone) {
if (pos >= zone[i].from && pos < zone[i].to) {
if (zone[i].action == 'move') {startMoving(zone[i].direction, zone[i].speed);}
else {stopMoving();}
}
}
}

function setArrowOpacity() {
if (!params.arrows || params.fixedArrows) {return;}

var maxScroll;
var scroll;

if (!params.vertical) {
maxScroll = listctnr[0].scrollWidth - listctnr.width();
scroll = listctnr[0].scrollLeft;
}
else {
maxScroll = listctnr[0].scrollHeight - listctnr.height();
scroll = listctnr[0].scrollTop;
}
var limit = params.arrowsOpacity;
var opacity = (scroll / maxScroll) * limit;

if (opacity > limit) { opacity = limit; }
if (isNaN(opacity)) { opacity = 0; }

var done = false;
if (opacity <= 0) {
$('div.arrow.left, div.arrow.top', ctnr).hide();
if(maxScroll > 0) {
$('div.arrow.right, div.arrow.bottom', ctnr).show().css('opacity', limit);
}
done = true;
}
if (opacity >= limit || maxScroll <= 0) {
$('div.arrow.right, div.arrow.bottom', ctnr).hide();
done = true;
}

if (!done) {
$('div.arrow.left, div.arrow.top', ctnr).show().css('opacity', opacity);
$('div.arrow.right, div.arrow.bottom', ctnr).show().css('opacity', (limit - opacity));
}
}

function startMoving(direction, speed) {
if (ctnr[0].direction != direction) {
if (params.debug) {
$.log('[HoverScroll] Starting to move. direction: ' + direction + ', speed: ' + speed);
}

stopMoving();
ctnr[0].direction = direction;
ctnr[0].isChanging = true;
move();
}
if (ctnr[0].speed != speed) {
if (params.debug) {
$.log('[HoverScroll] Changed speed: ' + speed);
}

ctnr[0].speed = speed;
}
}

function stopMoving() {
if (ctnr[0].isChanging) {
if (params.debug) {
$.log('[HoverScroll] Stoped moving');
}

ctnr[0].isChanging = false;
ctnr[0].direction = 0;
ctnr[0].speed = 1;
clearTimeout(ctnr[0].timer);
}
}

function move() {
if (ctnr[0].isChanging == false) {return;}

setArrowOpacity();

var scrollSide;
if (!params.vertical) {scrollSide = 'scrollLeft';}
else {scrollSide = 'scrollTop';}

listctnr[0][scrollSide] += ctnr[0].direction * ctnr[0].speed;
ctnr[0].timer = setTimeout(function() {move();}, 50);
}

if (params.rtl && !params.vertical) {
listctnr[0].scrollLeft = listctnr[0].scrollWidth - listctnr.width();
}

ctnr
.mousemove(function(e) {checkMouse(e.pageX, e.pageY);})
.bind('mouseleave', function() {stopMoving();});

this.startMoving = startMoving;
this.stopMoving = stopMoving;

if (params.arrows && !params.fixedArrows) {
// Initialise arrow opacity
setArrowOpacity();
}
else {
// Hide arrows
$('.arrowleft, .arrowright, .arrowtop, .arrowbottom', ctnr).hide();
}
});

return this;
};

if (!$.fn.offset) {
$.fn.offset = function() {
this.left = this.top = 0;

if (this[0] && this[0].offsetParent) {
var obj = this[0];
do {
this.left += obj.offsetLeft;
this.top += obj.offsetTop;
} while (obj = obj.offsetParent);
}

return this;
}
}

$.fn.hoverscroll.params = {
vertical: false,
width: 400,
height: 50,
arrows: true,
arrowsOpacity: 0.7,
fixedArrows: false,
rtl: false,
debug: false
};
$.log = function() {
try {console.log.apply(console, arguments);}
catch (e) {
try {opera.postError.apply(opera, arguments);}
catch (e) {}
}
};
})(jQuery);

// Aplicar desde aquí el hack de compatibilidad con Scriptaculous en caso de ser necesario

$(function(){
$("#slidervideo-tabs a").click(function(){
var container = $("#slidervideo-content");
container.html("<img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf-aByygtl6p6Gdsl7_L_OqM1Kup-ZFJ4fUDtutXLCUcNiccJ46AkhtOkX-nQwTN5nnP10XZ1SE9Gv5_qYngE8rJSdtbcc6ZadQL4_SVwmNBNqowx1ZTdwmYf_EaCi0ZUTqNZ0Lk_wtlw/s400/loading.gif' class='loading-vid' />");
var id = $(this).attr("href").slice(1);
loadvideo(id);
return false;
});
$("#slidervideo-tabs").hoverscroll({vertical:true,width:300,height:330,arrows:false});
$("#slidervideo-tabs li").hover(function(){$(this).addClass("hover");},function(){$(this).removeClass("hover");});
loadvideo();
});

function loadvideo (hash){if(hash){hash = hash.slice(3);$("#slidervideo-content").html(video[hash]);$("#slidervideo-tabs li").removeClass("actVid");$("#slidervideo-tabs a[href=#vid"+hash+"]").parent().addClass("actVid");}else{$("#slidervideo-content").html(video[1]);$("#slidervideo-tabs li").removeClass("actVid");$("#slidervideo-tabs a[href=#vid1]").parent().addClass("actVid");}}
//]]>
</script>
Luego agrega los estilos antes de ]]></b:skin>
/* Galería de videos
----------------------------------------------- */
#slidervideo {
background:#000; /* Color de fondo */
clear:both;
margin:0 auto;
padding:5px;
width:765px;
border-radius: 5px;
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
}
#slidervideo, #slidervideo-content, #slidervideo-tabs {height:350px;overflow:hidden;}
#slidervideo-content {color:#fff;float:left;text-align:center;width:460px;z-index:1;}
.loading-vid {display:block;margin:165px auto 0;}
#slidervideo-tabs {float:right;width:300px;margin:0;}
#slidervideo-tabs li {background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1pU2Wah8_BjDPEMFELTJQsECrSVvRHgHsBILYO48gYF3ikR0rGmQJP56d-x2m_ObZOcOuAzeGEDG7CvnEFSVr-cfS8FckvsdS9HgifStLELmTBh203mvDvKGiuL3CJVybGNuK11ZCFQw/s0/tab_bg.jpeg) repeat-x top left;float:left;height:60px;padding:5px;width:290px;list-style:none;}
#slidervideo-tabs li a {padding:0 !important;border:0 !important;}
#slidervideo-tabs li.hover {background:#333;}
#slidervideo-tabs li.actVid {background:#555;}
#slidervideo-tabs li img.thumb-vid {background-color:#fff;float:left;height:52px;margin:0 8px 0 0;padding:5px;width:52px;}
#slidervideo-tabs li span.vidTit {
display:block;
color:#CD332D; /* Color de los títulos */
font-size:14px; /* Tamaño de los títulos */
font-weight:bold;
text-decoration:none;
}
#slidervideo-tabs li .vidDesc {
display:block;
color:#fff; /* Color de la descripción */
font-size:12px; /* Tamaño del texto de la descripción */
font-weight:bold;
text-decoration:none;
}
#slidervideo-tabs a {text-decoration:none;}
#slidervideo-tabs li.actVid .vidDesc {color:#fff;}
.ui-widget-content{float:right;}
.tabs-outer {background-image: none !important;}
#slidervideo-tabs li a:hover {background: none !important;}
Ahora en un elemento HTML/Javascript pega la estructura del slider, este gadget es el que pondrás debajo de la cabecera:
<script>
var video = [];
video[1] = '<iframe width="460" height="345" src="http://www.youtube.com/embed/ID_video_1" frameborder="0" allowfullscreen></iframe>';
video[2] = '<iframe width="460" height="345" src="http://www.youtube.com/embed/ID_video_2" frameborder="0" allowfullscreen></iframe>';
video[3] = '<iframe width="460" height="345" src="http://www.youtube.com/embed/ID_video_3" frameborder="0" allowfullscreen></iframe>';
video[4] = '<iframe width="460" height="345" src="http://www.youtube.com/embed/ID_video_4" frameborder="0" allowfullscreen></iframe>';
video[5] = '<iframe width="460" height="345" src="http://www.youtube.com/embed/ID_video_5" frameborder="0" allowfullscreen></iframe>';
</script>
<div id="slidervideo">
<div id="slidervideo-content"></div>
<ul id="slidervideo-tabs">
<li><a href="#vid1"><img src="//i2.ytimg.com/vi/ID_video_1/default.jpg" class="thumb-vid" /><span class="vidTit">Nombre del video</span><span class="vidDesc">Descripción del video</span></a></li>

<li><a href="#vid2"><img src="//i2.ytimg.com/vi/ID_video_2/default.jpg" class="thumb-vid" /><span class="vidTit">Nombre del video</span><span class="vidDesc">Descripción del video</span></a></li>

<li><a href="#vid3"><img src="//i2.ytimg.com/vi/ID_video_3/default.jpg" class="thumb-vid" /><span class="vidTit">Nombre del video</span><span class="vidDesc">Descripción del video</span></a></li>

<li><a href="#vid4"><img src="//i2.ytimg.com/vi/ID_video_4/default.jpg" class="thumb-vid" /><span class="vidTit">Nombre del video</span><span class="vidDesc">Descripción del video</span></a></li>

<li><a href="#vid5"><img src="//i2.ytimg.com/vi/ID_video_5/default.jpg" class="thumb-vid" /><span class="vidTit">Nombre del video</span><span class="vidDesc">Descripción del video</span></a></li>

</ul>
</div>
Agrega los IDs de los videos, sus nombres y su descripción y listo. La descripción deberá ser muy breve para que no tengas problemas de espacios.
Si no sabes cómo obtener la ID de un video abre el video en YouTube y mira en la barra de direcciones, los últimos caracteres son la ID que necesitas.


Toma en cuenta que la ID de cada video se agrega dos veces, uno es para que muestre el video y otra para la miniatura de las pestañas.

Es una galería que como funciona con jQuery deberás cerciorarte de no repetir la versión del script en caso de que ya tengas jQuery, y si usas Scriptaculous deberás aplicarle unos cambios, casi al final del primer código verás en color azul desde dónde deberás aplicárselos en caso de que lo necesites.

domingo, 28 de octubre de 2012

Jugando con jQuery y las imágenes de fondo

Jugando un poco con jQuery para ... podría decir aprender pero prefiero decir la verdad. Jugando sólo por jugar.

Si quiero poner una imagen en la página pero es demasiado grande la puedo re-dimensionar perdiendo calidad pero también la puedo "cortar"; mostrarla como fondo dentro de un contenedor al que le doy un tamaño cualquiera ; de ese modo, sin importar su proporción, la veré o veré algo. Esta es una opción válida cuando se usan como elementos decorativos, por ejemplo miniaturas que adornan una página con resúmenes ya que la imagen en si no interesa porque se trata de un elemento estético.

Eso, es algo que puede hacerse usando sólo CSS:
.thumb {
background: transparent url(URL_imagen) no-repeat 50% 50%;
height: valorpx;
width: valorpx;
}
<div class="thumb"></div>


Pero quiero algo más, quiero que al poner el cursor encima ... pase algo: quiero que el fondo se mueva y al hacer click encima, se muestre completa pero dentro de ese contenedor así que empiezo haciendo un HTML más complicado; algo así:
<div id="cimage">
<div id="c-lefttop" rel="left top"></div>
<div id="c-righttop" rel="right top"></div>
<div id="c-leftbottom" rel="left bottom"></div>
<div id="c-rightbottom" rel="right bottom"></div>
</div>
Y reglas de estilo para eso:
<style>
#cimage {
background-color: transparent
background-image: url(URL_imagen);
background-position:50% 50%;
background-repeat: no-repeat;
background-size: auto;
height: valorpx;
margin: 0 auto;
position:relative;
width: valorpx;
transition: all 1s; /* con cada uno de los prefijos : -moz- -webkit- -o- -ms- */
}
#cimage.cover {background-size: cover;}
#cimage.cover div {display: none;}
#cimage div {
height:50%;
position:absolute;
width:50%;
}
#c-lefttop {left: 0;top: 0;}
#c-righttop {right: 0;top: 0;}
#c-leftbottom {left: 0;bottom: 0;}
#c-rightbottom {right: 0; bottom: 0;}
</style>
Y un poco de jQuery para que funcione:
<script>
$('#cimage div').live('mouseover', function() {
var pos = $(this).attr('rel');
$('#cimage').css('background-position',pos);
})
$('#cimage div').live('mouseout', function() {
$('#cimage').css('background-position','50% 50%');
})
$('#cimage').live('click', function(e) {
$('#cimage').toggleClass('cover');
})
</script>
La idea es simple; dentro del contenedor hay cuatro DIVs posicionados de modo absoluto y que ocupan un cuarto de ella; al poner el cursor encima de cada uno de esos pedacitos, se ejecuta una función que cambia la posición del fondo del contenedor y como este tiene una propiedad transition, parece ... moverse.

Al quitar el cursor, se restaura la posición al centro y al hacer click en la imagen se cambia la propiedad background-size por cover lo que hará que la imagen ocupe el 100% del contenedor, sin importar su tamaño o proporción.


Pero claro, hacer eso para cada imagen es un poco engorroso así que habría que simplificar el proceso; yo no quiero escribir tanta cosa, quiero poner cualquier imagen en un contenedor de cualquier tamaño; algo así:
<div class="eimage" style="width:valorpx;height:valorpx;background-image:url(URL_imagen);"></div>
Y para eso, necesito crear una función propia, ago que con jQuery es bastante fácil.

Lo que hará esto, es agregar las mismas funciones del primer ejemplo, a cualquier etiqueta con la clase eimage y ademá, le agregará esos DIVs internos que, ene ste caso, no serán cuatro sino nueve, es decir, al imagen quedará dividida en nueve rectangulos (3x3) :
<script>

$.fn.ejemplo = function() {
// la función la llamo ejemplo
$(this).each(function() {
// los nueve DIVs que agregaré
var html = "<div class='c1' rel='left top'></div><div class='c2' rel='50% top'></div><div class='c3' rel='right top'></div><div class='c4' rel='left 50%'></div><div class='c5' rel='50% 50%'></div><div class='c6' rel='right 50%'></div><div class='c7' rel='left bottom'></div><div class='c8' rel='50% bottom'></div><div class='c9' rel='right bottom'></div>";
$(this).append(html); // se agregan al contenedor
// y agregamos las funciones internas
var $this = $(this);
// al hacer click en la imagen, esta se expande
$this.click(function() {
$(this).toggleClass('cover');
});
$this.children().each(function(){
// si se coloca el puntero encima de alguno de las nueve divisiones, el fondo se desplaza
$(this).mouseover(function() {
var pos = $(this).attr('rel');
$this.css('background-position',pos);
})
// al quitar el puntero de encima, el fondo se restaura
$(this).mouseout(function() {
$this.css('background-position','50% 50%');
})
});
});
return $(this);
}

// y adosamos esa funcion ejemplo a toda etiqueta que tenga la clase eimage
$(document).ready(function() {
$('.eimage').ejemplo();
})

</script>
Faltaría el CSS que es similar al anterior.


<style>
.eimage {
background-color: transparent;
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: auto;
margin: 0 auto;
position: relative;
-moz-transition: all 1s;
-webkit-transition: all 1s;
-o-transition: all 1s;
-ms-transition: all 1s;
transition: all 1s;
}
.eimage.cover { background-size: cover; }
.eimage.cover div { display: none; }
.eimage div { /* la imagen dividada en tercios */
height: 33%;
position: absolute;
width: 33%;
}
.c1 { left: 0; top: 0; }
.c2 { left: 33%; top: 0; }
.c3 { right: 0; top: 0; }
.c4 { left: 0; top: 33%; }
.c5 { left: 33%; top: 33%; }
.c6 { right: 0; top: 33%; }
.c7 { left: 0; bottom: 0; }
.c8 { left: 33%; bottom: 0; }
.c9 { right: 0; bottom: 0; }
</style>
El resultado sería esto:


Y el efecto, debería adaptarse a cualquier tamaño:


300x200 | 600x250 | 500x500 | 500x312

jueves, 25 de octubre de 2012

Generador de borde con imágenes


Los generadores nos ahorran mucho tiempo porque vemos en vista previa el resultado en lugar de hacer una y mil pruebas.
Con border-image-generator conseguimos que cualquier imagen sea el borde de nuestras imágenes para el blog. Lo ideal, sería que la imagen para el borde sea tipo textura o con motivos no demasiado grandes.


Si marcamos la casilla "Fill Center" conseguimos que la imagen ocupe también el fondo, esto puede ser útil cuando añadimos imágenes png. (fondo transparente)


Para que ese borde se muestre en nuestras imágenes del blog buscamos en la plantilla algo así:

 .post img, table.tr-caption-container { 
  padding:4px; 
  border:1px solid $bordercolor; 
}

Eliminamos lo marcado en rojo y ahí añadimos los estilos que nos proporciona el generador.
No guardes los cambios hasta comprobar en vista previa que todo está correcto.

Cómo Agregar una Galería de Imágenes a una Página Estática de Blogger + 2 Estilos





En varias ocasiones me han comentado que les gustaría crear una galería de imágenes en una página estática, como la que uso en la página de Plantillas, que por cierto necesito actualizar. No es nada del otro mundo, simplemente puse el HTML de una lista con las imágenes en una página estática  y con un poco de CSS manipulé su presentación.



Mejor, veamos cómo hacerlo paso a paso, y como es muy bien sabido que en gustos se rompen géneros, te facilitaré 2 ejemplos con algunas variantes en los estilos. Sin más rollos, empecemos...



Lo que necesitamos:



1. El CSS que definirá la presentación de la galería.

2. El código HTML donde colocaremos las imágenes de la galería.

3. Cambiar el ancho de la columna principal o main, para que la galería ocupe el ancho del blog, lo cual lograremos usando código condicional de Blogger y un poco de CSS (opcional).







Opción 1. La galería de imágenes mostrará siempre el título y efecto zoom en la imagen.




En este ejemplo, la galería mostrará el titulo o una leyenda al fondo de la imagen, tal y como puedes ver en la demostración, ademas, las imágenes tendrán efecto zoom que conseguiremos gracias a las bondades del CSS3. También podrás poner un enlace a la imagen, y al hacer click sobre ésta, te dirigirá  a la página que especifiques (cualquier URL).



Pasos




  1. Primero, agregas el CSS de la galería  y esto lo haces yendo a Plantilla > Personalizar > Avanzado >  Añadir CSS y ahí en el campo lo pones y guardas el cambio en "Aplicar al blog".



    CSS

     ul#galeria {
    width: 100%;
    margin: 10px 5px;
    padding: 0;
    }
    ul#galeria li {
    margin: 0 10px 10px 0;
    /*separación de cada elemento 10px a la derecha y 10px abajo*/ padding: 0;
    float: left;
    list-style: none;
    }
    ul#galeria a {
    width: 200px;
    /*deberá tener el mismo ancho de la imagen*/ height: 160px;
    /*deberá tener el mismo alto de la imagen*/ display: block;
    position: relative;
    top: 0;
    left: 0;
    margin: 0;
    padding: 0;
    font-size: 14px;
    color: #fff;
    text-align: center;
    white-space: nowrap;

    }
    ul#galeria li img {
    width: 200px;
    /*Ancho de la imagen*/ height: 160px;
    /*Alto de la imagen*/ margin: 0;
    padding: 0;
    border: none;
    }
    ul#galeria span {
    /*Estilos del titulo de la imagen*/ width: 200px;
    left: 0;
    bottom: 0;
    margin: 0;
    padding: 4px 0;
    background: #0A1B2A;
    /*El color de fondo del titulo*/ opacity: .7;
    filter: alpha(opacity=70);
    cursor: pointer;
    position: absolute;
    overflow: hidden;
    z-index: 10;
    }
    .zoom {
    z-index: 9;
    -webkit-transition: all .25s ease-out;
    -moz-transition: all .25s ease-out;
    -o-transition: all .25s ease-out;
    transition: all .25s ease-out;
    }
    .sec_zoom {
    z-index: 9;
    overflow: hidden;
    }
    .zoom: hover {
    -moz-transform: scale(2);
    -webkit-transform: scale(2);
    -o-transform: scale(2);
    -ms-transform: scale(2);
    transform: scale(2);
    }





    Notas del CSS

    - Las imágenes en el ejemplo se muestran con un ancho de 200 pixeles y un alto de 160 pixeles, si vas a usar otras medidas, deberás editar los valores en el CSS. Por favor lee los comentarios que están dentro de /*...*/ resaltados de verde.



    - Para lograr que la imagen se vea nítida (no pierda calidad) en el efecto zoom, ésta, deberá ser más grande que la definida en el CSS.




  2. Luego, desde el panel de Blogger, vas a Páginas y seleccionas la opción de Página en blanco, tal y como se muestra en la imagen:




    Crear paginas en Blogger




  3. Estando en el panel de edición/creación de páginas, selecciona la opción de HTML (botón a la izquierda enseguida de Redactar), y luego pega el HTML que deberás editar, agregando tus imágenes y textos. Donde está la almohadilla: "#", pones el enlace a donde quieres que se dirija al hacer click sobre la imagen.



    HTML

    <ul id="galeria">

    <li class="sec_zoom">

    <a href="#" title=""><img class="zoom" alt="" src="URL_de_la_imagen" /><span style="text-decoration:none;">Texto del título o leyenda</span></a>

    </li>

    <li class="sec_zoom">

    <a href="#" title=""><img class="zoom" alt="" src="URL_de_la_imagen" /><span style="text-decoration:none;">Texto del título o leyenda</span></a>

    </li>

    <li class="sec_zoom">

    <a href="#" title=""><img class="zoom" alt="" src="URL_de_la_imagen" /><span style="text-decoration:none;">Texto del título o leyenda</span></a>

    </li>

    <li class="sec_zoom">

    <a href="#" title=""><img class="zoom" alt="" src="URL_de_la_imagen" /><span style="text-decoration:none;">Texto del título o leyenda</span></a>

    </li>

    </ul>




    El HTML anterior, está listo para mostrar cuatro imágenes. Si vas agregar más, necesitas repetir el código que está dentro de la etiqueta <li> y lo agregas antes de </ul>. Me refiero a esta parte:





    <li class="sec_zoom">

    <a href="#" title=""><img class="zoom" alt="" src="URL_de_la_imagen" /><span style="text-decoration:none;">Texto del título o leyenda</span>              </a>

    </li>






  4. Verificas en vista previa y si todo luce bien, publicas la página.




Lograr que la galería ocupe todo el ancho del blog (opcional)



Si quieres que la página ocupe el ancho completo del blog, entonces deberás definirlo con CSS y lo  condicionarás para que se aplique solo en esa página.



Básicamente lo que haremos es ocultar la columna lateral, y ampliar la principal o main, para que ocupe el ancho del blog. Para ello, necesitarás:



 1. Copiar la URL de  la página con la galería, desde la barra de direcciones, al ingresar a ésta.



 2. Ir al editor HTML, y después de ]]></b:skin> agregar la condicional con el CSS que definirá la presentación de la página. Deberás poner la URL de la página como se indica en el siguiente código:






<b:if cond='data:blog.url == &quot;URL_DE_LA_PAGINA&quot;'> <style type="text/css"> .main { width: 940px; /*pones el ancho del blog completo*/ } .sidebar{ display:none; } </style> </b:if>









En las nuevas plantillas de Blogger, (no estoy segura en todas) la columna lateral esta identificada como "sidebar",  así que definiéndola así en el CSS, lograremos que se oculte, con display:none. La columna principal usa la clase "main" por eso así la declararé, definiendo un ancho de 940 pixeles (940px).  En este blog que usa una plantilla del diseñador de plantillas, puedes ver la galería en acción.


Nota: Si quieres, puedes poner dentro de la condicional todo el CSS de la galería, de ese modo, éste se cargará solo al ingresar a dicha página. Y este lo colacarás inmediatamente después de  en la edición de HTML de la plantilla. El código es este:


 <b:if cond='data:blog.url == &quot;URL de la página estática&quot;'><style  type="text/css">Aquí pones el CSS de la galería</style></b:if>



Opción 2. Que la Galería de Imágenes muestre el Título Emergente Animado con CSS3. (Ver la demostración).



Para poner la galería, seguirás los mismos pasos del ejemplo anterior, aquí solo te facilitaré el CSS y el HTML de la galería:



  CSS


/*Galeria 2*/

ul#galeria2{width:100%;

margin:10px 5px;

padding:0}



ul#galeria2 li{

height:160px/*el mismo alto que la imagen*/width:200px/*el mismo ancho que la imagen*/

display:block;

margin:0 10px 10px 0/*separación de cada elemento*/

padding:0;

border:1px solid #ccc; /*el ancho, estilo y color de borde*/

float:left;

list-style:none;

position:relative;

overflow:hidden;}



ul#galeria2 a{

background:none;

margin:0;

padding:0;

font-size:19px;

color:#fff;

text-align:center;

white-space:nowrap}



ul#galeria2 li img{

width:200px/*ancho de la imagen*/

height:160px; /*alto de la imagen*/

margin:0;

padding:0;

border:none}



ul#galeria2 span{

width:200px;

left:1px; /*el mismo ancho que el borde*/

margin:0;

padding:3px 0 3px 0;

background:#000;

bottom:-8px;

left:0px; filter:alpha(opacity=0);

opacity:0;

overflow:hidden;

cursor:pointer; position:absolute;
-webkit-transition:all .25s ease; -moz-transition:all .25s ease; -o-transition:all .25s ease; transition:all .25s ease;}



ul#galeria2 a:hover span{left:0;bottom:0; opacity:.8;filter:alpha(opacity=80)}

ul#galeria2 a span:hover{color:#5658BB} /*color fuente al poner el puntero encima*/

Nota: Por Favor, lee los comentarios resaltados de verde. Ya que no los uses los puedes borrar. En el paso 1 del ejemplo anterior se explican los detalles para que puedas agregar el CSS.



HTML


<ul id="galeria2">

<li>

<a href="#" title=""><img alt="" src="URL_DE_LA_IMAGEN" /><span style="text-decoration:none;">El título o leyenda</span></a>

</li>

<li>

<a href="#" title=""><img alt="" src="URL_DE_LA_IMAGEN" /><span style="text-decoration:none;">El título o leyenda</span></a>

</li>

<li>

<a href="#" title=""><img alt="" src="URL_DE_LA_IMAGEN" /><span style="text-decoration:none;">El título o leyenda</span></a>

</li>

<li>

<a href="#" title=""><img alt="" src="URL_DE_LA_IMAGEN" /><span style="text-decoration:none;">El título o leyenda</span></a>

</li>

<li>

<a href="#" title=""><img alt="" src="URL_DE_LA_IMAGEN" /><span style="text-decoration:none;">El título o leyenda</span></a>

</li>

</ul>

El código anterior está listo para mostrar 4 imágenes. Edita lo que está resaltado de rojo, y de ser necesario, agrega el código para mostrar más imágenes, repitiendo esta parte:



<li>

<a href="#" title=""><img alt="" src="URL_DE_LA_IMAGEN" /><span style="text-decoration:none;">El título o leyenda</span>

</a>

</li>



..antes del cierre de la etiqueta ul, es decir , antes de </ul>. En el paso 3 de la primera opción se explican los detalles.



  Nota: Esto funciona en todos los navegadores modernos, en los antiguos o versiones antiguas, no funcionará el efecto de las transiciones (movimiento suave del zoom, y del título hacia arriba de la segunda opción), pero solo eso, ya que la galería se verá igual.



Espero sea útil ;)

miércoles, 24 de octubre de 2012

Marco para foto Halloween en Photoshop

En este video tutorial veremos cómo crear un sencillo y vistoso marco para foto de Halloween en Photoshop.
Si desean descargar directamente el marco para foto, en formato PNG, pueden descargarlo desde mi DeviantArt.
Les dejo también los materiales para trabajar.

Materiales

Efecto de desvanecimiento al cargar las páginas del blog



Un efecto muy habitual en jQuery es el efecto fade que es un efecto de desvanecimiento, y podemos usarlo de tantas maneras como por ejemplo en la navegación del blog. El siguiente script hace justamente eso, carga la página con un efecto de desvanecimiento cuando navegamos en los enlaces internos que hay en el blog, como por ejemplo los títulos de las entradas, los enlaces de las etiquetas, los enlaces de navegación, archivo, etc.

Puedes ver un ejemplo en este blog de pruebas, haz click en el título de alguna entrada y verás el efecto de desvanecimiento al cargar la página.

Para poner este efecto de desvanecimiento en tu blog agrega después de <head> el siguiente código:
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' type='text/javascript'/>
<script type='text/javascript'>
//<![CDATA[
$(document).ready(function() {
$("body").css("z-index", "-10");
$("body").fadeIn(0);

$("a").click(function(event){
event.preventDefault();
linkLocation = this.href;
$("body").fadeOut(1000, redirectPage); });
function redirectPage() {
window.location = linkLocation;
}
});
//]]>
</script>
<style>
html {
background-color: #f2f2f2; /* Color del desvanecimiento */
}
</style>
Guarda los cambios y listo. En color verde puedes ver dónde cambiar el color con el que se desvanece la página al cargar.

El script original oculta el body de la página mientras carga, yo he preferido cambiar esa propiedad por un z-index negativo para evitar problemas con los robots de los buscadores y que esto pueda efectar el posicionamiento.

¿Problemas?

Hay que considerar que este tipo de efectos podría reatrasar el tiempo de carga del blog, así que se recomendaría su uso sólo cuando el blog es rápido en cargar y no tiene tantos scripts.

Si ya usas otra versión de jQuery elimina las demás y deja sólo esta que es la que se leerá primero.

Si usas Mootools o Scriptaculous tendrás que hacerle unas modificaciones al código para que puedan ser compatibles.

Si tuvieras otro script con un efecto de desvanecimiento podría interferir con este y hacer que no se vea nada en la página excepto el color del desvanecimiento, en esos casos también es mejor prescindir de este script.

También puedes usar este efecto sólo en algunos enlaces, por ejemplo, si quieres que se aplique al hacer click en los títulos de las entradas, en los enlaces de navegación (entradas antiguas y entradas recientes), y en el gadget de Páginas, entonces cambia esta línea:
$("a").click(function(event){
Por esta:
$(".post-title a, .blog-pager-older-link, .blog-pager-newer-link, .tabs").click(function(event){
En algunos casos podrá cargar la página por un segundo y luego cargarla con el efecto de desvanecimiento, esto puede ser "normal" debido a que el navegador está tardando en leer el script al cargar la página.

Fuera de estos inconvenientes me parece que es una forma muy elegante de cargar las páginas del blog mientras navegamos por ellas, ¿no creen?

Vía | CGnauta

martes, 23 de octubre de 2012

15+ Sets de Brushes o Pinceles Relativos a Halloween

Si lo que quieres es echar a andar tu imaginación, jugando con pinceles para Photoshop o Gimp, buscando crear algún fondo, banner, u otro elemento gráfico representativo a la celebración de Halloween, entonces te recomiendo echar un vistazo a estos pinceles que seguramente te inspiraran y servirán para crear esa original y espeluznante obra de arte que siempre has soñado :D




Salpicadura de Sangre




1. Set con 18 pinceles para Photoshop




Pinceles o brushes salpicadura de sangre







Varios pinceles de Halloween






2. Set de 7 pinceles con distintos elementos relativos a la celebración de Halloween





Halloween Brushes

















3. Set de 30 simpáticos pinceles de Halloween para Photoshop hechos a mano.



















4. Set de 30 pinceles con elementos clásicos de Halloween de alta resolución disponibles para Photoshop y Gimp.





Brushes de Halloween












Calaveras





5. Set de 8 pinceles de cráneos de alta resolución para Photoshop




















Telarañas





6. Set de 30 pinceles de telarañas, disponibles para Photoshop y Gimp





Brushes de telarañas











7. Set de 5 pinceles de telarañas con un look muy moderno.





Telaranas brushes













Murciélagos 





8. Set de 10 brushes de murciélagos para Photoshop.





Murcielagos Brushes












9. Set de diversos pinceles de murciélagos hechos mano; una colección muy variada para todos los gustos :) 





Brushes de mucrielagos










Arañas  y otros insectos







10. Set de 6 pinceles de arañas para Photoshop.





Pinceles de aranas













11. Set con 15 pinceles de varios insectos para Photoshop.





Insectos brushes












Búhos o Lechuzas






12. Set de 40 brushes de búhos o lechuzas para Photoshop.





Pinceles de Buhos o lechuzas















Llamas 





13. Excelente set de 8 pinceles de llamas en alta resolución para Photoshop.





Pinceles de Llamas









Ramas y Arboles   





14. Set de 9 pinceles de ramas y árboles con apariencia otoñal para uso personal.

















15. Set de 19 pinceles de árboles y palillos de alta resolución para Photoshop, con uso comercial permitido.
























Cielo Nocturno 





16. Set de 5 pinceles de cielo nocturno para Photoshop. 














Brujas






17. No podían faltar los pinceles de brujas volando por aquí y por allá, claro, acompañadas del inseparable gato que esta vez, también se coló en el set.