2016-04-24 11 views
1

Im Moment habe ich eine Website mit 5 Seiten und die Hauptnavigation wird mit einer ungeordneten Liste angezeigt. Was ich versuche zu erreichen ist, dass die "aktive" Seite zuerst in der Liste angezeigt wird.Ungeordnete Liste - Position des Eintrags

Zum Beispiel, wenn ich eine dieser Seiten habe: "Home | Über | Kontakt | Blog". Wenn Sie sich auf der Kontaktseite befinden, sollte diese an den Anfang der Liste verschoben werden. Das Menü würde dann so aussehen: "Kontakt | Startseite | Über | Blog".

Was mich Probleme verursacht ist, dass das Menü durch PHP enthalten ist, so gibt es nur ein Menü für alle Seiten und durch PHP habe ich es so gemacht, dass es eine "aktive" Klasse zum aktuellen Seitenmenüelement hinzufügt .

Ich bin nicht wirklich sicher, was die beste Lösung dafür wäre und würde jede Hilfe wirklich schätzen.

Edit:

Dies ist die Navigationsseite, die in jede Seite enthalten ist wird:

  <nav class="large-nav"> 
       <ul> 
       <li <?php echo ($activePage == 'ourStory') ? "class='active'" : ""; ?> ><a href="our_story.php" title="">OUR STORY</a></li> 
       <li <?php echo ($activePage == 'services') ? "class='active'" : ""; ?> ><a href="services.php" title="">SERVICES</a></li> 
       <li <?php echo ($activePage == 'projects') ? "class='active'" : ""; ?> ><a href="projects.php" title="">PROJECTS</a></li> 
       <li <?php echo ($activePage == 'contact') ? "class='active'" : ""; ?> ><a href="contact.php" title="">CONTACT</a></li> 
       <li <?php echo ($activePage == 'upload') ? "class='active'" : ""; ?> ><a style="margin-right: 0;" href="upload.php#top" title="">UPLOAD</a></li> 
       </ul> 
      </nav> 
+0

werden diese Attribute in ungeordnete Liste gespeichert? Kannst du deine aktive Seite nicht direkt über die ungeordnete Liste setzen, ich meine den obersten Index? –

+0

Warum postest du den Code zum Hinzufügen der "aktiven" Klasse nicht? Es wird einfacher zu ändern, um Ihre Frage zu beantworten. – BeS

+0

Entschuldigung, ich habe die Navigationsseite hinzugefügt, die enthalten ist. – Bonzai

Antwort

4

Hier ist eine reine CSS Art und Weise, es zu tun Flexbox Bestellung verwenden.

enter image description here

ul { 
    … 
    display: flex; 
    flex-direction: column; 
} 

li[class=active] { 
    order: -1; 
    … 
} 

Demo: http://codepen.io/antibland/pen/ZWjdqL

Support: IE10 +, Firefox, Chrome

+0

Wirklich coole Lösung +1 – Edward

+0

@Edward Danke, Mann. –

+0

Perfekt. Vielen Dank! – Bonzai

0

Jsfiddle link

jQuery:

$(function(){ 
    $("li").on("click", function(){ 
     $('ul').prepend($(this)) 
    }) 
}) 

HTML

<ul> 
    <li>Home</li> 
    <li>Contact</li> 
    <li>About</li> 
    <li>Blog</li> 
</ul> 
+0

Überprüfen Sie, dass: https://jsfiddle.net/3ves02f8/1/ –

+0

das ist schön ...., Sie brauchen das ?? –

+0

Was meinst du, ich brauche das? Ja, es ist einfacher. Ich erinnere mich, wie ich überrascht war, als ich die wahre Funktionsweise von 'append()/prepend()' –

0

Man könnte so etwas tun:

$('.large-nav li').each(function() { 
    if($(this).find('a').attr('href') == location) 
    { 
     $('.large-nav ul').prepend($(this)) 
    } 
}) 
+0

Warum vergleichen Sie es mit dem Standort, warum nicht nur hasClass ('active') verwenden? Dieser Code wird nicht funktionieren, ohne das Standortobjekt zu ändern. – Edward

+0

Ich habe es versucht, es funktioniert ... Aber Sie können 'hasClass ('active')' aswell .. Ich glaube nicht, dass es einen Unterschied gibt. –

+0

Verwenden Sie das globale Standortobjekt, wenn Sie sich auf den Standort beziehen? – Edward

Verwandte Themen