Vue の element-ui コンポーネントのデフォルトの CSS スタイルを変更する 4 つの方法

Vue の element-ui コンポーネントのデフォルトの CSS スタイルを変更する 4 つの方法

序文

element-ui コンポーネントのデフォルト スタイルを変更することは、常に長年の話題でした。社内のプロジェクト全体を完了した後、element-ui のデフォルト スタイルを変更する次の 4 つの方法をまとめました。

1. グローバル統合オーバーライドを使用する

固定スタイルを持つ一般的なコンポーネントの一部については、新しい CSS または SCSS ファイルを作成して要素の元のクラスを上書きすることで、グローバルに処理できます。

src/styles ディレクトリに新しい element-ui-reset.scss を作成し、UI のニーズに応じて元のクラス名を変更できます。

SCSSを使用する利点は、変数を使用してUIのさまざまな変更に対処できることです。

たとえば、よく使用するボタン、ページング、チェックボックスなどのコンポーネントは、UI 内で基本的に同じデザインになっているため、これらのスタイルを均一に変更できます。

要素 ui リセット.scss

$危険ボタンの色: #F25454;
$プライマリボタンの色:#3d66e4;
$成功ボタンの色:#12A763;


//デフォルトのボタンの色を変更します。el-button--primary{
	背景色: $primary-btn-color;
	境界線の半径: 4px;
	//境界線: 1px 実線 $primary-btn-color;
	フォントサイズ: 16px;
	境界線: 0;
	
}

//危険ボタンの色を変更します。el-button--danger{
	背景色: $danger-btn-color;
	境界線の半径: 4px;
	//境界線: 1px 実線 $danger-btn-color;
	フォントサイズ: 16px;
	境界線: 0;
}

//成功ボタンの色を変更します。el-button--success{
	背景色: $success-btn-color;
	境界線の半径: 4px;
	//境界線: 1px 実線 $success-btn-color;
	フォントサイズ: 16px;
	境界線: 0;
	
}

//デフォルトのボタンの色を変更します。el-button--default{
	フォントサイズ: 16px;
	境界線の半径: 4px;
}


//成功ボタンの色を変更します。el-button--warning{
	//背景色: $success-btn-color;
	境界線の半径: 4px;
	//境界線: 1px 実線 $success-btn-color;
	フォントサイズ: 16px;
	境界線: 0;
	
}


//ページングを変更する color.el-pagination{
	位置: 絶対;
	表示: インラインブロック;
	マージン: 0 自動;
	残り:50%;
	変換: translateX(-50%);
	背景色: #fafafa;
	境界線: 実線 1px #dfe8eb;
	パディング: 0 !重要;
	.el-pager{
		マージン: 0 !重要;
		。番号{
			色: #3d66e4 !重要;
			左境界線: 1px 実線 #dfe8eb;
			右境界線: 1px 実線 #dfe8eb;
			背景色: #fafafa !重要;
			&。アクティブ{
				色: #fff !重要;
				//境界線: 1px 実線 #3d66e4;
				背景色: #3d66e4 !重要;
				境界線: 1px 実線 #3d66e4 !重要;
			}
		}
		
	}
	
}	

.el-pagination.is-background .btn-next、.el-pagination.is-background .btn-prev、.el-pagination.is-background .el-pager li{
	マージン: 0 !重要;
	背景色: #fafafa !重要;
}


//チェックボックスを変更する
.el-チェックボックス__inner{
	  境界線: 1px 実線 #C0C0C0 ;
	  幅: 16px;
	  高さ: 16px;
	  境界線の半径: 0;
}

次にmain.jsにインポートします。

'./src/styles/element-ui-reset.scss' をインポートします 

それで

アドバンテージ

  • グローバルなカバレッジでトラブルを回避
  • SCSSを使用するとより柔軟になります
  • スタイルのオーバーライドはいつでも削除できます

欠点

  • 局所的な変更には再カバーが必要
  • 変更されたコンポーネントのスタイルはすべて同じです

2. .vueファイルを変更する

