【问题标题】:position: absolute only working on the first itemposition: absolute 只处理第一项
【发布时间】:2021-07-26 23:29:43
【问题描述】:

我正在创建一张用户卡,点击时卡顶部有一个菜单按钮,它应该显示一个菜单。每当我单击循环中第一项的菜单时,它都会显示正常。但是,有很多用户卡,当我点击其他卡的菜单按钮时,菜单仍然显示在第一张卡上,而不是我点击的卡上。我在这里做错了什么?

<template>
<div class="custom-users" v-if="users && users.length > 0">
      <user-card
        v-for="user in users"
        :key="user.userId"
        @open-menu="openMenu"
      >
      </user-card>
      <div class="menu" v-if="showMenu">
          <p>Delete</p>
      </div>
</div>
</template>
<script>
export default{
  data() {
    return {
       showMenu: false,
    };
  },
   methods: {
    openMenu(){
      this.showMenu = !this.showMenu;
    },
}
}
</script>
<style scoped>

.custom-users{
  position: relative;
}
.menu{
  position: absolute;
  height: 100px;
  width: 100px;
  top: 60px;
  right: 25px;
  z-index: 9999;
}
</style>

【问题讨论】:

    标签: javascript html css vue.js vuejs2


    【解决方案1】:

    绝对定位的元素绝对相对定位到它们最近的父元素,上面有position: relative(或position: absolute)。

    您需要将这两个元素放在具有position: relative 的容器中,以便下拉菜单相对于卡片而不是整个容器定位。

    【讨论】:

    • 我已将菜单放在用户卡中,但现在该卡根本不显示。我在 openMenu 方法中添加了一个控制台日志,每当我单击菜单图标时,控制台日志都很好,但没有显示菜单。我有一个用户卡类和卡的相对位置
    • 您的卡片样式是否为 position: relative ? (应该是)您的卡上是否设置了overflow:hidden? (不应该)这些类是否正确应用于嵌套在卡片中的新菜单?
    • 没有溢出:隐藏。现在,当我在菜单 div 中添加 slot="content" 时,它会显示菜单。但现在每当我点击任何卡片的菜单图标时,它都会显示所有卡片的菜单
    【解决方案2】:

    菜单当前相对于custom-users 定位,这是所有&lt;user-card&gt; 共有的。它看起来只是与第一个 &lt;user-card&gt; 相关联,因为它们都与左上角对齐(在正常流程中)。

    移动菜单

    <div class="menu" v-if="showMenu">
       <p>Delete</p>
    </div>
    

    &lt;user-card&gt; 组件中,将position: relative; 应用到它的最顶层元素,并使下面的状态和方法也成为&lt;user-card&gt; 的一部分。

    data() {
      return {
           showMenu: false,
        };
      },
    methods: {
       openMenu(){
          this.showMenu = !this.showMenu;
       },
    }
    

    现在这不会是一个大问题,因为菜单只是有条件地创建的。如果 menu 本身就是一个大组件,您可以让它能够显示在将来作为 props 传入的坐标处。

    【讨论】:

    • 我已将菜单放在用户卡中,但现在该卡根本不显示。我在 openMenu 方法中添加了一个控制台日志,每当我单击菜单图标时,控制台日志都很好,但没有显示菜单。我有一个用户卡类和卡的相对位置
    • 这将是一个问题,因为在内部图书馆。但是,现在当我将 slot="content" 添加到 div 菜单时,菜单就会显示出来。显然卡内的东西只能用那个插槽显示。但现在的问题是,当我点击一张卡片时,菜单会显示在所有卡片上
    • “菜单显示在所有卡片上” 听起来每个组件都没有自己的状态(数据)?
    • 我确实从父组件向用户卡发送了一些数据,例如用户名、created_at,但没有在这里写下来,因为它似乎没有必要。但是,父组件有像 showMenu 这样的数据,每次点击都会切换
    • “但是,父组件有像 showMenu 这样的数据,每次点击都会切换” - 我在答案中写道,这应该在每张卡片内,而不是共享,因为每张卡都控制着自己的菜单
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2013-01-23
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多