为什么在Vuetify中使用align-end无效

11

我使用vuetify布局,想将按钮放在右侧,但我发现vuetify属性align-end不起作用,我使用offset-xs9让按钮靠右,但按钮仍然在v-flex中居中,如何使它在末尾?谢谢帮助。

代码如下:

<div id="app">
  <v-app id="inspire">

    <v-layout row wrap  align-end>
      <v-flex xs3 offset-xs9 align-end>
        <div>
          <v-btn primary dark>Normal</v-btn>
        </div>
      </v-flex>
    </v-layout>

  </v-app>
</div>

在线CodePen

6个回答

30

Vuetify的网格使用Flexbox

  • align-* 在垂直轴上操作
  • 如果要使子元素水平移动,应该使用justify-*
  • align-*justify-* 只对Flex容器起作用,所以您可以使用v-layout替代v-flex,或者在同一个v-layout上同时使用这两个属性

这里有一个修复好的演示供您参考。


1
谢谢您,先生,您帮我节省了很多时间。 - Photonic
1
这是一个很好的答案。不过,justify 适用于主轴方向,而 align 适用于次轴方向。当使用 row 时,主轴是水平的,次轴是垂直的。当使用 column 时,则相反(例如:<v-layout row> ... </v-layout><v-layout column> ... </v-layout>)。不理解“使用 v-layout 而不是 v-flex”的意思。你需要在 v-layout 中使用 v-flex - Narxx

12

Kael在这里的回答很好,但我觉得这里还有更多需要解释的地方。

首先,这里的问题是使用了xs3 offset-xs9

<v-flex xs3 offset-xs9 align-end>

这将不允许我们使用flexbox网格系统将内容放置在一个有意义的位置(正如您自己所描述的那样)。

第二个问题是没有正确地使用Vuetify的flexbox网格属性,例如,在v-layoutv-flex上都使用了align-end

<v-layout row wrap  align-end>
      <v-flex xs3 offset-xs9 align-end>

我们需要的是:

  1. 一个布局将所有内容放在其右侧
  2. 一个容器只占据所需内容的尺寸

实现这两个目标,将确保您的内容将放置在 v-layout 容器的右端,并且不使用 xs3offset-xs-9等方式避免出现奇怪的空间。

对于 v-layout,正如 Kael 所提到的,我们需要使用 justify-end。由于您的 v-layout 的方向是 row,因此我们使用 justify 进行水平定位。

而对于 v-flex,我们需要确保它仅占据其内容的宽度。我们将使用 shrink 来实现这一点,因此最终模板应如下所示:

<div id="app">
  <v-app id="inspire">

    <v-layout row wrap justify-end>
      <v-flex shrink>
        <v-btn primary dark>Normal</v-btn>
      </v-flex>
    </v-layout>

  </v-app>
</div>

5

text-*-right 用于对齐文本,而不是 flexbox 容器。这是一种非常糟糕的做法。请参见 Kael Watts 的答案,以获取更好的解决方案。 - Narxx

4
你可以使用v-spacer将任何东西推向右侧。
<div id="app">
  <v-app id="inspire">

    <v-layout>
      <v-spacer></v-spacer>
      <v-btn primary dark>Normal</v-btn>
    </v-layout>

  </v-app>
</div>

1
如果你想将元素对齐到右下角,你可以这样做:
<v-img height="120px" class="white--text" :src="xxxx.img">
    <v-layout fill-height column ma-0 >
      <v-spacer></v-spacer>
      <v-flex class="text-xs-right" shrink>
        <span class="grey darken-4">XXXXX</span>
      </v-flex>
    </v-layout>
</v-img>

1

试试这个:

<p class="text-xs-right">
      <v-btn class="d-inline-block">Normal</v-btn>
</p>

2
请在您的答案中添加一些解释。add - mechnicov
这种方法是错误的。你将容器转换为 inline-flex,然后将容器视为带有 text-*-rightinline 文本容器。请看Kael在这里的答案。 - Narxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接