Evan You
9 years ago
2 changed files with 134 additions and 0 deletions
@ -0,0 +1,71 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>Vue.js Modal Example</title> |
|||
<script src="../../dist/vue.js"></script> |
|||
<link rel="stylesheet" href="modal.css"> |
|||
</head> |
|||
<body> |
|||
<!-- template for the modal component --> |
|||
<script type="x/template" id="modal-template"> |
|||
<div class="modal-mask" transition="modal"> |
|||
<div class="modal-wrapper"> |
|||
<div class="modal-container"> |
|||
|
|||
<div class="modal-header"> |
|||
<slot name="header"> |
|||
default header |
|||
</slot> |
|||
</div> |
|||
|
|||
<div class="modal-body"> |
|||
<slot name="body"> |
|||
default body |
|||
</slot> |
|||
</div> |
|||
|
|||
<div class="modal-footer"> |
|||
<slot name="footer"> |
|||
default footer |
|||
<button class="modal-default-button" @click="$emit('close')"> |
|||
OK |
|||
</button> |
|||
</slot> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</script> |
|||
|
|||
<script> |
|||
// register modal component |
|||
Vue.component('modal', { |
|||
template: '#modal-template' |
|||
}) |
|||
</script> |
|||
|
|||
<!-- app --> |
|||
<div id="app"> |
|||
<button id="show-modal" @click="showModal = true">Show Modal</button> |
|||
<!-- use the modal component, pass in the prop --> |
|||
<modal v-if="showModal" @close="showModal = false"> |
|||
<!-- |
|||
you can use custom content here to overwrite |
|||
default content |
|||
--> |
|||
<h3 slot="header">custom header</h3> |
|||
</modal> |
|||
</div> |
|||
|
|||
<script> |
|||
// start app |
|||
new Vue({ |
|||
el: '#app', |
|||
data: { |
|||
showModal: false |
|||
} |
|||
}) |
|||
</script> |
|||
</body> |
|||
</html> |
@ -0,0 +1,63 @@ |
|||
.modal-mask { |
|||
position: fixed; |
|||
z-index: 9998; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
background-color: rgba(0, 0, 0, .5); |
|||
display: table; |
|||
transition: opacity .3s ease; |
|||
} |
|||
|
|||
.modal-wrapper { |
|||
display: table-cell; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.modal-container { |
|||
width: 300px; |
|||
margin: 0px auto; |
|||
padding: 20px 30px; |
|||
background-color: #fff; |
|||
border-radius: 2px; |
|||
box-shadow: 0 2px 8px rgba(0, 0, 0, .33); |
|||
transition: all .3s ease; |
|||
font-family: Helvetica, Arial, sans-serif; |
|||
} |
|||
|
|||
.modal-header h3 { |
|||
margin-top: 0; |
|||
color: #42b983; |
|||
} |
|||
|
|||
.modal-body { |
|||
margin: 20px 0; |
|||
} |
|||
|
|||
.modal-default-button { |
|||
float: right; |
|||
} |
|||
|
|||
/* |
|||
* the following styles are auto-applied to elements with |
|||
* transition="modal" when their visibility is toggled |
|||
* by Vue.js. |
|||
* |
|||
* You can easily play with the modal transition by editing |
|||
* these styles. |
|||
*/ |
|||
|
|||
.modal-enter { |
|||
opacity: 0; |
|||
} |
|||
|
|||
.modal-leave-active { |
|||
opacity: 0; |
|||
} |
|||
|
|||
.modal-enter .modal-container, |
|||
.modal-leave-active .modal-container { |
|||
-webkit-transform: scale(1.1); |
|||
transform: scale(1.1); |
|||
} |
Loading…
Reference in new issue