I den här artikeln kommer jag att gå igenom hur du snabbt och enkelt skapar en egen lightbox effekt med hjälp av jQuery och CSS. Om du inte vet hur en lightbox effekt ser ut så kan du se ett exempel här: http://leandrovieira.com/projects/jquery/lightbox/. Vi kommer inte att göra en lika avancerad effekt, men den kommer att uppfylla samma syfte i alla fall.
Demo
Gör du allt korrekt i denna artikel så kommer slutprodukten att se ut så här: http://www.aspkoll.se/sandbox/lightbox-effect-1/
Förutsättningar
Jag förutsätter att du redan kan grunderna i jQuery. Om inte så rekomenderar jag att du läser lite mer om det innan, exempelvis på jQuery.com. Jag förutsätter även att du har grundläggande CSS kunskaper.
XHTML
Vi börjar med att skapa XHTML koden som kommer att ligga till grund för vårt projekt.
<a href="#" id="trigger">Visa</a>
<div id="box"> <h2>Lignbox effekten</h2> <p>Denna ruta kommer fram när du klickar på länken "visa"</p> <p><a href="#" id="close">Stäng</a></p> </div>
<div id="background"></div>
Det första vi skapade är länken, "trigger", som vi ska klicka på för att visa rutan. Vi skapade även "box" som är den lilla rutan som kommer att visas med lite information i den. Inuti den boxen placerade vi även en liten länk som ska stänga ner hela rutan, den kallas för "close".
Sist men absolut inte minst så skapade vi en DIV som vi kallar för "background". Det är den DIV:en som kommer att blir den svarttransparenta bakgrunden som kommer att skapa denna lightbox effekten.
CSS koden
Innan vi börjar med jQuery koden så behöver vi lägga lite stil på XHTML koden som vi skapade innan. Då börjar vi med själva "background":
Innan vi går vidare så måste jag förklara "problemet" med ovanstående kod. Kortfattat så behöver jag bara säga: Internet Explorer <=7, men jag ska förklara lite mer.
Det är så att Internet Explorer inte klarar av att hantera opacity så värst bra, inte heller klarar den av min-height och min-width. Microsoft skyller på resursbrist, men man vet aldrig. Hur som helst, jag har inte testat koden i IE8, så jag är inte säker på om den fungerar bättre där eller inte, så ni får gärna skriva i kommentaren ifall CSS koden fungerar eller inte. Koden fungerar i Firefox.
Som du märker så har jag ett högre z-index värde på "box" än på "background", och det är ju självklart, eller hur? Vi vill ju att boxen ska ligga ovanför bakgrunden.
jQuery
Nu när vi är klara med XHTML och CSS koden så är det dags att sätta igång med magin. I din JavaScript fil skriver du följande kod:
Koden är mycket enkel. När man klickar på länken "trigger" så visas båda DIV:arna och när man klickar på "close" så göms båda. Egentligen är det klart redan nu, men jag ska utveckla detta lite mer nedan.
Utveckla mera
Det här är bara en grund, d.v.s. att du kan utveckla det hur mycket du vill. Istället för att ladda ner ett helt plugin som tar upp plats så kan man bygga ett eget plugin som vi gjorde ovan, om man bara behöver något enkelt d.v.s. Det tar inte mycket plats och man har mer kontroll över koden.
Det man kan göra är att sätta ovanstående jQuery kod i en funktion så man kan anropa den om och om igen. Du kan antingen skapa en jQuery funktion eller en vanlig JS funktion som anropas. Varför? Säg t.ex. att du vill ha olika innehåll i "box" beroende på vad du klickar på, då kan du skicka med den informationen in i funktionen och publicera innehållet i "box".
Ett exempel är ett litet fotogalleri där jag sparar sökvägen för bilden i länkens titel. När man klickar på en av länkarna så kommer jQuery att hämta sökvägen och lägga in en bild i boxen:
Mycket bra! Kommer till användning när jag nu går över till jQuery istället för att koda denna lightboxgrejen och resterande javscript grejer jag behövt själv.