创建Modal组件
<template>
<div>
<div class="md-modal modal-msg md-modal-transition" v-bind:class="{'md-show':mdShow}">
<div class="md-modal-inner">
<div class="md-top">
<button class="md-close" @click="closeModal">Close</button>
</div>
<div class="md-content">
<div class="confirm-tips">
<slot name="message"></slot>
</div>
<div class="btn-wrap">
<slot name="btnGroup"></slot>
</div>
</div>
</div>
</div>
<div class="md-overlay" v-if="mdShow" @click="closeModal"></div>
</div>
</template>
<script>
export default{
props:["mdShow"],
data(){
return{
msg:'hello vue'
}
},
methods:{
closeModal(){
this.$emit("close");
}
}
}
</script>
<style scoped>
</style>
引入父组件中
<template>
<div class="hello">
<div>
<button @click="addCart">点击弹出</button>
</div>
<Modal :mdShow="mdShow" @close="closeModal">
<p slot="message">
请先登录,否则无法加入到购物车中!
</p>
<div slot="btnGroup">
<a class="btn btn-m" @click="closeModal">关闭</a>
<!-- <a href="javascript:;" class="btn btn-m" @click="closeModal">继续购物</a>
<router-link href="javascript:;" class="btn btn-m" to="/cart" >查看购物车</router-link> -->
</div>
</Modal>
</div>
</template>
<script>
import Modal from "./Modal"
export default {
name: 'HelloWorld',
components:{
Modal
},
data () {
return {
mdShow:false
}
},
methods:{
addCart(){
this.mdShow=true
},
closeModal(){
this.mdShow=false
}
},
}
</script>
Modal的样式 (重点)引入main.js或Modal组件中
@charset "UTF-8";
/* base */
*,
*::before,
*::after {
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-family:sans-serif,"\5FAE\8F6F\96C5\9ED1",arial;
font-size: 100%;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
padding: 0;
overflow-x: hidden;
position: relative;
}
ul, ol {
list-style: none;
margin: 0;
padding: 0;
}
div, p, dl, dt, dd {
margin: 0;
padding: 0;
}
li,
dl,
dt,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hgroup,
p,
blockquote,
figure,
form,
fieldset,
input,
legend,
pre,
abbr,
button {
margin: 0;
padding: 0;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
}
pre,
code,
address,
caption,
th,
figcaption {
font-size: 1em;
font-weight: normal;
font-style: normal;
}
fieldset,
iframe,
img {
border: 0;
}
caption,
th {
text-align: left;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
article,
aside,
footer,
header,
nav,
main,
section,
summary,
details,
hgroup,
figure,
figcaption {
display: block;
}
audio,
canvas,
video,
progress {
display: inline-block;
vertical-align: baseline;
}
button {
background: none;
border: 0;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: inherit;
cursor: pointer;
font: inherit;
line-height: inherit;
overflow: visible;
vertical-align: inherit;
}
button:disabled {
cursor: default;
}
a {
color: inherit;
text-decoration: none;
cursor: pointer;
}
a:active,
a:hover {
outline: 0;
}
h1 {
font-size: 2em;
}
img {
border: 0;
}
:focus {
outline: none;
}
[hidden] {
display: none;
}
.nobr {
white-space: nowrap;
}
i,
em,
code {
font-style: normal;
}
b,
strong {
font-weight: bold;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
button,
input,
select,
textarea {
font-family: inherit;
/* 1 */
font-size: 100%;
/* 2 */
margin: 0;
/* 3 */
}
input:focus,
select:focus,
textarea:focus,
button:focus, button:active {
outline: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
.clearfix:after {
visibility: hidden;
display: block;
content: " ";
clear: both;
}
.clearfix {
zoom: 1;
}
/** btn css**/
.btn {
height: 55px;
line-height: 54px;
padding: 0 10px;
}
.btn, .btn[href] {
display: inline-block;
text-align: center;
font-size: 14px;
font-family: "moderat", sans-serif;
font-weight: bold;
-webkit-transition: all .3s ease-out;
transition: all .3s ease-out;
border: 1px solid #d1434a;
color: #d1434a;
text-transform: uppercase;
letter-spacing: .25em;
white-space: nowrap;
}
.btn:hover, .btn[href]:hover {
background-color: #ffe5e6;
-webkit-transition: all .3s ease-out;
transition: all .3s ease-out;
}
.btn--red, .btn--red[href] {
background-color: #d1434a;
border-color: #d1434a;
color: #fff;
}
.btn--red:hover, .btn--red[href]:hover {
background-color: #f16f75;
border-color: #f16f75;
color: #fff;
}
.btn--m {
height: 40px;
line-height: 40px;
}
.btn--s {
height: 35px;
line-height: 35px;
font-size: 12px;
letter-spacing: .1em;
}
.btn-line2 {
white-space: normal;
line-height: 1em;
vertical-align: top;
}
.up-down-btn {
color: #ee7a23;
}
/** modal css **/
.md-modal {
position: fixed;
top: 50%;
left: 50%;
width: 535px;
height: auto;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
visibility: hidden;
z-index: 201;
}
.md-modal.md-modal-m {
width: 620px;
}
.md-modal .md-close {
position: absolute;
top: 7px;
right: 7px;
width: 34px;
height: 34px;
-webkit-transform: scale(0.5);
-ms-transform: scale(0.5);
transform: scale(0.5);
text-indent: -8000px;
}
.md-modal .md-close:before, .md-modal .md-close:after {
position: absolute;
top: 16px;
left: -4px;
content: "";
width: 44px;
height: 3px;
background: #d7d8dd;
-webkit-transition: -webkit-transform .5s ease-out;
transition: -webkit-transform .5s ease-out;
transition: transform .5s ease-out;
transition: transform .5s ease-out, -webkit-transform .5s ease-out;
}
.md-modal .md-close:before {
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.md-modal .md-close:after {
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.md-modal .md-close:hover:before, .md-modal .md-close:hover:after {
-webkit-transition: -webkit-transform .3s ease-out;
transition: -webkit-transform .3s ease-out;
transition: transform .3s ease-out;
transition: transform .3s ease-out, -webkit-transform .3s ease-out;
}
.md-modal .md-close:hover:before {
-webkit-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.md-modal .md-close:hover:after {
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.md-modal .md-tit {
font-weight: 200;
line-height: 1.8em;
text-align: center;
}
.md-modal .md-modal-inner {
padding: 60px 50px;
}
.md-modal .btn-wrap {
margin-top: 20px;
text-align: center;
font-size: 0;
}
.md-modal .btn-wrap .btn {
width: 45%;
min-width: 80px;
margin: 0 2.5%;
}
.md-modal .confirm-tips, .md-modal .alert-tips {
font-size: 14px;
font-weight: 200;
text-align: center;
}
.md-modal .confirm-tips p, .md-modal .alert-tips p {
line-height: 1.8em;
}
.md-modal .confirm-tips {
min-height: 5.65em;
}
.md-modal .alert-tips {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
height: 10.25em;
-ms-flex-align: center;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.md-modal .alert-tips p {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.md-modal.modal-normal .content-tit {
margin-bottom: 20px;
line-height: 20px;
font-size: 16px;
color: #333;
}
.md-modal .icon-status-ok {
width: 20px;
height: 20px;
fill: #ee7a23;
vertical-align: middle;
margin-right: 15px;
}
.md-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 200;
}
.md-modal-transition .md-modal-inner {
background: #fff;
-webkit-transform: translateY(20%);
-ms-transform: translateY(20%);
transform: translateY(20%);
opacity: 0;
-webkit-transition: all .3s ease-out;
transition: all .3s ease-out;
}
.md-modal-transition.md-show {
visibility: visible;
}
.md-modal-transition.md-show .md-modal-inner {
-webkit-transform: translateY(0);
-ms-transform: translateY(0);
transform: translateY(0);
opacity: 1;
-webkit-transition: all .5s ease-out;
transition: all .5s ease-out;
}
@media only screen and (max-width: 767px) {
.md-modal {
width: 300px !important;
}
.md-modal.md-modal-fun .md-content {
padding-top: 30px;
}
.md-modal .md-close {
display: none;
}
.md-modal .md-tit {
padding: 0 15px;
}
.md-modal .md-modal-inner {
padding: 0 !important;
}
.md-modal .confirm-tips, .md-modal .alert-tips {
padding: 30px 10px;
}
.md-modal .confirm-tips {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
min-height: 90px;
-ms-flex-align: center;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.md-modal .confirm-tips p {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.md-modal .btn-wrap {
display: -ms-flex;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
margin-top: 0;
}
.md-modal .btn-wrap .btn {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
width: 100%;
margin: 0;
font-size: 12px;
}
.md-modal .btn-wrap .btn:first-child {
border-left: none;
border-right: none;
}
.md-modal.modal-normal .content-tit {
font-size: 12px;
}
}