Ich verwende Github, um eine statische Site zu hosten, und Jekyll, um sie zu generieren.
Ich habe eine Menüleiste (as <ul>
) und möchte, dass der <li>
entsprechenden aktuellen Seite eine andere Klasse für die CSS-Hervorhebung zugewiesen wird.
Also so etwas wie Pseudocode:
<li class={(hrefpage==currentpage)?"highlight":"nothighlight"} ...>
Oder vielleicht sogar das Ganze <ul>
in Jekyll erzeugen .
Wie kann dies mit minimalen Änderungen außerhalb der Straftat geschehen <ul>
?
Antworten:
Ja, das kannst du machen.
Um dies zu erreichen, werden wir die Tatsache ausnutzen, dass die aktuelle Seite immer durch die flüssige Variable dargestellt wird:
page
in der Vorlage, und dass jeder Beitrag / jede Seite eine eindeutige Kennung in ihrempage.url
Attribut hat.Dies bedeutet, dass wir nur eine Schleife verwenden müssen, um unsere Navigationsseite zu erstellen, und auf diese Weise
page.url
gegen jedes Mitglied der Schleife prüfen können . Wenn eine Übereinstimmung gefunden wird, kann dieses Element hervorgehoben werden. Auf geht's:Dies funktioniert wie erwartet. Allerdings möchten Sie wahrscheinlich nicht alle Ihre Seiten in Ihrer Navigationsleiste haben. Um die "Gruppierung" der Seite zu emulieren, können Sie Folgendes tun:
Jetzt können Seiten "gruppiert" werden. Um einer Seite eine Gruppe zuzuweisen, müssen Sie diese auf den Seiten YAML Front Matter angeben:
Endlich können Sie Ihren neuen Code verwenden! Wo immer Sie Ihre Navigation für Ihre Vorlage benötigen, "rufen" Sie einfach Ihre Include-Datei auf und übergeben Sie ihr einige Seiten und die Gruppe, die Sie anzeigen möchten:
Beispiele
Diese Funktionalität ist Teil des Jekyll-Bootstrap- Frameworks. Die genaue Dokumentation zu dem hier beschriebenen Code finden Sie unter: http://jekyllbootstrap.com/api/bootstrap-api.html#jbpages_list
Endlich können Sie es auf der Website selbst in Aktion sehen. Schauen Sie sich einfach die rechte Navigation an und Sie werden sehen, dass die aktuelle Seite grün hervorgehoben ist: Beispiel hervorgehobener Navigationslink
quelle
jekyll 2.4.0 | Error: The included file '/Users/joelglovier/project/jekyllsite/_includes/pages_list' should exist and should not be a symlink
.html
Erweiterung zu pages_list hinzuzufügen und diese stattdessenIch denke, für die einfachste Navigationsanforderung sind die aufgeführten Lösungen zu komplex. Hier ist eine Lösung, die keine Frontmaterie, Javascript, Schleifen usw. beinhaltet.
Da wir Zugriff auf die Seiten-URL haben, können wir die URL normalisieren und aufteilen und anhand der Segmente testen, wie folgt:
Dies ist natürlich nur dann sinnvoll, wenn statische Segmente die Möglichkeit bieten, die Navigation abzugrenzen. Alles ist komplizierter, und Sie müssen Front-Materie verwenden, wie @RobertKenny demonstriert hat.
quelle
classs="active"
?.active
, dann ja. In der obigen Antwort sagt der Autor, dass die Klasse, die in seinem Stylesheet aufgerufen werden soll, lautet.current
. Keine große Sache.Ähnlich der Lösung von @ ben-Foster, jedoch ohne Verwendung von jQuery
Ich brauchte etwas Einfaches, das habe ich getan.
In meiner vorderen Angelegenheit habe ich eine Variable namens hinzugefügt
active
z.B
Ich habe ein Navigations-Include mit folgendem Abschnitt
Dies funktioniert bei mir, da die Anzahl der Links in der Navigation sehr gering ist.
quelle
Hier ist meine Lösung, die meiner Meinung nach der beste Weg ist, um die aktuelle Seite hervorzuheben:
Definieren Sie eine Navigationsliste in Ihrer _config.yml wie folgt :
Dann müssen Sie in Ihrer Datei _includes / header.html die Liste durchlaufen, um zu überprüfen, ob die aktuelle Seite ( page.url ) einem Element der Navigationsliste ähnelt. Wenn ja, legen Sie einfach die aktive Klasse fest und fügen sie dem
<a>
Tag hinzu:Und da Sie den Operator " enthält" anstelle des Operators "equals =" verwenden , müssen Sie keinen zusätzlichen Code schreiben, damit er mit URLs wie "/ blog / post-name /" oder "projects / project-name /" funktioniert. ' . Es funktioniert also sehr gut.
PS: Vergessen Sie nicht, die Permalink- Variable auf Ihren Seiten festzulegen .
quelle
/
da alle Seiten-URLs den führenden Schrägstrich enthalten. Die folgenden Arbeiten:{% for link in site.navigation %} {% assign class = nil %} {% if page.url == link.url %} {% assign class = 'active' %} {% elsif page.url != '/' and page.url contains link.url %} {% assign class = 'active parent' %} {% endif %} <a href="{{link.url}}" class="{{class}}">{{link.title}}</a> {% endfor %}
Ich habe ein bisschen JavaScript verwendet, um dies zu erreichen. Ich habe folgende Struktur im Menü:
Dieses Javascript-Snippet hebt die aktuell entsprechende Seite hervor:
quelle
Mein Ansatz besteht darin, eine benutzerdefinierte Variable in der YAML-Titelseite der Seite zu definieren und diese für das
<body>
Element auszugeben :Meine Navigationslinks enthalten die Kennung der Seite, auf die sie verlinken:
In der Titelseite setzen wir die Seiten-ID:
Und zum Schluss noch ein bisschen jQuery, um den aktiven Link zu setzen:
quelle
Die Navigation Ihrer Website sollte eine ungeordnete Liste sein. Das folgende flüssige Skript fügt ihnen eine 'aktive' Klasse hinzu, damit die Listenelemente aufgehellt werden, wenn sie aktiv sind. Diese Klasse sollte mit CSS gestaltet sein. Um festzustellen, welcher Link aktiv ist, verwendet das Skript "enthält", wie Sie im folgenden Code sehen können.
Dieser Code ist mit allen Permalink-Stilen in Jekyll kompatibel. Die Anweisung 'enthält' hebt den ersten Menüpunkt unter den folgenden URLs erfolgreich hervor:
Quelle: http://jekyllcodex.org/without-plugin/simple-menu/
quelle
Viele verwirrende Antworten hier. Ich benutze einfach ein
if
:Ich verweise direkt auf die Seite und füge sie in die Klasse ein, die ich möchte
Erledigt. Schnell.
quelle
Ich habe
page.path
den Dateinamen verwendet und bin davon ausgegangen.quelle
Viele gute Antworten sind bereits da.
Versuche dies.
Ich ändere die obigen Antworten leicht.
_data/navigation.yaml
Auf einer Seite ->
portfolio.html
(Gleich für alle Seiten mit einem relativ aktiven Seitennamen)Navigation html part
quelle
Wenn Sie das Minima-Thema für Jekyll verwenden, müssen Sie dem Klassenattribut in header.html nur einen Ternär hinzufügen:
der vollständige Auszug:
Fügen Sie dies Ihrer _config.yml hinzu
Und dann natürlich dein CSS:
quelle
Hier ist eine jQuery-Methode, um dasselbe zu tun
quelle