Thoughts on the web, travel & remote working life by Paddy O’Hanlon

Jekyll specific CSS and web fonts for latest posts on homepage

Written from Girona, Catalonia

How to do post specific CSS with Jekyll has been documented, but all examples I found only explain how to include a stylesheet in individual posts, and not on a site homepage, index.html. I feature my latest post in full on the homepage and so need any styles specific to it included there, and in this case I needed a web font specific to the post too.

My site’s directory structure looks something like this:

.
├── _config.yml
├── _drafts
|   └── epic-novel.md
├── _layouts
|   ├── default.html
|   └── post.html
├── _posts
|   └── 2013-12-23-dont-fear-javascript-the-comic.md
├── _site
├── archive
|   └── index.md
└── index.html

Adding the stylesheet

I started by following Jake Bresnehan’s write up, which shows how to add inline styles to a post. The following is added to default.html, in the <head>:

{% if page.style %}
 <style type="text/css">
     {{ page.style }}
 </style>
{% endif %}

That snippet only adds the styles to a post when it has a style variable in its front-matter. To add styles to the homepage, index.html, only when that post is the latest post, I added the following:

{% if site.posts.first.style %}
  <link rel="stylesheet" href="/css/art-direction/{{ site.posts.first.style }}">
{% elsif page.style %}
  <link rel="stylesheet" href="/css/art-direction/{{ page.style }}">
{% endif %}

The first if statement checks to see if the latest post on index.html has a style variable in its front-matter, if it does the link to the named stylesheet is created.

The second statement checks to see if the file being generated is a post, as in Jake’s code snippet, and if it has a style variable in its front-matter. If it does the link to the named stylesheet is created.

I opted for a separate stylesheet file, instead of adding inline styles, kept in an art-direction folder.

Adding the web font

To include the Google web font I used the same setup, only using a “googlewebfonts” variable in the front-matter:

{% if site.posts.first.style %}
  <link rel="stylesheet" href="/css/art-direction/{{ site.posts.first.style }}">
{% elsif page.style %}
  <link rel="stylesheet" href="/css/art-direction/{{ page.style }}">
{% endif %}

{% if site.posts.first.googlewebfonts %}
  <link href='http://fonts.googleapis.com/css?family={{ site.posts.first.googlewebfonts }}'>
{% elsif page.googlewebfonts %}
  <link href='http://fonts.googleapis.com/css?family={{ page.googlewebfonts }}'>
{% endif %}

And my front-matter for the Don’t Fear JavaScript: The Comic post looks like this:

---
layout: post
title:  "Don’t Fear JavaScript: The Comic"
description: A short comic strip about a hero undertaking the learning of a language called JavaScript.
date: 2013-12-23 19:00:00
categories: code
tags: JavaScript, comics, fun
location: Girona, Catalonia

style: javascript-comic-001.css
googlewebfonts: Gloria+Hallelujah
---