mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-11-09 16:16:41 +08:00
fix(popover): content sizing, scoped css
fixes #15237 fixes #15589 fixes #15331
This commit is contained in:
@ -96,3 +96,10 @@
|
|||||||
.overscroll::after {
|
.overscroll::after {
|
||||||
top: -1px;
|
top: -1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:host(.content-sizing) {
|
||||||
|
contain: none;
|
||||||
|
}
|
||||||
|
:host(.content-sizing) .inner-scroll {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|
||||||
|
|||||||
@ -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';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -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,
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user