Youtubeのリンクを貼ってみたかったのでshortcodeをを実装する。
shortcodeとは
htmlタグのテンプレートのようなものという認識。
例えば記事内に画像を貼り付けるとき、一々htmlで細かく記述してられないので使う。
themeによっては用意されているものもあり、Robustだと画像の貼り付けは以下のように記述できる。
{{% img src= “images/icon.jpg” w=“auto” h=“200” %}}
(shortcodeのシンタックスハイライトがどうにもできない)
形としては
{{% shortcode名 引数… %}}
って感じ。
上の画像貼り付け用のshortcodeをエスケープしないで記入するとicon.jpgの画像が出てくる。
実際にhtnlで記述しようとすると以下のようになる。
<figure>
<img src="http://localhost:1313/images/icon.jpg" alt="" width="auto" height="200">
</figure>
毎回ベタ書きしてると大変なのでよく使うものは作っておくと便利って機能。
shortcodeファイルはlayouts/shortcodes
の中にshortcode名.html
という形で保存する。
shortcodeで何をしたいか
今回はYoutubeの埋め込みを簡単にしたい。
そのため動画のidのみで動画が埋め込めるようなshortcodeを作成する。
埋め込んだ動画ウィンドウのサイズはレスポンシブっぽくしたい。
shortcodeの実装
htmlでYoutubeの埋め込みを作る。
実際にYoutube画面にある共有->埋め込みを押したときに出るコードをコピーして利用する。
コピーしてきたものからsrc
の内容を少し変える。
動画のIDが入る部分を変数の形として置き換えることでIDのみを変更する形で利用できるようにするイメージ。
使用するときのshortcodeイメージは以下。
{{% youtube id=“動画のID” %}}
実際にYoutubeの埋め込みからコピーしたhtmlは以下。
<iframe width="560" height="315" src="https://www.youtube.com/embed/rjTniCA74PQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
これをdiv
で囲んでsrc
を一部書き換えたのが以下。
class名はmovie-wrap
とした。
<div class="movie-wrap">
<iframe width="560" height="315" src="https://www.youtube.com/embed/{{ .Get "id" }}" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</div>
cssに追記
レスポンシブな動きをさせるためにcssにmovie-wrap
に関する挙動を追記しておく。
cssはテーマ内にあるlayouts/partials/styles.css
をベースとして、自分のlayouts/partials/
にコピーして持ってきておく。
追記する内容は以下の通り。
.movie-wrap {
position: relative;
padding-bottom: 56.25%; /*アスペクト比 16:9の場合の縦幅*/
height: 0;
overflow: hidden;
}
.movie-wrap iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
実際に使うとこんな感じ
記事への入力はこれ
{{% youtube id=“rjTniCA74PQ” %}}
以下はエスケープ除いた実際の表示
参考にしたサイト
shortcodeについて参考にしたところ
Hugoで画像や動画を投稿する時はShortcodeを使おう -Qiitaレスポンシブについて参考にしたところ
Youtubeの埋め込み動画をレスポンシブに対応させる方法 -webclips