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

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

推薦する

Vueルーティング相対パスジャンプメソッド

目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...

MySQL 5.7.18 インストーラーのインストール ダウンロード グラフィック チュートリアル

この記事では、MySQL 5.7.18インストーラーの詳細なインストールチュートリアルを参考までに記...

html+css3で実装されたログインインターフェース

成果を達成するまずHTMLを使って基本的なフレームワークを構築します <本文> <...

フィルターと固定間の競合の原因と解決策の詳細な説明

問題の説明body内でfilter属性を使用すると、 fixed要素の位置が不正確になります。つまり...

docker windows10共有ディレクトリのマウント失敗の解決策

原因docker スクリプトを実行すると、コンテナを作成できないというエラーが発生します。以下のよう...

WeChatアプレットがチャットルーム機能を実現

この記事では、参考のために、WeChatアプレットのチャットルームを実装するための具体的なコードを例...

ネイティブJSでマウススライドによる愛の拡散効果を実現

この記事では、マウスをスライドすると愛が広がる js 特殊効果を紹介します。効果は次のとおりです。 ...

LinuxサーバーにVueプロジェクトをデプロイする

ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...

異なるブラウザ間で互換性のあるテキスト配置を実現する CSS

フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要...

JavaScriptは、ユーザーがチェックボックスをオンにする必要があるプロトコルの例を実装します。

js では、ログインまたは登録を確認する前に、ユーザーが特定の契約書を読むように設定します (使用...

Docker で Let's Encrypt から永久無料 SSL 証明書を取得する方法

1. 原因公式の cerbot は面倒すぎます。野生の成長よりもさらに悪い acme.sh の使用は...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

Kafka と Nginx の統合例

背景nginx-kafka-module は、Kafka を nginx に統合して、Web プロジ...

JSオブジェクトの走査順序の詳細な説明

JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかも...

WindowsでのNginxの起動や停止などの基本操作コマンドの詳しい説明

Windows で Nginx を使用するには、Nginx サービスの起動、停止、Nginx のリロ...