- 목차 -

jekyll github blog 커스텀하기 입니다. 지킬 깃헙 블로그 생성하기는 이전에 글을 썼었는데요. 계속 욕심도 생기고 하고 싶은 것들도 생겨서 디자인도 더욱 고도화할 겸 기록을 공유합니다.

디렉토리 구조

먼저 jekyll 디렉토리 구조에 대해 간단히 알아보겠습니다.

_layouts/

  • default.html 화면 템플릿 소스코드를 입력합니다.
  • *.html 에 default.html 레이아웃을 상속받는 페이지 레이아웃을 만들 수 있습니다.

_includes/

  • *.html {% include *.html %} 처럼 include 태그를 사용하여 렌더링할 수 있습니다.

HTML/CSS 수정

제 글을 따라왔다면 테마를 따로 설치하지 않고 기본 테마를 사용하고 있을 거예요. jekyll default theme 이름이 minima 테마입니다. 이 테마를 커스터마이징 하기 위해서는 minima 가 제시하는 규약에 따라 작성을 해야합니다. minima 설치 경로에서 이 구조를 확인할 수 있습니다.

먼저 터미널을 켜줍니다. 프로젝트의 경로로 들어와서 다음과 같이 입력해 줍니다.

bundle show minima

> /Users/leeyurim/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/minima-2.5.1

minima 테마가 설치된 경로를 얻었습니다. 이제 해당 경로로 들어가 봅시다.

꿀팁 ❗️ MAC finder 에서 cmd + shift + g 하면 경로로 바로 이동할 수 있다!

해당 경로로 접속을 해보면 바로 전에 알아봤던 폴더 구조와 많이 비슷한 것을 확인할 수 있을 거예요.


├── LICENSE.txt
├── README.md
├── _includes
│   ├── disqus_comments.html
│   ...
│   └── social.html
├── _layouts
│   ├── default.html
│   ├── home.html
│   ├── page.html
│   └── post.html
├── _sass
│   ├── minima
│   │   ├── _base.scss
│   │   ├── _layout.scss
│   │   └── _syntax-highlighting.scss
│   └── minima.scss
└── assets
    ├── main.scss
    └── minima-social-icons.svg

각 폴더를 복사해서 제 프로젝트로 가져오겠습니다. 안에 html, scss 를 그대로 두고 커스터마이징하면 쉽게 따라할 수 있습니다. 구조가 바뀌면 적용이 안 되니 그대로 가져오세요!

home 구성하기

minia default 테마의 home 화면은 포스팅이 최신 날짜 순으로 제목이 쭉 나열이 되어있는 곳을 먼저 바꿔보겠습니다. 제목만 나왔을 때는 너무 허전한 느낌이라서 제목 아래에 컨텐츠 내용이 미리보기 형식으로 보이고 아래 태그들이 달려있는 모양으로 구성을 했습니다.

먼저 _layouts/home.html 에서 post-list 안에 날짜 별로 묶여있는 부분을 지워주고 content와 태그들을 추가해주었습니다.


--- 제거
{%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
<span class="post-meta">{{ post.date | date: date_format }}</span>
--- 추가
<li>
  <a class="post-link" href="{{ post.url | relative_url }}">
    <h3>
      {{ post.title | escape }}
      <div class="post-content">
        <p>
        {{post.content| markdownify | strip_html | truncate: 200 | escape }}
        </p>
      </div>
      <div class="tag-list">
      {%- for tag in post.tags -%}
        <h5>
        #{{ tag }}
        </h5>
      {%- endfor -%}
      </div>
    </h3>
    {%- if site.show_excerpts -%}
    {{ post.excerpt }}
    {%- endif -%}
  </a>
</li>

포스트의 컨텐츠가 렌더링 된 곳을 보자면, {{post.content | markdownify | strip_html | truncate: 200 | escape}}

  • markdownify Markdown 형식의 문자열을 HTML로 변환합니다.
  • strip_html 문자열에서 HTML 태그를 제거합니다.
  • truncate 인수로 전달된 문자 수만큼 문자열을 줄입니다.

truncate 값을 조절하여 원하는 만큼 바꿔주시면 됩니다.

home style

_layout 디렉토리 안에 위치한 html 의 style 은 _layout.scss 에 적용되어 있어서, _layout.scss 최하단에 css 를 추가했습니다.

/**
 * Home Layout
 */
.post-list {
  margin-left: 0;
  list-style: none;
  > li {
    border-bottom: 1px solid #ddd;
    a {
      color: $text-color;
      padding: 20px;
      h3 {
        display: inline-block;
        margin-bottom: 4px;
        background-color: #fff;
        line-height: 18px;
        transition: 0.4s;
      }
      &:hover {
        h3 {
          background-color: #fee86f;
        }
        text-decoration: none;
      }
    }
    .post-content {
      margin: 0;
      font-size: 16px;
      p {
        color: #808080;
        margin: 0;
        padding: 4px 10px;
      }
    }
    .tag-list {
      display: flex;
      flex-wrap: wrap;
      gap: 8px;
      h5 {
        font-size: 12px;
      }
    }
  }
}

다른 페이지 추가하기

처음에 테마를 다운 받고 about 페이지가 있었는데요, 저한테 필요한 카테고리 페이지를 추가해보겠습니다. 프로젝트 최상단에 index.markdown about.markdown 이 있는데요 최상단에 만드는 파일을 읽어 페이지가 되는 구조입니다. 작성은 md, html 모두 가능합니다. 저는 categories.html 로 만들어주었어요.

# categories.html

---
layout: page
permalink: /categories/
title: Category
---

<div id="archives">
  {% for category in site.categories %}
  <div class="archive-group">
    {% capture category_name %}{{ category | first }}{% endcapture %}
    <h1 id="{{category_name}}"class="category-head">{{ category_name }}</h1>
    <!-- <a href="#{{category_name}}" onclick="showTag('#{{category_name}}')">
      {{category_name}} (0)
    </a> -->
    {% for post in site.categories[category_name] %}
    <article class="archive-item">
      <h4><a href="{{ site.baseurl }}{{ post.url }}">{{post.title}}</a></h4>
    </article>
    {% endfor %}
  </div>
  {% endfor %}
</div>

상단에 permalink: /categories/ 라고 작성을 했기때문에 {{base_path}}/categories/ 로 접속해보면 카테고리 별로 카테고리의 글을 한눈에 확인할 수 있는 페이지가 생겼습니다! 카테고리별이 아닌 태그모음도 추가하고 싶어지는데…

다음은 태그 모음 추가하기로 돌아오겠습니다.



— 참고