Nein, es geht nicht um Werbepopups. Ich wollte einer Seite eine Erklärung hinzufügen, fand dafür keinen passenden Ort, und versteckte sie daher hinter einem Fragezeichen. Bei einem Klick auf dieses oder beim Hovern über es erscheint die Box mit der Erklärung, sanft eingeblendet. Umgesetzt mit reinem CSS, ohne Javascript.
Viel Code aus einmal. Ich will Schritt für Schritt die einzelnen Elemente erklären:
<div id="explanation">
Das umarmende div enthält alle weiteren Inhalte, um auf ein :hover-Event reagieren zu können und dann die ganze Box einzublenden. Sie wird anfang im CSS auf display:inline gesetzt, damit es die anderen Elemente nicht stört, dann mit position: fixed fixiert und schließlich mit left: -100% aus dem Sichtfeld geschoben.
Der Link ist das einzige Element, das immer zu sehen sein wird. Er wird durch das position:fixed aus der Box herausgelöst, dadurch nicht mit der Elternbox nach links verschoben. Gedacht ist: bei einem Klick (per :target) oder beim Darüberfahren (per :hover) wird das Elternelement sichtbar und dadurch die ganze Erklärung.
<div id="explanation-container">
Der Container mit der eigentlichen Erklärung. Im CSS davon kann man gut sehen, wie die Animationen in CSS auf diese Box gesetzt werden. Durch die transition-Eigenschaft wird gesteuert, wie ein Änderung von Werten wie opacity animiert werden. Opacity ist nebenbei auf 0, damit ist die Box erstmal unsichtbar. Man beachte auch die Eigenschaft display: inline-block.
Das ist der Kern des ganzen Codes! Wird über die Box gefahren, deren einziges sichtbares Element das ? ist, oder wird #explanation-container Ziel eines Ankers, wird die Box nach rechts verschoben und sichtbar gemacht. Durch die transition-Eigenschaft der Box (siehe oben) wird diese Statusänderung animiert: Die Box wird hereingeschoben und eingeblendet, anstatt direkt zu erscheinen.
<a href="" id="explanation-close">X</a>
Nach einem Klick auf das ? wird die Box dauerhaft eingeblendet, da #explanation-container mithilfe von :target eingeblendet wird. Es wurde also ganz normal die Seite geladen, nur dass #explanation-container hinten stand, ein Anker. Um das wieder auszublenden, muss die Seite wieder ohne den Anker geladen werden, und genau das macht dieses X.
Man kann das ganze auf der Demoseite oder im Praxiseinsatz (das Fragezeichen ganz rechts) nochmal genau anschauen.