• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Klappbare Navigation für Responsive Webseite

Onkelmann09

New member
Hallo

Ich selber kann leider kein JavaScript, habe aber diesbezüglich ein kleines Anliegen.
Vielleicht kann mir hier ja jemand von Euch helfen.
Darüber würde ich mich wirklich riesig freuen.

Ich bin gerade dabei, meine Webseite auf ein Responsive Design umzustellen, bzw. neu zu machen.
Für die Darstellung meiner Seite auf großen Viewports, befindet sich meine Navigation links (also ganz klassisch).
Für die Darstellung auf kleinen Fiewports, geht die Navigation nach oben.
Ich habe das mit CSS und Media Queries realisiert.

Nun möchte ich, dass auf den kleinen Viewports die Navi mit einem "Button" ein und ausgeklappt werden kann.
Dafür habe ich ein kleines Javascript im Einsatz.
Das Script habe ich nicht selber geschrieben, weil ich das leider nicht kann.

Das Sript macht im Grunde schon, was es soll, nur leider funktioniert es anscheinend nicht auf dem Stock Android Browser.
Und ich finde nicht heraus, wo der Fehler ist.

Gruß
Ingo

Hier ein Link, wo man sich das angucken kann:
http://spaceart.de/_xxxx_test-1.php

Und hier poste ich auch nochmal den Code der Test-Seite:
HTML:
<!doctype html>

<html class="no-js">

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test</title>
    
<style>
nav ul {
  padding-left: 0;
}
  
nav li {
  list-style: none;
}

.menu-klappen {
    display: none;
}

@media screen and (max-width: 46.5rem) {

  /* Button zum Anzeigen des Menüs */
  .js .menu-klappen {
    display: block;
    cursor: pointer;
    color: #fff;
    background-color: #313131;
    width: 2.5rem;
    height: 2.5rem;
    text-align: center;
    line-height: 2.5rem;
    font-weight: normal;
  } 
  
  .js nav ul {
    display: none;
  }
  
  nav ul.klappen-on {
    display: block;
  }
  
   nav ul.klappen-on li, .no-js nav li {
    display: block;
  }
  
  [data-icon]:before {
    content: attr(data-icon);
    speak: none;
    display: inline-block;
    font-size: 200%;
  }
  
  .screen-reader-text {
    position: absolute;
    top: -9999px;
    left: -9999px;
  }

}
</style>

</head>
  
<body>  
      
<nav id="navigation">
  <h3 class="menu-klappen">
    <span data-icon="≡" aria-hidden="true"></span>
    <span class="screen-reader-text">Menü</span>
  </h3>
  <ul>
    <li><a href="#.php">Kategorie 1</a></li>
    <li><a href="#.php">Kategorie 2</a></li>
    <li><a href="#.php">Kategorie 3</a></li>
    <li><a href="#.php">Kategorie 4</a></li>
  </ul>
</nav>
    
<script>
( function() {
//Klasse zu html hinzufügen lassen, die kennzeichnet, dass JavaScript aktiviert ist
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
function naviklapp(navid) {
//Elemente definieren: Navigationselement, Button, Menü
var nav = document.getElementById( navid );
var button;
var menu;
//Wenn keine Navigation, dann nichts tun
if ( ! nav )
return;
//der Button ist das erste h3-Element innerhalb der Navigation
button = nav.getElementsByTagName( 'h3' )[0];

// die erste ungeordnete Liste in der Navigation ist das Menü
menu = nav.getElementsByTagName( 'ul' )[0];
if ( ! button )
return;

if ( ! menu || ! menu.childNodes.length ) {
button.style.display = 'none';
return;
}
button.onclick = function() {

if ( -1 != button.className.indexOf( 'klappen-on' ) ) {
button.className = button.className.replace( ' klappen-on', '' );
menu.className = menu.className.replace( ' klappen-on', '' );
} else {
button.className += ' klappen-on';
menu.className += ' klappen-on';
}
};
}
naviklapp('navigation');

} )();;
</script>

</body>
  
</html>
 
Zuletzt bearbeitet von einem Moderator:
Was genau heißt "funktioniert nicht"?
Schau mal, was die Fehlerkonsole dazu sagt.
PS: bitte Code, der über einen kurzen Einzeiler herausgeht, in
Code:
-Tags statt [inline] setzen!
 
Was genau heißt "funktioniert nicht"?

Ich habe den Fehler inzwischen gefunden (bzw. jemand anderes für mich).
Ich hatte ja bei den Media Queries als Einheut für die Schriftgröße "rem" verwendet.
Und genau das hat im Stock Android Browser dazu geführt, dass das Auf- und Zuklappen der Navigation nicht funktioniert hat.
Ich habe das jetzt von "rem" auf "em" geändert.
Und dann funktioniert es.


PS: bitte Code, der über einen kurzen Einzeiler herausgeht, in
Code:
-Tags statt [inline] setzen![/QUOTE]
OK, werde ich in Zukunft so machen.
 
Ich täte bei der Nutzung von rem aufpassen: das Problem ist mal wieder der IE 8. -->Can I use rem units
Generell steht man zurzeit noch vor der heiklen Frage, ob man bei Projekten den IE 8 noch unterstützen soll oder nicht. Ich hab mich da selbst noch nicht so entschieden - kann beide Meinungen nachvollziehen...

Laut obriger Kompatiblitätstabelle dürfte es übrigens eigentlich nicht daran liegen - der Stock-Android-Browser unterstützt das nämlich in allen Versionen...
 
Laut obriger Kompatiblitätstabelle dürfte es übrigens eigentlich nicht daran liegen - der Stock-Android-Browser unterstützt das nämlich in allen Versionen...
Kann es denn vielleicht sein, dass der Stock Android Browser "rem" generell schon unterstützt, nur eben bei den Media Queries nicht.
Das scheint ja in der Tat genau so zu sein.
 
Kann es denn vielleicht sein, dass der Stock Android Browser "rem" generell schon unterstützt, nur eben bei den Media Queries nicht.
Das scheint ja in der Tat genau so zu sein.

Freilich, das kann natürlich sein. Es könnte sich auch ein Fehler bei caniuse eingeschlichen haben... wer weiß - gerade mobile Browser zeigen manchmal das seltsamste Verhalten ;)
 
Zurück
Oben