• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

CSS-Problem(-e?) bei ausklappbarer Navigation

Xeno

Mitglied
Hallo zusammen

Ich bin daran auf meiner Homepage ( Michael Ritter ) die bestehende horizontale Navigation oben zu einer ausklappbaren mit Untermenüpunkten zu erweitern. Das Ganze soll nur mit HTML und CSS geschehen. Den aktuellen Stand ist unter Michael Ritter zu sehen.

Optisch (also gewissermassen ohne Berücksichtigung des Codes) stört im Moment in erster Linie, dass die Untermenüpunkte nach rechts nicht alle gleichviel Platz einnehmen (das Problem ist ersichtlich, wenn Ihr auf "Vereine" klickt, denn dort habe ich vier solche Punkte reingemacht). Offenbar richtet sich die Grösse der fraglichen <li>-Elemente aus für mich nicht erklärebaren Gründen nach der Grösse des Inhalts (=Länge des Textes), was natürlich komisch aussieht bei verschiedenen Textlängen.

Mein Versuch diesen <li> eine fixe Breite zuzuweisen (in den beiden letzten Zeilen des CSS-Codes) ist wirkungslos.

Der CSS-Code der Testseite:

Code:
* { margin:0; padding:0; }
p, #navigationsleiste { margin:0 0 20px 20px; }
h1, h2, h3 { margin:0 0 10px 20px; }
h1 { font-size:180%; }
h2 { font-size: 160%; }
h3 { font-size: 140%; }
body { background-color:#B4DC00; font-family:Verdana, sans-serif; }
a { text-decoration:none; }
a:link { color:#2F54FF; }
a:visited { color:#FF4B4B; }
a:hover { color:#FEFF49; }
span { color:#2F54FF; }
.linkliste li { margin: 0 0 0 20px; }
#navigationsleiste { overflow:auto; width:100%; height:30px;  background-color:#FFFFFF; margin-top:5px; }
#navigationsleiste ul, #navigationsleiste li { list-style-type:none; }
#navigationsleiste ul, #navigationsleiste ul ul { float:left; width:6em;  }
#navigationsleiste ul, #navigationsleiste li:hover ul ul { position:absolute; left:-9999px; top:0; }
#navigationsleiste li:hover #unterleiste1 { left:7.25em; width:6em; }
#navigationsleiste li:hover #unterleiste2 { left:13.25em; width:6em; }
#navigationsleiste ul { top:auto; }
#navigationsleiste ul li { position:relative; font-size:80%; margin:5px 0 5px 0; }
#navigationsleiste ul li:hover ul { position:absolute; left:100%; top:0;  }
#navigationsleiste li { float:left; width:6em; padding:5px 0 5px 0; }
#navigationsleiste a, span { padding:10px; }
#navigationsleiste a:link { background-color:#FFFFFF; }
#navigationsleiste a:hover { color:#FF40CF; }
#navigationsleiste #aktiv span { background-color:#D2A5FF }
#unterleiste1 li, #unterleiste2 li { width:7em; }

Hat jemand eine Idee, wie ich dieses Problem beheben könnte? Da ich Anfänger bin, ist der gepostete CSS-Code per se etwas verdächtig. Ich habe mich bemüht alles zu verstehen was ich da zusammengeschrieben habe, aber gewisse Unklarheiten bestehen für mich bei den anspruchsvolleren Sachen wie { position } und solchem. Ich erwähne zu meiner Verteidigung, dass der CSS-Code immerhin durch den W3C-CSS-Validator gekommen ist, d. h. das Problem sollte (eigentlich) nicht in der Syntax liegen.

Herzlichen Dank für jeglichen Support!

Lg Xeno
 
Werbung:
So könnte deine navi aussehen
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>
Michael Ritter
</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="Persönliche Homepage des GLP-Politikers und Stadtrats Michael Ritter aus Burgdorf im Kanton Bern">
<meta name="keywords" content="Michael Ritter, GLP, Politik, Burgdorf, Person" />
<meta name=”language” content=”de” />
<meta name=”author” content=”Michael_Ritter” />
<meta name=”copyright” content=”Michael_Ritter” />
<meta name=”page-topic” content=”Person” />
<link rel="stylesheet" type="text/css" href="formatierungtest.css">
<style type="text/css">

* {
 margin:0;
 padding:0;
}
#navi {
 list-style:none; /* Schmuckpunkte entfernen */
 background:#eee;
 float:left; /* Damit wight:100% sich am übergeordneten Containter orientiert */
 width:100%;
}

#navi li {
 float:left; /* Alle LI nebeneinander */
 position:relative; /* Damit sich  ul(zweite Ebene) an li(erste Ebene) orientiert */
}

#navi a , span {
 text-decoration:none;
 color:#000;
 padding:10px; /* Für den nötigen Abstand sorgen */
 display:block; /* zum Blockelement befördern  damit a so breit wie li*/
}
#navi li ul {
 position:absolute;
 left:-999999px; /* Untermenu verstecken */
 top:auto; /* Damit top sich an der Schriftgröße anpasst */
 background:#eee;
}

#navi ul li {
 display:block; /* Unterpunkte untereinander anordnen */
 width:100%;    /* So breit wie UL */
}
#navi li:hover ul {
 left:0;
}

