Super Sencilla Lightbox con CSS y jQuery
() translation by (you can also view the original English article)
En vez de usar un plugin sobrestimado que tiene funciones que nunca usará, este curso le mostrará como crear una lightbox super sencilla para manejar las imágenes. ¡Es perfecta para galerías de imágenes, portafolios y mucho más!
Paso 1: El markup [lenguaje de marcado de HTML5].
Abra su editor de texto favorito (yo uso Coda) y empecemos con nuestro markup HTML.
Nota: si usted no proporciona un DOCTYPE apropiado y la página se recrea en un forma peculiar, entonces el lightbox no se mostrará correctamente en internet Explorer.
1 |
<!DOCTYPE html>
|
2 |
<html>
|
3 |
<head>
|
4 |
<title>Simple Lightbox</title> |
5 |
</head>
|
6 |
<body>
|
7 |
|
8 |
<div id="wrapper"> |
9 |
<h1>Super Simple Lightbox</h1> |
10 |
<p>Our super simple lightbox demo. Here are the image links:
|
11 |
<ul>
|
12 |
<li>
|
13 |
<a href="https://farm7.static.flickr.com/6130/5935338876_47b61c93a5.jpg" class="lightbox_trigger"> |
14 |
Picture 1 |
15 |
</a>
|
16 |
</li>
|
17 |
<li>
|
18 |
<a href="https://farm7.static.flickr.com/6020/5924329054_4bdc419c3a_o.jpg" class="lightbox_trigger"> |
19 |
Picture 2 |
20 |
</a>
|
21 |
</li>
|
22 |
<li>
|
23 |
<a href="https://farm7.static.flickr.com/6020/5931933181_ddb737e528.jpg" class="lightbox_trigger"> |
24 |
Picture 3 |
25 |
</a>
|
26 |
</li>
|
27 |
</ul>
|
28 |
</p>
|
29 |
</div> <!-- #/wrapper --> |
30 |
</body>
|
31 |
</html>
|



Nota: nosotros usamos la clase lightbox_trigger
en cada enlace que tiene una imagen que queremos mostrar en nuestro lightbox. Esto se vuelve útil cuando queremos apuntar a esos elementos en el código que escribiremos.
Paso 2: El CSS
Vamos a aplicar algunos estilos CSS a nuestra página. Para éste ejemplo básico, todas nuestro código CSS dentro de las etiquetas <style></style>
que están dentro de la sección <head>
.
1 |
body { |
2 |
margin:0; |
3 |
padding:0; |
4 |
background:#efefef; |
5 |
text-align:center; /* used to center div in IE */ |
6 |
}
|
7 |
#wrapper { |
8 |
width:600px; |
9 |
margin:0 auto; /*centers the div horizontally in all browsers (except IE)*/ |
10 |
background:#fff; |
11 |
text-align:left; /*resets text alignment from body tag */ |
12 |
border:1px solid #ccc; |
13 |
border-top:none; |
14 |
padding:25px; |
15 |
/*Let's add some CSS3 styles, these will degrade gracefully in older browser and IE*/
|
16 |
border-radius:0 0 5px 5px; |
17 |
-moz-border-radius:0 0 5px 5px; |
18 |
-webkit-border-radius: 0 0 5px 5px; |
19 |
box-shadow:0 0 5px #ccc; |
20 |
-moz-box-shadow:0 0 5px #ccc; |
21 |
-webkit-box-shadow:0 0 5px #ccc; |
22 |
}
|



