Responsive Options
Tiny-slider provides powerful responsive capabilities that allow you to adjust slider behavior at different viewport widths. This enables you to create adaptive experiences that work perfectly on any device.
How Responsive Options Work
Responsive options use a breakpoint-based system similar to CSS media queries. Each breakpoint defines a minimum viewport width where specific options take effect.
Breakpoint Behavior
Breakpoints work like (min-width: breakpoint) in CSS. Options are inherited from smaller breakpoints unless explicitly overridden.
const slider = tns ({
container: '.my-slider' ,
items: 1 , // Default: mobile-first
responsive: {
640 : {
items: 2 // At 640px and above
},
900 : {
items: 3 // At 900px and above
}
}
});
In this example:
0-639px : Shows 1 item
640-899px : Shows 2 items
900px+ : Shows 3 items
Basic Configuration
Simple Responsive Setup
const slider = tns ({
container: '.my-slider' ,
mode: 'carousel' ,
items: 1 ,
slideBy: 1 ,
gutter: 0 ,
responsive: {
640 : {
items: 2 ,
gutter: 10
},
768 : {
items: 3 ,
gutter: 20
},
1024 : {
items: 4 ,
gutter: 30
}
}
});
Shorthand Syntax
For simple item count changes, you can use shorthand:
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
responsive: {
640 : 2 , // Shorthand for { items: 2 }
900 : 3 , // Shorthand for { items: 3 }
1200 : 4 // Shorthand for { items: 4 }
}
});
The shorthand syntax is converted to {items: value} internally. Use the full object syntax for configuring multiple options.
Available Responsive Options
The following options can be defined per breakpoint:
items - Number of visible slides
fixedWidth - Fixed width per slide (px)
edgePadding - Space on outside (px)
gutter - Space between slides (px)
center - Center active slide
slideBy - Number of slides to advance
speed - Animation speed (ms)
autoHeight - Adjust height per slide
disable - Disable slider at breakpoint
controls - Show/hide prev/next buttons
controlsText - Button text/markup
nav - Show/hide dots navigation
touch - Enable touch/swipe
mouseDrag - Enable mouse dragging
arrowKeys - Enable keyboard navigation
autoplay - Enable autoplay
autoplayTimeout - Time between slides (ms)
autoplayText - Button text/markup
autoplayHoverPause - Pause on hover
autoplayResetOnVisibility - Reset on tab visibility
startIndex - Initial slide index
Inheritance Behavior
Standard Inheritance
Options cascade from smaller to larger breakpoints:
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
gutter: 10 ,
speed: 300 ,
responsive: {
640 : {
items: 2 ,
gutter: 20
// speed: 300 inherited from base
},
1024 : {
items: 4
// gutter: 20 inherited from 640
// speed: 300 inherited from base
}
}
});
Fixed Width Inheritance
fixedWidth has special inheritance rules: it can only be changed to other positive integers, not to false, 0, or other data types.
// Correct: changing to another fixed width
const slider = tns ({
container: '.my-slider' ,
fixedWidth: 200 ,
responsive: {
768 : {
fixedWidth: 250 // ✓ Valid
},
1024 : {
fixedWidth: 300 // ✓ Valid
}
}
});
// Incorrect: trying to disable fixed width
const slider = tns ({
container: '.my-slider' ,
fixedWidth: 200 ,
responsive: {
768 : {
fixedWidth: false // ✗ Not allowed!
}
}
});
Practical Examples
E-Commerce Product Grid
const productSlider = tns ({
container: '.products' ,
mode: 'carousel' ,
// Mobile: 1 product, small gaps
items: 1 ,
slideBy: 1 ,
gutter: 15 ,
edgePadding: 20 ,
controls: true ,
nav: true ,
responsive: {
// Tablet: 2 products, larger gaps
640 : {
items: 2 ,
gutter: 20 ,
edgePadding: 30 ,
slideBy: 2
},
// Desktop: 3 products
900 : {
items: 3 ,
gutter: 30 ,
edgePadding: 40
},
// Large desktop: 4 products
1200 : {
items: 4 ,
gutter: 40 ,
edgePadding: 50
}
}
});
Content Slider with Progressive Enhancement
const contentSlider = tns ({
container: '.content-slider' ,
mode: 'carousel' ,
// Mobile: basic slider
items: 1 ,
slideBy: 1 ,
controls: true ,
nav: false ,
autoplay: false ,
touch: true ,
mouseDrag: false ,
responsive: {
// Tablet: add navigation dots
640 : {
items: 2 ,
nav: true ,
gutter: 20
},
// Desktop: enable autoplay and mouse drag
1024 : {
items: 3 ,
autoplay: true ,
autoplayTimeout: 5000 ,
autoplayHoverPause: true ,
mouseDrag: true ,
gutter: 30
}
}
});
Adaptive Control Visibility
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
// Mobile: controls but no nav
controls: true ,
nav: false ,
responsive: {
// Tablet: add nav dots
768 : {
items: 2 ,
nav: true
},
// Desktop: enable keyboard controls
1024 : {
items: 3 ,
arrowKeys: true
},
// Large desktop: disable slider (show static grid)
1400 : {
disable: true // Slider becomes static
}
}
});
Speed and Timing Adjustments
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
// Mobile: slower, manual navigation
speed: 400 ,
autoplay: false ,
responsive: {
// Tablet: enable autoplay
768 : {
items: 2 ,
autoplay: true ,
autoplayTimeout: 4000 ,
speed: 350
},
// Desktop: faster transitions, longer intervals
1024 : {
items: 3 ,
autoplayTimeout: 6000 ,
speed: 300
}
}
});
Advanced Patterns
Fixed Width with Responsive Adjustments
const slider = tns ({
container: '.my-slider' ,
mode: 'carousel' ,
// Base: auto-calculate items from fixed width
fixedWidth: 280 ,
gutter: 15 ,
loop: true ,
responsive: {
// Tablet: slightly larger slides
768 : {
fixedWidth: 320 ,
gutter: 20
},
// Desktop: larger slides
1024 : {
fixedWidth: 360 ,
gutter: 30
}
}
});
Mobile-First Progressive Controls
const slider = tns ({
container: '.my-slider' ,
// Mobile: minimal UI
items: 1 ,
controls: false , // No arrow buttons
nav: false , // No dots
touch: true , // Swipe only
responsive: {
// Small tablet: add basic controls
640 : {
controls: true ,
nav: true
},
// Desktop: full experience
1024 : {
items: 3 ,
autoplay: true ,
autoplayTimeout: 5000 ,
autoplayHoverPause: true ,
mouseDrag: true ,
arrowKeys: true
}
}
});
Center Mode Responsive
const slider = tns ({
container: '.my-slider' ,
mode: 'carousel' ,
// Mobile: standard layout
items: 1 ,
center: false ,
edgePadding: 20 ,
responsive: {
// Desktop: center active slide
1024 : {
items: 3 ,
center: true ,
edgePadding: 100
}
}
});
Responsive Events
You can listen to breakpoint changes:
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
responsive: {
640 : { items: 2 },
900 : { items: 3 }
}
});
// Listen for breakpoint changes
slider . events . on ( 'newBreakpointStart' , function ( info ) {
console . log ( 'Breakpoint changing...' );
console . log ( 'Current items:' , info . items );
});
slider . events . on ( 'newBreakpointEnd' , function ( info ) {
console . log ( 'Breakpoint changed!' );
console . log ( 'New items:' , info . items );
console . log ( 'New slideBy:' , info . slideBy );
});
Debugging Responsive Behavior
Check Current Settings
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
responsive: {
640 : { items: 2 , gutter: 20 },
900 : { items: 3 , gutter: 30 }
}
});
// Get current configuration
const info = slider . getInfo ();
console . log ( 'Current items:' , info . items );
console . log ( 'Current slideBy:' , info . slideBy );
console . log ( 'Current index:' , info . index );
console . log ( 'Total slides:' , info . slideCount );
Responsive Testing
// Log on breakpoint changes
slider . events . on ( 'newBreakpointEnd' , function ( info ) {
console . table ({
'Items' : info . items ,
'SlideBy' : info . slideBy ,
'Index' : info . index ,
'Display Index' : info . displayIndex
});
});
Best Practices
Mobile-First Approach Start with mobile configuration as the base, then progressively enhance for larger screens.
Consistent Breakpoints Use standard breakpoints (640, 768, 1024, 1280) that align with common CSS frameworks.
Test Inheritance Remember that options cascade down. Test at each breakpoint to ensure expected behavior.
Performance Avoid defining too many breakpoints. 3-4 breakpoints are usually sufficient.
Responsive options only apply when the browser window is resized or on initial load. They don’t dynamically respond to container size changes unless the window resizes.
Common Patterns
Stack to Grid
// Mobile: vertical stack (1 item)
// Tablet+: horizontal grid (multiple items)
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
gutter: 10 ,
responsive: {
768 : { items: 3 , gutter: 20 }
}
});
Disable at Desktop
// Show as slider on mobile, static grid on desktop
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
responsive: {
1200 : {
disable: true // No slider needed on large screens
}
}
});
Touch to Mouse
// Touch on mobile, mouse drag on desktop
const slider = tns ({
container: '.my-slider' ,
items: 1 ,
touch: true ,
mouseDrag: false ,
responsive: {
1024 : {
items: 3 ,
mouseDrag: true // Enable mouse drag on desktop
}
}
});