- #1
A
Aziz
Bekanntes Mitglied
Themenersteller
- Dabei seit
- 25.04.2006
- Beiträge
- 127
- Reaktionspunkte
- 0
Hallo,
ich habe Schwierigkeiten mit der Umsetzung einer bekannten Idee, einen Div-Layer als Popup-Box in den Vordergrund zu stellen und alles andere per Opacity-Eigenschaft in den Hintergrund schieben (transparent).
Zunächst einmal der vereinfacht dargestellte PHP/HTML-Code, um Daten aus der Datenbank zu holen und im DIV-Layer auszugeben.
Dazu der CSS-Script
Und der jquery-code
Wenn ich auf einen der vielen DIV-Layer media klicke, habe ich direkt 2 Probleme auf einmal
1) der popup_box-DIV wird auch vonn dem Opacity= 0,1 betroffen, weil es sich innerhalb des DIV container befindet. Da hilft auch leider nicht, wenn ich im CSS-code den Opacity von popup_box-DIV explizit auf 1 setze. Wenn ich diesen DIV außerhalb des container-DIV schreibe, dann funktioniert das mit der Schleife nicht. Denn der Inhalt dieses popups soll sich ja je nach angeklicktem media-DIV abhängen. Also muss es in der Schleife sein.
Wie kann ich dafür sorgen, dass der Opacity des PopUps trotzdem bei 1 bleibt?
2) Die popups stehen alle aufeinander. Ich weiß, dass ich hier mit ID arbeiten müsste, statt mit class. Aber ich weiß ja nicht, wie viele Daten in der Datenbank vorhanden sind. Dann müsste ich im CSS-Code ja blind #popup_box1 #popup_box2 #popup_box3 usw. vordefinieren, wenn ich jedem popup_box-Div den namen id=popup-box$id vergeben würde.
Wie kann ich also dafür sorgen, dass jeweils nur ein popup-Div erscheint, in dem der detailliere Inhalt von dem jeweiligen angeklickten Namen (media-Container) drin steht.
.
ich habe Schwierigkeiten mit der Umsetzung einer bekannten Idee, einen Div-Layer als Popup-Box in den Vordergrund zu stellen und alles andere per Opacity-Eigenschaft in den Hintergrund schieben (transparent).
Zunächst einmal der vereinfacht dargestellte PHP/HTML-Code, um Daten aus der Datenbank zu holen und im DIV-Layer auszugeben.
Code:
...
<div class=container>
..
<?php>
echo <table>;
for ($i=0; $i<$num; $i++)
{
$nn = mysql_result($res, $i, name);
$vn = mysql_result($res, $i, vorname);
echo <div class='media'>;
echo $nn, $vn </div>;
echo <div class='popup_box'><h1>$i</h1><a class='popupBoxClose'>Close</a></div>;
}
echo </table>; ?>
...
</div>
Dazu der CSS-Script
Code:
.
popup_box {
display:none;
position:fixed;
height:300px;
width:600px;
background:#FFFFFF;
left: 300px;
top: 150px;
z-index:1000;
border:2px solid #ff0000;
padding:15px;
}
.container {
background: #d2d2d2;
width:100%;
height:100%;
}
.popupBoxClose {
right:5px;
top:50px;
position:absolute;
}
Und der jquery-code
Code:
$(document).ready( function() {
$('.media').click( function() {
loadPopupBox();
});
$('.popupBoxClose').click( function() {
unloadPopupBox();
});
function unloadPopupBox() {
$(.container).css({opacity: 1});
$('.popup_box').fadeOut(slow);
}
function loadPopupBox() {
$(.container).css({opacity: 0.1});
$('.popup_box').css({opacity: 1});
$('.popup_box').fadeIn(slow);
}
});
Wenn ich auf einen der vielen DIV-Layer media klicke, habe ich direkt 2 Probleme auf einmal
1) der popup_box-DIV wird auch vonn dem Opacity= 0,1 betroffen, weil es sich innerhalb des DIV container befindet. Da hilft auch leider nicht, wenn ich im CSS-code den Opacity von popup_box-DIV explizit auf 1 setze. Wenn ich diesen DIV außerhalb des container-DIV schreibe, dann funktioniert das mit der Schleife nicht. Denn der Inhalt dieses popups soll sich ja je nach angeklicktem media-DIV abhängen. Also muss es in der Schleife sein.
Wie kann ich dafür sorgen, dass der Opacity des PopUps trotzdem bei 1 bleibt?
2) Die popups stehen alle aufeinander. Ich weiß, dass ich hier mit ID arbeiten müsste, statt mit class. Aber ich weiß ja nicht, wie viele Daten in der Datenbank vorhanden sind. Dann müsste ich im CSS-Code ja blind #popup_box1 #popup_box2 #popup_box3 usw. vordefinieren, wenn ich jedem popup_box-Div den namen id=popup-box$id vergeben würde.
Wie kann ich also dafür sorgen, dass jeweils nur ein popup-Div erscheint, in dem der detailliere Inhalt von dem jeweiligen angeklickten Namen (media-Container) drin steht.
.