SEO-Scout History

Alle hier gezeigten Posts sind historischer Natur (beachte das Datum des jeweiligen Blog-Beitrages). seo-scout.org musste aus Zeitgründen aufgegeben werden und ist im Sande verlaufen.

Ich schreibe auf meiner beruflich-motivierten Seite phoenixseo.de weiterhin Beiträge, die aktueller als diese hier sind. Follow me ;-)

zu PHOENIXSEO.DE

Dropcaps mit jQuery

Submitted by Frank Pfabigan on So., 24.05.2009 - 22:21

Was Dropcaps sind, zeigt das nachfolgende Bild. Zu deutsch ist dies ein "Initial". Es gibt verschiedene Darstellungsmöglichkeiten für Initialien. Ganz allgemein ist es ein "schmückender Anfangsbuchstabe", der als erster Buchstabe von Kapiteln oder Abschnitten verwendet wird.

Wikipedia hat Abbildungen von historischen, wunscherschön und aberwitzig arbeitsintensiv aufbereiteten Initialen aus verschiedenen alten Dokumenten.

Das gezeigte Beispiel ist ein Screenshot aus einem Kundenprojekt.

Realisiert habe ich das mit jQuery und Hilfe aus dem Internet, mit Google gefunden. Es gibt mehrere Ansätze, Initiale zu realisieren. Im Grunde geht es darum, den Text zu filtern, den ersten Buchstaben "zur Seite zu schieben" und durch ein Bild zu ersetzen, daß das gewünschte Initial (entsprechend dem 1. Buchstaben) zeigt.

Was so einfach klingt, hat mich tatsächlich über 10 h Entwicklungszeit gekostet, bis es stabil, optisch zufriedenstellend und gemäß den Kundenvorgaben funktionierte.

Realisiert wurde es mit der aktuellen jQuery Version 1.3.2. Auf jQuery wird einfach per script-Anweisung im head-Bereich der Datei referenziert:

...

...

Da die Kundenwebsite vorsieht, daß diese Dropcaps in verschiedenen "Bereichen" der Seite auftauchen können, habe ich mir folgenden Funktionsaufruf zurechtgelegt:




$(document).ready(function(){
  dropcaps( "der/pfad/zu/den/bildern/img/", "div-tag (bereich)" );
});

Das $(document).ready( ... wird von jQuery bereitgestellt und stellt sicher, daß der enthaltene Code erst nach dem vollständigen Laden des Dokumentes ausgeführt wird. Hier drin befindet sich der Aufruf der Funktion dropcaps(), dessen Code so aussieht:

function dropcaps( picpath, bereich )
{

	$("#" + bereich + " p").each( function( index ) {
		var paragraph = this;
		var node = paragraph;
		
		while( node.childNodes.length ) {
			node = node.firstChild;
		}
		
		var text = node.nodeValue;
		
		/* html-source erhalten, da hier links etc. drin liegen koennen */
		var source = $( this ).html( );
		var source = source.slice( 1 );	/* das 1. zeichen wegschmeissen */
		
		var first_letter = text.substr( 0, 1 );
		
		var match = /[a-zA-Z]/.test(first_letter);
		
		if( match ) {
			node.nodeValue = text.slice(1);
			
			$( this ).html( ""
				+ first_letter
				+ ""
				+ source
			);
			
		}
	});
}

/* based on these sources:
 * http://www.learningjquery.com/2006/12/multiple-fancy-drop-caps
 * http://northtemple.com/2008/12/02/hot-and-graceful-jquery-dropcaps
 */

Die Quellangaben im Source zeigen an, woher der Quellcode ursprünglich stammt. Prinzipiell habe ich die verschiedenen Ansätze dieser beiden Autoren zu einer neuen Lösung verschmolzen. Da ich mir immer noch kein jQuery Buch gekauft habe (was ich schon sehr lange vorhabe), muß ich mir alles mühsam irgendwo aus dem Internet puhlen.

Es war ein ziemliches Gefummel, den ursprünglichen Text mitsamt enthalten HTML-Tags zu erhalten, denn die Methoden der beiden Autoren hatten das nicht berücksichtigt; somit waren z.B. im Text enthaltene Links plötzlich futsch. Alles in allem also viel Zeit für die Suche nach Lösungen für bestimmte Teilprobleme.

Ich muß mir unbedingt das Buch kaufen ;-)

Man muß natürlich alle Zeichen, die als Initial in Frage kommen könnten, als Bilder aufbereiten. Ist zwar nicht schwierig, aber nimmt auch Zeit in Anspruch. Auch hier steckt der Teufel im Detail: die Buchstaben so einer Schnörkelschrift in einer fixen Punktzahl sind nicht alle gleich groß. Man muß daher auch die Bildgröße einiger-vieler anpassen.

Zusätzlich gibt es durch die zugehörige CSS-Datei eine Möglichkeit der Feinjustage der Initialien:

/* dropcaps */
.dropcap{
    text-indent: 0;
}
.dropcap-a, 
.dropcap-b, 
.dropcap-c, 
.dropcap-d, 
.dropcap-e, 
.dropcap-f, 
.dropcap-g, 
.dropcap-h, 
.dropcap-i, 
.dropcap-j, 
.dropcap-k, 
.dropcap-l, 
.dropcap-m, 
.dropcap-n, 
.dropcap-o, 
.dropcap-p, 
.dropcap-q, 
.dropcap-r, 
.dropcap-s, 
.dropcap-t, 
.dropcap-u, 
.dropcap-v, 
.dropcap-w, 
.dropcap-x, 
.dropcap-y, 
.dropcap-z {
    width: 40px;
    height: 33px;
    display: block;
    text-indent: -5000px;
    float: left;
    margin-top: 3px;
    margin-right: 2px;
    background: transparent top center no-repeat;
}

.dropcap-h { width: 50px; }
.dropcap-j { height: 40px; }
.dropcap-k { width: 50px; }
.dropcap-m { width: 55px; }
.dropcap-n { width: 45px; }
.dropcap-p { width: 45px; }
.dropcap-y { width: 40px; height: 40px; }

Wer diesen Code für eigene Projekte nutzen möchte, kann das gerne tun. Ich bitte nur darum, die Quellangaben zu den Vorgängern und zu mir irgendwo im Source mitzuführen.

Category