リッチテキストエディタ『Quill』のツールバーに、任意のフォントを並べる方法を解説します。
結論から書くと、Quill.import('attributors/style/font') でフォントの属性を取り出し、whitelist に使いたいフォント名の配列を入れて登録し直します。あわせて、ツールバーの選択肢にフォント名を表示するCSSが必要です。
Quill は初期状態だと、フォントの選択肢が Sans Serif・Serif・Monospace の3つしかありません。この3つ以外を使いたい場合に、この記事の手順が必要になります。
コードは Quill 2.0.3 で動作を確認しています。Quill.import() と Quill.register() の書き方は 1.x から変わっていません。
スポンサーリンク
Quillのfont-familyをカスタマイズするjs
結論:フォント名の配列を作り、Font.whitelist に渡して Quill.register(Font, true) で登録します。同じ配列をツールバーの font にも渡します。
要点は次の3行です。
const fontFamilyArr = ['system-ui', 'sans-serif', 'arial', 'serif', 'monospace'];
const Font = Quill.import('attributors/style/font');
Font.whitelist = fontFamilyArr;
Quill.register(Font, true);
Quill.register() の第2引数の true は「既存の登録を上書きする」という意味です。これを省くと、既定の3つのフォントのままになります。
attributors/style/font と attributors/class/font の違いに注意してください。この記事では style のほうを使っています。
▼styleとclassの違い
attributors/style/font |
attributors/class/font |
|
|---|---|---|
| 出力されるHTML | style="font-family: arial;" |
class="ql-font-arial" |
| 表示側で必要なもの | なし | Quillのcss、または自前のcss |
| DBに保存して表示 | そのまま表示できる | クラスに対応するcssが要る |
Laravel で本文をデータベースに保存し、別のページで表示する使い方なら style を選んでください。class だと、表示側にも Quill のCSSを読み込むか、ql-font-arial に対応するスタイルを自分で書く必要があります。
全体のソースコードは下記の通りです。
/**
関数: テキストエディタの生成
引数: 作成する場所のid
戻り値: Quillエディタの生成情報
**/
function quillEditor(make_id) {
const themes = set_themes();
// font-family
const fontFamilyArr =
['system-ui', 'sans-serif', 'arial', 'serif', 'monospace', 'Courier', 'cursive', 'Comic Sans MS','fantasy'];
const Font = Quill.import('attributors/style/font');
Font.whitelist = fontFamilyArr;
Quill.register(Font, true);
// ツールバー機能の設定
const toolbarOptions = [
// 見出し
[{
'header': [1, 2, 3, 4, false]
}],
// フォント種類
[{
'font': fontFamilyArr
}],
// 文字寄せ
[{
'align': []
}],
// 太字、斜め、アンダーバー
['bold', 'italic', 'underline'],
// 文字色
[{
'color': []
},
// 文字背景色
{
'background': []
}
],
// リスト
[{
'list': 'ordered'
},
{
'list': 'bullet'
}
],
// インデント
[{
'indent': '-1'
}, {
'indent': '+1'
}],
// 画像挿入
['image'],
// 動画
['video'],
// 数式
['formula'],
// URLリンク
['link']
];
make_id = '#' + make_id;
// エディタの情報を生成
const quill = new Quill(make_id, {
modules: {
toolbar: toolbarOptions
},
placeholder: '本文を入力してください',
theme: themes
});
return quill;
}
// テーマ設定(PCとSPでテーマを切り替える)
function set_themes() {
// 画面幅が750pxより広ければ snow、狭ければ bubble
return window.matchMedia('(min-width: 751px)').matches ? 'snow' : 'bubble';
}
Quillのfont-familyをカスタマイズするcss
結論:CSSを書かないと、追加したフォントがツールバーで「Sans Serif」などの既定ラベルのまま表示されます。content: attr(data-value) で、フォント名そのものをラベルに出します。
Quill は、既定の3つのフォントにだけ表示用のラベルを持っています。whitelist に追加したフォントには対応するラベルが無いため、そのままだと選択肢の見分けが付きません。
scssでの記述です。
.ql-snow,
.ql-bubble {
.ql-picker {
&.ql-font {
.ql-picker-label,
.ql-picker-item {
&::before {
content: attr(data-value) !important;
}
}
}
}
}
テーマを切り替えている場合は .ql-snow だけでなく .ql-bubble にも当ててください。上のJavaScriptは画面幅でテーマを切り替えているので、スマートフォンで開いたときは .ql-bubble になります。.ql-snow だけに書いていると、スマートフォンでフォント名が表示されません。
選択肢に実際のフォントで表示したい場合は、font-family も添えます。
.ql-picker.ql-font .ql-picker-item[data-value="arial"]::before {
font-family: arial;
}
この記事のコードを動かす前に
結論:この記事はQuillがすでに動いている前提のカスタマイズです。導入がまだなら先にそちらを済ませてください。
CDNの読み込みから new Quill() までの手順は、Laravelにリッチテキストエディタ『Quill』を実装するにまとめています。Quill 2.0 で配布元のURLが変わっているので、古い記事のCDNをコピーしてきた場合は動きません。
同じ要領で文字サイズの選択肢も増やせます。手順はエディタ『Quill』のfont-sizeをカスタマイズするにまとめました。font の部分を size に置き換えるだけなので、まとめて設定してしまうのが楽です。
▼Quillのfont-sizeをカスタマイズしたい方はこちらの記事をどうぞ
▼HTML/CSS/JavaScriptの学習本を探してる方はこちらの記事をどうぞ

