Accueil Ajax XUL JavaScript CSS HTML 5 FAQ-Forum

Lightbox en CSS

Pour ajouter une lightbox à votre page, il n'est pas besoin d'inclure un gros framework Ajax, quelques lignes de CSS et JavaScript suffisent!

La lightbox, comment cela fonctionne

Une lightbox est une fenêtre qui affiche un contenu soit statique, soit dynamique, tandis que la page dans le fond est obscurcie. C'est là la source de l'effet: la boite se trouve ainsi comme éclairée.

Nous allons réaliser facilement ce effet avec deux <div>. La premier est un filtre qui recouvre la page entière avec une opacité réduite. Le second est un conteneur pour notre boite, qui s'affiche à la demande.

Le filtre pour assombrir le fond

Le filtre est une balise <div> positionné par CSS sur l'ensemble de la page.

<div id="filter">
#filter
{
	display: none;
	position: absolute;
	top: 0%;
	left: 0%;
	width: 100%;
	height: 100%;
	background-color: #CCA;
	z-index:10;
	opacity:0.5;
	filter: alpha(opacity=50);
}

La propriété display:none fait que le filtre n'est pas affiché au départ, on la change en display:block au moment ou l'on veut le faire apparaître.
La propriété z-index permet de placer le filtre au-dessus des autres éléments de la page.
L'opacité de 0.5 crée un filtre semi-transparent, elle peut varier de 0 (transparence) à 1 (opaque).
La propriété filter: alpha(opacity=50) est pour Internet Explorer 7 uniquement.
Le couleur #CCA donne une teintre de vieux papier au filtre. On choisit la teinte en modifiant cette couleur.

La boite lumineuse

Pour réaliser une boite, on utilise une seconde <div>, qui selon le même principe, n'est pas affichée au départ, et le devient quand l'utilisateur clique sur l'objet à afficher.

<div id="box"  onclick="document.getElementById('box').style.display='none';
                 document.getElementById('filter').style.display='none'">
</div>
#box 
{
	display: none;
	position: absolute;
	top: 20%;
	left: 20%;
	width: 60%;
	height: 60%;
	padding: 0;
	margin:0;
	border: 1px solid black;
	background-color: white;
	z-index:11;
	overflow: auto;
}

La méthode onclick de DOM déclenche deux évènements. On selectionne le filtre par son identifieur filter et on déclenche son affichage. On sélectionne la boite par son identifieur firstbox et on déclenche son affichage simultanément.
z-index ici est juste un niveau au dessus celui du filtre.
overflow: auto faire apparaître des barres de défilement si la taille du contenu dépasse celle de la boite.

Une boite plus élaborée

Le bloc contient des <div> imbriqués:

<div id="box" >
<div id="boxheader">
      <span id="boxtitle"> Titre pour le contenu (image, formulaire ou autre)</span>
       <span id="boxclose" onclick="document.getElementById('box').style.display='none';
                 document.getElementById('filter').style.display='none'"> 
      </span>
</div>
<div id="boxcontent"> Ceci est le contenu statique provisoire  de la boite.  </div>
</div>

Nous avons structuré la boite pour lui donner une barre de titre (header), afficher un bouton de fermeture (boxclose), et une zone de contenu (boxcontent).

Dans la zone de contenu, on peut placer un contenu statique, comme on le voit dans la première démo.

Démonstration