UNPKG

@ionic/core

Version:

Base components for Ionic

184 lines (167 loc) • 5.7 kB
:host { /** * @prop --background: Background of the content * * @prop --color: Color of the content * * @prop --padding-top: Top padding of the content * @prop --padding-end: Right padding if direction is left-to-right, and left padding if direction is right-to-left of the content * @prop --padding-bottom: Bottom padding of the content * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the content * * @prop --keyboard-offset: Keyboard offset of the content * * @prop --offset-top: Offset top of the content * @prop --offset-bottom: Offset bottom of the content */ --background: var(--ion-background-color, #fff); --color: var(--ion-text-color, #000); --padding-top: 0px; --padding-bottom: 0px; --padding-start: 0px; --padding-end: 0px; --keyboard-offset: 0px; --offset-top: 0px; --offset-bottom: 0px; --overflow: auto; display: block; position: relative; flex: 1; width: 100%; height: 100%; /* stylelint-disable */ margin: 0 !important; padding: 0 !important; /* stylelint-enable */ font-family: var(--ion-font-family, inherit); contain: size style; } :host(.ion-color) .inner-scroll { background: var(--ion-color-base); color: var(--ion-color-contrast); } :host(.outer-content) { --background: var(--ion-color-step-50, #f2f2f2); } #background-content { left: 0px; right: 0px; top: calc(var(--offset-top) * -1); bottom: calc(var(--offset-bottom) * -1); position: absolute; background: var(--background); } .inner-scroll { left: 0px; right: 0px; top: calc(var(--offset-top) * -1); bottom: calc(var(--offset-bottom) * -1); padding-left: var(--padding-start); padding-right: var(--padding-end); padding-top: calc(var(--padding-top) + var(--offset-top)); padding-bottom: calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom)); position: absolute; color: var(--color); box-sizing: border-box; overflow: hidden; } @supports (margin-inline-start: 0) or (-webkit-margin-start: 0) { .inner-scroll { padding-left: unset; padding-right: unset; -webkit-padding-start: var(--padding-start); padding-inline-start: var(--padding-start); -webkit-padding-end: var(--padding-end); padding-inline-end: var(--padding-end); } } .scroll-y, .scroll-x { -webkit-overflow-scrolling: touch; /** * This adds `.inner-scroll` as part of the * stacking context in WebKit. Without it, * children of ion-content are treated as * siblings rather than descendants. This * can result in the children being put * into their own layers, degrading * scrolling performance. * * An optimization called "layer backing * sharing" usually kicks in to prevent * this, but having translate3d defeats * this optimization. * * See: https://bugs.webkit.org/show_bug.cgi?id=216701 */ z-index: 0; will-change: scroll-position; } .scroll-y { touch-action: pan-y; overflow-y: var(--overflow); overscroll-behavior-y: contain; } .scroll-x { touch-action: pan-x; overflow-x: var(--overflow); overscroll-behavior-x: contain; } .scroll-x.scroll-y { touch-action: auto; } .overscroll::before, .overscroll::after { position: absolute; width: 1px; height: 1px; content: ""; } .overscroll::before { bottom: -1px; } .overscroll::after { top: -1px; } :host(.content-sizing) { contain: none; } :host(.content-sizing) .inner-scroll { position: relative; } .transition-effect { display: none; position: absolute; /* stylelint-disable property-disallowed-list */ left: -100%; /* stylelint-enable property-disallowed-list */ width: 100%; height: 100vh; opacity: 0; pointer-events: none; } .transition-cover { position: absolute; /* stylelint-disable property-disallowed-list */ right: 0; /* stylelint-enable property-disallowed-list */ width: 100%; height: 100%; background: black; opacity: 0.1; } .transition-shadow { display: block; position: absolute; /* stylelint-disable property-disallowed-list */ right: 0; /* stylelint-enable property-disallowed-list */ width: 10px; height: 100%; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAgCAYAAAAIXrg4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTE3MDgzRkQ5QTkyMTFFOUEwNzQ5MkJFREE1NUY2MjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTE3MDgzRkU5QTkyMTFFOUEwNzQ5MkJFREE1NUY2MjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMTcwODNGQjlBOTIxMUU5QTA3NDkyQkVEQTU1RjYyNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMTcwODNGQzlBOTIxMUU5QTA3NDkyQkVEQTU1RjYyNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmePEuQAAABNSURBVHjaYvz//z8DIxAwMDAwATGMhmFmPDQuOSZks0AMmoJBaQHjkPfB0Lfg/2gQjVow+HPy/yHvg9GiYjQfjMbBqAWjFgy/4hogwADYqwdzxy5BuwAAAABJRU5ErkJggg==); background-repeat: repeat-y; background-size: 10px 16px; } ::slotted([slot=fixed]) { position: absolute; }