Button Component

Button Component: Buttons are interactive elements that allow users to perform actions. UIKit provides a comprehensive button system with various styles, sizes, and states.

Live Examples

1. Basic Button Styles

Example Preview

2. Button Sizes

Example Preview

3. Buttons with Icons

Example Preview

4. Button States

Example Preview
Hover States:
Focus States:

5. Button Groups

Example Preview

Button Classes Reference

Style Classes

ClassDescriptionPreview
.uk-buttonBase button class
.uk-button-defaultDefault style (white)
.uk-button-primaryPrimary style (blue)
.uk-button-secondarySecondary style (dark)
.uk-button-dangerDanger style (red)
.uk-button-textText-only button
.uk-button-linkLink-style button

Size Classes

ClassDescriptionPreview
.uk-button-largeLarge size button
(default)Default size button
.uk-button-smallSmall size button
.uk-button-xsmallExtra small button

State Classes

ClassDescriptionUsage
.uk-activeActive/selected stateuk-button uk-button-primary uk-active
[disabled]Disabled state attribute<button disabled>
.uk-button-groupButton group container<div class="uk-button-group">

Complete Example

<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>UIKit Buttons Demo</title>
                <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.19.2/dist/css/uikit.min.css" />
                <style>
                    body { padding: 20px; background: #f8f9fa; }
                    .demo-section { 
                        background: white; 
                        padding: 30px; 
                        border-radius: 10px; 
                        margin-bottom: 30px;
                        box-shadow: 0 2px 15px rgba(0,0,0,0.1);
                    }
                    .button-grid {
                        display: grid;
                        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
                        gap: 15px;
                        margin: 20px 0;
                    }
                    .button-showcase {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        padding: 20px;
                        border: 1px solid #e5e5e5;
                        border-radius: 8px;
                        background: #fafafa;
                    }
                </style>
            </head>
            <body>
                <div class="uk-container">
                    <h1 class="uk-heading-primary">UIKit Buttons Demo</h1>
                    
                    <!-- E-commerce Product Actions -->
                    <div class="demo-section">
                        <h2>E-commerce Product Actions</h2>
                        <div class="uk-card uk-card-default">
                            <div class="uk-card-header">
                                <h3 class="uk-card-title">iPhone 15 Pro Max</h3>
                            </div>
                            <div class="uk-card-body">
                                <div class="uk-grid-large" uk-grid>
                                    <div class="uk-width-1-2@m">
                                        <img src="iphone.jpg" alt="iPhone" class="uk-border-rounded" style="width: 100%;">
                                    </div>
                                    <div class="uk-width-1-2@m">
                                        <h4 class="uk-heading-divider">$1,199.00</h4>
                                        <p>The ultimate iPhone with Titanium design, A17 Pro chip, and advanced camera system.</p>
                                        
                                        <div class="uk-margin-medium">
                                            <h5>Storage Options:</h5>
                                            <div class="uk-button-group">
                                                <button class="uk-button uk-button-default uk-active">256GB</button>
                                                <button class="uk-button uk-button-default">512GB</button>
                                                <button class="uk-button uk-button-default">1TB</button>
                                            </div>
                                        </div>
                                        
                                        <div class="uk-margin-medium">
                                            <h5>Color:</h5>
                                            <div class="uk-button-group">
                                                <button class="uk-button uk-button-default uk-active">Natural Titanium</button>
                                                <button class="uk-button uk-button-default">Blue Titanium</button>
                                                <button class="uk-button uk-button-default">White Titanium</button>
                                                <button class="uk-button uk-button-default">Black Titanium</button>
                                            </div>
                                        </div>
                                        
                                        <div class="uk-margin-large">
                                            <div class="uk-flex uk-flex-middle uk-flex-between">
                                                <div>
                                                    <button class="uk-button uk-button-primary uk-button-large">
                                                        <span uk-icon="icon: cart" class="uk-margin-small-right"></span>
                                                        Add to Cart
                                                    </button>
                                                </div>
                                                <div>
                                                    <button class="uk-button uk-button-secondary">
                                                        <span uk-icon="icon: heart"></span>
                                                        Wishlist
                                                    </button>
                                                    <button class="uk-button uk-button-default">
                                                        <span uk-icon="icon: compare"></span>
                                                        Compare
                                                    </button>
                                                </div>
                                            </div>
                                        </div>
                                        
                                        <div class="uk-grid-small uk-child-width-1-2" uk-grid>
                                            <div>
                                                <button class="uk-button uk-button-default uk-width-1-1">
                                                    <span uk-icon="icon: credit-card"></span>
                                                    Buy Now
                                                </button>
                                            </div>
                                            <div>
                                                <button class="uk-button uk-button-text uk-width-1-1">
                                                    <span uk-icon="icon: info"></span>
                                                    More Details
                                                </button>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="uk-card-footer">
                                <div class="uk-flex uk-flex-between uk-flex-middle">
                                    <div>
                                        <button class="uk-button uk-button-text">
                                            <span uk-icon="icon: arrow-left"></span>
                                            Previous Product
                                        </button>
                                    </div>
                                    <div>
                                        <button class="uk-button uk-button-text">
                                            Next Product
                                            <span uk-icon="icon: arrow-right" class="uk-margin-small-left"></span>
                                        </button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    
                    <!-- Form Actions -->
                    <div class="demo-section">
                        <h2>Form Actions & Dialog Buttons</h2>
                        <div class="uk-card uk-card-default">
                            <div class="uk-card-header">
                                <h3 class="uk-card-title">Edit User Profile</h3>
                            </div>
                            <div class="uk-card-body">
                                <form>
                                    <div class="uk-margin">
                                        <label class="uk-form-label" for="name">Full Name</label>
                                        <input class="uk-input" id="name" type="text" placeholder="Enter your name">
                                    </div>
                                    <div class="uk-margin">
                                        <label class="uk-form-label" for="email">Email Address</label>
                                        <input class="uk-input" id="email" type="email" placeholder="Enter your email">
                                    </div>
                                    <div class="uk-margin">
                                        <label class="uk-form-label" for="bio">Bio</label>
                                        <textarea class="uk-textarea" id="bio" rows="4" placeholder="Tell us about yourself"></textarea>
                                    </div>
                                </form>
                            </div>
                            <div class="uk-card-footer">
                                <div class="uk-flex uk-flex-between uk-flex-middle">
                                    <div>
                                        <button class="uk-button uk-button-danger">
                                            <span uk-icon="icon: trash"></span>
                                            Delete Account
                                        </button>
                                    </div>
                                    <div>
                                        <button class="uk-button uk-button-default">
                                            Cancel
                                        </button>
                                        <button class="uk-button uk-button-primary">
                                            <span uk-icon="icon: check" class="uk-margin-small-right"></span>
                                            Save Changes
                                        </button>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Confirmation Dialog -->
                        <div class="uk-margin-top">
                            <div class="uk-card uk-card-secondary">
                                <div class="uk-card-body">
                                    <h4 class="uk-card-title">Are you sure?</h4>
                                    <p>This action cannot be undone. All data will be permanently deleted.</p>
                                    <div class="uk-flex uk-flex-right">
                                        <button class="uk-button uk-button-default uk-margin-small-right">Cancel</button>
                                        <button class="uk-button uk-button-danger">Delete Permanently</button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    
                    <!-- Dashboard Action Buttons -->
                    <div class="demo-section">
                        <h2>Dashboard Action Buttons</h2>
                        <div class="button-grid">
                            <div class="button-showcase">
                                <button class="uk-button uk-button-primary uk-button-large uk-margin-bottom">
                                    <span uk-icon="icon: plus" class="uk-margin-small-right"></span>
                                    Create New
                                </button>
                                <span class="uk-text-meta">Primary Action</span>
                            </div>
                            
                            <div class="button-showcase">
                                <button class="uk-button uk-button-default uk-button-large uk-margin-bottom">
                                    <span uk-icon="icon: upload" class="uk-margin-small-right"></span>
                                    Upload File
                                </button>
                                <span class="uk-text-meta">Secondary Action</span>
                            </div>
                            
                            <div class="button-showcase">
                                <button class="uk-button uk-button-danger uk-button-large uk-margin-bottom">
                                    <span uk-icon="icon: trash" class="uk-margin-small-right"></span>
                                    Delete All
                                </button>
                                <span class="uk-text-meta">Destructive Action</span>
                            </div>
                            
                            <div class="button-showcase">
                                <button class="uk-button uk-button-secondary uk-button-large uk-margin-bottom" disabled>
                                    <span uk-icon="icon: lock" class="uk-margin-small-right"></span>
                                    Locked Action
                                </button>
                                <span class="uk-text-meta">Disabled State</span>
                            </div>
                        </div>
                        
                        <!-- Quick Actions -->
                        <div class="uk-margin-top">
                            <h4>Quick Actions</h4>
                            <div class="uk-flex uk-flex-wrap uk-flex-center uk-flex-middle">
                                <button class="uk-button uk-button-default uk-button-small uk-margin-small-right">
                                    <span uk-icon="icon: download"></span>
                                    Export
                                </button>
                                <button class="uk-button uk-button-default uk-button-small uk-margin-small-right">
                                    <span uk-icon="icon: print"></span>
                                    Print
                                </button>
                                <button class="uk-button uk-button-default uk-button-small uk-margin-small-right">
                                    <span uk-icon="icon: share"></span>
                                    Share
                                </button>
                                <button class="uk-button uk-button-default uk-button-small uk-margin-small-right">
                                    <span uk-icon="icon: copy"></span>
                                    Duplicate
                                </button>
                                <button class="uk-button uk-button-default uk-button-small">
                                    <span uk-icon="icon: settings"></span>
                                    Settings
                                </button>
                            </div>
                        </div>
                    </div>
                    
                    <!-- Pagination with Buttons -->
                    <div class="demo-section">
                        <h2>Pagination & Navigation</h2>
                        <div class="uk-card uk-card-default">
                            <div class="uk-card-body">
                                <div class="uk-flex uk-flex-center uk-flex-middle">
                                    <div class="uk-button-group">
                                        <button class="uk-button uk-button-default">
                                            <span uk-icon="icon: chevron-left"></span>
                                            Previous
                                        </button>
                                        <button class="uk-button uk-button-default uk-active">1</button>
                                        <button class="uk-button uk-button-default">2</button>
                                        <button class="uk-button uk-button-default">3</button>
                                        <button class="uk-button uk-button-default">4</button>
                                        <button class="uk-button uk-button-default">5</button>
                                        <button class="uk-button uk-button-default">
                                            Next
                                            <span uk-icon="icon: chevron-right" class="uk-margin-small-left"></span>
                                        </button>
                                    </div>
                                </div>
                                
                                <div class="uk-margin-top uk-text-center">
                                    <span class="uk-text-meta">Showing 1-10 of 50 results</span>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Step Navigation -->
                        <div class="uk-margin-top">
                            <div class="uk-card uk-card-secondary">
                                <div class="uk-card-body">
                                    <h4 class="uk-card-title">Setup Wizard - Step 2 of 4</h4>
                                    <p>Configure your account settings.</p>
                                    <div class="uk-flex uk-flex-between">
                                        <button class="uk-button uk-button-default">
                                            <span uk-icon="icon: arrow-left"></span>
                                            Back
                                        </button>
                                        <div>
                                            <button class="uk-button uk-button-text uk-margin-small-right">Skip</button>
                                            <button class="uk-button uk-button-primary">
                                                Next Step
                                                <span uk-icon="icon: arrow-right" class="uk-margin-small-left"></span>
                                            </button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    
                    <!-- Loading & Progress States -->
                    <div class="demo-section">
                        <h2>Loading & Progress States</h2>
                        <div class="uk-grid-small uk-child-width-1-3@m" uk-grid>
                            <div>
                                <div class="uk-card uk-card-default uk-card-body uk-text-center">
                                    <button class="uk-button uk-button-primary uk-width-1-1" aria-busy="true">
                                        <span class="uk-margin-small-right" uk-spinner="ratio: 0.8"></span>
                                        Processing...
                                    </button>
                                    <p class="uk-text-meta uk-margin-small-top">Loading with spinner</p>
                                </div>
                            </div>
                            <div>
                                <div class="uk-card uk-card-default uk-card-body uk-text-center">
                                    <button class="uk-button uk-button-secondary uk-width-1-1" disabled>
                                        <span uk-icon="icon: lock" class="uk-margin-small-right"></span>
                                        Please wait...
                                    </button>
                                    <p class="uk-text-meta uk-margin-small-top">Disabled state</p>
                                </div>
                            </div>
                            <div>
                                <div class="uk-card uk-card-default uk-card-body uk-text-center">
                                    <button class="uk-button uk-button-success uk-width-1-1">
                                        <span uk-icon="icon: check" class="uk-margin-small-right"></span>
                                        Completed
                                    </button>
                                    <p class="uk-text-meta uk-margin-small-top">Success state</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

                <!-- UIKit JS -->
                <script src="https://cdn.jsdelivr.net/npm/uikit@3.19.2/dist/js/uikit.min.js"></script>
                <script src="https://cdn.jsdelivr.net/npm/uikit@3.19.2/dist/js/uikit-icons.min.js"></script>
                
                <script>
                    // Button interaction examples
                    document.addEventListener('DOMContentLoaded', function() {
                        // Add to cart animation
                        const addToCartBtn = document.querySelector('.uk-button-primary.uk-button-large');
                        if (addToCartBtn) {
                            addToCartBtn.addEventListener('click', function() {
                                const originalText = this.innerHTML;
                                this.innerHTML = '<span uk-icon="icon: check" class="uk-margin-small-right"></span>Added!';
                                this.classList.remove('uk-button-primary');
                                this.classList.add('uk-button-success');
                                
                                setTimeout(() => {
                                    this.innerHTML = originalText;
                                    this.classList.remove('uk-button-success');
                                    this.classList.add('uk-button-primary');
                                }, 2000);
                            });
                        }
                        
                        // Toggle active state in button groups
                        const buttonGroups = document.querySelectorAll('.uk-button-group');
                        buttonGroups.forEach(group => {
                            const buttons = group.querySelectorAll('.uk-button');
                            buttons.forEach(button => {
                                button.addEventListener('click', function() {
                                    if (!this.classList.contains('uk-active')) {
                                        buttons.forEach(btn => btn.classList.remove('uk-active'));
                                        this.classList.add('uk-active');
                                    }
                                });
                            });
                        });
                        
                        // Simulate loading state
                        const loadingButtons = document.querySelectorAll('[aria-busy="true"]');
                        loadingButtons.forEach(button => {
                            setTimeout(() => {
                                button.innerHTML = '<span uk-icon="icon: check" class="uk-margin-small-right"></span>Done!';
                                button.removeAttribute('aria-busy');
                                button.classList.remove('uk-button-primary');
                                button.classList.add('uk-button-success');
                            }, 3000);
                        });
                    });
                </script>
            </body>
            </html>

JavaScript API

Button Interactions:
// Get button element
            const button = document.getElementById('myButton');

            // Add click event
            button.addEventListener('click', function(event) {
                event.preventDefault();
                console.log('Button clicked!');
                
                // Toggle active state
                this.classList.toggle('uk-active');
                
                // Disable button temporarily
                this.disabled = true;
                this.innerHTML = 'Processing...';
                
                setTimeout(() => {
                    this.disabled = false;
                    this.innerHTML = 'Click Me';
                }, 2000);
            });

            // Show loading state
            function showLoading(button) {
                const originalText = button.innerHTML;
                button.innerHTML = '<span class="uk-margin-small-right" uk-spinner></span> Loading...';
                button.disabled = true;
                
                return {
                    hide: function() {
                        button.innerHTML = originalText;
                        button.disabled = false;
                    }
                };
            }

            // Example usage
            const submitButton = document.getElementById('submitBtn');
            const loading = showLoading(submitButton);

            // After API call completes
            setTimeout(() => {
                loading.hide();
                submitButton.innerHTML = '<span uk-icon="icon: check"></span> Success!';
                submitButton.classList.remove('uk-button-primary');
                submitButton.classList.add('uk-button-success');
            }, 3000);
Button Group Management:
// Initialize button group
            const buttonGroup = {
                init: function(containerId) {
                    this.container = document.getElementById(containerId);
                    this.buttons = this.container.querySelectorAll('.uk-button');
                    this.activeButton = this.container.querySelector('.uk-button.uk-active');
                    
                    this.bindEvents();
                },
                
                bindEvents: function() {
                    this.buttons.forEach(button => {
                        button.addEventListener('click', (event) => {
                            this.setActive(button);
                        });
                    });
                },
                
                setActive: function(button) {
                    // Remove active class from all buttons
                    this.buttons.forEach(btn => {
                        btn.classList.remove('uk-active');
                        btn.classList.add('uk-button-default');
                        btn.classList.remove('uk-button-primary');
                    });
                    
                    // Add active class to clicked button
                    button.classList.add('uk-active');
                    button.classList.remove('uk-button-default');
                    button.classList.add('uk-button-primary');
                    
                    this.activeButton = button;
                    
                    // Dispatch custom event
                    const event = new CustomEvent('buttonGroupChange', {
                        detail: {
                            value: button.dataset.value || button.textContent.trim(),
                            button: button
                        }
                    });
                    this.container.dispatchEvent(event);
                },
                
                getActiveValue: function() {
                    return this.activeButton ? 
                        (this.activeButton.dataset.value || this.activeButton.textContent.trim()) : 
                        null;
                }
            };

            // Usage
            buttonGroup.init('filterButtons');

            // Listen for changes
            document.getElementById('filterButtons').addEventListener('buttonGroupChange', function(event) {
                console.log('Selected:', event.detail.value);
                
                // Filter content based on selection
                filterContent(event.detail.value);
            });

            // Programmatic control
            function selectFilter(filterValue) {
                const button = document.querySelector(`#filterButtons .uk-button[data-value="${filterValue}"]`);
                if (button) {
                    buttonGroup.setActive(button);
                }
            }

Custom Button Styles

/* Custom Button Styles */
            .uk-button-gradient {
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                color: white;
                border: none;
                transition: all 0.3s ease;
            }

            .uk-button-gradient:hover {
                background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
                transform: translateY(-2px);
                box-shadow: 0 10px 20px rgba(0,0,0,0.2);
            }

            .uk-button-outline-primary {
                background: transparent;
                border: 2px solid #1e87f0;
                color: #1e87f0;
                font-weight: 500;
            }

            .uk-button-outline-primary:hover {
                background: #1e87f0;
                color: white;
            }

            .uk-button-3d {
                border: none;
                border-bottom: 4px solid rgba(0,0,0,0.2);
                transition: all 0.1s ease;
            }

            .uk-button-3d:active {
                transform: translateY(4px);
                border-bottom: 2px solid rgba(0,0,0,0.2);
            }

            .uk-button-rounded {
                border-radius: 50px;
            }

            .uk-button-icon-circle {
                width: 50px;
                height: 50px;
                border-radius: 50%;
                padding: 0;
                display: inline-flex;
                align-items: center;
                justify-content: center;
            }

            .uk-button-success {
                background-color: #32d296;
                color: white;
            }

            .uk-button-warning {
                background-color: #faa05a;
                color: white;
            }

            .uk-button-info {
                background-color: #1e87f0;
                color: white;
            }

            /* Button with shadow */
            .uk-button-shadow {
                box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);
            }

            .uk-button-shadow:hover {
                box-shadow: 0 7px 14px rgba(50, 50, 93, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08);
                transform: translateY(-1px);
            }

            /* Animated button */
            .uk-button-pulse {
                animation: pulse 2s infinite;
            }

            @keyframes pulse {
                0% { box-shadow: 0 0 0 0 rgba(30, 135, 240, 0.7); }
                70% { box-shadow: 0 0 0 10px rgba(30, 135, 240, 0); }
                100% { box-shadow: 0 0 0 0 rgba(30, 135, 240, 0); }
            }

            /* Usage in HTML */
            <button class="uk-button uk-button-gradient">Gradient Button</button>
            <button class="uk-button uk-button-outline-primary">Outline Button</button>
            <button class="uk-button uk-button-3d uk-button-primary">3D Button</button>
            <button class="uk-button uk-button-rounded uk-button-primary">Rounded Button</button>
            <button class="uk-button uk-button-icon-circle uk-button-primary">
                <span uk-icon="icon: plus"></span>
            </button>
            <button class="uk-button uk-button-success">Success Button</button>
            <button class="uk-button uk-button-warning">Warning Button</button>
            <button class="uk-button uk-button-primary uk-button-pulse">Live Button</button>
Best Practices for Buttons:
  • Use primary buttons for main actions, secondary for less important actions
  • Make buttons large enough for touch devices (minimum 44x44px)
  • Use clear, action-oriented text on buttons
  • Provide visual feedback on hover, focus, and active states
  • Disable buttons when actions are not available
  • Use icons to enhance understanding, especially for common actions
  • Maintain consistent button styling throughout your application
  • Consider accessibility - ensure sufficient color contrast
  • Use button groups for related actions
  • Provide loading states for actions that take time
  • Test buttons on different devices and screen sizes