9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Deno で UnoCSS を SSR する

Posted at

Deno で UnoCSS を SSR する方法の紹介です。

UnoCSS とは

UnoCSS は Tailwind CSS と互換性のある、Atomic CSS エンジンです。

Vite や Vue のコアメンバーである Anthony Fu によって開発が始められ、現在は複数のメンバーによって活発に開発が続けられています。

Anthony Fu は UnoCSS を開発する以前に、似たような Atomic CSS エンジンである Windi CSS を開発していました。Windi CSS では、プラグインの機構なども含めて、かなり厳密に Tailwind との互換性を取るようなデザインをしていましたが、その制約によって、Windi CSS の使い勝手が悪いという不満を作者自身が感じるようになりました。Tailwind との細かい互換性を無視して、速さと設定のフレキシブルさによりフォーカスしたデザインで1から作り直したものが UnoCSS です。(この辺りの経緯が UnoCSS 開発の動機を説明したブログ記事で詳しく説明されています。

Deno とは

Deno は TypeScript や開発ツール (リンター、フォーマッター) がビルトインされた新しい JavaScript エンジンです。

Deno で UnoCSS を SSR する

Deno から UnoCSS を使うには、esm.sh でホストされているバージョンを使います。

import { createGenerator } from "https://esm.sh/@unocss/core@0.45.22";
import presetUno from "https://esm.sh/@unocss/preset-uno@0.45.22";

createGenerator() で UnoCSS の Generator クラスを作る事が出来ます。これが UnoCSS エンジンの本体になります。presetUno は UnoCSS のデフォルトのクラス定義集です。Tailwind にほぼ互換な設定がプリセットされています。

// Creates Uno generator
const uno = createGenerator({ presets: [presetUno()] });

Generator である uno に対して .generate(...) メソッドを呼び出すと、与えられたクラス群に対応するスタイルシートを生成してくれます。

// Generates css
const { css } = await uno.generate("ml-1", { preflights: false });
console.log(css);
// 以下のように出力されます
// /* layer: default */
// .ml-1{margin-left:0.25rem;}

.generate(...) の1引数目に色々なクラスを指定すると、それに応じた内容のスタイルシートが出力されます。

const { css } = await uno.generate("border border-t border-blue-100", { preflights: false });
console.log(css);
// 以下が出力される
// /* layer: default */
// .border{border-width:1px;border-style:solid;}
// .border-t{border-top-width:1px;border-top-style:solid;}
// .border-blue-100{--un-border-opacity:1;border-color:rgba(219,234,254,var(--un-border-opacity));}

上記の例で指定しているオプションで preflights: true を指定すると、リセット CSS に相当するスタイルシートが同時に出力されます (冗長なため、サンプルは割愛)

サーバーに組み込む場合は、上記の css 変数の内容を、<style> タグにセットする事で必要なスタイルを効かせる事が出来ます。

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?