Skip to content

Commit 4cc58b4

Browse files
committed
add modal component example
1 parent 68ca564 commit 4cc58b4

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed

examples/modal/index.html

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Vue.js Modal Example</title>
6+
<script src="../../dist/vue.js"></script>
7+
<link rel="stylesheet" href="modal.css">
8+
</head>
9+
<body>
10+
<!-- template for the modal component -->
11+
<template id="modal-template">
12+
<div class="modal-mask" v-show="show" v-transition="modal">
13+
<div class="modal-wrapper">
14+
<div class="modal-container">
15+
<content select=".modal-header">
16+
<div class="modal-header">
17+
default header
18+
</div>
19+
</content>
20+
<content select=".modal-body">
21+
<div class="modal-body">
22+
default body
23+
</div>
24+
</content>
25+
<content select=".modal-footer">
26+
<div class="modal-footer">
27+
default footer
28+
<button class="modal-default-button"
29+
v-on="click: show = false">
30+
OK
31+
</button>
32+
</div>
33+
</content>
34+
</div>
35+
</div>
36+
</div>
37+
</template>
38+
39+
<script>
40+
// register modal component
41+
Vue.component('modal', {
42+
template: '#modal-template',
43+
props: {
44+
show: {
45+
type: Boolean,
46+
required: true,
47+
twoWay: true
48+
}
49+
}
50+
})
51+
</script>
52+
53+
<!-- app -->
54+
<div id="app">
55+
<button v-on="click: showModal = true">Show Modal</button>
56+
<!-- use the modal component, pass in the prop -->
57+
<modal show="{{@showModal}}">
58+
<!--
59+
you can use custom content here to overwrite
60+
default content
61+
-->
62+
<div class="modal-header">
63+
<h3>custom header</h3>
64+
</div>
65+
</modal>
66+
</div>
67+
68+
<script>
69+
// start app
70+
new Vue({
71+
el: '#app',
72+
data: {
73+
showModal: false
74+
}
75+
})
76+
</script>
77+
</body>
78+
</html>

examples/modal/modal.css

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
.modal-mask {
2+
position: fixed;
3+
z-index: 9998;
4+
top: 0;
5+
left: 0;
6+
width: 100%;
7+
height: 100%;
8+
background-color: rgba(0, 0, 0, .5);
9+
display: table;
10+
transition: opacity .3s ease;
11+
}
12+
13+
.modal-wrapper {
14+
display: table-cell;
15+
vertical-align: middle;
16+
}
17+
18+
.modal-container {
19+
width: 300px;
20+
margin: 0px auto;
21+
padding: 20px 30px;
22+
background-color: #fff;
23+
border-radius: 2px;
24+
box-shadow: 0 2px 8px rgba(0, 0, 0, .33);
25+
transition: all .3s ease;
26+
font-family: Helvetica, Arial, sans-serif;
27+
}
28+
29+
.modal-header h3 {
30+
margin-top: 0;
31+
color: #42b983;
32+
}
33+
34+
.modal-body {
35+
margin: 20px 0;
36+
}
37+
38+
.modal-default-button {
39+
float: right;
40+
}
41+
42+
/*
43+
* the following styles are auto-applied to elements with
44+
* v-transition="modal" when their visiblity is toggled
45+
* by Vue.js.
46+
*
47+
* You can easily play with the modal transition by editing
48+
* these styles.
49+
*/
50+
51+
.modal-enter, .modal-leave {
52+
opacity: 0;
53+
}
54+
55+
.modal-enter .modal-container,
56+
.modal-leave .modal-container {
57+
-webkit-transform: scale(1.1);
58+
transform: scale(1.1);
59+
}

0 commit comments

Comments
 (0)