我有一个想要动态设置样式的Vutify对话框.问题是样式需要覆盖默认的v-dialog个样式.由于某些原因,在使用计算样式绑定时,css类中的变量,甚至直接输入样式,都不会对样式产生影响.如何动态覆盖Vutify组件上的默认样式?

下面是我的对话:

<template>
  <v-dialog 
    v-model="dialog" 
    max-width="350px"
    persistent
    hide-overlay
    style="{position: absolute; bottom: 0px;}"
  >        
  <div class="arrow-up mb-n1 ml-1"></div>
  <v-card>
    <v-container>
    <v-card-text>
    <v-row>
      <v-col 
        cols="12"
        align="start"
      >
        <p class="text-subtitle-1">
        Always best to start at the beginning, let's pull your products first.</p>
      </v-col>
    </v-row>
    </v-card-text>
      
      <v-card-actions class="mt-n8">
        <v-btn
          color="#68007d"
          text
          @click="goToImportMethod"
        >
          NEXT
        </v-btn>
        <v-btn
          color="#616161"
          text
          @click="closeEverything"
        >
          CLOSE
        </v-btn>
      </v-card-actions>
    </v-container>
  </v-card>
  </v-dialog>
</template>

我try 过使用这样的计算(computed)属性:

  <v-dialog 
    v-model="dialog" 
    max-width="350px"
    persistent
    hide-overlay
    :style="myStyle"
  >

有了这一点:

computed: {
  myStyle() {
    return {
      bottom: '0px',
      left: '150px',
      position: 'absolute'
    }
  }
},

然后,我try 在类本身中添加变量,如下所示:

>>> .v-dialog {
  box-shadow: none;
  overflow: visible;
  bottom: var(--bottom);
  left: 150px;
  position: absolute;
}

使用如下所示的简单数据属性:

data () {
  return {
    dialog: true,
    bottom: '0px',
  }
},

但归根结底,唯一有效的方法是静态覆盖类,这对我没有好处:

>>> .v-dialog {
  box-shadow: none;
  overflow: visible;
  bottom: 0px;
  left: 150px;
  position: absolute;
}

推荐答案

v-dialog创建包含实际对话框的覆盖图.如果要将类似:style的props 传递给容器,可以使用:content-props属性:

<v-dialog
  :content-props="{style: myStyle}
  ...

如果您只想将CSS类发送到容器,则可以使用:content-class属性.

看一看这段代码:

const { createApp, ref } = Vue;
const { createVuetify } = Vuetify
const vuetify = createVuetify()
const app = {
  setup(){
    const styles = {
      bottom: '0px',
      left: '0px',
      position: 'absolute',
    }
    
    return {
      dialog: ref(true),
      styles
    }
  }

}
createApp(app).use(vuetify).mount('#app')
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/vuetify@3/dist/vuetify.min.css" />
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css" rel="stylesheet">
<div id="app">
  <v-app>
    <v-main>
      <v-dialog v-model="dialog" max-width="350px" persistent hide-overlay :content-props="{style: styles}">
        <div class="arrow-up mb-n1 ml-1"></div>
        <v-card>
          <v-container>
            <v-card-text>
              <v-row>
                <v-col cols="12" align="start">
                  <p class="text-subtitle-1">
                    Dialog at bottom 0 and left 0.</p>
                </v-col>
              </v-row>
            </v-card-text>

          </v-container>
        </v-card>
      </v-dialog>
    </v-main>
  </v-app>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@3/dist/vuetify.min.js"></script>

Css相关问答推荐

Javascript Splitter Divider hover color css

需要Angular material 下拉面板有向下和向上箭头按钮

如何使重复线性渐变适合字体大小?

CSS媒体查询不显示所需的输出

创建始终为剪辑元素的300%高度并左对齐的圆形剪辑路径

使用间距时奇怪的MUI网格行为

截断风景中的柔子或强制在其自己的线上,如果是肖像

在最小和最大视口之间时具有固定值的 CSS 钳位

设置初始大小并记住分配的最后大小

在不使用 position: fixed 的情况下从 CSS 网格中的自动布局中免除子元素?

tailwind 类的别名?

删除 IE10 Select 元素箭头

CSS - 等高列?

如何倾斜元素但保持文本正常(未倾斜)

Bootstrap 3 - 在每个网格列之后打印布局和中断

如何通过 JavaScript 重新触发 WebKit CSS 动画?

如何让 Firefox 在文件更改时自动刷新?

虚拟键盘激活时的屏幕样式

如何将文本向左旋转 90 度并根据 html 中的文本调整单元格大小

使用 CSS 更改
高度