# VuePress 完美 embed responsive YouTube 影片

VuePress 是採用 markdown 語法來編輯文章 (透過 markdown-it 套件),所以也支援直接貼上 HTML 語法,那要嵌入 YouTube 影片只要貼上 YouTube 產生的 iframe 語法就可以。

不過這樣有個缺點,就是嵌入的 iframe 沒辦法適應各種不同的解析度,所以就會造成在手機瀏覽時,影片會破版。

VuePress YouTube 破版

那這個問題可以透過 markdown-it 的外掛 markdown-it-video (opens new window) 來解決,就可以完美嵌入 responsive YouTube 影片。

# 安裝 markdown-it-video

首先先安裝 markdown-it-video

npm i @centerforopenscience/markdown-it-video

接著在 .vuepress/config.js 加入 markdown plugins

markdown: {
  plugins: {
    '@centerforopenscience/markdown-it-video': {}
  }
}

在文章中就可以使用 markdown-it-video 的語法,像是下面這樣

@[youtube](https://youtu.be/LtSmfGuHe3o)

# 增加 bootstrap embed-responsive classes

markdown-it-video 除了會產生 YouTube 的 embed 語法之外,還會用一個 diviframe 包起來,那這個 div 有 embed-responsive 這個 class

markdown-it-video 產生的 HTML

這一系列 embed-responsive class 是 bootstrap 定義的 (Source Code 在這邊 (opens new window)) 。

VuePress 預設的 theme 是沒有這些 class 所以我們要自行加上這些 class 。

VuePress 有提供插入自訂 CSS 的機制,在 .vuepress 資料夾建立 /style/index.styl 就可以 (關於 index.styl 可以參考這邊的說明 (opens new window)),完整路徑是 .vuepress/style/index.styl 。 (styl 是 Stylus 的副檔名, Stylus 是一種用來產生 CSS 的程式語言)

接著在 .vuepress/style/index.styl 加入 bootstrap embed-responsive classes

可以直接插入 CSS

.embed-responsive {
  position: relative;
  display: block;
  width: 100%;
  padding: 0;
  overflow: hidden;
}

.embed-responsive::before {
  display: block;
  content: "";
}

.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

.embed-responsive-21by9::before {
  padding-top: 42.857143%;
}

.embed-responsive-16by9::before {
  padding-top: 56.25%;
}

.embed-responsive-4by3::before {
  padding-top: 75%;
}

.embed-responsive-1by1::before {
  padding-top: 100%;
}

也可以插入 Stylus 語法 (Stylus 語法取自這邊) (opens new window))

.embed-responsive
    position relative
    display block
    width 100%
    padding 0
    overflow hidden
    &::before
        display block
        content ""

.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video
    position absolute
    top 0
    bottom 0
    left 0
    width 100%
    height 100%
    border 0

.embed-responsive-21by9
    &::before
        padding-top 42.857143%

.embed-responsive-16by9
    &::before
        padding-top 56.25%

.embed-responsive-4by3
    &::before
        padding-top 75%

.embed-responsive-1by1
    &::before
        padding-top 100%

這樣一來這一系列 embed-responsive classes 就會插入到 theme 的 css ,這樣一來就可以實現完美 embed responsive YouTube 影片。

完美 embed responsive YouTube 影片

Last Updated: 2021-11-26 16:02:26
贊助商連結
    贊助商連結
    (adsbygoogle = window.adsbygoogle || []).push({});