diff --git a/core/src/components/button/button.ios.vars.scss b/core/src/components/button/button.ios.vars.scss
index 1a7adecf6c9..eada67d4c27 100644
--- a/core/src/components/button/button.ios.vars.scss
+++ b/core/src/components/button/button.ios.vars.scss
@@ -34,7 +34,9 @@ $button-ios-height: 3.1em !default;
$button-ios-border-radius: 14px !default;
/// @prop - Font size of the button text
-$button-ios-font-size: 16px !default;
+/// The maximum font size is calculated by taking the default font size
+/// and multiplying it by 3, since 310% of the default is the maximum
+$button-ios-font-size: min(1rem, 48px) !default;
/// @prop - Font weight of the button text
$button-ios-font-weight: 500 !default;
@@ -83,7 +85,9 @@ $button-ios-large-height: 3.1em !default;
$button-ios-large-border-radius: 16px !default;
/// @prop - Font size of the large button
-$button-ios-large-font-size: 20px !default;
+/// The maximum font size is calculated by taking the default font size
+/// and multiplying it by 3, since 310% of the default is the maximum
+$button-ios-large-font-size: min(1.25rem, 60px) !default;
// iOS Small Button
@@ -108,7 +112,9 @@ $button-ios-small-height: 2.1em !default;
$button-ios-small-border-radius: 6px !default;
/// @prop - Font size of the small button
-$button-ios-small-font-size: 13px !default;
+/// The maximum font size is calculated by taking the default font size
+/// and multiplying it by 3, since 310% of the default is the maximum
+$button-ios-small-font-size: min(0.8125rem, 39px) !default;
// iOS Outline Button
@@ -151,13 +157,15 @@ $button-ios-outline-background-color-focused: ion-color(primary, base, $
// --------------------------------------------------
/// @prop - Font size of the clear button
-$button-ios-clear-font-size: 17px !default;
+/// The maximum font size is calculated by taking the default font size
+/// and multiplying it by 3, since 310% of the default is the maximum
+$button-ios-clear-font-size: min(1.0625rem, 51px) !default;
/// @prop - Font weight of the clear button
$button-ios-clear-font-weight: normal !default;
/// @prop - Letter spacing of the button
-$button-ios-letter-spacing: 0 !default;
+$button-ios-letter-spacing: 0 !default;
/// @prop - Border color of the clear button
$button-ios-clear-border-color: transparent !default;
diff --git a/core/src/components/button/button.md.vars.scss b/core/src/components/button/button.md.vars.scss
index a5af53c9520..198f94e214c 100644
--- a/core/src/components/button/button.md.vars.scss
+++ b/core/src/components/button/button.md.vars.scss
@@ -34,7 +34,7 @@ $button-md-height: 36px !default;
$button-md-border-radius: 4px !default;
/// @prop - Font size of the button text
-$button-md-font-size: 14px !default;
+$button-md-font-size: 0.875rem !default;
/// @prop - Font weight of the button text
$button-md-font-weight: 500 !default;
@@ -78,7 +78,7 @@ $button-md-large-padding-start: $button-md-large-padding
$button-md-large-height: 2.8em !default;
/// @prop - Font size of the large button
-$button-md-large-font-size: 20px !default;
+$button-md-large-font-size: 1.25rem !default;
// Material Design Small Button
@@ -100,7 +100,7 @@ $button-md-small-padding-start: $button-md-small-padding
$button-md-small-height: 2.1em !default;
/// @prop - Font size of the small button
-$button-md-small-font-size: 13px !default;
+$button-md-small-font-size: 0.8125rem !default;
// Material Design Outline Button
diff --git a/core/src/components/button/test/a11y/button.e2e.ts b/core/src/components/button/test/a11y/button.e2e.ts
new file mode 100644
index 00000000000..c6efe22d935
--- /dev/null
+++ b/core/src/components/button/test/a11y/button.e2e.ts
@@ -0,0 +1,82 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('button: font scaling'), () => {
+ test('should scale default button text on larger font sizes', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+ Default
+ `,
+ config
+ );
+
+ const button = page.locator('ion-button');
+
+ await expect(button).toHaveScreenshot(screenshot(`button-default-scale`));
+ });
+
+ test('should scale clear button text on larger font sizes', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+ Clear
+ `,
+ config
+ );
+
+ const button = page.locator('ion-button');
+
+ await expect(button).toHaveScreenshot(screenshot(`button-clear-scale`));
+ });
+
+ test('should scale small button text on larger font sizes', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+ Small
+ `,
+ config
+ );
+
+ const button = page.locator('ion-button');
+
+ await expect(button).toHaveScreenshot(screenshot(`button-small-scale`));
+ });
+
+ test('should scale large button text on larger font sizes', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+ Large
+ `,
+ config
+ );
+
+ const button = page.locator('ion-button');
+
+ await expect(button).toHaveScreenshot(screenshot(`button-large-scale`));
+ });
+ });
+});
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..2dbb542b16e
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..3c5deb7cd4a
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..2f922a18c51
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..d749b093c37
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..5bb45276633
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..aa65408d330
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-clear-scale-md-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..904dcdc8dc8
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..5ae5defaf14
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..89c3498d840
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..2f367491869
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..40392ebfed8
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..759ef7a3d5f
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-default-scale-md-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..268141eb5d0
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..4736211887e
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..97003abe052
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..840b5ec58d8
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..f30c0c8aaa9
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..baf148bc19a
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-large-scale-md-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..dba28972d9e
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..62bb829eb17
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..24c17215509
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-ios-ltr-Mobile-Safari-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Chrome-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Chrome-linux.png
new file mode 100644
index 00000000000..0950c75a337
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Firefox-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Firefox-linux.png
new file mode 100644
index 00000000000..7861de29393
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Safari-linux.png b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Safari-linux.png
new file mode 100644
index 00000000000..e184b698e3f
Binary files /dev/null and b/core/src/components/button/test/a11y/button.e2e.ts-snapshots/button-small-scale-md-ltr-Mobile-Safari-linux.png differ