fix(popover): content sizing, scoped css

fixes #15237
fixes #15589
fixes #15331
This commit is contained in:
Manu Mtz.-Almeida
2018-09-14 02:14:51 +02:00
parent ca5866493b
commit 51d4e0840c
8 changed files with 26 additions and 25 deletions

View File

@ -96,3 +96,10 @@
.overscroll::after { .overscroll::after {
top: -1px; top: -1px;
} }
:host(.content-sizing) {
contain: none;
}
:host(.content-sizing) .inner-scroll {
position: relative;
}

View File

@ -1,7 +1,7 @@
import { Component, Element, Event, EventEmitter, Listen, Method, Prop, QueueApi } from '@stencil/core'; import { Component, Element, Event, EventEmitter, Listen, Method, Prop, QueueApi } from '@stencil/core';
import { Color, Config, Mode, ScrollBaseDetail, ScrollDetail } from '../../interface'; import { Color, Config, Mode, ScrollBaseDetail, ScrollDetail } from '../../interface';
import { createColorClasses } from '../../utils/theme'; import { createColorClasses, hostContext } from '../../utils/theme';
@Component({ @Component({
tag: 'ion-content', tag: 'ion-content',
@ -272,6 +272,7 @@ export class Content {
return { return {
class: { class: {
...createColorClasses(this.color), ...createColorClasses(this.color),
'content-sizing': hostContext('ion-popover', this.el),
'overscroll': this.forceOverscroll, 'overscroll': this.forceOverscroll,
}, },
style: { style: {

View File

@ -4,7 +4,7 @@ import { ComponentRef, OverlayController, PopoverOptions } from '../../interface
import { createOverlay, dismissOverlay, getOverlay } from '../../utils/overlays'; import { createOverlay, dismissOverlay, getOverlay } from '../../utils/overlays';
@Component({ @Component({
tag: 'ion-popover-controller' tag: 'ion-popover-controller',
}) })
export class PopoverController implements OverlayController { export class PopoverController implements OverlayController {

View File

@ -16,8 +16,7 @@ export function iosEnterAnimation(AnimationC: Animation, baseEl: HTMLElement, ev
const bodyHeight = window.innerHeight; const bodyHeight = window.innerHeight;
// If ev was passed, use that for target element // If ev was passed, use that for target element
const targetDim = const targetDim = ev && ev.target && (ev.target as HTMLElement).getBoundingClientRect();
ev && ev.target && (ev.target as HTMLElement).getBoundingClientRect();
const targetTop = const targetTop =
targetDim != null && 'top' in targetDim targetDim != null && 'top' in targetDim
@ -34,7 +33,7 @@ export function iosEnterAnimation(AnimationC: Animation, baseEl: HTMLElement, ev
const arrowWidth = arrowDim.width; const arrowWidth = arrowDim.width;
const arrowHeight = arrowDim.height; const arrowHeight = arrowDim.height;
if (targetDim != null) { if (targetDim == null) {
arrowEl.style.display = 'none'; arrowEl.style.display = 'none';
} }

View File

@ -4,7 +4,7 @@
// iOS Popover // iOS Popover
// -------------------------------------------------- // --------------------------------------------------
.popover-ios .popover-content { .popover-content {
@include border-radius($popover-ios-border-radius); @include border-radius($popover-ios-border-radius);
width: $popover-ios-width; width: $popover-ios-width;
@ -20,7 +20,7 @@
// Popover Arrow // Popover Arrow
// ----------------------------------------- // -----------------------------------------
.popover-ios .popover-arrow { .popover-arrow {
display: block; display: block;
position: absolute; position: absolute;
@ -30,7 +30,7 @@
overflow: hidden; overflow: hidden;
} }
.popover-ios .popover-arrow::after { .popover-arrow::after {
@include position(3px, null, null, 3px); @include position(3px, null, null, 3px);
@include border-radius(3px); @include border-radius(3px);
@ -47,20 +47,20 @@
z-index: $z-index-overlay-wrapper; z-index: $z-index-overlay-wrapper;
} }
.popover-ios.popover-bottom .popover-arrow { :host(.popover-bottom) .popover-arrow {
top: auto; top: auto;
bottom: -10px; bottom: -10px;
} }
.popover-ios.popover-bottom .popover-arrow::after { :host(.popover-bottom) .popover-arrow::after {
top: -6px; top: -6px;
} }
// Translucent Popover // Translucent Popover
// ----------------------------------------- // -----------------------------------------
.popover-translucent-ios .popover-content, :host(.popover-translucent) .popover-content,
.popover-translucent-ios .popover-arrow::after { :host(.popover-translucent) .popover-arrow::after {
background: $popover-ios-translucent-background-color; background: $popover-ios-translucent-background-color;
backdrop-filter: $popover-ios-translucent-filter; backdrop-filter: $popover-ios-translucent-filter;
} }

View File

@ -4,7 +4,7 @@
// Material Design Popover // Material Design Popover
// -------------------------------------------------- // --------------------------------------------------
.popover-md .popover-content { .popover-content {
@include border-radius($popover-md-border-radius); @include border-radius($popover-md-border-radius);
@include transform-origin(start, top); @include transform-origin(start, top);
@ -19,7 +19,7 @@
box-shadow: $popover-md-box-shadow; box-shadow: $popover-md-box-shadow;
} }
.popover-md .popover-viewport { .popover-viewport {
// opacity: 0; // opacity: 0;
transition-delay: 100ms; transition-delay: 100ms;
} }

View File

@ -3,7 +3,7 @@
// Popover // Popover
// -------------------------------------------------- // --------------------------------------------------
ion-popover { :host {
@include position(0, 0, 0, 0); @include position(0, 0, 0, 0);
display: flex; display: flex;
@ -29,9 +29,3 @@ ion-popover {
overflow: auto; overflow: auto;
z-index: $z-index-overlay-wrapper; z-index: $z-index-overlay-wrapper;
} }
.popover-content ion-content {
position: relative;
contain: none;
}

View File

@ -16,7 +16,8 @@ import { mdLeaveAnimation } from './animations/md.leave';
styleUrls: { styleUrls: {
ios: 'popover.ios.scss', ios: 'popover.ios.scss',
md: 'popover.md.scss' md: 'popover.md.scss'
} },
scoped: true
}) })
export class Popover implements OverlayInterface { export class Popover implements OverlayInterface {
@ -212,7 +213,6 @@ export class Popover implements OverlayInterface {
} }
hostData() { hostData() {
const themedClasses = this.translucent ? createThemedClasses(this.mode, 'popover-translucent') : {};
return { return {
style: { style: {
@ -220,9 +220,9 @@ export class Popover implements OverlayInterface {
}, },
'no-router': true, 'no-router': true,
class: { class: {
...createThemedClasses(this.mode, 'popover'), 'popover-translucent': this.translucent,
...getClassMap(this.cssClass), ...getClassMap(this.cssClass),
...themedClasses,
} }
}; };
} }