Repository navigation
Conversation
thetaPC
added this pull request to stack #31629
October 21, 2026 23:00
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
1 of 2 tasks
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue number: resolves internal
What is the current behavior?
ion-buttonfragments its styles across per-theme stylesheets (.ios,.md,.ionic,.native).What is the new behavior?
ion-buttonto a single token-drivenbutton.scss, withIonButtonRecipe/IonButtonConfigand per-theme tokens::afteroverlay. Same colors asnext; in md the ripple still shows over the normal background0.4, which matches its design's white washforegroundfor their label and the page background for their fill, matching the designsizeset on the spinner still appliesIonToolbar.IonButtons.IonButton,IonDatetime.IonButton,IonInputPasswordToggle.IonButton)defaultsize in favor ofmediumDoes this introduce a breaking change?
The button's CSS variables are replaced by token-driven custom properties. Use the global token for theme-wide styling, or the CSS variable for component-specific overrides.
iosbutton'sborder-radiusis6pxat every size, andmddefaults to999pxinstead of4px. To revert, setshape="soft"formd. Forios, setIonButton.shape.soft.border.radiusor--ion-button-shape-soft-border-radiusto14px(and6px/16pxon small / large).startandendslots ofion-input,ion-selectandion-textareafollow the button'sshapeinstead of always being circles. Forios, setshape="round"to keep them circular.iosclear buttons use the same font size as the other fills, instead of17pxat the default size. To keep it, set--ion-button-size-medium-font-sizeto17px.iosbutton is28px,34pxand50pxtall at the small, default and large sizes, with less padding. To revert, setIonButton.size.<size>.minHeightor--ion-button-size-<size>-min-heightto2.1em,3.1emand3.1em, and the padding to4px 0.9em,13px 1emand17px 1em.md, they're a few pixels smaller at the small and default sizes and larger at the large size.<fill>withsolid,outlineorclear, and<shape>withcrisp,soft,roundorrectangular. Buttons with acolorread the same tokens undersemantic.--backgroundIonButton.hue.bold.<fill>.default.background--ion-button-hue-bold-<fill>-default-background--background-activatedIonButton.hue.bold.<fill>.activated.background--ion-button-hue-bold-<fill>-activated-background--background-focusedIonButton.hue.bold.<fill>.focus.background--ion-button-hue-bold-<fill>-focus-background--background-hoverIonButton.hue.bold.<fill>.hover.background--ion-button-hue-bold-<fill>-hover-background--border-colorIonButton.hue.bold.<fill>.default.border.color--ion-button-hue-bold-<fill>-default-border-color--border-radiusIonButton.shape.<shape>.border.radius--ion-button-shape-<shape>-border-radius--border-styleIonButton.hue.bold.<fill>.default.border.style--ion-button-hue-bold-<fill>-default-border-style--border-widthIonButton.hue.bold.<fill>.default.border.width--ion-button-hue-bold-<fill>-default-border-width--box-shadowIonButton.hue.bold.<fill>.default.box.shadow--ion-button-hue-bold-<fill>-default-box-shadow--colorIonButton.hue.bold.<fill>.default.color--ion-button-hue-bold-<fill>-default-color--color-activatedIonButton.hue.bold.<fill>.activated.color--ion-button-hue-bold-<fill>-activated-color--color-focusedIonButton.hue.bold.<fill>.focus.color--ion-button-hue-bold-<fill>-focus-color--color-hoverIonButton.hue.bold.<fill>.hover.color--ion-button-hue-bold-<fill>-hover-color--ripple-colorIonButton.hue.bold.<fill>.rippleEffect.color--ion-button-hue-bold-<fill>-ripple-effect-color--transitionIonButton.transition--ion-button-transition--background-activated-opacity,--background-focused-opacityand--background-hover-opacityhave no one-to-one replacement: set the state's final color instead.--opacityis removed: setopacityonion-button.--padding-*variables are no longer documented, but still work when set on the button itself. Replace<size>withsmall,mediumorlarge:--padding-topIonButton.size.<size>.padding.top--ion-button-size-<size>-padding-top--padding-endIonButton.size.<size>.padding.end--ion-button-size-<size>-padding-end--padding-bottomIonButton.size.<size>.padding.bottom--ion-button-size-<size>-padding-bottom--padding-startIonButton.size.<size>.padding.start--ion-button-size-<size>-padding-start.button-solid/.button-outline/.button-clear.button-fill-solid/.button-fill-outline/.button-fill-clear.button-small/.button-default/.button-large.button-size-small/.button-size-medium/.button-size-large.button-soft/.button-round/.button-rectangular.button-shape-soft/.button-shape-round/.button-shape-rectangular.button-block/.button-full.button-expand-block/.button-expand-fulldefaultsize is deprecated. It logs a warning and renders asmedium.ion-button.mdorion-button.ios.Other information
Not matched to the design on purpose
rounddefault from feat(button): set default shape to soft for ios and round for md and ionic themes #29404 instead of MD2's4px, to avoid reversing a change that just landed. The rest of the MD2 sync goes in a stacked PRbasefor their border like every other color, so it's lighter than onnextLeft for the parents
ion-buttons, datetime, input, select, textarea, item and list header still set--padding-*on buttons; each moves it to a nested token in its own migrationion-buttonscaps buttons at 32px tall, so the iOS toolbar icon button is 38×32Known gaps
TODO(FW-6838)). It fails contrast onnexttoo--ion-background-colorto white. In an app, it follows the pageHow to test