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データ行と行オーバーフローのメカニズムの詳細な説明

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

推薦する

主軸上のFlex子要素の比率を制御する方法

背景フレックス レイアウトにより、配置とスペースの割り当てがより効果的に実現されます。最近、flex...

a タグにはテキストと画像があります。テキストを非表示にして画像のみを表示するにはどうすればよいでしょうか?

多くの場合、画像を表示する<a>タグのスタイルに遭遇しますが、タグ内にテキストがあり、そ...

ポップアップ効果を実現するにはjsを使用します

この記事の例では、ポップアップ効果を実現するためのjsの具体的なコードを参考までに共有しています。具...

CSS スタイル分類入門(基礎知識)

CSSスタイルの分類1. 内部スタイル ---- インラインスタイルスタイルタグの使用 <ス...

MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明

序文開発プロセスでは、10 進データ型がよく使用されます。 MySQL では、小数点は正確なデータ型...

要素UIテーブルはドロップダウンフィルタリング機能を実現します

この記事の例では、要素UIテーブルにドロップダウンフィルタリングを実装するための具体的なコードを参考...

一般的なMysql DDL操作の概要

図書館管理ライブラリを作成する データベースを作成します [存在しない場合] ライブラリ名;ライブラ...

MySql データベースにおける単一テーブル クエリと複数テーブル結合クエリの効率の比較

この間、プロジェクトに取り組んでいるときに、データ間の接続が非常に複雑なモジュールに遭遇しました。テ...

Docker はクラスター MongoDB 実装手順を構築します

序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...

MySQL 8.0 における MySQL のインストールと新しいパスワード認証方法の詳細な説明

1. はじめにOracle が MySQL 8.0GA をリリースしました。海外での GA はリリー...

CSS3は水平方向の中央揃え、垂直方向の中央揃え、水平方向と垂直方向の中央揃えのサンプルコードを実装しています。

フロントエンドの担当者であれば、面接でも仕事中でも、「CSS を使用して中央揃えにする」という効果に...

CSS3 アニメーション – ステップ機能の説明

最近、CSS3 アニメーションのソース コードの実装をいくつか見ていたところ、CSS コード アニメ...

JavaScript は、シンプルな虫眼鏡の最も完全なコード分析を実装します (ES5)

この記事では、参考までに、シンプルな虫眼鏡を実装するためのJavaScriptの具体的なコードを紹介...

MySQLに絵文字表現を挿入する方法

序文今日、オープンソース プロジェクトのフィードバック フォームを設計していたところ、絵文字表現を挿...