Ahora tenemos una, simple, pero elegante página en la cual podemos probar nuestra ventana lightbox.
Paso 3: Notas sobre CSS en Internet Explorer
Usamos margin: 0 auto;
para centrar nuestro div #wrapper horizontalmente sobre la página. Esto funciona de forma excelente para todos los navegadores, excepto…redoble de tambores…adivine quién; exacto: Internet Explorer. Para arreglar ese problema, usamos text-align:center;
en la etiqueta body, lo que ubicará todos los elemento dentro del div al centro (en nuestro caso, el div #wrapper) horizontalmente sobre la página.
Sin embargo, usar text-align:center;
en la etiqueta body, hará que todos los textos se alinien al centro en sus divs. Para arreglar esto, reseteamos text-align:left;
en el div #wrapper para restaurar todos los elementos dentro del div con la alineación hacia la izquierda. Verifique communitymx.com si está interesado en aprender más sobre éste problema en particular de IE.
Paso 4: Lightbox HTML
Así es como luce nuestro markup HTML para nuestro lightbox. Sin embargo, no lo inserte dentro del markup HTML. Haremos eso de forma dinámica con jQuery. Entender el markupt HTML del lightbox nos permite darle estilo de acuerdo con CSS.
1 |
<div id="lightbox"> |
2 |
<p>Click to close</p> |
3 |
<div id="content"> |
4 |
<img src="#" /> |
5 |
</div>
|
6 |
</div>
|
Nota: No hay valor para la etiqueta image src
porque eso dependerá de cual enlace es presionado por el usuario. Por lo tanto, usaremos javascript para insertar el valor dinamicamente, pero más adelante.
Paso 5: Lightbox CSS, superposición del color negro
Continuemos e insertemos el CSS para nuestra lightbox. Si lo hacemos ahora, nuestros elementos de la página se mostrarán apropiadamente cuando insertemos dinámicamente nuestro código HTML.
Primero, tenemos nuestro div #lightbox que actúa como la capa de color negro. Queremos que éste llene por completo la ventana del usuario, no importa la resolución de pantalla.
1 |
#lightbox { |
2 |
position:fixed; /* keeps the lightbox window in the current viewport */ |
3 |
top:0; |
4 |
left:0; |
5 |
width:100%; |
6 |
height:100%; |
7 |
background:url(overlay.png) repeat; |
8 |
text-align:center; |
9 |
}
|



El CSS es bastante sencillo. Aquí están algunos puntos destacados:
-
position:fixed;
hace que nuestra capa aparezca correctamente en la ventana actual, no importa cual sea la posición del usuario en la pantalla (arriba o abajo de la página). Aquí es donde el uso del DOCTYPE correcto resulta de gran ayuda. Si IE se ejecuta en un modo raro debido al DOCTYPE equivocado (o no en lo absoluto) entonces nuestra capa no aparecerá correctamente. -
width:100%; height:100%;
Esto hace que nuestro div #lightbox, el cual actúa como la capa de color negro, cubra la pantalla completa no importando dónde termina la resolución de pantalla del usuario. -
background:url(overlay.png) repeat;
Podríamos haber utilizado el modo de color RGBa para hacer nuestro color de fondo ligeramente transparente. Esto requeriría algo comobackground: rgba(0,0,0,.7);
. Sin embargo, ya que está propiedad es bastante nueva, la transparencia para el color de fondo no funcionará en IE (a menos que usted aplique ciertos trucos). Así que en lugar de usar CSS3 y trucos para IE, simplemente creamos un archivo PNG en Photoshop con un formato de 1x1 pixel con fondo negro y ajustamos al transparencia a un 75 por ciento.
Paso 6: Lightbox CSS instrucciones para los usuarios
Solamente para estar seguros que nuestros usuarios no están confundidos, añadiremos algo de texto en la capa lightbox dando la condición que pueden hacer clic en cualquier parte para hacer desaparecer la ventana.
1 |
#lightbox p { |
2 |
text-align:right; |
3 |
color:#fff; |
4 |
margin-right:20px; |
5 |
font-size:12px; |
6 |
}
|
Paso 7: Lightbox CSS imagen.
Ahora que queremos aplicar estilo a la imagen que aparecerá en el lightbox. Sencillamente, voy a darle algunos de los efectos CSS3. Obviamente, estos no aparecerán en IE y, tampoco, en navegadores antiguos, pero todavía se degrada fácilmente. Usted podría añadir otros efectos aquí si así lo quiere, como, por ejemplo; un borde blanco alrededor de la imagen.
1 |
#lightbox img { |
2 |
box-shadow:0 0 25px #111; |
3 |
-webkit-box-shadow:0 0 25px #111; |
4 |
-moz-box-shadow:0 0 25px #111; |
5 |
max-width:940px; |
6 |
}
|
Nota: añadir un max-width
, reducirá cualquier imagen de alta resolución que podríamos enlazar. Esto ayuda a tener por seguro que todas las imágenes se adaptan a la ventana.
Así es como nuestra página luciría ahora si nosotros insertamos nuestro código HTML para el lightbox dentro del documento (eso lo vamos hacer con javascript).



