[Hexo]制作個性化的Hexo博客主題

難度:??
最終效果:

最終效果
最終效果

為了避免昂貴的服務(wù)器費(fèi)用支付,我們很多人的博客選用了 github pages, 搭配 hexo 這種靜態(tài)博客生成器,通過普通的 git workflow就可以很輕松地搭建自己的博客枢步。不過,我們總覺得有點(diǎn)不那么酷,那就自己打造一個主題吧彤守!

目錄結(jié)構(gòu)

在你的 hexo博客目錄下肯定有一個 theme目錄,這里存放主題的源碼哭靖,本次我的主題起名叫 hexo-theme-eleme,查看一下結(jié)構(gòu):

.
├── _config.yml
├── languages
│   └── zh-CN.yml
├── layout
│   ├── archive.ejs
│   ├── category.ejs
│   ├── index.ejs
│   ├── layout.ejs
│   ├── page.ejs
│   ├── partials
│   ├── post.ejs
│   └── tag.ejs
└── source
    ├── css
    ├── favicon.ico
    ├── img
    └── js

其中必需的是 _config.yml是指主題的配置文件具垫,languages文件夾下存放多國語言的配置(視個人喜好而定),layout文件夾下存放模板用于生成 HTML试幽,source文件夾下存放一些常用的靜態(tài)資源筝蚕。

技術(shù)選型

hexo 支持多種模板,此次我選用的是 EJS模板,CSS預(yù)處理選用了 stylus起宽,語法都比較簡單洲胖。

動手

1.配置靜態(tài)資源

layout.ejs 是整個頁面的入口,所有的頁面都基于 layout.ejs生成坯沪,區(qū)分頁面的方法是使用 hexo 內(nèi)置函數(shù)绿映,相關(guān)文檔可以在 hexo.io找到。我們首先需要引入 css和 js腐晾,在HTML 頭部:

 <% if (theme.stylesheets !== undefined && theme.stylesheets.length > 0) { %>
    <!-- stylesheets list from config.yml -->
    <% theme.stylesheets.forEach(function(url) { %>
      <link rel="stylesheet" href="<%=url_for(url)%>">
    <% }); %>
  <% } %>

CSS的 url我配置在了 _config.yml:

# stylesheets loaded in the <head>
stylesheets:
- /css/eleme-theme.css

這個路徑其實(shí)就是 source/css/eleme-theme.styl, hexo生成的時候會自動幫你預(yù)處理 stylus文件叉弦。 url_for()是 hexo內(nèi)置函數(shù),幫助你找到站內(nèi)資源的 url藻糖。

需要區(qū)分 theme的 _config.yml 和 hexo 的 _config.yml

javascript同理淹冰,不過我把它放在了 body底部載入。

2.header 和 footer

頭部和腳部在所有頁面都是公用的巨柒,所以直接放在 layout.ejs中樱拴。菜單配置在 _config.yml中,直接遍歷一下:

<% Object.keys(theme.menu).forEach(function(key) { %>
    <a href="<%=url_for(theme.menu[key])%>"><%=_p(key)%></a>
<% }); %>

url_for()函數(shù)前面有提及洋满,_p()函數(shù)是另一個內(nèi)置函數(shù)疹鳄,根據(jù) key獲取對應(yīng)的多語言字符串。如果不使用多語言芦岂,這里直接就用<%=key%>就可以了瘪弓。
footer同理,就不再贅述了禽最。所有的博客內(nèi)容都是一個 hexo的 body變量腺怯,直接通過<%-body%>放在頁面中。這個 body是 hexo根據(jù)不同頁面的模板渲染的 html川无。

3.index

index 頁面包括一個文章列表和一個分頁:

<%-partial('partials/recent-posts')%>
<%-partial('partials/pagination')%>

分頁組件在其他頁面也有用到呛占,所以組件需要分開。列表頁面比較容易做懦趋,hexo 的 context中可以通過 site.posts拿到所有文章晾虑,遍歷輸出標(biāo)題等信息就好了。分頁組件相對不那么好做一點(diǎn)仅叫,不過也可以從 context中拿到 page變量帜篇。

<% if (typeof page.current === 'number' && typeof page.total === 'number') { %>
      <p class="page-number">
          第<%=page.current%>/<%=page.total%>頁
      </p>
<% } %>

4.文章和其他頁面