この方法は、vueファイルにスタイルタグを追加することです

特定のコンポーネントスタイルを変更するために使用されますが、グローバルには適用されません。

たとえば、.vue ファイルには特別にカスタマイズされたテーブル コンポーネントが必要ですが、他のファイルでは元のスタイルを使用する必要があります。

このように、これに対処する最善の方法は、.vueファイルにスタイルタグを追加することです。

ここでテーブルのデフォルトスタイルを変更します

<テンプレート>
	<div class="my-class">
            <el-テーブル>
            </el-table>
        </div>
</テンプレート>

<スクリプト>
</スクリプト>

<style scoped="scoped" lang="scss">
</スタイル>

<スタイル>
	
    /* element-ui のテーブル コンポーネントのスタイルを変更します*/

    .my-class__expand-column .cell {
            表示: なし;
    }

    .my-class .el-table tbody tr:hover>td {
            カーソル: ポインタ;
    }


    .my-class .el-form .el-form-item .el-input__inner:focus{
             境界線: 1px 実線 #3D66E4;
       }

   
</スタイル>

ただし、唯一のスコープ、つまり上記の my-class のような最も外側のクラス名を追加する必要があることに注意してください。 現在のテーブルの変更されたスタイルを、このクラスとその子要素にのみ適用するように制限します。

それ以外の場合、テーブルスタイルはグローバルに上書きされます

もちろん、必要に応じて、クラスを id に置き換えることもできます。これにより、クラス名が競合しなくなります。

<テンプレート>
	<div id="私のクラス">
            <el-テーブル>
            </el-table>
        </div>
</テンプレート>

<スタイル>
	
    /* element-ui のテーブル コンポーネントのスタイルを変更します*/

    #my-class__expand-column.cell {
            表示: なし;
    }

    #my-class .el-table tbody tr:hover>td {
            カーソル: ポインタ;
    }


    #my-class .el-form .el-form-item .el-input__inner:focus{
             境界線: 1px 実線 #3D66E4;
       }

  
</スタイル>

このアプローチの利点は、特定のクラスを動的にバインドできることです。

 <テンプレート>
	<div id="私のクラス">
            <el-table :class="my-table">
            </el-table>
        </div>
</テンプレート>

<スタイル>
	
    /* element-ui のテーブル コンポーネントのスタイルを変更します*/

    #my-class__expand-column.cell {
            表示: なし;
    }

    #my-class .el-table tbody tr:hover>td {
            カーソル: ポインタ;
    }


    #my-class .el-form .el-form-item .el-input__inner:focus{
             境界線: 1px 実線 #3D66E4;
       }

    #私のクラス.私のテーブル{
    
    }

</スタイル>

アドバンテージ

  • 柔軟なカスタマイズ、動的バインディング
  • グローバルな変更はありません

欠点

  • 一意のクラススコープを指定する必要があります

3. コンポーネントのスタイルを変更する

この方法はあまりお勧めしません。冗長であることに加え、動作することを保証できません (element-ui ソース コードのサポートに依存します)。

ただし、めったに使用されないが、プロパティを動的にバインドする必要があるコンポーネントの場合は、これを使用できます。

たとえば、この<el-backtop>コンポーネントには、いくつかの動的なスタイル属性をバインドする必要があるかもしれません。

スタイルをバインドすることができます

	<el-backtop target="" :bottom="100" >
	  <div:スタイル="{
             高さ: 100%;
             幅: _width;
             背景色: #f2f5f6;
             ボックスの影: 0 0 6px rgba(0,0,0, .12);
             テキスト配置: 中央;
             行の高さ: 40px;
             色: #1989fa;
             境界線の半径: 50%;
           }">

                        <i class="el-icon-caret-top"></i>
                </div>
        </el-backtop>
        
        
        データ() {
           
         戻る {
           _幅: 50%
         }
        }
        
        

アドバンテージ

  • 柔軟で便利
  • 動的バインディング

欠点

  • 冗長性
  • 高い結合

