+
+
+
+
+
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts b/core/src/components/popover/test/safe-area/popover.e2e.ts
new file mode 100644
index 00000000000..2e49dc1b75e
--- /dev/null
+++ b/core/src/components/popover/test/safe-area/popover.e2e.ts
@@ -0,0 +1,133 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+/**
+ * Safe-area tests verify that popovers are correctly positioned
+ * to avoid overlapping with safe-area zones (status bars, navigation bars, etc.)
+ *
+ * This is especially important for Android API 36+ where edge-to-edge mode
+ * is enforced and apps can no longer opt out.
+ *
+ * The test HTML includes safe-area values (44px top/left/right, 34px bottom)
+ * and red visual indicators to verify popover positioning.
+ */
+
+// Tests that apply to both iOS and MD modes
+configs({ modes: ['ios', 'md'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('popover: safe-area positioning'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/popover/test/safe-area', config);
+ });
+
+ test('popover pinned to bottom should account for safe-area-bottom in position', async ({ page }, testInfo) => {
+ testInfo.annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/30900',
+ });
+
+ /**
+ * Use a small viewport to force the popover to be fully constrained.
+ * The large popover has 15 items (~700px), which will exceed the available
+ * space in this viewport, causing it to be constrained with both top and
+ * bottom edges near the safe areas.
+ *
+ * A 300px viewport ensures there's not enough space above OR below the
+ * trigger for the full popover content, triggering the fully constrained path.
+ */
+ await page.setViewportSize({ width: 375, height: 300 });
+
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
+
+ // Click the large popover trigger which has enough content to extend toward the bottom
+ await page.click('#large-popover-trigger');
+ await ionPopoverDidPresent.next();
+
+ // Target the specific popover that was presented
+ const popover = page.locator('ion-popover[trigger="large-popover-trigger"]');
+ const popoverContent = popover.locator('.popover-content');
+
+ // Get the computed bottom style - should include safe-area calc
+ const bottomStyle = await popoverContent.evaluate((el) => el.style.bottom);
+
+ // The bottom should include the safe-area-bottom CSS variable
+ // This ensures the popover is positioned above the unsafe area
+ expect(bottomStyle).toContain('var(--ion-safe-area-bottom');
+ });
+ });
+});
+
+// iOS-specific tests
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('popover: safe-area positioning - ios specific'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/popover/test/safe-area', config);
+ });
+
+ test('floating popover should not have safe-area adjustments', async ({ page }) => {
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
+
+ await page.click('#small-popover-trigger');
+ await ionPopoverDidPresent.next();
+
+ // Target the specific popover
+ const popover = page.locator('ion-popover[trigger="small-popover-trigger"]');
+ const popoverContent = popover.locator('.popover-content');
+
+ // Get the computed top and bottom styles
+ const topStyle = await popoverContent.evaluate((el) => el.style.top);
+ const bottomStyle = await popoverContent.evaluate((el) => el.style.bottom);
+
+ // A floating popover in the middle shouldn't have safe-area adjustments
+ // The top should be a simple calc without safe-area
+ expect(topStyle).not.toContain('var(--ion-safe-area-top');
+ // The bottom should not be set for a floating popover
+ expect(bottomStyle).toBe('');
+ });
+ });
+});
+
+// Landscape viewport simulates devices with side notches or landscape orientation
+const LandscapeViewport = { width: 844, height: 390 };
+
+configs({ modes: ['ios', 'md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('popover: safe-area screenshots'), () => {
+ test('popover near bottom should avoid bottom safe area', async ({ page }) => {
+ await page.setViewportSize(LandscapeViewport);
+ await page.goto('/src/components/popover/test/safe-area', config);
+
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
+
+ await page.click('#bottom-trigger');
+ await ionPopoverDidPresent.next();
+
+ // Red overlays show safe areas - popover should be positioned to avoid them
+ await expect(page).toHaveScreenshot(screenshot('popover-safe-area-bottom-landscape'));
+ });
+
+ test('popover near bottom right should avoid right safe area', async ({ page }) => {
+ await page.setViewportSize(LandscapeViewport);
+ await page.goto('/src/components/popover/test/safe-area', config);
+
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
+
+ await page.click('#near-bottom-trigger');
+ await ionPopoverDidPresent.next();
+
+ // Popover triggered from near-right edge should account for right safe area
+ await expect(page).toHaveScreenshot(screenshot('popover-safe-area-right-landscape'));
+ });
+
+ test('large popover should avoid all safe areas', async ({ page }) => {
+ await page.setViewportSize(LandscapeViewport);
+ await page.goto('/src/components/popover/test/safe-area', config);
+
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
+
+ await page.click('#large-popover-trigger');
+ await ionPopoverDidPresent.next();
+
+ // Large popover may extend toward edges - should respect safe areas
+ await expect(page).toHaveScreenshot(screenshot('popover-safe-area-large-landscape'));
+ });
+ });
+});
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..7e561265dff
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..d3b210a8012
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Safari-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..276308201f0
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Chrome-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..379045a9428
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Firefox-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..e0197c8f23d
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Safari-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..e9caad6e513
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-landscape-md-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..666b18bd3d2
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..fcfa7fe32de
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Safari-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..025e994f91d
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Chrome-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..5a605da5676
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Firefox-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..3022119287f
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Safari-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..ee41c84325a
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-landscape-md-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..666b18bd3d2
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..163711371c7
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Safari-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..eca032b52db
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Chrome-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..5a605da5676
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Firefox-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..3022119287f
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Safari-linux.png b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..ee41c84325a
Binary files /dev/null and b/core/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-landscape-md-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/popover/utils.ts b/core/src/components/popover/utils.ts
index 794ebb20884..b6a25498976 100644
--- a/core/src/components/popover/utils.ts
+++ b/core/src/components/popover/utils.ts
@@ -30,11 +30,20 @@ export interface PopoverStyles {
bottom?: number;
originX: string;
originY: string;
+ checkSafeAreaTop: boolean;
+ checkSafeAreaBottom: boolean;
checkSafeAreaLeft: boolean;
checkSafeAreaRight: boolean;
arrowTop: number;
arrowLeft: number;
addPopoverBottomClass: boolean;
+ /**
+ * When true, the popover content was too tall to fit above or below
+ * the trigger, so it was constrained to the full viewport height.
+ * In this case, the arrow should be hidden as it cannot accurately
+ * point to the trigger.
+ */
+ isFullyConstrained: boolean;
}
/**
@@ -829,8 +838,11 @@ export const calculateWindowAdjustment = (
let bottom;
let originX = contentOriginX;
let originY = contentOriginY;
+ let checkSafeAreaTop = false;
+ let checkSafeAreaBottom = false;
let checkSafeAreaLeft = false;
let checkSafeAreaRight = false;
+ let isFullyConstrained = false;
const triggerTop = triggerCoordinates
? triggerCoordinates.top + triggerCoordinates.height
: bodyHeight / 2 - contentHeight / 2;
@@ -841,20 +853,29 @@ export const calculateWindowAdjustment = (
* Adjust popover so it does not
* go off the left of the screen.
*/
- if (left < bodyPadding + safeAreaMargin) {
+ if (left < bodyPadding) {
left = bodyPadding;
- checkSafeAreaLeft = true;
originX = 'left';
/**
* Adjust popover so it does not
* go off the right of the screen.
*/
- } else if (contentWidth + bodyPadding + left + safeAreaMargin > bodyWidth) {
- checkSafeAreaRight = true;
+ } else if (contentWidth + bodyPadding + left > bodyWidth) {
left = bodyWidth - contentWidth - bodyPadding;
originX = 'right';
}
+ /**
+ * After position adjustment, check if popover is near edges
+ * and needs safe-area CSS variable adjustments.
+ */
+ if (left <= safeAreaMargin) {
+ checkSafeAreaLeft = true;
+ }
+ if (left + contentWidth >= bodyWidth - safeAreaMargin) {
+ checkSafeAreaRight = true;
+ }
+
/**
* Adjust popover so it does not
* go off the top of the screen.
@@ -863,7 +884,19 @@ export const calculateWindowAdjustment = (
* margins.
*/
if (triggerTop + triggerHeight + contentHeight > bodyHeight && (side === 'top' || side === 'bottom')) {
- if (triggerTop - contentHeight > 0) {
+ /**
+ * Calculate available space above and below, accounting for safe areas.
+ * This ensures we flip to whichever side has more usable space.
+ */
+ const spaceAbove = (triggerCoordinates?.top ?? triggerTop) - bodyPadding - safeAreaMargin;
+ const spaceBelow = bodyHeight - triggerTop - triggerHeight - bodyPadding - safeAreaMargin;
+
+ /**
+ * Flip above if:
+ * 1. Content fits entirely above the trigger, OR
+ * 2. There's more usable space above than below (accounting for safe areas)
+ */
+ if (triggerTop - contentHeight > 0 || spaceAbove > spaceBelow) {
/**
* While we strive to align the popover with the trigger
* on smaller screens this is not always possible. As a result,
@@ -874,31 +907,90 @@ export const calculateWindowAdjustment = (
* We chose 12 here so that the popover position looks a bit nicer as
* it is not right up against the edge of the screen.
*/
- top = Math.max(12, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
+ top = Math.max(bodyPadding, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
arrowTop = top + contentHeight;
originY = 'bottom';
addPopoverBottomClass = true;
/**
- * If not enough room for popover to appear
- * above trigger, then cut it off.
+ * If the popover is positioned near the top edge, account for safe area.
+ * This ensures the popover doesn't overlap with status bars or notches.
+ */
+ if (top <= bodyPadding + safeAreaMargin) {
+ checkSafeAreaTop = true;
+ top = bodyPadding;
+ }
+
+ /**
+ * After flipping above, check if popover will likely overflow the viewport.
+ * This can happen when the popover is taller than the available space.
+ *
+ * When checkSafeAreaTop is true, the CSS will add safe-area-top to the
+ * top position, pushing the popover down. Since we don't know the exact
+ * CSS safe-area value at runtime, we use a conservative threshold that
+ * accounts for typical safe-area sizes (usually 40-50px). By checking
+ * against (safeAreaMargin * 2), we ensure that:
+ * 1. Any popover close to the viewport boundary gets constrained
+ * 2. The safe-area CSS variables have room to be applied without overflow
+ */
+ if (checkSafeAreaTop && top + contentHeight > bodyHeight - safeAreaMargin * 2 - bodyPadding) {
+ bottom = bodyPadding;
+ checkSafeAreaBottom = true;
+ isFullyConstrained = true;
+ }
+
+ /**
+ * If not enough room for popover to appear above trigger
+ * (i.e., content is taller than space above), then constrain
+ * the popover to fill the entire viewport from top to bottom.
*/
} else {
+ top = bodyPadding;
bottom = bodyPadding;
+ checkSafeAreaTop = true;
+ checkSafeAreaBottom = true;
+ isFullyConstrained = true;
}
}
+ /**
+ * Check if popover is near edges and needs safe-area adjustments.
+ * When the popover extends into the safe-area zone, set a bottom constraint
+ * to push it up and out of the unsafe area. This is essential for
+ * edge-to-edge displays on Android API 36+ and iOS devices with home indicators.
+ */
+ const popoverBottom = bottom !== undefined ? bodyHeight - bottom : top + contentHeight;
+ if (popoverBottom > bodyHeight - safeAreaMargin && bottom === undefined) {
+ checkSafeAreaBottom = true;
+ /**
+ * Set a bottom constraint to push the popover up out of the safe-area zone.
+ * The animation will add the safe-area CSS variable to this value.
+ *
+ * We also set isFullyConstrained so that height: unset is applied,
+ * allowing the bottom constraint to actually take effect (otherwise
+ * the explicit height would override the bottom constraint).
+ */
+ bottom = bodyPadding;
+ isFullyConstrained = true;
+ }
+ if (top < safeAreaMargin) {
+ checkSafeAreaTop = true;
+ }
+
return {
top,
left,
bottom,
originX,
originY,
+ checkSafeAreaTop,
+ checkSafeAreaBottom,
checkSafeAreaLeft,
checkSafeAreaRight,
arrowTop,
arrowLeft,
addPopoverBottomClass,
+ isFullyConstrained,
};
};
diff --git a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Chrome-linux.png
index 058e9eb36b8..7ea7ccc3ac9 100644
Binary files a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Chrome-linux.png and b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Firefox-linux.png
index f6dda21ddea..ced1ed72e4f 100644
Binary files a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Firefox-linux.png and b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Safari-linux.png b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Safari-linux.png
index 5a57da67318..40b3f6aefa1 100644
Binary files a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Safari-linux.png and b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Chrome-linux.png b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Chrome-linux.png
index 48f5106e004..b9cde6a41f7 100644
Binary files a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Chrome-linux.png and b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Firefox-linux.png b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Firefox-linux.png
index e13afdfc587..24cb2735029 100644
Binary files a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Firefox-linux.png and b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Safari-linux.png b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Safari-linux.png
index e6e9c4fdb8c..7211b7dba93 100644
Binary files a/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Safari-linux.png and b/core/src/components/select/test/basic/select.e2e.ts-snapshots/select-basic-popover-scroll-to-selected-md-ltr-Mobile-Safari-linux.png differ