aboutsummaryrefslogtreecommitdiff
path: root/_posts/2020-09-29-simple-jekyll-navigation.md
diff options
context:
space:
mode:
Diffstat (limited to '_posts/2020-09-29-simple-jekyll-navigation.md')
-rw-r--r--_posts/2020-09-29-simple-jekyll-navigation.md58
1 files changed, 58 insertions, 0 deletions
diff --git a/_posts/2020-09-29-simple-jekyll-navigation.md b/_posts/2020-09-29-simple-jekyll-navigation.md
new file mode 100644
index 0000000..d948f99
--- /dev/null
+++ b/_posts/2020-09-29-simple-jekyll-navigation.md
@@ -0,0 +1,58 @@
+---
+layout: post
+title: "Simple Navigation Setup in Jekyll 3.9.0"
+date: 2020-09-29
+---
+
+
+I have 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:
+
+
+ - title: Home
+ url: /
+
+ - title: Articles
+ url: /articles/
+
+ - title: About
+ url: /about/
+
+
+## Dynamically Rendering the Navigation
+
+The next and final step is rendering out the navigation with a simple loop:
+
+
+ {% for item in site.data.navigation %}
+ <li>
+ <a href="{{ 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:
+
+
+ {% for item in site.data.navigation %}
+ <li>
+ {% if item.url == page.url %}
+ <a class="active" href="{{ item.url }}"><span>{{ item.title }}</span></a>
+ {% else %}
+ <a href="{{ item.url }}"><span>{{ item.title }}</span></a>
+ {% endif %}
+ </li>
+ {% endfor %}
+
+
+
+ /* Custom styling for active class */
+ li a.active { color: red; }
+
+
+Congrats! You now have fully functional, dynamic navigation on your Jekyll site.