CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法

詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効です

var() の使用法

{} 内でのみ宣言可能で、スコープは {} のセレクタによって決定されます。

<!-- 免責事項-->
体{
  --name:value; // 本文で有効}


<!-- 使用法 -->
。テスト{
  attr: var(--name,defaultValue) //--nameが存在しない場合はdefaultValueを使用する
  
  var(--name):#369;//間違った使い方}

CSS のネイティブ変数定義構文は –* で、変数使用構文は var(–*) です。ここで、* は変数名を表します。

ただし、$、[、^、(、% などの文字を含めることはできません。通常の文字は「数字 [0-9]」、「英字 [a-zA-Z]」、「アンダースコア _」、「ハイフン -」の組み合わせに限られますが、中国語、日本語、韓国語は使用できます。

実行時にSCSS変数値を変更する

この方法は、scsss変数の値を直接変更しませんが、同じ効果を実現できます。変数で複数の属性を制御する方が効率的で簡潔です。単一の変数を使用して単一の属性を制御する必要はありません。この方法は、スタイル属性を変更するだけです。1対1は、スタイルに属性を記述するのと同じです。

原則(英語)

簡単に言えば、scss変数はcss変数によって制御されます

$色: (
  プライマリ: #FFBB00、
  セカンダリ: #0969A2
);

セレクタ1{
  @each $name、$colors 内の $color {
    --color-#{$name}: $color;
  }
}

<!-- セレクタ1の生成効果-->
:根 {
  --color-primary: #FFBB00;
  --セカンダリカラー: #0969A2;
}


<!-- 使用方法 1: CSS 変数を直接使用する -->
セレクタ{
  色:var(--color-primary);
}

<!-- 使用法 2 では、scss 構文の推奨事項に準拠するために scss 関数を使用します -->  
@function color($色名) {
  @return var(--color-#{$color-name});
}

体 { 
  color: color(primary); //使用}

<!-- ボディ生成効果 -->
体 { 
  color: var(--color-primary); //これはjsで設定できます}

jsはcss変数を設定します。つまり、scss変数を設定して実行します。

domObject.style.setProperty(name,value); //name は CSS 変数名です。例: --color-primary

今のところ、scss での変数値の実行時変更は完了しています。具体的な適用シナリオについてはよくわかりませんが、遭遇しました。

私のアプリケーションシナリオ:

カスタムコンポーネントは、テーマと同様に、ユーザーが自由に調整できるようにいくつかのスタイルプロパティを公開する必要がありますが、文字列の連結を使用してそれを完了したくありません。これは無駄が多すぎます。値が変更されるたびに、スタイル全体を書き換える必要があり、これには DOM の頻繁な変更が伴いますが、これは Vue の考え方と一致しておらず、CSS で直接記述するのは面倒すぎます。

そのため、私はスタイルを記述するために SCSS を使用します。SCSS のネストは本当に使いやすいです。LESS はネストされた属性をサポートしていないため、非常に使いにくく、SCSS ほど簡潔ではありません。
scss はプリコンパイルされているため、実行時に変数値を変更できず、変更する必要があるため、Google で検索して満足のいく解決策を見つけました -> 原則 (英語)

特別な注意

単一ファイルコンポーネント (.vue) で scoped を使用すると、:root や :body などのセレクターの効果が期待どおりになりません。

[データ-v-1374924e]:ルート{
  --test:100px;
}

この場合、ルートがないため、変数 -test はまったく見つかりません。Vue コンポーネントのスコープ機能はこのコンポーネント内でのみ有効ですが、コンポーネントには完全なドキュメントがありません。つまり、コンポーネント内にルートが存在しません。

したがって、vueファイルでは、CSS変数宣言のセレクタスコープを慎重に検討して、無効な変数を避けてください。

CSS3のvar()を使用して実行時にscss変数の値を変更する方法についての記事はこれで終了です。CSS3でscss変数の値を変更する方法についての詳細は、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします!

<<:  ウェブページにコンテンツが多すぎる場合に、下から上へ素早く戻る方法

>>:  MySQL で CURRENT_TIMESTAMP を使用する方法

推薦する

アダプティブ Web デザインを実現する方法に関する関連知識ポイントの要約

「アダプティブ Web デザイン」はどのように機能しますか?実はそれほど難しいことではありません。 ...

PostgreSQL正規表現の一般的な機能の概要

PostgreSQL正規表現の一般的な機能の概要正規表現は、複雑なデータ処理を必要とするプログラムに...

Nodejs と Socket.IO を組み合わせて Websocket の即時通信を実現

目次WebSocketを使用する理由ソケット.ioオープンソースプロジェクト効果プレビューアプリイン...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

macOS での MySQL 8.0.17 のインストールと簡単な設定チュートリアル

私が書いた内容が理解できない場合は、インターネット上に理解できるチュートリアルがない可能性があります...

表内のコンテンツオーバーフローのレイアウト方法について

コンテンツオーバーフローとは何ですか?実際、テキストが大量にある場合、コンテンツ領域がそれだけの長さ...

Linux ディスクのシーケンシャル書き込みとランダム書き込みの方法

1. はじめに● ランダム書き込みではヘッドがトラックを頻繁に変更するため、効率が大幅に低下します。...

Xshell を使用して VMware 上の Linux 仮想マシンに接続する (グラフィック手順)

はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...

MySQLの行数カウントに関する簡単な説明

各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...

MySql のスロークエリ分析とスロークエリログの開き方の詳細説明

最近はMySQLのパフォーマンス最適化についても研究しているので、今日の投稿は勉強ノートとしても使え...

CSS を使用して物流の進行状況のスタイルを実装するためのサンプルコード

効果: CSS スタイル: <スタイル タイプ="text/css">...

CSSの高さの崩壊問題についての簡単な説明

パフォーマンス例えば: HTML: <div class="first"&...

MySQL 8.0.20 のインストールと設定の詳細なチュートリアル

この記事では、MySQL 8.0.20のインストールと設定方法についての詳細なチュートリアルを参考ま...

HTMLのimgタグで画像の中心部分だけを表示する方法(3つの方法)

HTML の img タグで画像の中心を表示する方法は、現在 3 つあります。ここで記録しておきま...

Vue3 の ref toRef と toRefs の違いを理解する方法

目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...