【EJS】コンポーネントを作って変数設定

どうも、くまだです。

EJSで、コンポーネント(パーツ)を作って変数設定して、セクションや場所ごとに変数の中身を書き換える。

コンポーネントを作って変数設定

例えば、ラベルのパーツをcomponentsフォルダの中に_c-label.ejsファイルに作成します。

〇 _c-label.ejs

<span class="c-label <%= className %>"><%- title %></span>

そのラベルパーツには、クラス名とラベルのテキスト部分に変数を設定します。(<%= 変数 %>や<%-変数 %>の部分)

実際に使用するときは、例えばindex.ejsファイルに以下のように記述。

〇 index.ejs

<%- include('./components/_c-label.ejs', { className: "", title:"ラベル" }); %>

これをbuildすると、以下のようにHTMLで出力されます。

<span class="c-label ">ラベル</span>

クラス名追加したい場合は、classNameの部分に任意のクラスを付与。

<%- include('./components/_c-label.ejs', { className: "c-label--bgGray", title:"ラベル" }); %>
<%- include('./components/_c-label.ejs', { className: "c-label--bgGreen", title:"ラベル" }); %>

これをbuildすると、以下のようにHTML出力されます。

<span class="c-label c-label--bgGray">ラベル</span>
<span class="c-label c-label--bgGreen">ラベル</span>

上記みたいな感じで使えるので、例えばセクションごとにパーツ周りの余白が異なる場合でも、それぞれのセクションのクラス名を付与して、そのクラスに対して余白を当てる、などして対応できます。

パーツの使いまわしを考慮して、c-labelには余白を当てません。

<%- include('./components/_c-label.ejs', { className: "p-about__label", title:"ラベル" }); %>

<%- include('./components/_c-label.ejs', { className: "p-news__label", title:"ラベル" }); %>
.p-about__label {
   margin-top: 40px;
}

p-news__label {
   margin-top:10px;
}

buildすると以下のように出力され、それぞれに付与したクラスによって異なるCSSを適用できます。

<span class="c-label p-about__label">ラベル</span>

<span class="c-label p-news__label">ラベル</span>

ここまで読んでくださりありがとうございました。

この記事を書いた人