Tailwindをstyle属性へ変換【mailwind】

挨拶

ども!ちょっと休暇をとって温泉地に移動中の龍ちゃんです。2泊3日で温泉を堪能する予定です。

今回は、だいぶ特殊な要件:「Tailwindを純粋なCSS Styleのみに変換したい」を満たす内容でニッチすぎる内容になっています。僕はHTMLメールをTailwindから書きたいという部分から始まりました。

mailwind

Tailwindで表現したHTMLをstyleに変換して出力してくれるライブラリが「mailwind」になります。こちらのライブラリは、HTMLファイルを解析して以下のことができます。

  • CSSファイル出力
  • Inline-CSS形式で記述されたHTML形式ファイル出力

環境構築

すでにHTML + Tailwindでコーディングをできる環境は整っている前提で進めていきます。もし整っていない方は、以下の記事を参考にして自分なりの環境を整えてください。

mailwind Setup

環境のセットアップはとても簡単に完了します。

npm install mailwind

こちらのコマンドだけでインストールは終了です。次に実行コマンドについて記載しています。mailwindでは、入力として二つのファイルを受け取ることができます。

入力解説
—input-htmlTailwindで記載されているHTMLファイル ※必須
—tailwind-configTailwindの設定ファイル(デフォルトでtailiwnd.config.jsになっている)

出力としては、以下の二つになります。

出力解説
—output-html入力で受け取ったHTMLファイルにinline-style形式で追記されたファイル
—output-css入力で受け取ったHTMLファイルで定義されているTailwindクラスのCSSファイル

出力はどちらか一方でも、両方でも値として渡すことができます。両方渡してもあんまり意味ないですけどね。

参考のコマンドです。

# inline cssのみ
mailwind --input-html public/input.html --output-html output.html

# CSS ファイルのみ生成
mailwind --input-html public/input.html --output-css style.css

# inline-style:html css両方作成
mailwind --input-html public/mail.html --output-html output.html --output-css style.css

Example:before → after

出力の結果をサンプルとして置いています。

こちらをtailwind形式で記載したファイルが以下になります。

<div class="flex flex-row items-center justify-start gap-4 w-full p-10 flex-wrap">
  <div class="inline-flex w-52 flex-col gap-2 p-2 rounded-md bg-white shadow">
    <h2 class="text-lg font-bold">まっすぐ歩く</h2>
    <p class="text-green-500">実行中</p>
  </div>
  <div class="font-bold text-2xl">→</div>
  <div class="inline-flex w-52 flex-col gap-2 p-2 rounded-md bg-white shadow">
    <h2 class="text-lg font-bold">右に曲がる</h2>
    <p class="text-red-500">実行終了</p>
  </div>
</div>

こちらをmailwindを用いてinline-style形式に変換したのが以下になります。

<div class="flex flex-row items-center justify-start gap-4 w-full p-10 flex-wrap" style="display: flex; width: 100%; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: flex-start; gap: 16px; padding: 40px;">
  <div class="inline-flex w-52 flex-col gap-2 p-2 rounded-md bg-white shadow" style="display: inline-flex; width: 208px; flex-direction: column; gap: 8px; border-radius: 0.375rem; background-color: #fff; padding: 8px; --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);">
    <h2 class="text-lg font-bold" style="font-size: 18px; font-weight: 700;">まっすぐ歩く</h2>
    <p class="text-green-500" style="color: #22c55e;">実行中</p>
  </div>
  <div class="font-bold text-2xl" style="font-size: 24px; font-weight: 700;">→</div>
  <div class="inline-flex w-52 flex-col gap-2 p-2 rounded-md bg-white shadow" style="display: inline-flex; width: 208px; flex-direction: column; gap: 8px; border-radius: 0.375rem; background-color: #fff; padding: 8px; --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);">
    <h2 class="text-lg font-bold" style="font-size: 18px; font-weight: 700;">右に曲がる</h2>
    <p class="text-red-500" style="color: #ef4444;">実行終了</p>
  </div>
</div>

ファイルを見ていただいたらわかる通り、必要な情報がすべてHTMLに乗っています。

試したけどできなかったこと
tailwind.configで記載しているGoogle Fontsの情報はロードされませんでした。ただ、定義した追加・自作のTailwindに関しては反映されていました。 どうしても使用したい場合は、HTML側に記載しておくなどの対応が必要そうです

おわり

ども!今回の要望はだいぶニッチだったなと我ながら思います。そんなニッチの要望も世界のどこかで需要があってライブラリが開発されているのってすごいですよね。

ちなみに僕は社内メールをTailwindを書きたかったので、今回のライブラリを発見しました。そこから発展してStremlitでHTMLでデザインをするときも利用できそうということで、次回のブログのネタにしておきます。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です