I’ve found that there is a lot of information on the internet in regards to setting up “dynamic” navigation in Jekyll. The problem I’ve noticed is that a good amount of these implementations are overly complex. Here is the simplest way that I tend to use when building out nav
elements in Jekyll (3.9.0 as of this writing).
Creating the Directories & Files
In your Jekyll project, at the top level, you need to create a directory called _data
. Inside this folder we will be creating a new file called navigation.yml
. The contents of this file will contain all your navigation links and they are rendered like so:
1
2
3
4
5
6
7
8
9
-title:Homeurl:/-title:Articlesurl:/articles/-title:Abouturl:/about/
Dynamically Rendering the Navigation
The next and final step is rendering out the navigation with a simple loop:
1
2
3
4
5
{% for item in site.data.navigation %}
<li><ahref="{{ item.url }}"><span>{{ item.title }}</span></a></li>
{% endfor %}
Highlight Current Page
It’s also very easy to extend this method to add a CSS class based on whether a user is on the currently selected page or not:
1
2
3
4
5
6
7
8
9
{% for item in site.data.navigation %}
<li>
{% if item.url == page.url %}
<aclass="active"href="{{ item.url }}"><span>{{ item.title }}</span></a>
{% else %}
<ahref="{{ item.url }}"><span>{{ item.title }}</span></a>
{% endif %}
</li>
{% endfor %}
1
2
/* Custom styling for active class */lia.active{color:red;}
Congrats! You now have fully functional, dynamic navigation on your Jekyll site.