EfA 2004 – Teil 2
Autor: tc
Der Inhalt
Ab hier beginnen die drei inhaltlichen Spalten der Website. Zuerst der Newsbereich:
<div id="content">
<div id="linkespalte">
Für den Blog-Bereich kommt dieses CSS zum Einsatz, das in der »chrome.css« global für alle dreispaltigen Layouts definiert ist:
#linkespalte {
float: left;
width: 37%;
background: #F5E8D0;
}
Die Anweisungen sind einfach: Die Position ergibt sich aus dem Dokumentfluss im HTML, lediglich die Breite von 37% wird definiert und daß dieser Bereich linksfliessend ist. Im Style Sheet folgen noch Definitionen für die Überschriften H2
und H3
(wieder in Form von Reitern, sogenannten Tabs, die über Hintergrundbilder erzeugt werden), den Absätzen und Definitionslisten.
h2.linkespaltetab {
margin: 0;
padding: 0;
font-size: 1.1em;
line-height: normal;
background: #fff url("/img/chrome/blogreiterrechts.gif") no-repeat right top;
text-shadow: #eee 2px 2px 0.1em;
}
Die Deklaration von text-shadow
wird bei EfA an mehreren Stellen benutzt, um zum Beispiel Überschriften einen leichten Schlagschatten zu geben oder den Reitern in der Primärnavigation ein Relief-artiges Aussehen zu verleihen. Hier gibt es vier mögliche Argumente, die in dieser Reihenfolge notiert werden müssen:
- Farbe des Schattens
- horizontaler Versatz (positiv heißt nach rechts)
- vertikaler Versatz (positiv heißt nach unten)
- Weichzeichnung (0 heißt scharf)
Leider wird dieser an sich sehr schöne Effekt bisher nur vom Browser Safari unter MacOS X unterstützt.
Zu beachten ist noch die Verwendung von SPANs
zur Auszeichnung von Sprachwechseln:
<h2><acronym>EfA</abbr>
<span lang="en">Access[B]log</span>:</h2>
<p>Tagesfrische <span lang="en" title="Nachrichten">News</span> rund um das Thema Barrierefreiheit.</p>
Mit span lang="en" title="...">…</span>
wird bei verwendeten fremdsprachlichen Ausdrücken die deutsche Übersetzung mitgeliefert (wenn das Wort denn sinnvoll übersetzbar ist).
<div class="linkespaltecontent">
<dl>
<dt>Barrierefreie Landeshauptstädte?</dt>
<dd>Das Heidelberger Projekt <span lang="en">WEB for ALL</span> hat die Internetseiten von 10 Hauptstädten in den Bundesländern getestet, die über ein Gesetz zur Gleichstellung verfügen. Der Bericht wurde in dem Fachmagazin für Kommunale Entscheidungsträger <a href="http://www.kommune21.de/" rel="external">Kommune21</a> veröffentlicht und ist im <acronym>PDF</abbr>-Format auf den Seiten von <a href="http://www.webforall.info/" lang="en" rel="external">WEB for ALL</a> herunterzuladen.</dd>
<dd class="commentlink"><img class="icon" src="/img/chrome/comment.png" alt=""><a href="/blog/id/949/" title="Kommentare von Lesern zum Beitrag »Barrierefreie Landeshauptstädte«">Kommentare: 1</a></dd>
</dl>
</div>
Auch Links sind besonders markiert: Mit rel=«external«
soll die Beziehung zwischen Link und Linkziel angegeben werden (im HTML 4-Standard so genannte Link Relations). Da in HTML 4 strict sowie XHTML 1.0 strict das target
-Attribut zum Öffnen von Links in neuen Fenstern nicht mehr erlaubt ist, könnte man dieses Verhalten per JavaScript emulieren, indem die Werte der rel
-Attribute ausgewertet werden. (Kevin Yank zeigt in einem Artikel bei sitepoint wie es geht). Im Moment hat das eher semantische Bedeutung, aber mit Hilfe von CSS lässt sich mit einer solchen Auszeichnung schon etwas anfangen. So werden durch:
#content a[rel="external"]:before {
content: url(../img/icon/extern.gif);
}
und
#content a[rel="internal"]:before {
content: url(../img/icon/intern.gif);
}
unterschiedliche Icons zur Kennzeichnung interner und externer Links eingefügt. Wie üblich funktioniert dies jedoch nicht im Internet Explorer, der mit derart fortgeschrittenen Selektoren auch in der aktuellen 6-er Version schlichtweg überfordert ist.
Mit CSS 3 wird zumindest der letzte Style überflüssig, denn dann wird man mit:
#content a:not[rel="external"]:before {
content: url(../img/icon/intern.gif);
}
allen Links, die nicht explizit als Extern ausgezeichnet sind (a:not[rel="external"]
), automatisch ein Intern-Icon voranstellen können. Aber das ist wie gesagt noch Zukunftsmusik und wird noch von keinem aktuellen Browser umgesetzt.
Am Ende des Newsbereiches kommt noch ein Kontaktlink und der Verweis auf das News-Archiv. Beachten Sie auch hier wieder den Einsatz von title
zur ausführlichen Beschreibung der Linkziele.
<p id="archivlink"><a href="mailto:efa@aktion-mensch.de">Eintrag vorschlagen</a> |
<a href="/blog/index.php"><span lang="en">Blog</span>-Archiv</a></p>
</div>
<hr class="skip">
Mit class="skip"
werden sämtliche Elemente ausgezeichnet, die zwar der inhaltlichen Strukturierung für nicht-grafische Darstellungsarten dienen, in der Gestaltung des Medientyps screen
aber überflüssig sind. Per display: none;
werden diese bereits im Style Sheet »basic.css« ausgeblendet.
Nun beginnt der Bereich der mittleren Spalte.
<div id="rechtespalte">
Die CSS-Anweisungen für #rechtespalte
finden sich in »chrome.css«. Hier werden Position, Bemaßung, Vorder- und Hintergrundfarben geregelt:
#rechtespalte {
margin-top: 1.2em;
padding: 0 .5em 0 3%;
float: left;
width: 58%;
background: #fff;
color: #000;
}
In dieser Spalte werden die aktuellen Artikel im EfA-Magazin angerissen und verlinkt:
<h2 class="skip">Artikel:</h2>
<h3>BIENE-<span lang="en">Award</span>: Hohe Hürden auf dem Weg zum Honigtopf</h3>
<img src="/award2004/img/aufmacher_biene.png" alt="" class="imgright" width="130" height="118">
<h4>Fast 100 Beiträge erfüllen Grundanforderungen der Barrierefreiheit</h4>
<p id="abstract" class="abstract">Fast 100 <span lang="en" >Websites</span> haben die erste Hürde des BIENE-<span lang="en">Award</span> erfolgreich überwunden. Bei den so genannten Ausschlusstests des Wettbewerbs für barrierefreie <span lang="en">Web</span> gestaltung haben sie die Grund- oder Mindestanforderungen erfüllt und sich für die Feintests qualifiziert…</p>
Die Klasse imgright dient dazu, alle Elemente, die sie benutzen rechts auszurichten und, mit einem gewissen Abstand, vom umgebenden Text umfließen zu lassen. Erreicht wird dies durch:
.imgright {
float: right;
margin: .3em .2em .2em .4em;
}
Weiter im HTML:
<div class="separator"> </div>
Mit diesem Code werden die horizontalen gestrichelten Linien erzeugt. Im CSS sieht dies wie folgt aus
.separator {
font-size: 1px;
line-height: 1px;
height: 3px;
border-bottom: 1px solid #BCBCD0;
/* -- Wegen der font-size oben hier die margins und paddings nicht in relativen Werten angeben -- */
margin: 10px 0 10px 0;
padding: 0;
}
In Fällen, wo semantisch zwar kein <hr>
zu rechtfertigen wäre, trotzdem aber eine optische Trennung erwünscht ist, wird diese durch border-bottom
erzeugt. In einigen Fällen gibt es aber auch die Notwendigkeit eines <hr>
, z. B. um größere logische Blöcke von einander zu trennen. In diesem Fall werden sie in grafischen Browsern versteckt:
.separator hr {
display : none;
}
Es folgen weitere Artikel, die sich strukturell nicht vom ersten unterscheiden. Am Ende des Inhaltsbereiches steht ein Bereich mit weiterführenden Links:
<div id="related">
Die CSS-Anweisung dazu steht nur in »print.css« und lautet schlicht display: none
. Damit werden die im Ausdruck sinnlosen Navigations-Links unterdrückt.
<div id="relatedtab">
<h2><span>Aktuelle Artikel im Magazin:</span></h2>
</div>
Wie bereits bei den Weblog-Meldungen in der linken Spalte ist die Überschrift hier in der Optik eines Reiters gehalten, die wir auch später in der rechten Navigationsspalte wiederfinden werden.
#relatedtab h2 {
float: left;
color: #333;
background: url("/img/chrome/reiter_navi_rechts.gif") no-repeat right top;
text-shadow: #999 0.2em 0.2em 0.2em;
width: auto;
margin: .7em 0 0 0 !important;
padding: 0;
font-size: .95em;
}
Wegen width: auto;
erstrecken sich diese Reiter exakt auf die Breite des enthaltenen Textes. Über background
wird wie bei allen Reitern ein leichter Farbverlauf hinter den Text gelegt. Das hierzu verwendete GIF ist an einer Kante kreisförmig beschnitten, um die abgerundete Optik zu erreichen.
Wie auch schon bei den News im Weblog werden die beschriebenen Links als Definitionsliste behandelt. Die identischen Styles werden auch auf den Artikel-Seiten im Magazin benutzt, um den Bereich der weiterführenden Links zu gestalten.
<dl>
<dt><a href="/artikel/dyslexie/">Lernbehinderung und Barrierefreiheit</a></dt>
<dd>Ein bislang zu wenig beachteter Aspekt der Barrierefreiheit im Internet ist der Zugang für Benutzer mit Lese- und Rechtschreibschwäche…</dd>
Das zweitwichtigste: die Navigation
Die dritte und letzte Spalte:
<div id="navigation">
ist im Style Sheet »chrome.css« so beschrieben:
#navigation {
width: 20%;
float: right;
margin: .8em .5% 0 0;
background: #f6f5f8;
}
Damit wird diese Spalte in einer Breite von 20% der Seite rechtsbündig angeordnet. Darin folgt die Navigation zu verschiedenen Themen und Funktionen der Website. Die Überschriften der einzelnen Unterbereiche in der Navigationsspalte sind wieder nach dem bekannten Muster der Reiter gestaltet:
<div id="contentnav" class="navhead">
<h2><span>Navigation:</span></h2>
</div>
<br class="fixfloat">
Die eigentliche Navigation ist auch hier in Form einer Liste angelegt, diesmal jedoch in klassischer Form mit den einzelnen List Items als vertikale Auflistung.
<ul id="contentnavlist" class="navitems">
<li><a href="/inhalt/">Artikel</a></li>
<li><a href="/download/" lang="en">Downloads</a></li>
<li><a href="/events/" lang="en">Events</a></li>
<li><a href="/gaestebuch/">Gästebuch</a></li>
<li><a href="/kontakt/">Kontakt</a></li>
<li><a href="/links/">Links</a></li>
<li><a href="/blog/">Nachrichten</a> <span class="skip">, </span> <a href="/blog/feed/efafeed.rss" class="xmlbutton"><abbr>RSS</abbr></a></li>
<li><a href="/newsletter/" lang="en">Newsletter</a></li>
<li><a href="http://presse.aktion-mensch.de/">Presse</a></li>
</ul>
Die Klasse navitems
wird in dieser Spalte noch mehrfach verwendet werden und regelt unter anderem die Verwendung eines leichten Blauverlaufs im Hintergrund.
.navitems {
background: #F6F5F8 url("/img/chrome/gradient_nav.png") repeat-x;
}
Die einzelnen Listenpunkte bekommen mit:
ul#contentnavlist {
margin: 0;
padding: 3px 0 4px 24px;
list-style: disc url("/img/chrome/navicon.gif") outside;
vertical-align: middle;
}
ein eigenes Symbol statt der üblichen vorangestellt. Um die unterschiedliche Interpretation der Abstände von Listensymbolen in den verschiedenen Browsern zu umgehen, wird zuerst margin
auf Null gesetzt und dann ein padding
definiert, der in etwa der Breite des Icons entspricht.
GIF-freie XML-Buttons
Der Button, der zur RSS-Variante der News führt ist komplett in CSS realisiert. Das schafft die Klasse xmlbutton
. Durch a.xmlbutton:hover
kommt sogar ein Button-Down-Effekt beim Überfahren des Buttons mit der Maus zustande (obwohl man diesen Stil auch a.xmlbutton.active
, also dem heruntergedrückten Button zuordnen könnte).
.xmlbutton {
border: 1px solid;
border-color: #fc9 #630 #330 #f96;
margin: 0;
padding: 0 3px;
font: bold 9px Verdana,sans-serif;
color: #fff;
background: #f60;
text-decoration: none;
}
a.xmlbutton:hover {
color: #000;
background-image: none;
background-color: #ffa060;
border-color: #630 #fc9 #f96 #330;
text-decoration: none;
}
Sonderfall Formulare
Nach der »reinen Lehre« gehört zu einem vollständigen Formular mindestens ein umgebendes fieldset>
mit einer legend>
. Das erste Element kennzeichnet logische Blöcke innerhalb von Formularen – es ist also in Formularen, die nur aus einer einzigen logischen Einheit bestehen strenggenommen überflüssig. Das zweite Element wiederum definiert die Legende, sozusagen die Überschrift des Fieldsets.
Hier schlagen in der Praxis aber die verschiedenen Browserbugs gnadenlos zu. So dehnen verschiedene Version des Intenet Explorers die Breite der legend
immer bis auf das Eltern-Element aus, auch wenn der CSS-Standard etwas anderes festlegt. In Opera wiederum haben wir es auch mit den ausgefeiltesten Hacks nicht geschafft, der Legend das gleiche Aussehen zu verpassen wie den Überschriften <h3>
und <h4>
in der Navigationsspalte.
Auch im Sinne der Effizienz hat dieses Formular bei EfA nun eben keine <legend>
, sondern eine <h3>
, was auch den Vorteil mit sich bringt, dass das Formular nun in der Struktur der Überschriften der Seite eingebettet ist.
<form id="suche" method="get" action="/suche/search.pl">
<fieldset>
<h3>Suchen:</h3>
<input type="text" …><br />
<input type="submit" id="find" value="Finden">
[…]
</fieldset>
</form>
Der fontsizer ist ein Skript zur Änderung der Schriftgröße, das an anderer Stelle ausführlich beschrieben wird. Hier wird nur die Auswahl »Schrift größer | kleiner« erzeugt.
<script type="text/javascript">
if (efa_fontSize) document.write(efa_fontSize.allLinks);
</script>
Dann die Toolbox – das ist das Dropdown-Menü, mit dem Sie den CSS-Stil der Seite aussuchen können (Style Switcher). Es wird über ein eigenes JavaScript eingebunden, welches im Seitenkopf referenziert wurde.
<script type="text/javascript">
showToolbox();
</script>
Und schließlich der Seitenabschluss mit dem Logo des Anbieters, sowie Kontakt- und Impressumslink.
<div id="masthead">
<div class="navhead">
<h4><span>&Einfach für Alle</span></h4>
</div>
<br class="fixfloat">
<div class="navitems">
<p>ist eine Initiative der:</p>
<a href="http://www.aktion-mensch.de/" rel="external">
<img src="/img/logo/am.gif" alt="" height="21" width="75"></a>
Die Adresse…
<address>
[…]
</address>
<p id="impressum">
<a href="/impressum/">Impressum</a> | <a href="/lizenz/" rel="copyright">Rechte</a>
</p>
</div
</div>
Die gesamte Navigation wird, wie der Kopfbereich und die Fußzeile im Druck-Style Sheet wieder ausgeblendet und nicht mit ausgedruckt. Dazu gibt es die Zeile in »print.css«
#navigation, #metanav, #related, #bottomnav, .none, .skip {
display: none;
}
Als Letztes noch die Fußzeile (im Druck-Style Sheet ausgeblendet).
<div id="footer">
<ul id="bottomnav">
<li id="bot-top"><a href="#top">Seitenanfang</a> |</li>
<li id="bot-home"><a href="/" rel="start">Startseite</a> |</li>
<li id="bot-inhalt"><a href="/inhalt/" rel="contents">Inhaltsverzeichnis</a> |</li>
</ul>
<span class="fixfloat"></span>
</div>
In diesem Bereich kommen auch wieder die Link-Relationen zum Einsatz. Der Home-Link wird durch rel="start"
und das Inhaltsverzeichnis durch rel="contens"
gekennzeichnet. Auch die Symbole vor den Links werden per CSS realisiert. Nicht vergessen: Es handelt sich um eine Liste. Mit der zugehörigen CSS-Definition:
#bottomnav li {
float: left;
width: auto;
margin: .2em 2px 0 0;
padding: 0;
display: inline-block;
list-style: inside;
position: relative;
top: 0;
color: #fff;
padding: 0 .2em;
}
werden die Listenelemente nebeneinander statt untereinander angezeigt und das zugehörige Symbol wird innerhalb des jeweiligen Eintrags erzeugt. Wie dieses Symbole aussehen soll, regeln weitere CSS-Angaben:
ul#bottomnav li#bot-top {
list-style-image : url(../img/icon/top.gif);
}
Diese und die drei folgenden Definitionen in »chrome.css« ordnen den <li>, die durch zusätzliche IDs (hier: #bot-top
) gekennzeichnet sind, die passenden Grafiken als Aufzählungspunkte zu. Die Zuweisung display: inline-block
ist eigentlich erst ab CSS 2.1 vorgesehen, sorgt aber hier für die gewünschte Anzeige zumindest unter Mozilla (list-item
ginge auch).
<span class="fixfloat"></span>
</div>
</div>
</div>
</body>
</html>
Und schließlich das Ende der Startseite. In der nächsten Folge geht es um den Aufbau der Folgeseiten…
Diskutieren Sie mit!
Wir würden gerne Ihre Meinung wissen: Teilen Sie uns Ihre Erfahrungen mit und diskutieren Sie diesen Artikel mit anderen Experten.