Most Ionic markup works without changes. The combinations below are explicit opt-ins provided by the theme.
\nSolid primary submit buttons use --ion-color-primary-brightness for their foreground and border treatment. Define a value with sufficient contrast for your primary color.
:root {\n --ion-color-primary-brightness: #96feff;\n}<ion-button type="submit" color="primary">Submit</ion-button>\n<ion-button class="button-submit" fill="solid" color="primary">Continue</ion-button>Use .button-submit when the button needs the same treatment but cannot use type="submit".
Place an unslotted ion-label immediately alongside an unslotted ion-note to render a two-line item. When using the iOS-style inset-list background, wrap the items in ion-item-group; keep ion-list-header outside the group.
<ion-list inset="true">\n <ion-list-header>\n <ion-label>Connections</ion-label>\n </ion-list-header>\n <ion-item-group>\n <ion-item>\n <ion-label>Network & internet</ion-label>\n <ion-note>Mobile, Wi-Fi, hotspot</ion-note>\n </ion-item>\n </ion-item-group>\n</ion-list>Use slot="end" on ion-note when you want the standard trailing-note layout instead.
Add .item-group-header to an ion-item-group to create the centered icon, title, and description used at the top of the component demo pages.
This is an introductory group. Place regular list items in a separate ion-item-group that follows it.
<ion-list inset="true">\n <ion-item-group class="item-group-header">\n <ion-item>\n <ion-label>\n <ion-icon name="list" style="background: var(--ion-color-primary)"></ion-icon>\n <h2>Lists</h2>\n <ion-text>Inset-list examples</ion-text>\n </ion-label>\n </ion-item>\n </ion-item-group>\n <ion-item-group>\n <ion-item><ion-label>First item</ion-label></ion-item>\n </ion-item-group>\n</ion-list>Add .segment-expand when segment buttons should divide the available width evenly. The class also changes the Liquid Glass effect sizing when registerSegmentEffect is used.
<ion-segment class="segment-expand" value="new">\n <ion-segment-button value="new"><ion-label>New</ion-label></ion-segment-button>\n <ion-segment-button value="replied"><ion-label>Replied</ion-label></ion-segment-button>\n</ion-segment>The theme gives iOS search bars the iOS 26 appearance by default. Add .searchbar-classic to the search field shown beneath a large title in an ion-header with collapse="condense". It uses the conventional filled iOS appearance and collapses with the large title instead of remaining in the fixed header.
Place it in a toolbar with a color, such as color="light"; the classic background is derived from that color's contrast value.
The example uses Ionic's standard collapsible large-title structure. Scroll the preview to collapse the large title and reveal the fixed header.
\n<div class="ion-page">\n <ion-header translucent="true">\n <ion-toolbar color="light">\n <ion-title>Search</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content color="light" fullscreen="true">\n <ion-header collapse="condense">\n <ion-toolbar color="light">\n <ion-title size="large">Search</ion-title>\n </ion-toolbar>\n <ion-toolbar color="light">\n <ion-searchbar class="searchbar-classic" placeholder="Filter results"></ion-searchbar>\n </ion-toolbar>\n </ion-header>\n <ion-list inset="true">\n <ion-item-group>\n <ion-item><ion-label>Recent item 1</ion-label></ion-item>\n <ion-item><ion-label>Recent item 2</ion-label></ion-item>\n <ion-item><ion-label>Recent item 3</ion-label></ion-item>\n <ion-item><ion-label>Recent item 4</ion-label></ion-item>\n <ion-item><ion-label>Recent item 5</ion-label></ion-item>\n <ion-item><ion-label>Recent item 6</ion-label></ion-item>\n <ion-item><ion-label>Recent item 7</ion-label></ion-item>\n <ion-item><ion-label>Recent item 8</ion-label></ion-item>\n <ion-item><ion-label>Recent item 9</ion-label></ion-item>\n <ion-item><ion-label>Recent item 10</ion-label></ion-item>\n </ion-item-group>\n </ion-list>\n </ion-content>\n</div>The .ion-page wrapper makes this embedded preview behave like a complete routed page. An application using ion-router-outlet normally receives that page container automatically. The inset list and its items only provide enough content to demonstrate scrolling; they are not required by .searchbar-classic.
Add .toolbar-searchbar when an ion-toolbar combines a search bar with start or end buttons. The class centers the slotted controls and adjusts the spacing around the search field.
<ion-toolbar class="toolbar-searchbar">\n <ion-buttons slot="start">\n <ion-button>Cancel</ion-button>\n </ion-buttons>\n <ion-searchbar></ion-searchbar>\n</ion-toolbar>Add .ios26-disabled to an individual Ionic component when it must retain Ionic's standard iOS styling.
<ion-button>iOS 26 theme</ion-button> <ion-button class="ios26-disabled">Standard Ionic button</ion-button>For the background model behind inset lists, see Using ion-item-group.
Most Ionic markup works without changes. The combinations below are explicit opt-ins provided by the theme.
\nSolid primary submit buttons use --ion-color-primary-brightness for their foreground and border treatment. Define a value with sufficient contrast for your primary color.
:root {\n --ion-color-primary-brightness: #96feff;\n}<ion-button type="submit" color="primary">Submit</ion-button>\n<ion-button class="button-submit" fill="solid" color="primary">Continue</ion-button>Use .button-submit when the button needs the same treatment but cannot use type="submit".
Place an unslotted ion-label immediately alongside an unslotted ion-note to render a two-line item. When using the iOS-style inset-list background, wrap the items in ion-item-group; keep ion-list-header outside the group.
<ion-list inset="true">\n <ion-list-header>\n <ion-label>Connections</ion-label>\n </ion-list-header>\n <ion-item-group>\n <ion-item>\n <ion-label>Network & internet</ion-label>\n <ion-note>Mobile, Wi-Fi, hotspot</ion-note>\n </ion-item>\n </ion-item-group>\n</ion-list>Use slot="end" on ion-note when you want the standard trailing-note layout instead.
Add .item-group-header to an ion-item-group to create the centered icon, title, and description used at the top of the component demo pages.
This is an introductory group. Place regular list items in a separate ion-item-group that follows it.
<ion-list inset="true">\n <ion-item-group class="item-group-header">\n <ion-item>\n <ion-label>\n <ion-icon name="list" style="background: var(--ion-color-primary)"></ion-icon>\n <h2>Lists</h2>\n <ion-text>Inset-list examples</ion-text>\n </ion-label>\n </ion-item>\n </ion-item-group>\n <ion-item-group>\n <ion-item><ion-label>First item</ion-label></ion-item>\n </ion-item-group>\n</ion-list>Add .segment-expand when segment buttons should divide the available width evenly. The class also changes the Liquid Glass effect sizing when registerSegmentEffect is used.
<ion-segment class="segment-expand" value="new">\n <ion-segment-button value="new"><ion-label>New</ion-label></ion-segment-button>\n <ion-segment-button value="replied"><ion-label>Replied</ion-label></ion-segment-button>\n</ion-segment>The theme gives iOS search bars the iOS 27 appearance by default. Add .searchbar-classic to the search field shown beneath a large title in an ion-header with collapse="condense". It uses the conventional filled iOS appearance and collapses with the large title instead of remaining in the fixed header.
Place it in a toolbar with a color, such as color="light"; the classic background is derived from that color's contrast value.
The example uses Ionic's standard collapsible large-title structure. Scroll the preview to collapse the large title and reveal the fixed header.
\n<div class="ion-page">\n <ion-header translucent="true">\n <ion-toolbar color="light">\n <ion-title>Search</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content color="light" fullscreen="true">\n <ion-header collapse="condense">\n <ion-toolbar color="light">\n <ion-title size="large">Search</ion-title>\n </ion-toolbar>\n <ion-toolbar color="light">\n <ion-searchbar class="searchbar-classic" placeholder="Filter results"></ion-searchbar>\n </ion-toolbar>\n </ion-header>\n <ion-list inset="true">\n <ion-item-group>\n <ion-item><ion-label>Recent item 1</ion-label></ion-item>\n <ion-item><ion-label>Recent item 2</ion-label></ion-item>\n <ion-item><ion-label>Recent item 3</ion-label></ion-item>\n <ion-item><ion-label>Recent item 4</ion-label></ion-item>\n <ion-item><ion-label>Recent item 5</ion-label></ion-item>\n <ion-item><ion-label>Recent item 6</ion-label></ion-item>\n <ion-item><ion-label>Recent item 7</ion-label></ion-item>\n <ion-item><ion-label>Recent item 8</ion-label></ion-item>\n <ion-item><ion-label>Recent item 9</ion-label></ion-item>\n <ion-item><ion-label>Recent item 10</ion-label></ion-item>\n </ion-item-group>\n </ion-list>\n </ion-content>\n</div>The .ion-page wrapper makes this embedded preview behave like a complete routed page. An application using ion-router-outlet normally receives that page container automatically. The inset list and its items only provide enough content to demonstrate scrolling; they are not required by .searchbar-classic.
Add .toolbar-searchbar when an ion-toolbar combines a search bar with start or end buttons. The class centers the slotted controls and adjusts the spacing around the search field.
<ion-toolbar class="toolbar-searchbar">\n <ion-buttons slot="start">\n <ion-button>Cancel</ion-button>\n </ion-buttons>\n <ion-searchbar></ion-searchbar>\n</ion-toolbar>Add .ios-theme-disabled to an individual Ionic component when it must retain Ionic's standard iOS styling.
.ios26-disabled is deprecated but remains supported as an alias with the same behavior. Use .ios-theme-disabled for new code.
<ion-button>iOS 27 theme</ion-button> <ion-button class="ios-theme-disabled">Standard Ionic button</ion-button>For the background model behind inset lists, see Using ion-item-group.
buttons > button[fill=default][size=large]