バニラ抽出:新しいフレームワークインタイプライブラリ。スタイルを書くための軽量で堅牢で直感的な方法を提供します。バニラ抽出物は、必須のCSSフレームワークではなく、柔軟な開発者ツールです。近年、CSSツールフィールドは比較的安定しており、PostCSS、SASS、CSSモジュール、スタイルのコンポーネントなどのツールが2017年以前に登場し(さらに早く)、今日でも非常に人気があります。 Tailwindは、近年CSSツールフィールドに変化をもたらした数少ないツールの1つです。
バニラ抽出物は、変化を再びトリガーすることを目的としています。今年リリースされ、以下を含むいくつかの最新トレンドの恩恵を受けました。
バニラ抽出物には多くの賢い革新がありますが、それは意味があると思います。
CSS-in-JSライブラリは通常、実行時にスタイルをドキュメントに注入します。これには、重要なCSS抽出や動的スタイルなど、いくつかの利点があります。
しかし、通常、個々のCSSファイルはパフォーマンスが向上します。これは、JavaScriptコードがより高価な解析/コンピレーションプロセスを通過する必要があるため、個別のCSSファイルをキャッシュでき、HTTP2プロトコルは追加のリクエストのコストを削減するためです。さらに、カスタムプロパティが多くのダイナミックスタイルで無料で利用できるようになりました。
したがって、バニラ抽出物は、実行時にスタイルを注入するのではなく、リナリアとアストロターフに従います。これらのライブラリを使用すると、ビルド時に抽出され、CSSファイルの構築に使用されるJavaScript関数を使用してスタイリングできます。 TypeScriptを使用してVanilla-Extractを記述しますが、これはProduction JavaScriptパッケージの全体的なサイズには影響しません。
バニラ抽出の大きな価値提案の1つは、タイプチェックを提供することです。コードベースタイプを安全に保つことが非常に重要な場合は、スタイルでも同じことをしてみませんか?
タイプスクリプトは多くの利点を提供します。 1つ目は自動完了です。 TypeScriptをサポートするエディターで「FO」と入力すると、フォントオプション(Fontfamily、Fontkerning、Fontweight、またはその他のマッチ)を備えたドロップダウンリストが表示されます。これにより、CSSプロパティは、エディターの便利さで簡単に発見できます。 Fontvariantの名前を覚えていないが、「Font」から始まることを知っている場合は、入力してオプションをスクロールできます。 VSコードでは、これを達成するために追加のツールをダウンロードする必要はありません。
これにより、スタイルの執筆が大幅に高速化されます。
これはまた、編集者が常にあなたを監視し、イライラするバグにつながる可能性のあるスペルミスをしないようにすることを意味します。
バニラ抽出型は、そのタイプ定義で編集しているCSSプロパティの構文解釈とMDNドキュメントへのリンクも提供します。これにより、スタイルが異常に動作するときに、クレイジーなGoogle検索のステップが節約されます。
TypeScriptを使用して書くということは、Camel命名法を使用して、BackgroundColorなどのCSSプロパティを表すことを意味します。これには、バックグラウンドカラーなどの通常のCSS構文を使用することに慣れている開発者には、いくつかの変更が必要になる場合があります。
Vanilla-Extractは、すべての最新のパッケージツールにファーストパーティ統合を提供します。現在サポートしている統合の完全なリストは次のとおりです。
また、フレームワークとは何の関係もありません。ビルド時に文字列に変換されるバニラ抽出物からクラス名をインポートするだけです。
バニラ抽出物を使用するには、コンポーネントがインポートできる.css.ts
ファイルを記述できます。これらの関数への呼び出しは、ビルドステップでハッシュおよびスコープクラス名文字列に変換されます。これはCSSモジュールと同様に聞こえる可能性があり、偶然ではありません。バニラ抽出の作成者の1人であるMark Dalgleishは、CSSモジュールの共同作成者でもあります。
style()
関数style()
関数を使用して、自動的にスコープされたCSSクラスを作成できます。要素のスタイルを渡してから、返品値をエクスポートします。この値をユーザーコードのどこかにインポートすると、スコープクラス名に変換されます。
// title.css.ts 「@vanilla-extract/css」から{style}をインポートします。 const titlestele = styleをエクスポートする({ BackgroundColor:「HSL(210Deg、30%、90%)」、 fontfamily: "Helvetica、sans-serif"、 色:「HSL(210deg、60%、25%)」、 パディング:30、 Borderradius:20、 });
// title.ts "./title.css"から{titlestele}をインポートします。 document.getElementById( "root")。innerhtml = `<h1>バニラエキス</h1>`;
メディアクエリと擬似選択者も、スタイル宣言に含めることができます。
// title.css.ts BackgroundColor:「HSL(210Deg、30%、90%)」、 fontfamily: "Helvetica、sans-serif"、 色:「HSL(210deg、60%、25%)」、 パディング:30、 Borderradius:20、 「@media」:{ "screen and(max-width:700px)":{ パディング:10 } }、 ":ホバー":{ BackgroundColor:「HSL(210Deg、70%、80%)」 }
これらのstyle
関数呼び出しは、CSSの軽量の抽象化です。すべての属性名と値は、よく知っているCSSプロパティと値にマッピングされます。慣れるための1つの変更は、値を数値として宣言することができること(パディング:30)として、ピクセル単位値にデフォルトであることがありますが、一部の値は文字列として宣言する必要があります(たとえば、パディング: "10px 20px 15px 15px")。
style
関数のプロパティは、単一のHTMLノードにのみ影響します。これは、ネストを使用して要素の子要素のスタイルを宣言することができないことを意味します。これは、SASSまたはPostCSSで慣れている可能性があります。代わりに、子供の要素を個別にスタイリングする必要があります。子要素を親要素のさまざまなスタイルに基づいている必要がある場合、 selectors
属性を使用して、親要素に依存するスタイルを追加できます。
// title.css.ts const innerspan = style({{ セレクター:{[`$ {titlestele}&`]:{ 色:「HSL(190deg、90%、25%)」、 fontstyle: "italic"、 TextDecoration:「下線」 }} });
// title.ts "./title.css"から{titlestele、innerspan}をインポートします。 document.getElementById( "root")。innerhtml = `<h1>バニラエキス</h1> unstyled`;
または、トピックAPI(次に説明します)を使用して、子ノードで使用される親要素にカスタムプロパティを作成できます。これは厳格に聞こえるかもしれませんが、大規模なコードベースの保守性を改善するために意図的に設計されています。これは、プロジェクト内の各要素のスタイルが宣言される場所を正確に把握できることを意味します。
createTheme
関数を使用して、型に変数を作成できます。
// title.css.ts "@vanilla-extract/css"から{style、createTheeme}をインポート。 //テーマエクスポートconst [maintheme、vars] = createTheme({ 色:{ テキスト:「HSL(210deg、60%、25%)」、 背景:「HSL(210deg、30%、90%)」 }、 長さ:{ MediumGap:「30px」 } }) //トピックエクスポートconst titlestele = styleを使用する({ BackgroundColor:vars.color.background、 色:vars.color.text、 fontfamily: "Helvetica、sans-serif"、 パディング:vars.lengths.mediumgap、 Borderradius:20、 });
バニラ抽出物を使用すると、テーマのバリエーションを作成できます。 TypeScriptは、バリアントが同じ属性名を使用することを保証するのに役立つため、トピックに背景属性を追加するのを忘れた場合、警告が表示されます。
通常のテーマとダークモードを作成する方法は次のとおりです。
// title.css.ts "@vanilla-extract/css"から{style、createTheeme}をインポート。 const const [maintheme、vars] = createTheme({ 色:{ テキスト:「HSL(210deg、60%、25%)」、 背景:「HSL(210deg、30%、90%)」 }、 長さ:{ MediumGap:「30px」 } }) //テーマバリアント - この部分は配列構文エクスポートを使用していないことに注意してくださいconst darkMode = createTheem(vars、{ 色:{ テキスト:「HSL(210Deg、60%、80%)」、 背景:「HSL(210deg、30%、7%)」、 }、 長さ:{ MediumGap:「30px」 } }) //トピックエクスポートconst titlestele = styleを使用する({ BackgroundColor:vars.color.background、 色:vars.color.text、 fontfamily: "Helvetica、sans-serif"、 パディング:vars.lengths.mediumgap、 Borderradius:20、 });
次に、JavaScriptを使用して、バニラ抽出物によって返されたクラス名を動的に適用してトピックを切り替えることができます。
// title.ts "./title.css"から{titlestele、maintheme、darkmode}をimport document.getElementById( "root")。innerhtml = `<div> <h1>バニラエキス</h1> ダークモード </div>`
これは一番下でどのように機能しますか? createTheme
関数で宣言するオブジェクトは、要素クラスに接続されたCSSカスタムプロパティに変換されます。これらのカスタムプロパティは、競合を防ぐためにハッシュされています。 mainTheme
例の出力CSSは次のようになります。
.src__ohrzop0 { -color-brand__ohrzop1:HSL(210deg、80%、25%); -color-text__ohrzop2:HSL(210deg、60%、25%); -color-background__ohrzop3:HSL(210deg、30%、90%); -lengths-mediumgap__ohrzop4:30px; }
そして、 darkMode
テーマのCSS出力は次のとおりです。
.src__ohrzop5 { -color-brand__ohrzop1:HSL(210deg、80%、60%); -color-text__ohrzop2:HSL(210deg、60%、80%); -color-background__ohrzop3:HSL(210deg、30%、10%); -lengths-mediumgap__ohrzop4:30px; }
したがって、ユーザーコードのクラス名を変更するだけです。 darkmode
クラス名を親要素に適用すると、 mainTheme
カスタム属性がdarkMode
カスタム属性に置き換えられます。
style
とcreateTheme
関数は、それ自体でウェブサイトをスタイリングするのに十分ですが、バニラ抽出物は再利用性を向上させるための追加のAPIを提供します。レシピAPIを使用すると、タグまたはユーザーコードで選択できる要素の多くのバリエーションを作成できます。
まず、個別にインストールする必要があります。
npmインストール @vanilla-extract/レシピ
これがどのように機能するかです。 recipe
関数をインポートし、 base
とvariants
プロパティを含むオブジェクトに渡します。
// button.css.ts '@vanilla-extract/Recipes'から{Recipe}をインポートします。 const buttonStyles = RECIPE({{ ベース:{ //すべてのボタンに適用されるスタイルはここに配置されています}、 バリアント:{ //ここから選択するスタイル} });
base
では、すべてのバリエーションに適用されるスタイルを宣言できます。 variants
では、要素をカスタマイズするさまざまな方法を提供できます。
// button.css.ts '@vanilla-extract/Recipes'から{Recipe}をインポートします。 const buttonStyles = RECIPE({{ ベース:{ フォント級:「太字」、 }、 バリアント:{ 色: { 普通: { BackgroundColor:「HSL(210Deg、30%、90%)」、 }、 calltoaction:{ BackgroundColor:「HSL(210Deg、80%、65%)」、 }、 }、 サイズ: { 大きい: { パディング:30、 }、 中くらい: { パディング:15、 }、 }、 }、 });
その後、タグで使用するバリアントを宣言できます。
// button.ts "./button.css"から{buttonStyles}をインポートします。 私をクリックしてください
Vanilla-Extractは、TypeScriptを使用して独自のバリアント名に自動完成を提供します!
あなたはあなたが好きなようにバリアントに名前を付けて、あなたがそれに必要な属性を置くことができます:例:
// button.css.ts const buttonStyles = RECIPE({{ バリアント:{ 動物: { 犬: { backgroundimage: 'url( "./ dog.png")'、 }、 猫: { backgroundimage: 'url( "./ cat.png")'、 }、 うさぎ: { backgroundimage: 'url( "./ rabbit.png")'、 }、 }、 }、 });
これは、再利用可能なコンポーネントを作成し、それらがどのように変化するかを制御できるため、設計システムの構築に非常に役立つことがわかります。これらの変更は、TypeScriptで簡単に見つけることができます。CMD/CTRLスペース(ほとんどのエディター)と入力するだけで、コンポーネントをカスタマイズするさまざまな方法をリストするドロップダウンリストが表示されます。
スプリンクルは、バニラ抽出に基づいて構築された実用的な優先フレームワークです。 Vanilla-Extractドキュメントは、次のように説明しています。
基本的に、Zero Runtime、Type-Safe Tailwind、Styled Systemなどの独自のバージョンを構築するようなものです。
したがって、物事に名前を付けるのが好きではない場合(私たち全員が悪夢を抱え、外部ラッパーDivを作成してから、外部外部ラッパーでラッピングする必要があることに気付く場合、スプリンクルはバニラ抽出を使用するのが好ましい方法かもしれません。
スプリンクルAPIも個別にインストールする必要があります。
npmインストール @vanilla-extract/スプリンクル
これで、実用的な機能を使用するためのビルディングブロックを作成できます。いくつかのオブジェクトを宣言して、色と長さのリストを作成しましょう。 JavaScriptキー名は、私たちが望むものなら何でもかまいません。値は、使用する予定のCSS属性の有効なCSS値である必要があります。
// sprinkles.css.ts const colors = { Blue100:「HSL(210Deg、70%、15%)」、 Blue200:「HSL(210Deg、60%、25%)」、 Blue300:「HSL(210Deg、55%、35%)」、 Blue400:「HSL(210Deg、50%、45%)」、 Blue500:「HSL(210Deg、45%、55%)」、 Blue600:「HSL(210Deg、50%、65%)」、 Blue700:「HSL(207DEG、55%、75%)」、 Blue800:「HSL(205DEG、60%、80%)」、 Blue900:「HSL(203Deg、70%、85%)」、 }; const lengths = { 小さい:「4px」、 中程度:「8px」、 大きい:「16px」、 Humungous:「64px」 };
defineProperties
関数を使用して、これらの値が適用されるCSSプロパティを宣言できます。
properties
属性を含むオブジェクトを渡します。properties
では、キーがユーザーが設定できるCSSプロパティ(これらは有効なCSSプロパティが必要)であるオブジェクトを宣言し、値は以前に作成したオブジェクト(色と長さのリスト)です。// sprinkles.css.ts 「@vanilla-extract/Sprinkles」から{defineProperties}をインポートします。 const colors = { Blue100:「HSL(210Deg、70%、15%)」 //など } const lengths = { 小さい:「4px」、 //など } const Properties = defineProperties({ プロパティ:{ //このオブジェクトのキーは有効なCSS属性である必要があります//値はユーザーの色に提供するオプションです:色、 BackgroundColor:色、 パディング:長さ、 }、 });
次に、最後のステップは、 defineProperties
の返品値をcreateSprinkles
関数に渡し、返品値をエクスポートすることです。
// sprinkles.css.ts 「@vanilla-extract/sprinkles」から{defineProperties、createSprinkles}をインポートします。 const colors = { Blue100:「HSL(210Deg、70%、15%)」 //など } const lengths = { 小さい:「4px」、 //など } const Properties = defineProperties({ プロパティ:{ 色:色、 //など }、 }); const springles = createsprinkles(プロパティ)をエクスポートします。
その後、 class
属性のsprinkles
関数を呼び出し、各要素に必要なオプションを選択することにより、コンポーネント内のインラインスタイルを開始できます。
// index.ts "./sprinkles.css"から{sprinkles}をインポートします。 document.getElementById( "root")。innerhtml = `クリックしてください `;
JavaScript出力は、各スタイル属性のクラス名文字列を保存します。これらのクラス名は、出力CSSファイルの単一のルールと一致します。
私をクリックしてください
ご覧のとおり、このAPIでは、事前定義された制約のセットを使用してタグ内の要素をスタイリングできます。また、各要素のクラス名を思いつくという難しいタスクを回避することもできます。結果は、Tailwindに非常に似ていると感じるものですが、TypeScriptを中心に構築されたすべてのインフラストラクチャの恩恵を受けます。
Sprinkles APIを使用すると、条件と略語を作成して、ユーティリティクラスを使用してレスポンシブスタイルを作成することもできます。
バニラ抽出物は、CSSツールの分野で大きな進歩のように感じます。静的タイピングが提供するすべての機能を活用する直感的で堅牢なスタイルのソリューションにそれを構築することに多くの考えが投資されました。
この改訂された出力は、異なる文言と文の構造を使用しながら、元の意味を維持します。
以上がバニラ抽出を備えたタイプスクリプトのCSSの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。