#navi a:hover {
 color:#fff;
 background:#09c;
}

#navi span {
 background:#dad;
}

#inhalt {
 /*deine Formatierungen*/
}
</style>
</head>
<body>
<ul id="navi">
  <li><span>Hauptseite</span></li>
  <li><a href="http://www.michaelritter.ch/politik.htm">Politik &raquo;</a>
   <ul>
    <li><a href="http://www.michaelritter.ch/politik2.htm">Biographie</a></li>
   </ul>
  </li>
  <li><a href="http://www.michaelritter.ch/vereine.htm">Vereine &raquo;</a>
   <ul>
    <li><a href="http://www.michaelritter.ch/radioemme.htm">Radio&nbsp;Emme</a></li>
    <li><a href="http://www.michaelritter.ch/dampflokfest.htm">Dampflokfest</a></li>
    <li><a href="http://www.michaelritter.ch/kadettentage.htm">Kadettentage</a></li>
    <li><a href="http://www.michaelritter.ch/solatte.htm">Solätte</a></li>
   </ul>
  </li>
  <li><a href="http://www.michaelritter.ch/links.htm">Links</a></li>
  <li><a href="http://www.michaelritter.ch/kontakt.htm">Kontakt</a></li>
  <li><a href="http://www.michaelritter.ch/changelog.htm">Changelog</a></li>
  <li><a href="http://www.michaelritter.ch/impressum.htm">Impressum</a></li>
</ul>

<div id="inhalt">
<h1>Dein Inhalt</h1>
</div>
</body>
</html>

Übrigens fehlt bei dir noch ein </li> im zweitem Untermenü.
 
Zuletzt bearbeitet:
Werbung:
Lieber djheke

Herzlichen Dank für Deine überaus umfassende Antwort. Ich habe Deinen Code soeben kurz offline getestet. Das von mir geschilderte Problem ist tatsächlich gelöst, oder, wohl fairer formuliert, in Deinem Code gar nicht vorhanden.

Ich schlage nun Folgendes vor: Ich analysiere Deinen Code und implementiere dann was gefällt in meinen. Ich versuche dabei einerseits meine Layoutwünsche beizubehalten, andererseits natürlich die Problemlösung ebenfalls.

Ich fände es nicht korrekt von mir, wenn ich jetzt einfach Deinen Code verwende statt meinem.

Ich melde mich wieder, sobald mir entweder die Implementierung gelungen ist, oder ich auf neue Probleme stosse.

Bis dann kann der Fred meiner Meinung nach offen bleiben.

Ich halte fest, dass Dein Beitrag eindeutig über das zu Erwartende punkto Umfang der Hilfestellung hinausgeht und auch deshalb ein Durcharbeiten meinerseits nahelegt.

Lg Xeno
 
Werbung:
Lieber djheke

Ich habe Deinen Code wie folgt implementiert:

Code:
* { margin:0; padding:0; }
p, #navigationsleiste { margin:0 0 20px 20px; }
h1, h2, h3 { margin:0 0 10px 20px; }
h1 { font-size:180%; }
h2 { font-size: 160%; }
h3 { font-size: 140%; }
body { background-color:#B4DC00; font-family:Verdana, sans-serif; }
a, span { text-decoration:none; }
a:link { color:#2F54FF; }
a:visited { color:#FF4B4B; }
a:hover { color:#FEFF49; }
span { color:#2F54FF; }
.linkliste li { margin: 0 0 0 20px; }
#navigationsleiste { list-style-type:none; float:left; width:100%;  background-color:#FFFFFF; margin-top:5px; }
#navigationsleiste li { float:left; position:relative; }
#navigationsleiste a, span { padding:10px; display:block; }
#navigationsleiste a:link { background-color:#FFFFFF; }
#navigationsleiste li ul { position:absolute; left:-999999px; top:auto; }
#navigationsleiste ul li { display:block; width:100%; font-size:90%; }
#navigationsleiste li:hover ul { left:0; }
#navigationsleiste a:hover { color:#FF40CF; }
#navigationsleiste #aktiv span { background-color:#D2A5FF }

Die Testseite findet sich weiterhin unter Michael Ritter .

Ich freue mich natürlich sehr, wenn Du (oder natürlich auch alle anderen hier) diese Implementierung nochmals befeedbackst!

Es wird noch etwas dauern, bis ich die neue Navigation scharf schalte, da noch nicht alle Unterseiten erstellt sind (daher kann es auch Deadlinks haben in den Untermenüs der Navi, das ist kein Fehler der Implementierung).

Nochmals herzlichen Dank!

Lg Xeno
 
#navigationsleiste a:link { background-color:#FFFFFF; }
#navigationsleiste #aktiv span { background-color:#D2A5FF }

<li id="aktiv"><span>Hauptseite</span></li>

Alles was rot makiert ist, kann weg.
 
#navigationsleiste a:link { background-color:#FFFFFF; }
#navigationsleiste #aktiv span { background-color:#D2A5FF }

<li id="aktiv"><span>Hauptseite</span></li>

Alles was rot makiert ist, kann weg.

Lieber djheke

Ich bin mit allen Streichvorschlägen einverstanden ausser mit dem ersten. Die erste Streichung führt zu folgendem optisch unerwünschten Ergebnis: Dann ist der Hintergrund der ausgeklappten Navigationselemente so wie der Hintergrund der Seite (hellgrün), was recht komisch aussieht (der anklickbare Inhalt der Elemente erscheint dann nämlich ohne Kästchen, nur als Schrift).

Die theoretische Erklärung für dieses Phänomen ist meiner nicht allzu Mass gebenden Interpretation nach folgende: Es gibt im CSS nach Deiner vorgeschlagenen Streichung keine Anweisung mehr für die Hintergrundfarbe von "aufgerufenen" Links ( a:link ). Dadurch wird dann einfach die Hintergrundfarbe des übergeordneten Elements ( body ) genommen. Das ist aber bei den ausklappbaren Links in der Navi wie gesagt optisch komisch (natürlich ist "komisch" meine subjektive Interpretation, sagen wir einfach: von mir unrerwünscht).

Völlig richtig gesehen ist aber natürlich die Entbehrlichkeit der id "aktiv" für den Punkt im Hauptmenü, der sich auf die aktuelle Seite bezieht.

Ich habe daher vorerst nur die Streichungsvorschläge 2 und 3 umgesetzt. Du findest das Resultat weiterhin unter Michael Ritter . Falls nötig, kann ich Dir den Effekt nach Umsetzung des Streichungsvorschlags 1 gerne auch noch aufschalten.

Ich danke Dir für Dein erneutes Feedback, dank dem ich abermals tiefere Einblicke in CSS erhalten habe. Geniess bitte meinen obigen Erklärungsversuch zur CSS-Theorie mit der nötigen Vorsicht, er beschreibt einfach meine Interpretation des Effekts.

Lg Xeno
 
Werbung:
Sorry, ich bin davon ausgegangen, dass du in li ul die Hintergrundfarbe notiert hast. Ist ja auch egal. Na dann noch viel Spaß beim Probieren.
 
Zurück
Oben