※ 当ページには【広告/PR】を含む場合があります。
2022/03/06
前の回ではSvelteアプリの外部Sassファイルをどう扱うのかを簡単に解説していました。
【HTMLアプリ作成術】SvelteアプリをTyped.cssでSassからスタイリングを試してみるSvelteでHTML&CSSアプリのSassミックスインをどう扱えば良いかをTyped.cssを使って解説します。
他方、Typed.cssの回でやったように、scssファイルを直接的に読み込むようなケースの他に、npmインストールしてからnode_modules以下のライブラリとして利用するタイプのプロジェクトがあります。今回はnpmパッケージインストールありの場合でSassスタイルファイルをSvelteで利用する方法を紹介します。
【Html&Cssアプリ】Html/JavascriptとSassを使った四択クイズゲームの作り方NES.css(Node版)のインストール作業
なんだか訳アリのようで本家・NES.cssのnpmインストールは何年も更新が途絶えております。この本家をモダンなNode.js v12以上にパッケージインストールすると、どうやらランタイムか何かのライブラリが古いと怒られてしまい、インストールがコケてしまいます。開発者内部で何は起こったのか知る由もないのですが、代わりにこちらの@16bitsという代替パッケージかnode.v14向けのものを使うと上手くいくようです。Rollup側の調整
SvelteアプリでNode版のNES.cssを使うのは少々骨が折れるかも知れません。常にネットに接続された環境で使う場合には、Node版に拘る必要もなく、CDNでNES.cssを読み込めばそれで済む話なのですが...。このブログでは、Svelteアプリがオフラインである場合でも変わらずに動作するようにRollupの設定を調整します。おそらく既に以前のブログでもインストールしましたが、Rollupプラグインのsvelte-preprocess
をインストールします。このSvelte用のプリプロセッサから、node_modules
内にも読み込むべきリソースファイルがあることをコンパイラに知らせることができるようになります。次にrollup.config.js
に次のような内容に編集します。 file更に次のステップとして、node_modules内のスタイルを読み込めるようにApp.svelte
のsytleタグに読み込ませます。ここで少し間際らしいルールがあり、App.svelteから見た相対パスなので../node_modules/・・・
という書き出しになります。また、インポート先がCSSファイルなら.css
の拡張子は省きます。(上の例でいうとhoge.min.cssの.cssが不要)一方で、SCSSファイルを読み込むなら.scss
の拡張子は省略しません。ちょっと分かりにくいルールですが、これでSvelteアプリがnode_modules内のスタイルを読み込めるようになり、バンドルしてくれるようになります。
【Html&Cssアプリ】Html/JavascriptとSassを使った四択クイズゲームの作り方Svelteで独自フォントを使う
NES.cssは8bitレトロ感のあるフォントまではサポートしていないので、それっぽいフォントを頂いてきて利用する必要があります。公式では、「Nu もち」「美咲フォント」の2つのサイトが紹介されています。どちらもフリーで利用ライセンスも厳しくはないのですが、「Nu もち」はダウンロードの際にユーザー登録する手間があります。ここでは、「美咲フォント」を利用し、Svelteアプリに埋め込んでみることにします。@font-faceによるユーザー独自フォントの設定
グーグルフォントなどを利用する際に良く見かけるテクニックですが、ブラウザに対応していないフォントタイプを独自にcssファイルに埋め込んで利用する際には「@font-face」を実装することになります。@font-faceの使い方の概要は以下のサイトで解説されている方などが分かりやすいと思います。参照|CSSの@font-faceでGoogle Fontsのwebフォントを利用する方法Svelteでも外部フォントを使う際にも、基本的には@font-faceを定義するのですが、フォントファイルのプロジェクトの置き場所に注意します。まずは「美咲フォント」のサイトから、TrueType形式のフォントを頂いて参ります。ダウンロードしたzipフォルダを解凍すると、misaki_gothic.ttf
、misaki_gothic_2nd.ttf
、misaki_mincho.ttf
の3つのttfファイルが同梱されているので、Svelteアプリで利用したいフォントをpublic
フォルダの中へ移動させます。フォントをpublicフォルダに移動した後のSvelteプロジェクトはおおよそ以下のように配置されているとOKです。なお、フォントファイルはサイズ的に重い傾向にあるので、あれもこれもと欲張らずに利用したいフォントだけに絞ってからpublicで使うようにしたほうが良いでしょう。コードから@font-faceを呼び出す
独自に定義した@font-face
を呼び出すための方法として、こちらのサイトでも議論されていますが、「.svelteファイルのstyleタグから呼び出す方法」と「.css/.scssファイルでインポートする方法」の2通りがあります。ここでは、後者のCSSファイル側から定義する方法を採用します。global.scss
の冒頭に、以下のように@font-faceを定義しましょう。これで先程public
内に入れたmisaki_gothic.ttf
フォントが、Misaki_Gothic
という名前で独自のフォントファミリー名として引用できるようになりました。重要なポイントとして、Svelteのリソースファイルはpublic
フォルダをルートフォルダとして認識しているため、css側からurl(...)
でローカルのアセットファイルを読み込む際には、/
から始まるパスでpublic
フォルダのファイルの所在を記述する必要がある点です。とりあえずこれで一通りNES.cssがSvelteアプリとして動くようになったと思います。これでレトロ感あるHTML要素が簡単に生成することが出来るようになりました。なお、一部アイコン画像に©Nintendo Co., Ltd.を含むようですが(このサイトでは該当のデサインのアイコンは除外)、任天堂の著作権ガイドラインの定める範囲内で利用されるようにしてください。参考|任天堂の著作物利用ガイドラインを要素分解して見えた3つの疑問
【Html&Cssアプリ】Html/JavascriptとSassを使った四択クイズゲームの作り方まとめ
今回は、npmパッケージで提供されているcssスタイルのプロジェクトをSvelteでどのようにビルド出来るようにするかの手順を解説してみました。インターネットに接続されている状態でWEBページを提供するのなら、必ずしもnpmパッケージインストールする必要はなく、既にビルドされて公開されているCDNライブラリをHTMLファイルに読み込めばそれで済むとは思います。Svelteアプリを実行ファイル化する際には今回のテクニックがお役に立つと思います。参考サイト
How to import css in node_modules to svelte