Paso 8: Determinando la lógica
Si el usuario hace clic en un enlace de una imagen, queremos mostrar la imagen en un lightbox. Para hacer esto, primero queremos determinar la lógica detrás de nuestra funcionalidad.
- Los usuarios hacen clic con la clase
lightbox_trigger
- Evita que el navegador siga el enlace por defecto
- Mira si el div
lightbox
está ya está dentro del documento- Si éste existe:
- Encuentre la etiqueta
img
dentro del divcontent
. - Reemplace el valor del imagen dentro del atributo
src
con el valorhref
de cualquier enlace en el que haya hecho clic.
- Encuentre la etiqueta
- Si éste no existe:
- inserte el markup del lightbox dentro de la página con los valores
src
de las imágenes, configure el valorhref
de cualquier enlace que haya sido presionado.
- inserte el markup del lightbox dentro de la página con los valores
- Si éste existe:
- Permite que cualquier clic sobre el lightbox (cuando está mostrado) lo haga desaparecer
Paso 9: Javascript incluyendo jQuery
Ahora que tenemos nuestro markup HTML, los estilos CSS y la lógica de javascript, es hora de profundizar en el código y hacer que nuestra funcionalidad funcione.
Primero, incluyamos la biblioteca jQuery. Me gusta añadirla justo antes de cerrar la etiqueta body
usando la versión alojada de jQuery.
1 |
<script src="https://code.jquery.com/jquery-1.6.2.min.js"></script> |
Paso 10: Javascript, Script personalizados
Envolvamos nuestro código en una etiqueta script
en una función document.ready de jQuery.
Vamos a incluir nuestra secuencia de comandos después de incluir la biblioteca jQuery. Vamos a configurar nuestra función jQuery usando el signo de dolar "$" en el parámetro de la función, de esa manera, no tenemos que escribir jQuery cada vez que deseemos usar la funcionalidad jQuery. En lugar de eso, sencillamente usamos "$".
1 |
<script> |
2 |
jQuery(document).ready(function($) { |
3 |
|
4 |
// Our script will go here |
5 |
|
6 |
}); |
7 |
</script> |
Paso 11: Javascript, función lightbox_trigger
Como explique anteriormente en el Paso 1, para cada imagen enlazada que usaremos en el lightbox, le hemos asignado una clase lightbox_trigger
En nuestra secuencia de códigos, creamos una función que se activará cada vez que un enlace con la clase lightbox_trigger
es presionado.
1 |
$('.lightbox_trigger').click(function(e) { |
2 |
|
3 |
// Code that makes the lightbox appear |
4 |
|
5 |
}); |
Paso 12: Javascript dentro de la función
Primero, queremos evitar la acción por defecto. Esto evita que el navegador abra la imagen enlazada en una página nueva. (Para ver porque usamos preventDefault()
haga clic aquí.
1 |
e.preventDefault(); |
A continuación, vaya al atributo href
de la imagen que mostraremos en el lightbox desde el enlace que hicimos clic.
1 |
var image_href = $(this).attr("href"); |
Aquí es donde nuestra lógica predeterminada viene a ser de gran ayuda. Porque estamos insertando nuestro lightbox HTML dinamicamente, pero, primero queremos ver si ya existe en el documento. Así que, ejecutaremos una condición if/else.
If
Si el div lightbox
existe, reemplazaremos la etique img
dentro del div content
. Además, nos aseguraremos de que el valor src
de la etiqueta de la imagen está ajustado para coincidir con el atributo href
o cualquier enlace en donde se haga clic.
1 |
if ($('#lightbox').length > 0) { // #lightbox exists |
2 |
|
3 |
//insert img tag with clicked link's href as src value |
4 |
$('#content').html('<img src="' + image_href + '" />'); |
5 |
|
6 |
//show lightbox window - you can use a transition here if you want, i.e. .show('fast') |
7 |
$('#lightbox').show(); |
8 |
} |
Else
Si nuestro div lightbox
no puede ser encontrado en el documento, entonces lo crearemos y los insertaremos. Esto solamente se ejecutará la primera vez que un enlace lightbox es presionado.
1 |
else { //#lightbox does not exist |
2 |
|
3 |
//create HTML markup for lightbox window |
4 |
var lightbox = |
5 |
'<div id="lightbox">' + |
6 |
'<p>Click to close</p>' + |
7 |
'<div id="content">' + //insert clicked link's href into img src |
8 |
'<img src="' + image_href +'" />' + |
9 |
'</div>' + |
10 |
'</div>'; |
11 |
|
12 |
//insert lightbox HTML into page |
13 |
$('body').append(lightbox); |
14 |
} |
Paso 13: Javascript ocultando la ventana lightbox.
Por último, queremos ocultar la ventana lightbox cuando los usuarios hagan clic sobre ella. Debido a que el div lightbox
está insertado después, el DOM ya lo construyo (la página ya lo ha cargado) tenemos que decirle a jQuery que estamos colocando un nuevo div en nuestra página y ver los clics en éstos elementos nuevos. Hacemos estos usando .liv() en lugar de .click().
1 |
$('#lightbox').live('click', function() { |
2 |
$('#lightbox').hide(); |
3 |
}); |
Paso 14: Javascript Código Final
Ahora que hemos examinado el código de nuestro lightbox, aquí está como luce todo:
1 |
<script> |
2 |
jQuery(document).ready(function($) { |
3 |
|
4 |
$('.lightbox_trigger').click(function(e) { |
5 |
|
6 |
//prevent default action (hyperlink) |
7 |
e.preventDefault(); |
8 |
|
9 |
//Get clicked link href |
10 |
var image_href = $(this).attr("href"); |
11 |
|
12 |
/* |
13 |
If the lightbox window HTML already exists in document, |
14 |
change the img src to to match the href of whatever link was clicked |
15 |
|
16 |
If the lightbox window HTML doesn't exists, create it and insert it. |
17 |
(This will only happen the first time around) |
18 |
*/ |
19 |
|
20 |
if ($('#lightbox').length > 0) { // #lightbox exists |
21 |
|
22 |
//place href as img src value |
23 |
$('#content').html('<img src="' + image_href + '" />'); |
24 |
|
25 |
//show lightbox window - you could use .show('fast') for a transition |
26 |
$('#lightbox').show(); |
27 |
} |
28 |
|
29 |
else { //#lightbox does not exist - create and insert (runs 1st time only) |
30 |
|
31 |
//create HTML markup for lightbox window |
32 |
var lightbox = |
33 |
'<div id="lightbox">' + |
34 |
'<p>Click to close</p>' + |
35 |
'<div id="content">' + //insert clicked link's href into img src |
36 |
'<img src="' + image_href +'" />' + |
37 |
'</div>' + |
38 |
'</div>'; |
39 |
|
40 |
//insert lightbox HTML into page |
41 |
$('body').append(lightbox); |
42 |
} |
43 |
|
44 |
}); |
45 |
|
46 |
//Click anywhere on the page to get rid of lightbox window |
47 |
$('#lightbox').live('click', function() { //must use live, as the lightbox element is inserted into the DOM |
48 |
$('#lightbox').hide(); |
49 |
}); |
50 |
|
51 |
}); |
52 |
</script> |
Producto final



Imagen cortesía de CSS Lounge Photostream en Flickr
¡Ya está! Ahora tiene una solución lightbox ligera para mostrar imágenes. ¡Espero que haya disfrutado este curso y también haya aprendido algo nuevo! Gracias por leer.
Opciones premium
Este curso ha enseñado a través del método hágalo usted mismo, pero si usted prefiere una solución predefinida, Envato Market tiene muchas plugin lightbox disponibles. Aquí está una selección de las más populares:
1. Lightbox Evolution para WordPress
Lightbox Evolution es una herramienta para mostrar imágenes, contenido html, mapas y vídeos en un estilo "lightbox" que flota sobre la página web. Al usar Lightbox Evolution, los autores de los sitios web pueden mostrar una amplia gama de medios en todos los navegadores principales sin alejar a los usuarios de la página enlazada. Además, hay una versión jQuery.



2. iLightBox • Plugin Lightbox revolucionario
iLightBox le permite crear con facilidad la ventana más hermosa y flexible usando la biblioteca jQuery de Javascript. Al combinar soporte para una amplia gama de medios con magníficos cubiertas y APIs fáciles de usar, los objetivos de iLightBox empujaron el concepto LightBox hasa donde fue posible.



3. PopupPress - Popups con Deslizadores & Lightbox para WP
PopupPress es un plugin para WordPress que permite crear fácilmente ventanas superpuestas. Éste plugin está destinado para insertar cualquier tipo de contenido en una Ventana emergente de la manera más rápida y fácil en cualquier página de WordPress. Además, tiene un sencillo sistema estadístico para visualizar los números de ventanas emergentes.