4. element-uiの公式ドキュメントのAPIを参照する

一部のコンポーネントの公式サイトでは、スタイルを変更するためのAPIを提供しています。

APIに従ってコンポーネントのスタイルを指定できます

アドバンテージ

  • 正式

欠点

  • サポートコンポーネントの削減

疑い

新しいスタイル タグを追加する理由は何ですか?

実際の使用では、スコープ属性で記述されたクラスの一部は、element-uiコンポーネントでは効果がないことがわかりました。

その結果、変更されたスタイルの一部は使用可能で、一部は使用できなくなったため、スタイルタグを単純に書き換えました。

!important 属性を使用しないのはなぜですか?

この男は横暴すぎる、グローバルな変更よりも強制的だ。それに、書くのも大変です。

::v-deep penetrationを使わない理由

まず、書き方が気持ち悪いだけでなく、カップリングが高すぎる

スタイルの上書きが必要ない場合は、新しいスタイルタグを削除するだけで済みます。

::v-deep を使用する場合、それを 1 行ずつ変更することに誰が耐えられるでしょうか?

要約する

上記の方法は公式のものではなく、私が日々の開発で陥った落とし穴を踏んでまとめた方法です。

完璧ではありませんが、私の問題は大部分解決しました。

これで、vue の element-ui コンポーネントのデフォルト CSS スタイルの変更に関するこの記事は終了です。vue element-ui コンポーネントのデフォルト CSS スタイルの変更に関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 公開 CSS ファイルを Vue にインポートする簡単な方法 (推奨)
  • Vue+CSS3を使用してインタラクティブな効果を作成する方法の詳細な説明
  • Vue2.0 はグローバル スタイル (less/sass および css) を設定します。
  • Vue でスタイルを統一する方法 (reset.css と border.css)

<<:  MySQLデータ行と行オーバーフローのメカニズムの詳細な説明

>>:  行の高さと垂直方向の配置に関する包括的な理解

推薦する

CentOS7 (YUM) での MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...

CentOS 7.x に ZSH ターミナルをインストールする方法

1. 基本コンポーネントをインストールするまず、 yumコマンドを実行して、コードpullために必要...

Vue は動的なプログレスバー効果を実現します

この記事では、動的なプログレスバー効果を実現するためのVueの具体的なコードを例として紹介します。具...

JS のディープコピーとシャローコピーの詳細

目次1. 浅いコピーとはどういう意味ですか? 2. ディープコピーとはどういう意味ですか? 3. デ...

JavaScript デザインパターン コマンドパターン

コマンド パターンは、JavaScript デザイン パターンにおける動作デザイン パターンです。定...

js は、州、市、地区の 3 段階の選択カスケードを実装します。

この記事では、省、市、地区の3段階選択を実現するためのjsの具体的なコードを紹介します。具体的な内容...

SCSS スタイルのコードを 50% 削減する 14 の実践的な経験

序文Sass は CSS3 言語の拡張機能です。Sass を使用すると、より良いスタイルシートをより...

AngularとIonicのライフサイクルとフック関数を素早く理解するための記事

目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...

1 つの記事で Vuex を理解する

目次概要Vuex の 4 つの主要オブジェクト状態の使用突然変異の使用ゲッターの使用アクションの使用...

MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

序文多くの MySQL テスト シナリオでは、テスト用に一部のテスト データを手動で生成する必要があ...

シンプルなページング効果を実現するjQuery+Ajax

この記事では、ページング効果を実現するためのjquery+Ajaxの具体的なコードを参考までに紹介し...

MySQLはPartition関数を使用して水平分割戦略を実装します。

目次1件のレビュー2 水平分割の5つの戦略2.1 ハッシュ2.2 範囲2.3. キー2.4. リスト...

docker公式mysqlイメージのカスタム構成の詳細な説明

インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...

Swiper.jsプラグインを使用すると、カルーセル画像を非常に簡単に実装できます。

Swiper は、携帯電話やタブレットなどのモバイル端末向けに設計された、純粋な JavaScri...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...