Basic Sticky
Enables the below navigation panel to remain sticky on during the page scrolling.
<div data-sticky-wrapper="true">
<div class="menu menu-default bg-light flex flex-wrap justify-center gap-2.5 border rounded-lg py-2" data-sticky="true" data-sticky-activate="#release" data-sticky-class="fixed z-10 shadow-lg" data-sticky-name="basic" data-sticky-offset="100" data-sticky-release="#variants" data-sticky-start="auto" data-sticky-top="100">
<div class="menu-item">
<a class="menu-link" href="#">
<span class="menu-icon">
<i class="ki-outline ki-badge">
</i>
</span>
<span class="menu-title">
Home
</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="#">
<span class="menu-icon">
<i class="ki-outline ki-profile-circle">
</i>
</span>
<span class="menu-title">
Profile
</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="#">
<span class="menu-icon">
<i class="ki-outline ki-setting-2">
</i>
</span>
<span class="menu-title">
Settings
</span>
<span class="menu-badge">
<span class="badge badge-sm badge-outline badge-pill badge-primary">
New
</span>
</span>
</a>
</div>
</div>
</div>
Release
Enables the below navigation panel to remain sticky during page scrolling and releases the sticky mode once a specific element is reached.
<div data-sticky-wrapper="true">
<div class="menu menu-default bg-light flex flex-col flex-wrap justify-center gap-2.5 border rounded-lg py-2 w-[200px]" data-sticky="true" data-sticky-activate="#source-code" data-sticky-class="fixed z-10 shadow-lg" data-sticky-name="aside" data-sticky-offset="500" data-sticky-release="#data-attribute-initialization" data-sticky-start="auto" data-sticky-top="200">
<div class="menu-item">
<a class="menu-link" href="#">
<span class="menu-icon">
<i class="ki-outline ki-badge">
</i>
</span>
<span class="menu-title">
Home
</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="#">
<span class="menu-icon">
<i class="ki-outline ki-profile-circle">
</i>
</span>
<span class="menu-title">
Profile
</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="#">
<span class="menu-icon">
<i class="ki-outline ki-setting-2">
</i>
</span>
<span class="menu-title">
Settings
</span>
<span class="menu-badge">
<span class="badge badge-sm badge-outline badge-pill badge-primary">
New
</span>
</span>
</a>
</div>
</div>
</div>
Source Code
The following source file manages the CSS styles of the Tailwind CSS Sticky component.
Upon building the assets using
Webpack Build Tools
,
the below file is compiled and added into the
dist/assets/css/styles.css
bundle,
making it available globally across all pages.
File | Description |
---|---|
src/core/plugins/components/sticky.js
|
The Tailwind CSS compatible plugin written in PostCSS for applying CSS styles to the Tailwind CSS Sticky component. |
HTML Markup
The following markup outlines the core structure of the Tailwind CSS Sticky component.
<div data-sticky-wrapper="true">
<div class="sticky-active:fixed sticky-active:z-10 sticky-active:shadow-lg" data-sticky="true" data-sticky-activate="#activate_element_id" data-sticky-left="auto" data-sticky-name="example" data-sticky-offset="100" data-sticky-release="#release_element_id" data-sticky-top="100">
....
</div>
</div>
Variants
Utilize the following Tailwind CSS Sticky variants to manage the appearance of the sticky items and their child elements.
For more information, refer to the
Tailwind CSS Variant documentation
.
Class | Description |
---|---|
sticky-active:
|
A custom Tailwind variant activated when the sticky mode is activate. It can be applied to the sticky and its children, controlling their appearance and behavior in the open state. |
<div data-sticky-wrapper="true">
<div class="sticky-active:fixed sticky-active:z-10 sticky-active:shadow-lg" data-sticky="true" data-sticky-activate="#activate_element_id" data-sticky-left="auto" data-sticky-name="example" data-sticky-offset="100" data-sticky-release="#release_element_id" data-sticky-top="100">
....
</div>
</div>
Data Attribute Initialization
Auto-initialize all KTSticky instances on page load by adding the
data-sticky="true"
attribute to your sticky element.
This triggers on the fly initialization by the KTSticky JavaScript component.
<div data-sticky-wrapper="true">
<div data-sticky="true" data-sticky-activate="#activate_element_id" data-sticky-class="fixed z-10 shadow-lg" data-sticky-left="auto" data-sticky-name="example" data-sticky-offset="100" data-sticky-release="#release_element_id" data-sticky-top="100" id="my_sticky">
....
</div>
</div>
These attributes allow you to set options for the KTSticky component during initialization.
The values you provide as strings are automatically converted to the appropriate
KTSticky Options
.
HTML Attribute | Type | Default | Description |
---|---|---|---|
data-sticky
|
boolean
|
true
|
Automatically initializes Tailwind CSS Sticky instances on page load. This can be disabled for manual initialization via JavaScript. |
data-sticky-name
|
string
|
- |
When activated, this name is used to apply a specific data attribute to the body tag. For example, if set to “example”,
data-sticky-example="on"
is added to the body during activation.
|
data-sticky-activate
|
string
|
- | Selector ID of the element to detect in the viewport to deactivate sticky mode. |
data-sticky-release
|
string
|
- | Selector ID of the element to detect in the viewport to activate sticky mode. |
data-sticky-class
|
string
|
- | A list of classes added to the element upon activation of sticky mode. |
data-sticky-top
|
string
|
- | CSS value in pixels to apply for the sticky element’s top position when activated. |
data-sticky-left
|
string
|
- | CSS value in pixels to apply for the sticky element’s left position when activated. When set to auto, the value is calculated as the element’s offsetLeft. |
data-sticky-right
|
string
|
- | CSS value in pixels to apply for the sticky element’s right position when activated. When set to auto, the value is calculated as the offset from the right of the container or viewport. |
data-sticky-width
|
enum
"auto" : "value in pixel" : "id selector"
|
true
|
CSS value in pixels, auto, or an ID selector to calculate the width of the element during activation. |
data-sticky-zindex
|
string
|
5
|
Specifies the z-index property of the sticky element, determining its stack order in the context of the page layout. |
data-sticky-offset
|
number
|
0
|
Sets the offset distance in pixels that the sticky element should activate from the top of the viewport. |
data-sticky-reverse
|
boolean
|
false
|
Determines whether the sticky effect should activate in the opposite direction of the scroll, typically used for elements that should become sticky upon scrolling upwards. |
JavaScript Initialization
To initialize a new sticky component, pass the corresponding DOM element and configuration options to the KTSticky class constructor.
const stickyEl = document.querySelector('#my_sticky');
const options = {
name: 'default',
class: 'sticky shadow-lg',
top: '200px',
left: 'auto',
width: 'auto',
zindex: '5',
offset: 100,
reverse: false,
activate: '#activate_element_id',
release: '#release_element_id'
};
const sticky = new KTSticky(stickyEl, options);
<div data-sticky-wrapper="true">
<div data-sticky="false" id="my_sticky">
....
</div>
</div>
To initialize the sticky with JavaScript, use
data-sticky="false"
attribute instead.
This prevents automatic initialization on page load.
Options
This table outlines the configuration options for initialization of Tailwind CSS Sticky instances, using the KTSticky JavaScript component.
Property | Type | Default | Description |
---|---|---|---|
name
|
string
|
- |
When activated, this name is used to apply a specific data attribute to the body tag. For example, if set to “example”,
data-sticky-example="on"
is added to the body during activation.
|
activate
|
string
|
- | Selector ID of the element to detect in the viewport to deactivate sticky mode. |
release
|
string
|
- | Selector ID of the element to detect in the viewport to activate sticky mode. |
class
|
string
|
- | A list of classes added to the element upon activation of sticky mode. |
top
|
string
|
- | CSS value in pixels to apply for the sticky element’s top position when activated. |
left
|
string
|
- | CSS value in pixels to apply for the sticky element’s left position when activated. When set to auto, the value is calculated as the element’s offsetLeft. |
right
|
string
|
- | CSS value in pixels to apply for the sticky element’s right position when activated. When set to auto, the value is calculated as the offset from the right of the container or viewport. |
width
|
enum
"auto" : "value in pixel" : "id selector"
|
true
|
CSS value in pixels, auto, or an ID selector to calculate the width of the element during activation. |
zindex
|
string
|
5
|
Specifies the z-index property of the sticky element, determining its stack order in the context of the page layout. |
offset
|
number
|
0
|
Sets the offset distance in pixels that the sticky element should activate from the top of the viewport. |
reverse
|
boolean
|
false
|
Determines whether the sticky effect should activate in the opposite direction of the scroll, typically used for elements that should become sticky upon scrolling upwards. |
Utilities
Manage and interact with KTSticky instances using these static methods of
KTSticky
class.
Method | Description |
---|---|
init()
|
Automatically initializes KTSticky object for all elements with the
data-sticky="true"
attribute on page load.
|
createInstances()
|
Allows to create KTSticky instances for all elements that have been dynamically added to the DOM but haven't been activated yet. |
getInstance(element)
|
Returns the
KTSticky
object associated with the given DOM element
element
.
|
getOrCreateInstance(element)
|
Returns the existing
KTSticky
object for the provided DOM element
element
, or creates a new instance if none exists, then returns the same.
|
// Initialize all stickys
KTSticky.init()
// Initialzie pending stickys
KTSticky.createInstances();
// Get sticky object
const stickyEl = document.querySelector('#my_sticky');
const sticky = KTSticky.getInstance(stickyEl);
<div data-sticky-wrapper="true">
<div data-sticky="true" data-sticky-activate="#activate_element_id" data-sticky-class="fixed z-10 shadow-lg" data-sticky-left="auto" data-sticky-name="example" data-sticky-offset="100" data-sticky-release="#release_element_id" data-sticky-top="100" id="my_sticky">
....
</div>
</div>
Methods
Use KTSticky component's API methods to programmatically control its behavior.
Method | Description |
---|---|
new KTSticky(element, options)
|
Creates an object instance of KTSticky class for the given DOM
element
and configuration
options
.
|
update()
|
Refreshes and recalculates the sticky positioning of elements managed by KTSticky. This is essential after any layout changes that affect the dimensions or positioning of sticky elements, ensuring they function correctly in their sticky behavior. |
isActive()
|
Checks whether the sticky state is currently applied to the targeted element(s). Returns true if the element is sticky (fixed on the screen during scroll), and false if it is not, allowing for conditional operations based on the sticky state. |
getOption(name)
|
Retrieves the value of a configuration option by
name
parameter from a KTSticky instance.
|
getElement()
|
Retrieves the DOM element linked to a specific KTSticky instance. |
on(eventName, handler)
|
Allows attaching event listeners to the KTSticky custom events using the
eventName
and
eventId
string parameters. These events enable programmatic interaction based on user actions or
internal state changes of KTSticky. The function returns
string
as a unique identifier for the registered listener, allowing you to remove it later if needed.
|
off(eventName, eventId)
|
Removes an event listener for the
eventName
and
eventId
parameters attached with the
on
method.
|
dispose()
|
Removes the KTSticky instance from an element, including any associated data stored on the DOM element. |
const stickyEl = document.querySelector('#my_sticky');
const sticky = KTSticky.getInstance(stickyEl);
sticky.update();
const isActive = sticky.isActive();
<div data-sticky-wrapper="true">
<div data-sticky="true" data-sticky-activate="#activate_element_id" data-sticky-class="fixed z-10 shadow-lg" data-sticky-left="auto" data-sticky-name="example" data-sticky-offset="100" data-sticky-release="#release_element_id" data-sticky-top="100" id="my_sticky">
....
</div>
</div>
Events
KTSticky
custom events allows you to register callback functions(event listeners)
that will be invoked automatically whenever specific custom events are triggered within the component.
Event | Description |
---|---|
change
|
This event is triggered before a sticky mode is activated or deactivated on an element. |
const stickyEl = document.querySelector('#my_sticky');
const sticky = KTSticky.getInstance(stickyEl);
sticky.on('change', (detail) => {
if (detail.active) {
console.log('sticky mode is active');
} else {
console.log('sticky mode is not active');
}
});