CSS z-index: Popup-window ähnlich wie im Forum

CitroenDsVier

Lt. Commander
Registriert
Dez. 2013
Beiträge
1.896
Hallo zusammen,

ich versuche (ähnlich wie es hier gelöst ist), Bilder auf einer Website durch draufklicken zu vergrößern. Das soll Javascript beim Klick auf das jeweilige Bild erledigen.

Der Aufbau der Website sieht folgendermaßen aus:
HTML:
<html>
	<head>
	</head>
	<body>
		<div id="site"> <!-- Site: width: 80% -->
			<header></header>
			<div id="sidebar"></div>
			
			<div id="content"></div>
		</div>
		<div id="content-overlay"></div>
	</body>
</html>

css:

Code:
	#content-overlay {
		opacity: 0;
		width: 100%;
		height: 100%;
		position: absolute;
		top: 0px;
		left: 0px;
		background-color: #000;
		z-index: 1;
	}
	#site {
		width: 80%;
		min-width: 1360px;
		max-width: 2000px;
		margin: 0 auto;
		z-index: 2;
	}

Javascript vertauscht den z-index der beiden jetzt und setzt die opacity vom content-overlay auf 0.75. :

Code:
var main = function() {
				var windowShown = false;
				$('.image').click(function() {
					if(windowShown===false) {	
						$('content-overlay').animate({
							opacity: "0.75"
						}, 200);
						windowShown = true;
					} else if(windowShown===true) {
						$('content-overlay').animate({
							opacity: "0"
						}, 200);
						windowShown = true;
					}
				}
				
			}
			$(document).ready(main);

So weit kommt es aber gar nicht, denn z-Index scheint so nicht zu funktionieren. Stattdessen ist der content-overlay dauerhaft "oben". Wie kommt das?
 
Schieb mal den div:

HTML:
<div id="content-overlay"></div>

über

HTML:
<div id="site">

Damit sollte es eigentlich klappen. Alternativ schau dich nach einem fertigen script um. Gibt ja millionen ;)
 
hab ich gemacht, ändert nichts. Gibt es keine andere Lösung als fertige Scripts? Ich wäre auch damit zufrieden, wenn nur die sidebar und der content-div überdeckt werden würden. Wäre eventuell sogar schöner.
 
Zuletzt bearbeitet: (Ergänzung)
Danke, werde ich sofort mal ausprobieren. Bin zwischenzeitlich bei lightboxen gelandet, ich mag das aber nicht, wenn man ein einzeiliges js-Dokument von sonstwem einbindet und den Code nichtmal lesen kann...

Wie gesagt, probiere das sofort aus, muss erst meine bisherigen Änderungen wieder rückgängig machen.
 
Was hindert dich den Code zu lesen?

Ich setze auch Lightbox ein und es macht genau das was es soll.
 
Cool Master schrieb:
Was hindert dich den Code zu lesen?

Dass ein ~300KB js-File auf ca. 25 Zeilen zusammengekratzt ist. Schwer leserlich.

@Darrel: Danke, dein Tipp hats gebracht. #site auf position: relative gesetzt und jetzt passt das. Nur js macht aktuell noch nichts.. wieso?
Ergänzung ()

Cool Master schrieb:
Ich setze auch Lightbox ein und es macht genau das was es soll.

Wie setzt du es denn ein? Ich habe es nichtmal eingebunden bekommen (Wieso war im Beispiel ein <a> um das Bild herum?)...
 
Mal abgesehen davon, dass die Logik im Javascriptteil nicht ganz korrekt ist, hier schon einmal ein Fehler im Code:

Du hast in deinem Code folgendes geschrieben:
Code:
$('content-overlay')

Um eine id anzusprechen, musst du das # Symbol nutzen:
Code:
$('#content-overlay')
#

Außerdem noch ein paar Anregungen zu den Logikfehlern im Javascriptteil:


  • Angenommen du möchtest folgendes Verhalten: Wenn man auf ein Bild klickt, willst du das Overlay zeigen. Dann reicht es nicht, wenn du die opacity des Overlays von 0 auf 0.75 erhöhst, du müsstest ebenfalls den z-index des Overlays höher setzen als den der Hauptseite
  • Nachdem jemand auf das Bild geklickt hat und das Overlay aktiviert wurde, kann man nicht mehr auf das unter dem Overlay liegende Bild klicken, um es zu schließen. Du brauchst einen Eventhandler für den Klick auf das Overlay, um dort die Opacity wieder auf 0 zu setzen und den z-index wieder zu verringern.
  • Ein anderer Ansatz wäre übrigens dein Overlay erst dann mit Javascript zu generieren, wenn man auf ein Bild klickt:
    Code:
    var $overlay = $("<div id=\"overlay\"></div>");

Thema Lightbox:

Hier ist doch der code ziemlich leserlich zu sehen:

https://github.com/lokesh/lightbox2/blob/master/dist/js/lightbox.js


Und zu deiner Frage, warum man anchor-tags nutzt:

Meistens benutzt man anchor-tags (a), um zu dem Bild in Originalgröße zu verlinken. In dem image-tag(img) ist dann nur ein Thumbnail.
 
CitroenDsVier schrieb:
Dass ein ~300KB js-File auf ca. 25 Zeilen zusammengekratzt ist. Schwer leserlich.

Such mal nach JS Beautifier oder nutze die Entwickler Version und nicht die production version.

CitroenDsVier schrieb:
Wie setzt du es denn ein? Ich habe es nichtmal eingebunden bekommen (Wieso war im Beispiel ein <a> um das Bild herum?)...

Das <a> ist ein Link. Eine Lightbox besteht effektiv aus 3 teilen:

1. ein Thumbnail
2. Ein großes Bild
3. Ein Link für das Große Bild

Das <a> ist für die Nr. 3 da :) Und genau so setze ich es auch ein für eine Galerie oder ein Bild im Artikel.
 
Nein, dafür ist ja das JS da der das abfängt...
 
Zurück
Oben