Heim  >  Fragen und Antworten  >  Hauptteil

Vue 3 und Vuetify 3 greifen auf SCSS/SASS-Variablen in Komponenten zu

Ich möchte vordefinierte Variablen in meiner Vue 3-Komponente verwenden.

<template>
  <div class="rounded img-container">
    <span v-if="!props.ready">Du musst noch ein Bild aufnehmen!</span>
  </div>
</template>

<script lang="ts" setup>
import { defineProps } from "vue";

const props = defineProps({
  ready: { type: Boolean, required: true }
})
</script>
<style lang="scss" scoped>

.img-container {
  aspect-ratio: 3 / 2;
  margin-left: auto;
  margin-right: auto;
  background: $red; <- Error
}

.text-small {
  font-size: 2em;
}
</style>

Leider erhalte ich die Fehlermeldung „SassError: Undefinierte Variable.“ Was muss ich importieren, um die globalen Variablen von Vuetify zu verwenden?

P粉974462439P粉974462439357 Tage vor1007

Antworte allen(1)Ich werde antworten

  • P粉814160988

    P粉8141609882023-11-18 12:17:06

    这些颜色的使用并不是那么直接的。

    此处记录了https://vuetifyjs.com/en/功能/sass-variables/#webpack-install 注意需要 sass-loader@^7.0.0 并更改 webpack 配置

    如果在组件文件中导入颜色变量,您也可以跳过这一点(../ 的数量可能会有所不同)

    @import '../../node_modules/vuetify/src/styles/settings/_colors.scss';

    接下来要记住的是对象的结构

    这里是摘录

    
    $red: () !default;
    $red: map-deep-merge(
      (
        'base': #F44336,
        'lighten-5': #FFEBEE,
        'lighten-4': #FFCDD2,
        'lighten-3': #EF9A9A,
        'lighten-2': #E57373,
        'lighten-1': #EF5350,
        'darken-1': #E53935,
        'darken-2': #D32F2F,
        'darken-3': #C62828,
        'darken-4': #B71C1C,
        'accent-1': #FF8A80,
        'accent-2': #FF5252,
        'accent-3': #FF1744,
        'accent-4': #D50000
      ),
      $red
    );
    
    /* other colors... */
    
    $colors: () !default;
    $colors: map-deep-merge(
      (
        'red': $red,
        'pink': $pink,
        'purple': $purple,
        'deep-purple': $deep-purple,
        'indigo': $indigo,
        'blue': $blue,
        'light-blue': $light-blue,
        'cyan': $cyan,
        'teal': $teal,
        'green': $green,
        'light-green': $light-green,
        'lime': $lime,
        'yellow': $yellow,
        'amber': $amber,
        'orange': $orange,
        'deep-orange': $deep-orange,
        'brown': $brown,
        'blue-grey': $blue-grey,
        'grey': $grey,
        'shades': $shades
      ),
      $colors
    );
    

    因此颜色不会映射到字符串,而是映射到对象(请参阅map-deep-merge),因此您不能使用$red来为您提供颜色值。

    相反,您可以使用map-deep-get函数来获取基础红色

    .class{
      background: map-deep-get($colors, "red", "base");
      /* OR */
      background:  map-get($red, "base");
    }
    

    所以它看起来像这样

    <style lang="scss" scoped>
    
    @import '../../node_modules/vuetify/src/styles/settings/_colors.scss';
    .img-container {
      aspect-ratio: 3 / 2;
      margin-left: auto;
      margin-right: auto;
      background:  map-deep-get($colors, "red", "base");
      /* OR */
      background:  map-get($red, "base");
    }
    
    .text-small {
      font-size: 2em;
    }
    </style>
    

    Antwort
    0
  • StornierenAntwort