Dashu: Navi hilfe

hallo ich wollte fragen ob das mit css machbar ist
 ich zeig euch mal was ich möchte

http://bw.drafdbzr12.com/navi.html

hab das so gemacht:

  
  
<html>  
<head>  
<link rel="stylesheet" href="style.css" type="text/css"></head>  
<body background="navi.jpg" bgproperties="fixed"></html>  
  
  
<a class="navi1" href="#" target="_blank">  Nummer I</a>  
<a class="navi2" href="#" target="_blank">  Nummer II</a>  
  
</head>  
</html>  
  

  
  
Body{  
  
  
color:#FFFFFF;  
font-family:Arial;  
font-size: 14px;  
  
}  
  
a.navi1:link{color:#000000; font-size:14px; background-image:url(naviactiv.png); z-index:1; position:absolute; top:100px; width:100px; text-decoration: none;}  
  
a.navi2:link{color:#000000; font-size:14px; background-image:url(naviactiv.png); z-index:2; position:absolute; top:100px; left:80; width:100px; text-decoration: none;}  
  
a:visited {color:#000000; font-size:14px; text-decoration: none;}  
  
a:active{color:#000000; font-size:14px; text-decoration: none;}  
  
a:hover {color:FFFFFF; font-size:14px; background-image:url(navi.png); z-index:3; position:absolute; background-repeat:no-repeat; width:100px; text-decoration: none;}  
  

also ich möchte das so machen wenn man mit der maus rüber geht das nummerI in den vordergrund rückt und nummer II dan in den hintergrund rückt

danke schon mal im vorraus ^^

  1. Erstmal solltest du dein HTML richtig ordnen, die Links gehören nicht in den Head bereich. Ausserdem brauchst du unbedingt eine DOCTYPE angabe.

    1. Ausserdem brauchst du unbedingt eine DOCTYPE angabe.

      Wie kommst du darauf?

      1. Wie kommst du darauf?

        Weil ich schätze dass der TE ein anfänger ist und die erstellung einer Seite im Quirksmodus nicht lehrreich sein wird.
        Lieber gleich den richtigen Weg lernen als den falschen, oder nicht?

        1. Weil ich schätze dass der TE ein anfänger ist und die erstellung einer Seite im Quirksmodus nicht lehrreich sein wird.
          Lieber gleich den richtigen Weg lernen als den falschen, oder nicht?

          Das bestreite ich nicht - allerdings suggeriert deine Aussage, dass die Doctype-Angabe pflicht sei.

    2. Erstmal solltest du dein HTML richtig ordnen, die Links gehören nicht in den Head bereich. Ausserdem brauchst du unbedingt eine DOCTYPE angabe.

      ups sorry hab ich übersehen hab den body nicht gesetzt.

      und ich hab noch nie mit Doctype angaben gearbeitet man braucht das ja nicht wirklich

      kann man das nicht einfacher machen mit z index?

      1. und ich hab noch nie mit Doctype angaben gearbeitet man braucht das ja nicht wirklich

        Wenn man sich das Leben leichter machen möchte und auf hunderte fixes für den IE verzichten will, sollte man sich schon einen geeignete Dokumenttyp-Deklaration anschaffen. Zwingend erforderlich ist er hingegen nicht - aber das wurde bereits gesagt.

        kann man das nicht einfacher machen mit z index?

        Sicher - aber auch dafür wirst du JavaScript benötigen, selbes Problem: kein :hover für nicht-a-Elemente in alten IE-Versionen

        1. »» kann man das nicht einfacher machen mit z index?
          Sicher - aber auch dafür wirst du JavaScript benötigen, selbes Problem: kein :hover für nicht-a-Elemente in alten IE-Versionen

          hm.. mit javascript kenn ich mich garnicht aus gibst es nicht dafür irgendwo ein tutorial wie man genau so eine navi macht

          1. hm.. mit javascript kenn ich mich garnicht aus gibst es nicht dafür irgendwo ein tutorial wie man genau so eine navi macht

            Wie bereits empfohlen solltest du dich mit jQuery anfreunden - dafür brauchst du eigentlich kein JavaScript-Wissen.

            Die Selektoren funktionieren wie in CSS und entsprechende Methoden für deinen Zweck sind reichlich vorhanden.

            Für ein Menü bestehend aus einer unsortierten Liste innerhalb eines Elements mit der id "navigation" reicht z.B. folgender Schnipsel:

              
            function navigation() {  
              // Selektiere alle li-Elemente welche direkte Nachfahren eines ul-Elements innerhalb eines Elements mit der id navigation sind  
              // wende darauf das Event "hover" an  
              $('#navigation ul>li').hover(  
                // Ast für onouseover  
                function() {  
                  // füge die Klasse hover hinzu  
                  $(this).addClass("hover");  
                },  
                // selbriges, nur für onouseout  
                function() {  
                  $(this).removeClass("hover);  
                }  
              );  
            }
            

            Somit wird bei onmouseover die klasse "hover" hinzugefügt und bei onmouseout wieder entfernt

            Anstatt
             li:hover { z-index: 10; }

            kannst du in deinem CSS dann
             li:hover ul,
             li.hover ul { z-index: 10; }

            Notieren und so dem IE auch in Genuss eine "Pseudo-Pseudo-Klasse" .hover brinden.

            1.   
                
              <html>  
              <head>  
              <link rel="stylesheet" href="style.css" type="text/css">  
              </head>  
                
              <body background="navi.jpg" bgproperties="fixed">  
                
                
              <script language="JavaScript" type="text/javascript">  
                
                
                
              function navigation() {  
                // Selektiere alle li-Elemente welche direkte Nachfahren eines ul-Elements innerhalb eines Elements mit der id navigation sind  
                // wende darauf das Event "hover" an  
                $('#navigation ul>li').hover(  
                  // Ast für onouseover  
                  function() {  
                    // füge die Klasse hover hinzu  
                    $(this).addClass("hover");  
                  },  
                  // selbriges, nur für onouseout  
                  function() {  
                    $(this).removeClass("hover);  
                  }  
                );  
              }  
              </script>  
                
                
              <a class="navi1" href="#" target="_blank">  Nummer I</a>  
              <a class="navi2" href="#" target="_blank">  Nummer II</a>  
                
              <ul>  
                <li id="navigation"><a class="navi1" href="#">NummerI</a></li>  
                <li id="navigation"><a class="navi2" href="#">Nummer II </ a> </ li>  
              </ul>  
                
                
                
                
                
              </body>  
              </html>  
                
                
              
              

              css datei:

                
                
              Body{  
                
              background-repeat:no-repeat;  
              color:#FFFFFF;  
              font-family:Arial;  
              font-size: 14px;  
                
              }  
                
              a.navi1:link{color:#000000; font-size:14px; background-image:url(navi.png); z-index:1; position:absolute; top:100px; width:100px; text-decoration: none;}  
              a.navi2:link{color:#000000; font-size:14px; background-image:url(navi.png); z-index:2; position:absolute; top:100px; left:80; width:100px; text-decoration: none;}  
              a:visited {color:#000000; font-size:14px; text-decoration: none;}  
              a:active{color:#000000; font-size:14px; text-decoration: none;}  
                
              li:hover ul,  
              li.hover ul { z-index: 10; background-image:url(naviactiv.png); }  
                
              
              

              was hab ich den jetzt falsch gemacht

              1. was hab ich den jetzt falsch gemacht

                Das jQuery-JavaScript fehlt - ohne jQuery keine jQuery-Methoden.
                Am besten du liest dir das Getting Started kurz durch (zumindest Punkt 1 und 2).

                Dann solltest du deine Funktion überhaupt ausführen - üblicherweise geschicht das Event, welches deine Funktion überhaupt ausführt. Notiere nach deiner Funktion

                $(document).ready(  
                  function() {  
                    // auszuführenden Funktionen wenn das DOM fertig ist  
                    navigation();  
                  }  
                );
                

                Prüfe ob jQuery überhaupt läuft.

                Führe also sowas in die Richtung aus um zu sehen ob du überhaupt am richtigen Element bist.

                $('#navigation').css('border', '5px solid red');

                Bereinige deinen Code, aussehen sollte das html etwa so:

                <div id="navigation">  
                  <ul>  
                    <li>foo</li>  
                    <li>bar  
                      <ul>  
                        <li>2 foo</li>  
                        <li>2 bar</li>  
                        <li>2 baz</li>  
                      </ul>  
                    </li>  
                    <li>baz</li>  
                    <li>qux  
                      <ul>  
                        <li>3 foo</li>  
                        <li>3 bar</li>  
                        <li>3 baz</li>  
                      </ul>  
                    </li>  
                  </ul>  
                </div>
                

                Anm.: das div-Element rundherum ist nicht notwendig, aller die id kann direkt in das äusserste ul-Element eingetragen werden. der jQuery-Selektor muss dann allerdings auf '#navigation li' angepasst werden und gilt sommit für alle li-Element in der navigation, nicht nur jene die Kinder von ul-Elementen sind. In gemischten ul/ol-Navigationlisten kann das ggf nicht gewünscht sein.

                Mein fehler - natürlich willst du den z-index des li-elements manipulieren, nicht eines ul-Elements innerhalb eines li-Elements.

                1. Nachtrag: meine Sprache scheint heute sehr stark degeneriert zu sein - wenn du den Sinn nicht erfassen kannst (von dem, was ich grade geschrieben habe), frag bitte nach :) ich bin nicht so ganz fit.

                  1. ok ^^

                    also da mein english nicht grad gut ist hoffe ich hab alles richtig verstanden ^^

                    also ich brauche eine jquery.js datei. und in der soll dann das drin stehn:

                      
                      
                    jQuery(document).ready(function() {  
                    	  
                    $('#navigation').css('border', '5px solid red');  
                      
                    });  
                      
                    
                    

                    und dann eine html datei in der das drin stehn soll:

                      
                      
                    <html>  
                    <head>  
                    <script type="text/javascript" src="jquery.js"></script>  
                    <link rel="stylesheet" href="style.css" type="text/css">  
                    </head>  
                      
                    <body>  
                      
                    <script type="text/javascript">  
                    function navigation() {  
                      // Selektiere alle li-Elemente welche direkte Nachfahren eines ul-Elements innerhalb eines Elements mit der id navigation sind  
                      // wende darauf das Event "hover" an  
                      $('#navigation ul>li').hover(  
                        // Ast für onouseover  
                        function() {  
                          // füge die Klasse hover hinzu  
                          $(this).addClass("hover");  
                        },  
                        // selbriges, nur für onouseout  
                        function() {  
                          $(this).removeClass("hover);  
                        }  
                      );  
                    }  
                    </script>  
                      
                      
                    <div id="navigation">  
                      <ul>  
                            <li><a class="navi2" href="#">Nummer I  </ a></li>  
                            <li><a class="navi2" href="#">Nummer II </ a></li>  
                      </ul>  
                    </div>  
                      
                    </body>  
                    
                    

                    ist das so richtig ?

                    1. also ich brauche eine jquery.js datei. und in der soll dann das drin stehn:

                      Nein, du brauchst nicht eine jquery-Datei sondern DIE jQuery-Datei (welche die Bibliothek beinhaltet).

                      ist das so richtig ?

                      Und den Test-Schnipsel mit dem jQuery(document).ready(function() { } kannst du entweder in ein ausgelagertes JavaScript-File schreiben oder in das script-Element deines HTML-Dokuments.

                      Wichtig ist nur, dass zuerst die Bibliothek eingebunden wird und dann funktionen daraus ausgeführt werden.

                      1. hm ._. ich hoffe ich nerve nicht

                        ich hab das jetzt so gemacht:

                          
                        <html>  
                        <head>  
                        <link rel="stylesheet" href="style.css" type="text/css">  
                        <script type="text/javascript" src="jquery-1.3.2.min.js"></script>  
                        <script type="text/javascript">  
                          
                        jQuery(document).ready(function() {  
                          
                        		  
                        function navigation() {  
                          // Selektiere alle li-Elemente welche direkte Nachfahren eines ul-Elements innerhalb eines Elements mit der id navigation sind  
                          // wende darauf das Event "hover" an  
                          $('#navigation ul>li').hover(  
                            // Ast für onouseover  
                            function() {  
                              // füge die Klasse hover hinzu  
                              $(this).addClass("hover");  
                            },  
                            // selbriges, nur für onouseout  
                            function() {  
                              $(this).removeClass("hover);  
                            }  
                          );  
                        }  
                          
                          
                          
                        });  
                          
                        </script>  
                          
                        </head>  
                          
                        <body background="navi.jpg" bgproperties="fixed">  
                          
                          
                          
                        <div id="navigation">  
                          <ul>  
                                <li><a class="navi1" href="#">Nummer I  </ a></li>  
                                <li><a class="navi2" href="#">Nummer II </ a></li>  
                          </ul>  
                        </div>  
                          
                          
                          
                        </body>  
                        </html>  
                        
                        

                        ich hab den test schon durchgefürt es wurde ein roter kasten erstellt

                        1. hm ._. ich hoffe ich nerve nicht

                          Nein, keineswegs - sofern etwas hängenbleibt, ist das kein Nerven sondern ein konstruktives Lernen.

                          jQuery(document).ready(function() {
                          });

                          Du musst die Funktion irgendwo aurufen - am besten führst du den Code gleich innerhalb document.ready oder du setzt dort nur den Funktionsaufruf zu einer bereits definierten funktion (siehe mein Beispiel später)

                          Anbei ein Beispiel mit einem Versuchsaufbau - wenn du dich nach den Sliding Doors richtest, sollest du keine Probleme haben. Die Pseudoklasse :hover fehlt absichtlich, damit du das JavaScript deaktiveren und ausprobieren kannst, wie es sich bei einem Browser verhält, der die Pseudoklasse :hover nicht versteht (der IE 6 z.B.).

                          Im Script war übrigens noch ein Fehler: removeClass("hover); anstatt removeClass("hover"); (mein Fehler).

                          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
                          <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">  
                          	<head>  
                          		<link rel="stylesheet" href="style.css" type="text/css">  
                          		<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>  
                          		<script type="text/javascript">  
                            
                          		// Funktion definieren  
                          		function navigation() {  
                          			// Selektiere alle li-Elemente innerhalb von #navigation  
                          			// wende darauf das Event "hover" an  
                          			jQuery('#navigation li').hover(  
                          				// Ast für onmouseover  
                          				function() {  
                          					// füge die Klasse hover hinzu  
                          					jQuery(this).addClass('hover');  
                          				},  
                          				// selbriges, nur für onmouseout  
                          				function() {  
                          					jQuery(this).removeClass('hover');  
                          				}  
                          			);  
                          		}  
                            
                          		// Funktion bei fertigem DOM ausführen  
                          		jQuery(document).ready(  
                          			function() {  
                          				navigation();  
                          			}  
                          		);  
                            
                          		</script>  
                          		<style type="text/css">  
                          			#navigation {  
                          				margin: 0;  
                          				font: bold 12px sans-serif;  
                          			}  
                          			  
                          			#navigation li {  
                          				list-style: none;  
                          				margin: 0 0 0 -7px;  
                          				float: left;  
                          				background: #A0E0A0;  
                          				position: relative;  
                          				z-index: 5;  
                          			}  
                          			  
                          			#navigation li a {  
                          				background: #80C080;  
                          				text-decoration: none;  
                          				float: left;  
                          				padding: 3px 2px 3px 9px;  
                          				margin-right: 7px;  
                          			}  
                          			  
                          			#navigation li.cur   {  
                          				background: #E0A0A0;  
                          				z-index: 10;  
                          				top: -3px;  
                          			}  
                          			  
                          			#navigation li.cur a {  
                          				background: #C08080;  
                          				padding-top: 6px;  
                          			}  
                          			  
                          			#navigation li.hover {  
                          				background: #A0A0E0;  
                          				z-index: 10;  
                          			}  
                          			  
                          			#navigation li.hover a {  
                          				background: #8080C0;  
                          			}  
                          			  
                          		</style>  
                          	</head>  
                          	<body>  
                          		<ul id="navigation">  
                          			<li><a href="#">foo foo foo</a></li>  
                          			<li class="cur"><a href="#">bar bar</a></li>  
                          			<li><a href="#">baz</a></li>  
                          			<li><a href="#">qux qux qux</a></li>  
                          		</ul>  
                          	</body>  
                          </html>
                          
                          1. viele dank du hast mir sehr geholfen ^^
                            ich hab da aber ne frage zur darstellung

                            meine freundin sieht das so:
                            bild1

                            und ich sehe das so:
                            bild2

                            hier ist der link zur seite:
                            Seite

                            woran kann das liegen? ._.

                            1. woran kann das liegen? ._.

                              Am CSS :) ich hab das nur schnell hingebastelt und ausschließlich unter Firefox 3 getestet - wie gesagt, nimm dir den Sliding-Doors-Artikel zur Brust, der beschreibt die Formatierung ins Detail.

                              Die techische Grundlage bez. JavaScript solltest du jetzt haben.

                              1. ok ^^

                                wie mach ich das eigentlich das a:active im ie und im fox funktioniert?
                                 bekomm das nur für den ie hin

                                1. wie mach ich das eigentlich das a:active im ie und im fox funktioniert?
                                  bekomm das nur für den ie hin

                                  unterscheide zwischen :active (einem derzeit aktiven Link - die Unterschiede zu :focus sind gering, aber im IE halt anders als im FF) und dem _derzeitigen_ Menüpunkt, den ich entweder garnicht verlinken (durch ein span-Element ersetzen) oder mit der Klasse "current" kennzeichnen würden.

  2. also ich möchte das so machen wenn man mit der maus rüber geht das nummerI in den vordergrund rückt und nummer II dan in den hintergrund rückt


    Sliding Doors of CSS

    Allerdings wirst du um ein paar Zeilen JavaScript (Empfehlung: jQuery .hover()) nicht herumkommen, da ältere Internet Explorer mit der Pseudoklasse :hover auf einem li-Element nichts anfangen können.