Skip to content

feat(tokens): add gray and text colors#30981

Open
thetaPC wants to merge 6 commits intoionic-modularfrom
FW-6751-pt2
Open

feat(tokens): add gray and text colors#30981
thetaPC wants to merge 6 commits intoionic-modularfrom
FW-6751-pt2

Conversation

@thetaPC
Copy link
Contributor

@thetaPC thetaPC commented Feb 27, 2026

Issue number: internal


What is the current behavior?

ios and md themes are still using the stepped color variables.

What is the new behavior?

The CSS variable --ion-background-color-step-{number} is no longer recommended for use and has been replaced by a more intuitive and standardized naming convention as part of Ionic's new theming structure. The functionality provided by the old variable has been replaced with a new set of CSS variables that use the same color values but are named: --ion-color-gray-{number}.

This new structure aligns with how other popular design systems and frameworks are setting up their color palettes (e.g., using names like gray, red, blue, followed by a number to denote the shade). Additionally, it follows the proposal agreed upon within the design doc.

  • Added gray tokens based on themes and palettes
  • Replaced background stepped color variables with gray tokens

The CSS variable --ion-text-color-step-* is being replaced by --ion-color-text-* to adhere to the standardized naming convention for Ionic's new theming structure (--ion-color-*-*). This change aims for greater clarity and consistency within the framework's color palette.

  • Added text tokens based on themes and palettes
  • Replaced text stepped color variables with text tokens

The original thought was to use only the --ion-color-gray-* variables for all purposes (backgrounds, text, icons, etc.). However, it was quickly determined that text color requirements are not a 1:1 match with the gray steps designed for backgrounds and other elements. Text often requires a different shade to maintain proper contrast and readability across various theme palettes (especially between high contrast and high contrast dark modes). Introducing the dedicated functional variable --ion-color-text-* solves this issue by allowing text color to be defined independently based on the current palette's needs.

Also the --ion-color-step-* variables were removed since they were deprecated in v7.

Does this introduce a breaking change?

  • Yes
  • No

You simply need to swap the wording of the background stepped variables with the new gray variables. The number suffix remains exactly the same:

Old Variable (Deprecated) New Variable
--ion-background-color-step-50 --ion-color-gray-50
--ion-background-color-step-900 --ion-color-gray-900

You simply need to swap the wording of the text stepped variables with the new text variables. The number suffix remains exactly the same:

Old Variable (Deprecated) New Variable
--ion-text-color-step-50 --ion-color-text-50
--ion-text-color-step-900 --ion-color-text-900

Other information

Preview

@vercel
Copy link

vercel bot commented Feb 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ionic-framework Ready Ready Preview, Comment Feb 28, 2026 0:37am

Request Review

@github-actions github-actions bot added the package: react @ionic/react package label Feb 27, 2026
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deleted it because we've moved to using core/src/themes/test/color/index.html

@thetaPC thetaPC marked this pull request as ready for review March 2, 2026 17:42
@thetaPC thetaPC requested a review from a team as a code owner March 2, 2026 17:42
@thetaPC thetaPC requested a review from OS-jacobbell March 2, 2026 17:42
@thetaPC thetaPC requested review from brandyscarney and removed request for OS-jacobbell March 2, 2026 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

package: angular @ionic/angular package package: core @ionic/core package package: react @ionic/react package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant