How to Replace Ionic Slides with Swiper in Ionic 7
Switching to Swiper from Ionic’s old ion-slides might sound tricky at first. But it’s easier than you think, especially with Ionic 7 removing ion-slides altogether. Swiper is a modern and powerful alternative that gives you more control and better features. In this guide, you’ll learn how to replace ion-slides with Swiper step by step. Whether you’re building a simple slider or a feature-rich carousel, this walkthrough has you covered.
Why Did Ionic Remove ion-slides?
Ionic’s ion-slides was once the go-to for creating simple image or content sliders. But it had limits. Ionic X6 started deprecating it, and it was finally removed in Ionic 7. The main reason? Ion-slides relied on older web standards and didn’t keep up with newer tools. Developers wanted more options, better performance, and more flexibility. Swiper fills all those needs. It’s a modern library built for web components, and it works great with Ionic. Plus, it’s packed with features like zoom, fade effects, and infinite looping.
How to Install and Set Up Swiper in Ionic 7
Starting fresh makes it easier to add Swiper. First, create a new Ionic project or pick an existing one. To get Swiper, run:
npm install swiper
This command adds the latest version to your project. Remember, Swiper v8 was simple to set up, but v9 needs a few more steps with web components. Let’s see how to do this properly.
Import and Register Swiper as a Web Component
Before you can use <swiper-container>, you need to tell Angular about the custom element. First, in your module file (like app.module.ts), import CUSTOM_ELEMENTS_SCHEMA:
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@NgModule({
// ...
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
Next, register Swiper as a custom element. Usually, you do this once, in your main.ts, or in your root component:
import { defineCustomElements } from 'swiper/loader';
defineCustomElements(window);
Now, Angular will recognize <swiper-container> and related tags. If you don’t do this, you’ll get errors when adding these elements to your template.
Adding Swiper in Your Page
Inside your page component, replace the Ionic slides code with the Swiper tags:
<swiper-container
[loop]="true"
[pagination]="true"
(slideChange)="onSlideChange()"
>
<swiper-slide *ngFor="let item of items">
<img [src]="item.image" />
</swiper-slide>
</swiper-container>
This creates a slider that fills the page. For styling, you can add CSS to make it cover the whole viewport or customize as needed.
Making Your First Swiper Slider
Once you have Swiper installed and registered, it’s time to see it in action.
Full-Page Slider
Set your CSS like this:
swiper-container {
width: 100
height: 100vh; /* Full screen height */
}
swiper-slide {
display: flex;
justify-content: center;
align-items: center;
}
This makes the slider take up the full screen, just like ion-slides did. You can add content, images, or anything inside the slides.
Detecting Slide Changes and Adding Pagination
To interact with the slider, add event listeners:
onSlideChange() {
console.log('Slide changed');
}
And for pagination indicators:
<swiper-container [pagination]="true" (slideChange)="onSlideChange()">
<!-- slides here -->
</swiper-container>
Swipe will now show dots below for navigation. You can customize this further in the Swiper API docs.
Going Deeper: Control Swiper with TypeScript
Using TypeScript helps you control the slider more precisely. You can grab the Swiper instance with a ViewChild:
import { ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@ViewChild('swiperRef', { static: false }) swiperRef: ElementRef;
ngAfterViewInit() {
this.swiper = (this.swiperRef.nativeElement as any).swiper;
}
Add a reference in your HTML:
<swiper-container #swiperRef [loop]="true"></swiper-container>
Now, with this.swiper, you can call methods like slideNext(), slidePrev(), or check properties like activeIndex. It’s a powerful way to add buttons for next/prev:
<button (click)="slideNext()">Next</button>
<button (click)="slidePrev()">Previous</button>
And in your code:
slideNext() {
this.swiper.slideNext();
}
slidePrev() {
this.swiper.slidePrev();
}
This makes navigation smooth and easy to control.
Styling Swiper Elements
Swiper’s web component supports CSS variables easily. You can customize pagination bullets, navigation arrows, colors, and more.
For example, to change bullet color:
:root {
--swiper-pagination-bullet-background: #ff0000; /* red bullets */
}
Or target specific classes:
.swiper-pagination-bullet {
background: #00ff00; /* green bullets */
}
Use Ionic’s color classes to match your theme seamlessly.
Adding Image Zoom and other Features
Zoom is one of the most requested features. Swiper has a zoom module that allows users to pinch and zoom into images.
First, import the zoom module:
import { register } from 'swiper/element';
register(); // necessary for features
Set up the slide with zoom enabled:
<swiper-container [zoom]="true" class="mySwiper">
<swiper-slide>
<div class="swiper-zoom-container">
<img src="your-image.jpg" />
</div>
</swiper-slide>
</swiper-container>
This will let users zoom into images easily. Make sure to add CSS for the zoom container if needed.
Dynamic Image Slides
Suppose you have an array of images:
images = [
{ src: 'img1.jpg' },
{ src: 'img2.jpg' },
{ src: 'img3.jpg' }
];
Use *ngFor to generate slides dynamically:
<swiper-container [loop]="true">
<swiper-slide *ngFor="let image of images">
<img [src]="image.src" />
</swiper-slide>
</swiper-container>
This way, you can load many images without repeating code.
Best Practices and Tips
- Performance: Lazy load images to improve speed.
- Accessibility: Add ARIA labels for screen readers.
- Responsiveness: Test on different devices and adjust settings for touchscreen gestures.
- Features: Explore modules like autoplay, effect fade, or parallax by configuring Swiper options.
Conclusion
Moving from ion-slides to Swiper in Ionic 7 is straightforward. With simpler setup steps, more features, and greater control, Swiper makes your content more engaging. Start by installing, registering, and replacing your slides step by step. Use the community and documentation to explore even more options. Updating your app to use Swiper means better performance and richer user interactions. Keep experimenting, and you’ll see the difference for yourself.
Additional Resources
- Official Swiper Documentation
- Ionic Academy
- Sample code repositories for Ionic + Swiper integrations
- Community forums for troubleshooting and ideas

