Vue で CSS モジュールを使用する方法

不言
リリース: 2018-06-29 16:42:34
オリジナル
1480 人が閲覧しました

この記事では、主に Vue で CSS モジュールを使用するエレガントな方法を紹介します。この記事のテキストは、サンプル コードと組み合わせて詳しく紹介しています。必要な方は参照してください。

CSS モジュール: ローカル スコープ。 & モジュール化

CSS モジュール コンポーネントのスタイルが相互に影響を与えないように、各ローカル クラスにグローバルに一意のクラス名を付けます。例:

/* button.css */
.button {
 font-size: 16px;
}
.mini {
 font-size: 12px;
}
ログイン後にコピー

これは次のように変換されます:

/* button.css */
.button__button--d8fj3 {
 font-size: 16px;
}
.button__mini--f90jc {
 font-size: 12px;
}
ログイン後にコピー

CSS モジュール ファイルをインポートすると、ローカル クラス名からグローバル クラス名へのマッピング オブジェクトが提供されます。次のように:

import styles from './button.css'
// styles = {
// button: 'button__button--d8fj3',
// mini: 'button__mini--f90jc'
// }
element.innerHTML = '<button class="&#39; + styles.button + &#39; &#39; + styles.mini + &#39;" />'
ログイン後にコピー

vue-css-modules: 簡略化されたクラス名のマッピング

ここに CSS モジュールを使用したボタン コンポーネントがあります:

<template>
 <button :class="{
 &#39;global-button-class-name&#39;: true,
 [styles.button]: true,
 [styles.mini]: mini
 }">点我</button>
</template>
<script>
 import styles from './button.css'
 export default {
 props: { mini: Boolean },
 data: () => ({ styles })
 }
</script>
ログイン後にコピー

確かに、CSS モジュールは Vue コンポーネントに適しています。ただし、次の欠点もあります:

  • データでスタイルを渡す必要があります

  • グローバル クラス名をインポートするには、styles.localClassName を使用する必要があります

  • 他のグローバル クラス名がある場合は、それらを入力する必要がありますTogether

  • ローカルクラス名と属性名が同じでもコンポーネントの属性値にバインドしたい場合は明示的に指定する必要があります

上記のボタンコンポーネントの場合、vue-を使用した後、 css-modules:

<template>
 <button
 class="global-button-class-name"
 styleName="button :mini">
 点我
 </button>
</template>
<script>
 import CSSModules from 'vue-css-modules'
 import styles from './button.css'
 export default {
 mixins: [CSSModules(styles)],
 props: { mini: Boolean }
 }
</script>
ログイン後にコピー
ログイン後にコピー

現在:

  • データでスタイルを渡す必要はありませんが、ミックスインでスタイルを渡す必要があります:full_moon_with_face:

  • styles.localClassNameに別れを告げることができます

  • ローカル クラス名を styleName 属性に置き、グローバル クラス名を class 属性に置き、同じ name 属性を持つ多くの

  • ローカル クラス名バインディング コンポーネントを規制します。その前に modifier

    を追加するだけです。

modifier

@button

<button styleName="@button">按钮</button>
ログイン後にコピー

これは次と同等です:

<button styleName="button" data-component-button="true">按钮</button>
ログイン後にコピー

これにより、コンポーネントのスタイルを外部からリセットできます:

.form [data-component-button] {
 font-size: 20px;
}
ログイン後にコピー

$type

<button styleName="$type">按钮</button>
ログイン後にコピー

これは次と同等です:

<button :styleName="type">按钮</button>
ログイン後にコピー

:mini

<button styleName=":mini">按钮</button>
ログイン後にコピー

これは次と同等です:

<button :styleName="mini ? &#39;mini&#39; : &#39;&#39;">按钮</button>
disabled=isDisabled
<button styleName="disabled=isDisabled">按钮</button>
ログイン後にコピー

これと同等:

<button :styleName="isDisabled ? &#39;disabled&#39; : &#39;&#39;">按钮</button>
ログイン後にコピー

使用法

Vueテンプレートで使用する

テンプレートの外にCSSモジュールを導入する

<template>
 <button
 class="global-button-class-name"
 styleName="button :mini">
 点我
 </button>
</template>
<script>
 import CSSModules from 'vue-css-modules'
 import styles from './button.css'
 export default {
 mixins: [CSSModules(styles)],
 props: { mini: Boolean }
 }
</script>
ログイン後にコピー
ログイン後にコピー

テンプレート内でCSSモジュールを使用する

<template>
 <button
 class="global-button-class-name"
 styleName="button :mini">
 点我
 </button>
</template>
<script>
 import CSSModules from 'vue-css-modules'
 export default {
 mixins: [CSSModules()],
 props: { mini: Boolean }
 }
</script>
<style module>
 .button {
 font-size: 16px;
 }
 .mini {
 font-size: 12px;
 }
</style>
ログイン後にコピー

Vue JSXで使用する

import CSSModules from 'vue-css-modules'
import styles from './button.css'
export default {
 mixins: [CSSModules(styles)],
 props: { mini: Boolean },
 render() {
 return (
  <button styleName="@button :mini">点我</button>
 )
 }
}
ログイン後にコピー

Vueでレンダリングする

import CSSModules from 'vue-css-modules'
import styles from './button.css'
export default {
 mixins: [CSSModules(styles)],
 props: { mini: Boolean },
 render(h) {
 return h('button', {
  styleName: '@button :mini'
 }, '点我')
 }
}
ログイン後にコピー

を関数で使用する 以上が、皆さんの学習に役立つことを願っています。中国語のサイトです!

関連する推奨事項:

ツリーメニューを実装するためのVue.js再帰コンポーネント

vue-cliでスタイラスが使用できない問題を解決する方法

以上がVue で CSS モジュールを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
vue
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート