【问题标题】:Vuetify v-text-field label on rightVuetify 右侧的 v-text-field 标签
【发布时间】:2021-02-17 21:47:43
【问题描述】:

v-input-text 的标签在右边。我想把它放在左边而不使用css,这实际上应该是默认的。从documentation 我可以看到左侧是默认的。我已经尝试了几个 Vuetify 文档的示例,它们都给了我相同的结果。

代码是从文档中复制/粘贴的。在我看来,如此简单的事情不应该成为问题。我已经为此苦苦挣扎了一段时间。我已经尝试在不同的浏览器中运行几个示例:Opera、Microsoft Edge、Firefox。

这是您可以找到的代码here

<template>
  <v-form>
    <v-container>
      <v-row>
        <v-col cols="12">
          <v-text-field
            v-model="message"
            outlined
            clearable
            label="Message"
            type="text"
          >
            <template v-slot:prepend>
              <v-tooltip
                bottom
              >
                <template v-slot:activator="{ on }">
                  <v-icon v-on="on">
                    mdi-help-circle-outline
                  </v-icon>
                </template>
                I'm a tooltip
              </v-tooltip>
            </template>
            <template v-slot:append>
              <v-fade-transition leave-absolute>
                <v-progress-circular
                  v-if="loading"
                  size="24"
                  color="info"
                  indeterminate
                ></v-progress-circular>
                <img
                  v-else
                  width="24"
                  height="24"
                  src="https://cdn.vuetifyjs.com/images/logos/v-alt.svg"
                  alt=""
                >
              </v-fade-transition>
            </template>
            <template v-slot:append-outer>
              <v-menu
                style="top: -12px"
                offset-y
              >
                <template v-slot:activator="{ on, attrs }">
                  <v-btn
                    v-bind="attrs"
                    v-on="on"
                  >
                    <v-icon left>
                      mdi-menu
                    </v-icon>
                    Menu
                  </v-btn>
                </template>
                <v-card>
                  <v-card-text class="pa-6">
                    <v-btn
                      large
                      flat
                      color="primary"
                      @click="clickMe"
                    >
                      <v-icon left>
                        mdi-target
                      </v-icon>Click me
                    </v-btn>
                  </v-card-text>
                </v-card>
              </v-menu>
            </template>
          </v-text-field>
        </v-col>
      </v-row>
    </v-container>
  </v-form>
</template>

结果:

【问题讨论】:

  • github.com/vuetifyjs/vuetify/issues/1782github.com/vuetifyjs/vuetify/issues/4552 提出了一个关于此的问题。不确定反向道具是否能解决您的问题。
  • 反向对我不起作用。您提到的第一个问题只是文本的对齐,这对我来说很好。它在右边。第二个问题发生在使用 reverse 属性时,我没有。我可能会在我的项目中不再使用 Vuetify,这样简单的事情就不是问题了。
  • "我想放在右边不使用css" 好像不支持这个功能。如果它可以满足您的需求,为什么不使用添加几行 CSS 呢?
  • 你为什么不能使用label slot呢?
  • 我对我的问题的解释有误。请查看更新版本。

标签: css vue.js vuetify.js


【解决方案1】:

我有同样的问题。 在将我的代码与 https://codepen.io/pen/?&editors=101 上的代码笔示例进行比较时,我注意到它们构造 vuetify 对象的方式略有不同。

我有:

import Vue from 'vue'
import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'

const opts = {}
export default new Vuetify(opts)

document.addEventListener('DOMContentLoaded', () => {
    Vue.use(Vuetify);

    login_vue = new Vue({
        el: '#login-vue',
       
        data: {
            message: "Hello World",
        },
        computed: {},
        methods: {}
    });
});

他们的vue代码:

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  
})

这让我认为他们的代码需要一个名为“vuetify”的变量。 再次检查安装指南后。 https://vuetifyjs.com/en/getting-started/installation/#webpack-install。我看到他们有两种加载 vuetify 的方法,具体取决于您是从加载程序还是从 javascript 加载。我在 javascript 中使用了 Loader 示例。

一旦我更改了代码以创建变量,他们期望一切都按预期工作。

最终代码:

import Vue from 'vue'
import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'

const opts = {}
export default new Vuetify(opts)

document.addEventListener('DOMContentLoaded', () => {
    Vue.use(Vuetify);
    vuetify: new Vuetify(),
    login_vue = new Vue({
        el: '#login-vue',
        data: {
            message: "Hello World",
        },
        computed: {},
        methods: {}
    });

});

我需要 Vue.use(Vuetify); 似乎很奇怪和 Vuetify:新的 Vuetify() 此解决方案有效,但也许有更多 VUE 经验的人可以提供更好的配置。

【讨论】:

    【解决方案2】:

    我正在使用 Vue2。问题似乎在于我的应用程序是在 v-app DOM 之外创建的。为了让一切正常运行,它应该是 .因此,问题。一旦我把所有东西都放在 v-app 中,事情就开始像他们应该的那样工作了。但是,重构代码可能需要几天的工作,具体取决于大小和复杂性。

    CSS 解决方法

    我找到了解决问题的 CSS 解决方法。我在我的 App.vue 中添加了以下样式,它似乎解决了这个问题:

    .v-input .v-label--active{
      transform: translateX(-12%) translateX(-7.5px) translateY(-28px) scale(0.75) !important;
    
    }
    
    .v-input--dense .v-label--active{
      transform: translateX(-12%) translateX(-7.5px) translateY(-21px) scale(0.75) !important;
    
    }
    

    我的问题

    对我来说,活动标签略微向右移动并略微移动到底部:

    建议

    由于您的问题更极端,请尝试使 translateX 中的值更负。

    注意

    记住 - 保持 translateX 值的比率不变,同时这样做(12:7.5)。这将确保不会因标签的长度而产生差异。

    【讨论】:

    • 问题说他们不想使用任何 CSS 来解决这个问题。
    • 感谢您指出。我将把答案留在这里,因为我在互联网上的其他任何地方都找不到。
    猜你喜欢
    • 2018-07-14
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2021-08-19
    • 1970-01-01
    • 2020-07-27
    • 2021-05-13
    相关资源
    最近更新 更多