1<template>
2 <div>
3 <button @click="isShow = true">点我弹窗</button>
4 <!-- 把弹窗从藏得很深很深的组件里面传送到任意想传送的组件中,相当于可以指定该弹窗向某个固定的HTML元素定位,不会受到别的定位元素的影响 -->
5 <teleport to="body">
6 <div class="mask" v-if="isShow">
7 <div class="dialog">
8 <h3>我是一个弹窗</h3>
9 <h4>内容1</h4>
10 <h4>内容1</h4>
11 <h4>内容1</h4>
12 <h4>内容1</h4>
13 <button @click="isShow = false">关闭弹窗</button>
14 </div>
15 </div>
16 </teleport>
17 </div>
18</template>
19
20<script>
21import { ref } from "vue";
22export default {
23 name: "dialog",
24 setup() {
25 let isShow = ref(false);
26 return { isShow };
27 },
28};
29</script>
30
31<style>
32.mask {
33 position: absolute;
34 top: 0;
35 bottom: 0;
36 left: 0;
37 right: 0;
38 background-color: rgba(0, 0, 0, 0.5);
39}
40.dialog {
41 position: absolute;
42 /* 50%参考的是定位的父元素 */
43 top: 50%;
44 left: 50%;
45 /* -50%参考的是自身 */
46 transform: translate(-50%, -50%);
47 text-align: center;
48 width: 300px;
49 height: 300px;
50 background-color: green;
51}
52</style>