template
Ein virtuelles Buch bietet speziell im Homepage-Bereich die reizvolle gestalterische Möglichkeit, dem Besucher das Gefühl zu vermitteln, in einem realen Druckwerk zu schmökern. Dabei sind allerdings auch manche Kompromisse einzugehen, vor allem, wenn sich die Simulation eng an die Wirklichkeit anlehnen soll.
Bei der vorliegenden Variante verwenden wir eine HTML-Seite, in der 2 nebeneinanderliegende Frames (IFRAMEs) eingebettet sind. In diesen Frames werden die eigentlichen Dokumentseiten dargestellt.
Im Vergleich zu den üblichen Browser-Seiten gibt es bei einem traditionellen Buch eine Reihe von Unterschieden:
- Bei einem (aufgeschlagenen) Buch sind immer 2 Seiten sichtbar, d.h. die Anzahl einzelner Dokumentseiten muss gerade sein, damit diese jeweils paarweise angezeigt werden können. Alternativ könnte man bei ungerader Anzahl am Ende - also in den rechten Frame - auch eine Leerseite laden.
- Eventuelle Inhaltsverzeichnisse sind nach einem Umblättern nicht mehr sichtbar. Falls dies unerwünscht ist, könnte man das Hauptverzeichnis (oder auch Kapitel-Unterverzeichnisse) ausserhalb des Buches platzieren, damit diese immer im Zugriff bleiben.
Als weitere Alternative lassen sich auch Tabs (Tab-Reiter) integrieren, die als Lesezeichen fungieren. Damit wäre z.B. die Hauptmenü-Ebene ein optischer Bestandteil des Buches.
- Aus Symmetriegründen besitzen beide Frames die gleiche Größe. Ausgehend von einer mittlerweile üblichen Mindest-Bildschirmbreite von 1024 Pixel, verbleiben einem einzelnen Frame - abzüglich design-bedingter Ränder - für die Breite etwa 400 bis 450 Pixel. Aufgrund des DIN-Formates von Buchseiten (Verhältnis von Breite zu Höhe ungefähr 1 zu 1.4) läge die Höhe eines Frames dann bei etwa 550 bis 630 Pixel.
Einzelne Dokumentseiten sollten möglichst ohne Scrollbalken in den Frames erscheinen; deshalb ist darauf zu achten, dass die darzustellenden Inhalte in den vorgegebenen Bereich passen. Nun lässt es sich erfahrungsgemäß gerade bei längeren Texten kaum vermeiden, dass vertikale Scrollbalken eingeblendet werden müssen. Dies stellt hinsichtlich des traditionellen Buches zwar einen Stilbruch dar, aber da es der Benutzer gewohnt ist, beim Lesen im Browser vertikal zu scrollen, sind solche Situationen durchaus zu verschmerzen.
Problematisch allerdings wären überbreite Dokumente, hervorgerufen beispielsweise durch Images mit mehr als 400 Pixel Breite: hier würden dann horizontale Scrollbalken erscheinen. Das Lesen eventueller Fließtextabschnitte, welche die gesamte Breite nutzen, wäre auf solchen Seiten drastisch erschwert. Als mögliche Lösung könnte man Textpassagen hier in einen DIV mit fester Breite (schmaler als die Framebreite) einbetten.
Zur Positionierung der Elemente verwenden wir eine blinde Tabelle, die auch allgemeine Kopf- und Fußbereiche für unsere Dokumentseiten berücksichtigt:
Zellenstruktur |
Mit Grafik |
Optisches Ergebnis |
Ecke |
Rand |
|
Rand |
Ecke |
Rand |
Kopf |
Falz |
Kopf |
Rand |
Frame
|
Frame
|
Fuß |
Fuß |
Ecke |
Rand |
|
Rand |
Ecke |
|
|
|
Das hier benutzte Farbschema beinhaltet warme Brauntöne, um den Effekt vergilbter Seiten hervorzurufen.
Bildschirm Hintergrund | | #B67A46 |
Buchseiten Hintergrund | | #E9D9A8 |
Buchseiten Text | | #48301C |
Tab-Reiter Hintergrund | | #CEA458 |
Tab-Reiter Text | | #4A5245 |
Die Lesezeichen für Index und weitere Hauptmenüpunkte bestehen aus individuellen Bildern, die in der linken Randzelle der Buchtabelle untergebracht sind. Ebenso können Tab-Reiter in den oberen Randzellen untergebracht werden.
buobli.jpg |  | Ecke oben links |
buobre.jpg |  | Ecke oben rechts |
buunli.jpg |  | Ecke unten links |
buunre.jpg |  | Ecke unten rechts |
buob.jpg |  | Rand oben (Hintergrund) |
buun.jpg |  | Rand unten (Hintergrund) |
buli.jpg |  | Rand links (Hintergrund) |
bure.jpg |  | Rand rechts (Hintergrund) |
buobmi.jpg |  | Falz oben |
bumi.jpg |  | Falz (Hintergrund) |
buunmi.jpg |  | Falz unten |
butab.jpg |  | Vorlage für Tab-Reiter |
Betrachtet man die typischen Inhalte einer Homepage, so lassen sich hinsichtlich eines Buches grob 3 strukturelle Typen erkennen:
- Ein- oder zweiseitige Dokumente (z.B. Hauptseite/Index, Linkliste oder Impressum). Hier ist kein Blättern vonnöten - eventuell muss rechts eine Leer- oder Füllseite gezeigt werden.
- Drei- oder mehrseitige Dokumente (z.B. textlastige Beiträge, Blog). Hier ist ein Blättermechanismus erforderlich - in den Fußbereichen können Seitenzahlen angezeigt und auch Schaltflächen zum Vor- und Zurückblättern untergebracht werden.
- Unterverzeichnis/Album (z.B. Bildergalerie). In diesen Fällen wird auf der linken Seite eine Liste mit anklickbaren Elementen (evtl. mit Thumbnails) gezeigt; auf der rechten Seite erscheinen jeweils die Details zum gewählten Element mit Bild(ern) und/oder Text. Damit ist auch hier kein Umblättern nötig.
Um die Pflege der Buchseiten zu erleichtern, empfiehlt sich bei der Namenswahl für die einzelnen Dokumente ein Nummernsystem, so dass anhand des Dateinamens eine schnelle Identifikation möglich ist. Ein weiterer Vorteil besteht natürlich in der einfacheren Generierung solcher Dateinamen seitens Javascript.
Hier wurde folgende Syntax definiert:
p<Kapitelnummer>_<Seitennummer>.html
Oder, falls sich die Seite in einem Unterkapitel befindet:
p<Kapitelnummer>_<Unterkapitelnummer>_<Seitennummer>.html
Ein paar allgemeine Regeln:
- Die Datei
p0.html stellt eine globale Leerseite dar.
- Die Kapitelnummer 0 steht für das Inhaltsverzeichnis.
Somit wären
p0_0.html und
p0_1.html die beiden Index-Seiten.
- Die erste Seite (linker Frame) jedes Kapitels trägt die Seitennummer 0. Damit ist gewährleistet, dass die Seitennummerierung wie in einem realen Buch erfolgt: links gerade, rechts ungerade.
Da der eigentliche Inhalt umfangreicherer Kapitel ab Seite 1 (rechter Frame) beginnt, kann Seite 0 dazu verwendet werden, ein Unterverzeichnis (wie im Falle des Albums), eine Kapiteleinführung oder auch nur ein Titelbild anzuzeigen.
- Unterkapitelnummern beginnen immer mit 1, d.h. falls sich die Bildergalerien in Kapitel 3 befinden, dann hießen die Bildseiten der ersten Serie:
p3_1_1.html,
p3_1_2.html,
p3_1_3.html, usw.
Die zweite Galerie bestünde aus den Dateien
p3_2_1.html,
p3_2_2.html,
p3_2_3.html, usw.
- Jedes Unterkapitel kann seine eigene Index-Seite besitzen, z.B.
p4_1_0.html als Index-Dokument für Kapitel 4, Unterkapitel 1 - und
p4_2_0.html für Unterkapitel 2, usw.
In manchen Situationen jedoch, wie etwa einer handvoll Bildergalerien, ist es oft sinnvoller, die Thumbnails/Vorschaubilder aller Serien zentral auf einer Seite zu zeigen, gerade wenn die Galerien jeweils nur wenige Bilder enthalten. Die Übersichtsseite für obige Galerien in Kapitel 3 hieße dann
p3_0.html.
Die essentiellen Funktionen zum Laden und Anzeigen von Buchseiten befinden sich im Header des Hauptskripts (hier
index.html) dessen HTML-Bereich auch die beiden IFrames (namentlich if0 und if1) enthält. Alle Steuerungsanweisungen, die innerhalb von Dokumentseiten erfolgen, werden zu diesem Hauptskript durchgereicht - auf diese Weise bleibt der Mechanismus zentral pfleg- und erweiterbar.
Das allgemeine Laden eines Dokuments in einen Frame wird von der Funktion SetPag() erledigt; sie erwartet mindestens einen Parameter, nämlich den Index 0 (für den linken Frame) oder 1 (für den rechten Frame). Optional können noch ein zweiter und auch ein dritter Parameter angegeben werden, die dann als Seitennummer - respektive Unterkapitelnummer und Seitennummer - in den Dateinamen mit einfließen.
Ist lediglich der Frameindex angegeben, dann wird hier die Leerseite
p0.html geladen.
function SetPag(i) { var s,a=arguments;
switch (a.length) {
case 1: s='0'; break;
case 2: s=Kap+'_'+a[1]; break;
case 3: s=Kap+'_'+a[1]+'_'+a[2];
} frames['if'+i].location='p'+s+'.html';
}
Wie man sieht, erfolgt keine explizite Angabe einer Kapitelnummer; diese wird vielmehr der globalen Variablen Kap entnommen.
Um das Kapitel zu wechseln, ist die Funktion SetKap() zu benutzen, die als Parameter eine Kapitelnummer verlangt. Nach Aktualisierung der Tab-Reiter-Grafiken, d.h. Wiedereinblenden des alten Tabs und Ausblenden des neuen Tabs, werden standardmäßig die Seiten 0 und 1 des neuen Kapitels geladen. Ebenso wird der Titel des Kapitels, der im globalen Array KapTit[] hinterlegt ist, über der linken Seite eingeblendet.
function SetKap(k) {
if (k!=Kap) {
$('iKap'+Kap).style.visibility='visible';
$('iKap'+(Kap=k)).style.visibility='hidden';
} SetTit(0,KapTit[Kap]); SetPag(0,0); SetPag(1,1); }
}
Die Anzeige eines Titels im Seitenkopf übernimmt die Funktion SetTit(), der man den Frameindex sowie den optionalen Titel-String übergibt. Ist kein Titel angegeben, dann wird ein nobreak-space geschrieben:
function SetTit(i,t) {
$('tdTit'+i).firstChild.data=t?t:'\xA0';
}
Beim Anklicken von Vorschau-Elementen in Bildergalerien o.Ä. soll das entsprechende Dokument in den rechten Frame geladen werden. Hierzu dient die Funktion SetPgR(), welche als Parameter die Seitennummer erwartet. Optional kann vor der Seitennummer noch eine Unterkapitelnummer angegeben werden:
function SetPgR() { var p=parent,a=arguments;
if (a.length==1) p.SetPag(1,a[0]); else p.SetPag(1,a[0],a[1]);
}
Das Hauptverzeichnis
p0_0.html des Buches enthält Verweise zum Öffnen der verschiedenen Kapitel. Auch dies wird direkt zum Hauptskript weitergeleitet:
function SetKap(k) { parent.SetKap(k); }
CSS im Header
BODY {BACKGROUND:#B67A46;COLOR:#48301C;}
Javascript im Header
function $(id) { return document.getElementById(id); }
//---- book
Weiter unten, im BODY, das Buch:
Javascript zur Initialisierung:
<SCRIPT type='text/javascript'>SetKap(0);</SCRIPT>
template |
 |