リッチテキストエディタ『Quill』のツールバーに、任意の文字サイズを並べる方法を解説します。

結論から書くと、Quill.import('attributors/style/size') でサイズの属性を取り出し、whitelist に使いたいサイズの配列を入れて登録し直します。あわせて、選択肢にサイズを表示するCSSが必要です。

Quill は初期状態だと、文字サイズの選択肢が Small・Normal・Large・Huge の4段階しかありません。「14px」「16px」のように具体的な値で選ばせたい場合に、この記事の手順が必要になります。

コードは Quill 2.0.3 で動作を確認しています。Quill.import()Quill.register() の書き方は 1.x から変わっていません。

Quillのfont-sizeをカスタマイズするjs

結論:サイズの配列を作り、Size.whitelist に渡して Quill.register(Size, true) で登録します。同じ配列をツールバーの size にも渡します。

要点は次の4行です。

const fontSizeArr = ['12px', '14px', '16px', '20px', '24px', '32px'];
const Size = Quill.import('attributors/style/size');
Size.whitelist = fontSizeArr;
Quill.register(Size, true);

whitelist に入れた文字列が、そのまま style="font-size: 14px;" として出力されます。単位まで含めて書いてください。'14' のように単位を省くと、CSSとして無効な値になり反映されません。

remem で指定することもできます。表示側でフォントサイズを相対的に扱いたい場合は、そちらのほうが扱いやすくなります。

const fontSizeArr = ['0.75rem', '1rem', '1.25rem', '1.5rem', '2rem'];

選択肢を増やしすぎないほうが使いやすくなります。下記のソースコードでは14段階を並べていますが、実際に本文で使うのはせいぜい4〜5種類です。段階が多いとツールバーのドロップダウンが長くなり、書き手が毎回迷うことになります。

なお、attributors/style/sizestyle 属性として出力されるので、保存したHTMLをそのまま別のページで表示できます。attributors/class/size を使うと ql-size-14px のようなクラスになり、表示側にも対応するCSSが必要になります。Laravel でデータベースに保存して表示する使い方なら style を選んでください。

全体のソースコードは下記の通りです。

/**
    関数: テキストエディタの生成
    引数: 作成する場所のid
    戻り値: Quillエディタの生成情報
**/
function quillEditor(make_id) {

    const themes = set_themes();

    // font-size
    const fontSizeArr = ['8px','9px','10px','12px','14px','16px','20px','24px','32px','42px','54px','68px','84px','98px'];
    const Size = Quill.import('attributors/style/size');
    Size.whitelist = fontSizeArr;
    Quill.register(Size, true);

    // ツールバー機能の設定
    const toolbarOptions = [
        // 見出し
        [{
            'header': [1, 2, 3, 4, false]
        }],
        // フォント種類
        [{
            'font': []
        }],
        // フォントサイズ
        [{
            'size': fontSizeArr
        }],
        // 文字寄せ
        [{
            '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-sizeをカスタマイズするcss

結論:CSSを書かないと、追加したサイズがツールバーで空欄になります。content: attr(data-value) で、サイズの値そのものをラベルに出します。

Quill は既定の4段階にだけラベルを持っています。whitelist に 14px を追加しても、対応するラベルが無いため選択肢が空のまま並びます。

scssでの記述です。

.ql-snow,
.ql-bubble {
    .ql-picker {
        &.ql-size {
            .ql-picker-label,
            .ql-picker-item {
                &::before {
                    content: attr(data-value) !important;
                }
            }
        }
    }
}

テーマを切り替えている場合は .ql-snow だけでなく .ql-bubble にも当ててください。上のJavaScriptは画面幅でテーマを切り替えているため、スマートフォンでは .ql-bubble になります。.ql-snow だけに書いていると、スマートフォンでサイズの表示が空欄のままになります。

選択肢を実際の大きさで表示したい場合は、font-size も添えます。ただし段階が大きいと行の高さが崩れるので、上限を決めて指定してください。

.ql-picker.ql-size .ql-picker-item[data-value="14px"]::before {
    font-size: 14px;
}

 

 

この記事のコードを動かす前に

結論:この記事はQuillがすでに動いている前提のカスタマイズです。導入がまだなら先にそちらを済ませてください。

CDNの読み込みから new Quill() までの手順は、Laravelにリッチテキストエディタ『Quill』を実装するにまとめています。Quill 2.0 で配布元のURLが変わっているので、古い記事のCDNをコピーしてきた場合は動きません。

フォントの種類も同じ要領で増やせます。手順はエディタ『Quill』のfont-familyをカスタマイズするにまとめました。size の部分を font に置き換えるだけなので、まとめて設定してしまうのが楽です。

▼Quillのfont-familyをカスタマイズしたい方はこちらの記事をどうぞ

【Laravel】エディタ『Quill』のfont-familyをカスタマイズする
【Laravel】Quillのfont-familyをカスタマイズしてフォントを追加するリッチテキストエディタQuillのツールバーに任意のフォントを追加する方法です。attributors/style/fontのwhitelistに配列を渡して登録し直し、CSSでフォント名をラベルに出します。styleとclassの違いと、保存したHTMLをそのまま表示できる理由も解説します。...

 


 

HTML/CSS/JavaScriptの学習本を探してる方はこちらの記事をどうぞ

2023年版 Webコーディングにオススメの学習本【HTML/CSS/JavaScript】
Webコーディングにオススメの学習本4冊【HTML/CSS/JavaScript】WebコーディングのおすすめHTML/CSS/JavaScript学習本4冊を、著者・出版社・刊行年まで明記して紹介。HTML Living Standard準拠かどうかを基準に選ぶ理由と、floatだけで段組みを説明する古い本を避ける判断方法もまとめました。...

 

ABOUT ME
りん
このブログでは、Web開発やプログラミングに関する情報を中心に、私が日々感じたことや学んだことをシェアしています。技術と生活の両方を楽しめるブログを目指して、日常で触れた出来事や本、グルメの話題も取り入れています。気軽に覗いて、少しでも役立つ情報や楽しいひとときを見つけてもらえたら嬉しいです。