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><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>
<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><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>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.
<div class="eimage" style="width:valorpx;height:valorpx;background-image:url(URL_imagen);"></div>
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><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>






9 comentarios:
Muy bueno Jmiur :)
wow, still focus and can move move, awesome :D
Impresionante :D
Me ha encantado :D
Es increible, gracias por cuantas cosas haces aprender.
Esta bien chévere
Esto lo podriamos aplicar a un fondo de pagina background?...
A cualquier fondo.
Muy buen ejemplo
¿Quiere dejar un comentario?
recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...
Todos los archivos y demos alojados en Fileden han sido redireccionados y deberían estar funcionando correctamente.
De todos modos, también puede accederse a ellos a través de SkyDrive
Si le gusta ir a lo seguro utilice este botón para abrir los comentarios en una ventana modal en esta misma pagina.
Si añora tiempos idos, use este enlace para agregar un comentario al viejo estilo ...