Vue自定义的组件,彼此显示的时候相互外观相互覆盖住了,这是怎么回事?

新手上路,请多包涵

Vue自定义的组件,彼此显示的时候相互外观相互覆盖住了,这是怎么回事?

.vue组件代码

<html>代码

<div class="all">
    <div class="btn" @click="show = !show"></div>
    <div class="c" v-if="show"></div>
</div>

<script>代码

module.exports = {
    data: function() {
        return {
            show: false,
        }
    },
}

css样式

.all{
    position: relative;
}
.btn{
    height: 30px;
    width: 60px;
    background-color: red;
    border-radius: 0px;
    margin: 0px;
    position: relative;
}
.c{
    height: 200px;
    width: 100px;
    background-color: blue;
    position: absolute;
    top: 30px;
    left: 0;
}

引用如下

js中使用httpVueLoader加载的.vue

Vue.component('cd',httpVueLoader('/components/cd.vue'))

html部分只有两个<cd>

<cd></cd>
<cd></cd>

结果

可以看到第一个红色区域点击的时候,会显示出他内容里面的蓝色区域,但是,显示的时候有一部分会被下面的红色区域覆盖
01.gif

想知道问题的来源是哪里

阅读 5k
2 个回答

重叠原因:你的 cd 组件中蓝色块是相对于 all 元素绝对定位,脱离了文档流。在布置文档流中其它元素时,绝对定位元素不占据空间,all 元素的大小只是由 btn 元素撑开。所以当第一个 cd 组件的蓝色块显示之后,就和第二个 cd 组件重叠了。

两个 cd 组件的层级和定位设置一模一样,文档流后面的 DOM 节点会覆盖前面的 DOM 节点,所以第二个组件覆盖了第一个组件。

跟 Vue 无关,Vue 只会影响 DOM 树的生成,产生覆盖都是 CSS 的问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题