Skip to content

Commit bf3d95f

Browse files
hastomhastom
andauthored
fix(MdDialog):change position principle from transform to flex wrapper (#2023)
* Changed dialog positioning to flex * Revert to transition root element Co-authored-by: hastom <[email protected]>
1 parent 3aefccb commit bf3d95f

File tree

3 files changed

+69
-37
lines changed

3 files changed

+69
-37
lines changed

docs/app/pages/Components/Dialog/examples/DialogCustom.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
</script>
4545

4646
<style lang="scss" scoped>
47-
.md-dialog {
47+
.md-dialog /deep/.md-dialog-container {
4848
max-width: 768px;
4949
}
5050
</style>

src/components/MdDialog/MdDialog.vue

Lines changed: 67 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<template>
22
<md-portal>
33
<transition name="md-dialog">
4-
<div class="md-dialog" :class="[dialogClasses, $mdActiveTheme]" v-on="$listeners" @keydown.esc="onEsc" v-if="mdActive">
4+
<div class="md-dialog" v-if="mdActive">
55
<md-focus-trap>
6-
<div class="md-dialog-container">
7-
<slot />
8-
6+
<div class="md-dialog-container" :class="[dialogContainerClasses, $mdActiveTheme]" v-on="$listeners"
7+
@keydown.esc="onEsc">
8+
<slot/>
99
<keep-alive>
10-
<md-overlay :class="mdBackdropClass" md-fixed :md-active="mdActive" @click="onClick" v-if="mdBackdrop" />
10+
<md-overlay :class="mdBackdropClass" md-fixed :md-active="mdActive" @click="onClick" v-if="mdBackdrop"/>
1111
</keep-alive>
1212
</div>
1313
</md-focus-trap>
@@ -55,6 +55,11 @@
5555
},
5656
computed: {
5757
dialogClasses () {
58+
return {
59+
'md-active': this.mdActive
60+
}
61+
},
62+
dialogContainerClasses () {
5863
return {
5964
'md-dialog-fullscreen': this.mdFullscreen
6065
}
@@ -95,28 +100,72 @@
95100
@import "~components/MdLayout/mixins";
96101
@import "~components/MdElevation/mixins";
97102
103+
$opacity-transition-duration: .15s;
104+
$transform-transition-duration: .20s;
105+
$max-duration: max($opacity-transition-duration, $transform-transition-duration);
106+
98107
.md-dialog {
108+
position: fixed;
109+
top: 0;
110+
left: 0;
111+
right: 0;
112+
bottom: 0;
113+
align-items: center;
114+
justify-content: center;
115+
pointer-events: none;
116+
display: flex;
117+
transition-duration: $max-duration;
118+
z-index: 110;
119+
120+
&.md-dialog-leave,
121+
&.md-dialog-enter-to {
122+
.md-dialog-container {
123+
opacity: 1;
124+
transform: scale(1);
125+
}
126+
127+
.md-dialog-fullscreen {
128+
@include md-layout-xsmall {
129+
opacity: 0;
130+
transform: translate(0, 30%);
131+
}
132+
}
133+
}
134+
135+
&.md-dialog-enter,
136+
&.md-dialog-leave-to {
137+
.md-dialog-container {
138+
opacity: 0;
139+
transform: scale(.9);
140+
}
141+
142+
.md-dialog-fullscreen {
143+
@include md-layout-xsmall {
144+
opacity: 1;
145+
transform: translate(0, 0);
146+
}
147+
}
148+
}
149+
150+
}
151+
152+
.md-dialog-container {
99153
@include md-elevation(24);
100154
min-width: 280px;
101155
max-width: 80%;
102156
max-height: 80%;
103157
margin: auto;
104158
display: flex;
105159
flex-flow: column;
106-
flex-direction: row;
107160
overflow: hidden;
108-
position: fixed;
109-
top: 50%;
110-
left: 50%;
111-
z-index: 110;
112161
border-radius: 2px;
113162
backface-visibility: hidden;
114163
pointer-events: auto;
115-
transform: translate(-50%, -50%);
164+
opacity: 1;
165+
transform: scale(1);
116166
transform-origin: center center;
117-
transition: opacity .15s $md-transition-stand-timing,
118-
transform .2s $md-transition-stand-timing;
119-
will-change: opacity, transform, left, top;
167+
transition: opacity $opacity-transition-duration $md-transition-stand-timing, transform $transform-transition-duration $md-transition-stand-timing;
168+
will-change: opacity, transform;
120169
121170
> .md-dialog-tabs,
122171
> .md-dialog-title,
@@ -128,10 +177,10 @@
128177
}
129178
}
130179
131-
.md-dialog-enter-active,
180+
.md-dialog-enter-active,
132181
.md-dialog-leave-active {
133182
opacity: 0;
134-
transform: translate(-50%, -50%) scale(.9);
183+
transform: scale(.9);
135184
136185
> .md-dialog-tabs,
137186
> .md-dialog-title,
@@ -143,10 +192,6 @@
143192
}
144193
145194
.md-dialog-container {
146-
display: flex;
147-
flex-flow: column;
148-
flex: 1;
149-
150195
.md-tabs {
151196
flex: 1;
152197
}
@@ -164,25 +209,12 @@
164209
165210
.md-dialog-fullscreen {
166211
@include md-layout-xsmall {
212+
width: 100%;
213+
height: 100%;
167214
max-width: 100%;
168215
max-height: 100%;
169-
position: fixed;
170-
top: 0;
171-
right: 0;
172-
bottom: 0;
173-
left: 0;
174216
border-radius: 0;
175217
transform: none;
176-
177-
&.md-dialog-enter {
178-
opacity: 0;
179-
transform: translate3D(0, 30%, 0);
180-
}
181-
182-
&.md-dialog-leave-active {
183-
opacity: 0;
184-
transform: translate3D(0, 0, 0);
185-
}
186218
}
187219
}
188220
</style>

src/components/MdDialog/theme.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.md-dialog {
1+
.md-dialog-container {
22
@include md-theme-component() {
33
@include md-theme-property(background-color, background);
44
@include md-theme-property(color, text-primary, background);

0 commit comments

Comments
 (0)