CSSレイヤー

スタイル付きモードでのPrimeReactカスケードレイヤーのベストプラクティス。

CSSレイヤーはスタイル付きモードでのみ使用されます。アンスタイルモードでは、組み込みのCSSクラスは含まれておらず、その結果、レイヤーは定義されません。このドキュメントはスタイル付きモードのみに適用されます。

@layerは、優先順位のカスタマイズ可能な順序を定義するための標準的なCSS機能です。レイヤーについて詳しく知りたい場合は、まずMDNのドキュメントをご覧ください。スタイル付きモードでは、PrimeReactはライブラリのスタイルを簡単に上書きできるように、組み込みのスタイルクラスをprimereactカスケードレイヤーでラップします。レイヤーのないアプリのCSSは、CSSの特異性が最も高いため、場所やクラスの記述方法に関係なく、スタイルを上書きできます。

たとえば、使用中のテーマで定義されているInputSwitchコンポーネントの丸みを帯びたボーダーを削除する必要があるとします。これを実現するには、.p-inputswitch .p-inputswitch-sliderセレクターを上書きする必要があります。レイヤーがない場合、より強力なCSSを書いたり、!importantを使用する必要がありますが、レイヤーを使用すると、my-switch-sliderなどのより簡単なクラス名でPrimeReactを常に上書きできるため、問題は発生しません。このアプローチのもう1つの利点は、コンポーネントの組み込みクラス名を把握する必要がないことです。


import React, { useState } from 'react';
import { InputSwitch } from 'primereact/inputswitch';

export function SpecificityDemo() {
    const [checked, setChecked] = useState(false);
    const css = `
        .my-switch-slider {
            border-radius: 0;
        }

        .my-switch-slider:before {
            border-radius: 0;
        }
    `;

    return (
        <div className="card">
            <InputSwitch
                checked={checked}
                onChange={(e) => setChecked(e.value)}
                pt={{
                    slider: {
                        className: 'my-switch-slider'
                    }
                }}
            />
            <style>{css}</style>
        </div>
    );
}
 

レイヤーを使用すると、CSSモジュールを使用することもできます。例については、CSSモジュールガイドをご覧ください。

入力やボタンなどのHTML要素に対するグローバルスタイルがあり、それらがPrimeReactでも使用されている場合、カスタマイズの容易さが問題になる可能性があります。これは、より広い範囲を持つグローバルスタイル(例:button)とレイヤーがないと、常にPrimeReactコンポーネントを上書きして予期しない結果につながるためです。標準のHTML要素に適用されるグローバルスタイルの一般的なユースケースは、ブラウザのデフォルトのスタイルを削除するためのCSSリセットユーティリティです。この場合、ベストプラクティスは、resetのようなレイヤーでCSSをラップし、primereactをそのレイヤーの後に配置することです。レイヤーは後方に定義されたものが優先されるためです。これにより、リセットCSSがPrimeReactコンポーネントの邪魔になりません。


/* Order */
@layer reset, primereact;

/* Reset CSS */
@layer reset {
    button,
    input {
        /* CSS to Reset */
    }
}
 

PrimeReactとCSSライブラリの互換性。

Tailwind CSSには、baseと呼ばれるpreflightというリセットユーティリティが含まれています。この機能を使用する場合は、baseとユーティリティを別のレイヤーでラップし、primereactレイヤーをbaseの後に配置してください。


@layer tailwind-base, primereact, tailwind-utilities;

@layer tailwind-base {
    @tailwind base;
}

@layer tailwind-utilities {
    @tailwind components;
    @tailwind utilities;
}
 

Bootstrapには、標準要素のCSSをリセットするrebootユーティリティがあります。このユーティリティを含める場合は、インポート時にレイヤーを指定できます。


@layer bootstrap-reboot, primereact;

@import "bootstrap-reboot.css" layer(bootstrap-rebooot);
 

Normalizeは、標準要素のCSSをリセットする別のユーティリティです。CSSファイルのインポート時に、レイヤーを割り当て、normalizedレイヤーの後にprimereactを配置してレイヤーの順序を定義します。


@layer normalize, primereact;

@import "normalize.css" layer(normalize-reset);