參考上面的代碼可以發(fā)現(xiàn),其實(shí)大部分的操作都要基于 hexo的內(nèi)置變量诫咱,比如拿到 post后可以輸出 post的標(biāo)題笙隙,作者,內(nèi)容等坎缭,hexo都會幫我們正確地嵌套到最終的 layout.ejs中生成正確的 HTML竟痰。

5.stylus與 CSS

HTML 輸出后我們可以使用 CSS美化頁面签钩,CSS是全局的,只要通過編寫 stylus就可以預(yù)處理輸出了坏快。stylus 可以定義變量铅檩,像編程一樣寫 CSS,比如我定義一些變量在 values.styl中:

// Config
support-for-ie = false
vendor-prefixes = webkit moz ms official

//Font
font-sans = -apple-system, BlinkMacSystemFont,
    "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
    "Fira Sans", "Droid Sans", "Helvetica Neue",
    sans-serif
// Colors
eleme-blue = #3190e8
eleme-orange = #ff6000
eleme-red = #d83f34

然后在 eleme-theme.styl中:

@import values

就可以使用了莽鸿,stylus 語法寫起來也有點(diǎn)意思柠并,縮進(jìn)什么的比較像 python:

body
  background: eleme-background-light !important
  margin: 0 auto !important
  max-width: eleme-max-width
  font-family: font-sans
  height: 100%
  overflow-x: hidden

6.配置評論系統(tǒng)

評論通常放在一篇博文底部,我選用了 Disqus:

 <% if(theme.comment) {%>
    <div id="disqus_thread"></div>
    <script type="text/javascript">
        var disqus_shortname = '<%=theme.disqus_shortname%>';
        var disqus_identifier = '<%=page.path%>';
        var disqus_title = '<%=page.title%>';
        var disqus_url = '<%=page.permalink%>';
        function run_disqus_script(disqus_script){
            var dsq = document.createElement('script');
            dsq.type = 'text/javascript';
            dsq.async = true;
            dsq.src = '//' + disqus_shortname + '.disqus.com/' + disqus_script;
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
        }
        run_disqus_script('count.js');
        <% if(page.comments) {%>
        run_disqus_script('embed.js');
        <%}%>
    </script>
    <noscript>Please enable JavaScript to view the comments</noscript>
<% } %>

然后在 _config.yml中添加字段:

comment: true
disqus_shortname: your_short_name

使用主題

把主題文件夾放到 hexo源文件的 theme文件夾下富拗,更改 hexo的主題為 hexo-theme-eleme臼予,運(yùn)行 hexo s就可以看到了。

做出一個漂亮的主題可能需要一點(diǎn)點(diǎn) UED的幫助吧 :)

-EOF-

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啃沪,一起剝皮案震驚了整個濱河市粘拾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌创千,老刑警劉巖缰雇,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異追驴,居然都是意外死亡械哟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門殿雪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暇咆,“玉大人,你說我怎么就攤上這事丙曙“忠担” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵亏镰,是天一觀的道長扯旷。 經(jīng)常有香客問我,道長索抓,這世上最難降的妖魔是什么钧忽? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮逼肯,結(jié)果婚禮上耸黑,老公的妹妹穿的比我還像新娘。我一直安慰自己汉矿,他們只是感情好崎坊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布备禀。 她就那樣靜靜地躺著洲拇,像睡著了一般奈揍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赋续,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天男翰,我揣著相機(jī)與錄音,去河邊找鬼纽乱。 笑死蛾绎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸦列。 我是一名探鬼主播租冠,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薯嗤!你這毒婦竟也來了顽爹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤骆姐,失蹤者是張志新(化名)和其女友劉穎镜粤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玻褪,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肉渴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了带射。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同规。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窟社,靈堂內(nèi)的尸體忽然破棺而出捻浦,到底是詐尸還是另有隱情,我是刑警寧澤桥爽,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布朱灿,位于F島的核電站,受9級特大地震影響钠四,放射性物質(zhì)發(fā)生泄漏盗扒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一缀去、第九天 我趴在偏房一處隱蔽的房頂上張望侣灶。 院中可真熱鬧,春花似錦缕碎、人聲如沸褥影。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凡怎。三九已至校焦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間统倒,已是汗流浹背寨典。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留房匆,地道東北人耸成。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像浴鸿,于是被迫代替她去往敵國和親井氢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容