Add Custom Code to Articulate Rise Courses for Free
Published on by Team @ Slate eLearning
Looking to break free from Articulate Rise's default limitations and add truly custom functionality to your courses? Whether you need interactive elements, custom styling, advanced animations, or specialized learning activities, adding custom code to Articulate Rise can transform your eLearning content from standard to extraordinary.
In this comprehensive guide, we'll show you exactly how to add custom JavaScript, CSS, and HTML to your Articulate Rise courses for free using RiseOverride—a powerful Chrome extension that unlocks unlimited customization possibilities. No prior coding experience required!
Why Add Custom Code to Articulate Rise?
While Articulate Rise is an excellent authoring tool, its built-in blocks and themes can sometimes feel limiting. Custom code opens up a world of possibilities:
- Interactive Elements: Create custom quizzes, games, calculators, and interactive simulations
- Advanced Styling: Apply unique visual designs that go beyond Rise's theme limitations
- Dynamic Content: Build adaptive content that responds to learner choices and progress
- Gamification: Add points, badges, progress bars, and reward systems
- Custom Analytics: Track specific learner interactions and behaviors
- Third-Party Integrations: Connect with external APIs, databases, or learning systems
- Accessibility Enhancements: Implement custom accessibility features for specific needs
- Micro-Interactions: Add subtle animations and feedback that enhance user experience
What You'll Learn in This Guide
By the end of this tutorial, you'll know how to:
- Install and set up RiseOverride for custom code injection
- Add custom CSS for styling and layout modifications
- Inject JavaScript for interactive functionality
- Create custom HTML elements and components
- Test and debug your custom code
- Ensure compatibility across different output formats
- Best practices for maintainable custom code
Getting Started: Install RiseOverride
RiseOverride is a free Chrome extension that supercharges Articulate Rise with advanced customization capabilities. Here's how to get it set up:
Step 1: Install the Extension
- Visit the Chrome Web Store page for RiseOverride
- Click "Add to Chrome" to install the extension
- Grant necessary permissions when prompted
- Pin the extension to your Chrome toolbar for easy access
Step 2: Access Rise with RiseOverride
- Navigate to rise.articulate.com
- Open any existing course or create a new one
- You'll now see the RiseOverride interface panel on the right side
- The extension automatically activates within the Rise editor
Adding Custom CSS: Transform Your Course's Visual Design
Custom CSS is your gateway to unlimited visual customization in Articulate Rise. From subtle styling tweaks to complete visual overhauls, CSS gives you precise control over every element's appearance.
Basic CSS Injection
With RiseOverride active in your Rise course:
- Click on any block in your course to select it
- Open the RiseOverride panel on the right
- Navigate to the "Custom CSS" section
- Enter your CSS code in the editor
- See changes apply immediately in the preview
Example: Floating Pink Continue Button
Let's start with a proven example from our blog—creating an eye-catching floating button with animation:
- Use RiseOverride's Add Class option to add
pink-buttonas a custom class to your chosen block - Paste the following CSS into the RiseOverride CSS window:
.pink-button .continue-btn {
background-color: pink;
color: black;
border-radius: 50px;
animation: floatY 2.5s ease-in-out infinite;
}
.pink-button .continue-btn:hover {
background-color: black;
color: pink;
}
@keyframes floatY {
0% { transform: translateY(0); }
50% { transform: translateY(-12px); }
100% { transform: translateY(0); }
}
This creates a playful pink button with a gentle floating animation that draws attention without being distracting. The animation loops continuously and includes a hover effect that inverts the colors.
Adding Custom JavaScript: Interactive Functionality
JavaScript is where the real magic happens—adding interactivity, dynamic behavior, and advanced functionality to your Rise courses.
JavaScript Injection Process
- Select a block or section in your Rise course
- Open the RiseOverride panel
- Switch to the "Custom JavaScript" tab
- Write or paste your JavaScript code
- Test functionality in the Rise preview
Example: Confetti Celebration Animation
Here's a proven example from our blog that adds delightful confetti animations when learners click buttons in a specific Rise block:
// Wrap everything in an immediately-invoked function expression (IIFE)
// This keeps our variables private and prevents conflicts with other scripts
(function() {
// Track whether the confetti library has been loaded
let confettiLoaded = false;
// Function to dynamically load the confetti library from a CDN
function loadConfetti(callback) {
// If we've already loaded it and confetti exists, run the callback
if (confettiLoaded && window.confetti) {
callback();
return;
}
// If confetti already exists (maybe loaded elsewhere), mark as loaded
if (window.confetti) {
confettiLoaded = true;
callback();
return;
}
// Create a new script element to load the confetti library
const script = document.createElement('script');
script.src = 'https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/dist/confetti.browser.min.js';
// When the script loads successfully, mark as loaded and run callback
script.onload = function() {
confettiLoaded = true;
callback();
};
// Handle loading errors gracefully
script.onerror = function() {
console.error('Failed to load canvas-confetti library');
};
// Add the script to the page to start loading
document.head.appendChild(script);
}
// Main function to trigger the confetti animation
function fireConfetti() {
const triggerConfetti = () => {
// Accessibility: Check if user prefers reduced motion
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (prefersReducedMotion) {
console.log('Confetti disabled due to user motion preferences');
return;
}
// Make sure the confetti function is available before using it
if (typeof confetti === 'function') {
// Fire the confetti with custom settings
window.confetti({
"particleCount": 100, // Number of confetti pieces
"spread": 70, // How wide the confetti spreads (degrees)
"startVelocity": 45, // How fast particles start moving
"gravity": 0.8, // How quickly particles fall
"scalar": 1, // Size multiplier for particles
"colors": [ // Custom color palette
"#FF6B6B", // Coral red
"#4ECDC4", // Turquoise
"#45B7D1", // Blue
"#FFA07A", // Light salmon
"#98D8C8" // Mint green
],
"shapes": [ // Mix of squares and circles
"square",
"circle"
],
"origin": { // Where confetti starts from
"x": 0.5, // Center horizontally
"y": 0.5 // Center vertically
}
});
}
};
// Load the confetti library first, then trigger the animation
loadConfetti(triggerConfetti);
}
// Function to find buttons in a specific Rise block and attach click events
function attachConfettiEvents() {
// IMPORTANT: Replace 'YOUR_BLOCK_ID_HERE' with your actual Rise block ID
const blockId = 'YOUR_BLOCK_ID_HERE'.trim();
// Validate that a block ID was provided
if (!blockId || blockId === 'YOUR_BLOCK_ID_HERE') {
console.error('Please replace YOUR_BLOCK_ID_HERE with your actual Rise block ID');
return false;
}
// Find the specific Rise block using its data-block-id attribute
const targetBlock = document.querySelector('[data-block-id="' + blockId + '"]');
if (!targetBlock) {
return false;
}
// Find all buttons within the target block
const buttons = targetBlock.querySelectorAll('button');
if (buttons.length === 0) {
console.warn('No buttons found in Rise block:', blockId);
return false;
}
// Attach click event to each button
buttons.forEach(button => {
// Check if we've already attached confetti to this button
if (button.hasAttribute('data-confetti-attached')) {
return; // Skip if already attached
}
// Mark this button as having confetti attached
button.setAttribute('data-confetti-attached', 'true');
// Add the click event listener
button.addEventListener('click', function() {
fireConfetti(); // Trigger confetti when button is clicked
});
});
console.log('Confetti attached to', buttons.length, 'button(s) in Rise block:', blockId);
return true; // Success!
}
// Use MutationObserver to watch for new content being added to the page
// This is needed because Rise loads content dynamically
const observer = new MutationObserver(() => {
// Try to attach confetti events whenever the page changes
if (attachConfettiEvents()) {
// If successful, stop watching (we found our block)
observer.disconnect();
}
});
// Try to attach confetti events immediately (in case the block is already loaded)
if (!attachConfettiEvents()) {
// If that didn't work, start watching for changes
observer.observe(document.body, {
childList: true, // Watch for new child elements
subtree: true // Watch the entire document tree
});
}
})(); // End of IIFE - this runs immediately when the script loads
Code example adapted from source: Mel's Tools for Rise
How This Code Works
- Dynamic Library Loading: Automatically loads the confetti library from a CDN when needed
- Accessibility Conscious: Respects user motion preferences to avoid triggering animations for users with vestibular disorders
- Block Targeting: Uses Rise's data-block-id to target specific content blocks
- Smart Event Attachment: Uses MutationObserver to handle dynamically loaded content
- Customizable Animation: Easy to modify colors, particle count, spread, and timing
Adding Custom HTML Elements
Sometimes you need entirely new elements that don't exist in Rise's standard block library. With RiseOverride, you can inject custom HTML components directly into your courses.
The key to successful HTML injection is understanding Rise's block structure and using the proper selectors to target specific areas of your course. You can add custom elements like:
- Custom Information Boxes: Highlight important content with styled callout boxes
- Progress Indicators: Visual progress bars or completion trackers
- Interactive Elements: Custom buttons, forms, or input fields
- Media Components: Embedded videos, audio players, or image galleries
When adding HTML, always ensure your elements are responsive and accessible. Test thoroughly across different devices and screen sizes.
Best Practices for Custom Code in Rise
To ensure your custom code works reliably across different environments and output formats, follow these essential best practices:
1. Mobile-First Responsive Design
- Always test custom elements on mobile devices
- Use relative units (rem, em, %) instead of fixed pixels
- Implement CSS media queries for different screen sizes
- Ensure touch-friendly interactive elements (minimum 44px tap targets)
2. Cross-Browser Compatibility
- Test in Chrome, Firefox, Safari, and Edge
- Use CSS prefixes for experimental properties
- Provide fallbacks for unsupported features
- Avoid cutting-edge JavaScript features without polyfills
3. Performance Optimization
- Minimize DOM manipulation and reflows
- Use efficient CSS selectors
- Debounce scroll and resize event handlers
- Lazy load heavy resources when possible
4. Accessibility Considerations
- Maintain proper heading hierarchy
- Ensure keyboard navigation support
- Add appropriate ARIA labels and roles
- Maintain sufficient color contrast ratios
Testing and Debugging Your Custom Code
Proper testing ensures your custom code works flawlessly in all Rise output formats:
Development Testing
- Rise Editor: Test directly in the Rise authoring environment
- Preview Mode: Use Rise's built-in preview to test learner experience
- Browser DevTools: Inspect elements and debug JavaScript errors
- Responsive Testing: Use DevTools device emulation for mobile testing
Output Format Testing
- Web Export: Test the published web version
- SCORM Package: Verify functionality in your LMS
- xAPI (Tin Can): Ensure tracking works correctly
- Print Export: Check how custom elements appear in PDF output
RiseOverride's Proven Custom Code Tools
Rather than building custom code from scratch, RiseOverride provides several proven tools that generate ready-to-use code for common customizations:
1. Reflection Block Generator
Create custom reflection activities that go beyond Rise's standard text input blocks. This tool generates fully functional reflection components with:
- Custom branding and styling options
- Character counters and guided prompts
- Multi-step reflection processes
- Accessibility compliance features
- Cross-format compatibility (SCORM, xAPI, cmi5, AICC)
Try the Reflection Block Generator →
2. Copy Block ID Feature
Essential for targeting specific Rise blocks with custom code. This feature lets you:
- Instantly copy any block's unique identifier
- Target specific content areas with precision
- Apply customizations to individual blocks
- Create block-specific interactions and styling
3. Live CSS Preview
See your CSS changes in real-time as you code:
- Instant visual feedback while coding
- No need to refresh or republish to see changes
- Perfect for rapid design iteration
- Reduces development time significantly
Tips for Success with Custom Code
Based on our experience with thousands of Rise customizations, here are the most important tips for success:
Start Simple
- Begin with basic CSS styling changes
- Use RiseOverride's proven code generators
- Test each change individually before combining
- Build complexity gradually as you gain confidence
Target Blocks Precisely
- Use RiseOverride's "Copy Block ID" feature for accurate targeting
- Add custom classes to blocks for easier styling
- Test CSS selectors in browser DevTools first
- Understand Rise's block structure before making changes
Test Thoroughly
- Preview changes in Rise's preview mode
- Test on mobile devices and different screen sizes
- Verify functionality in your actual LMS environment
- Check all Rise output formats (SCORM, xAPI, etc.)
Conclusion: Unlock Unlimited Possibilities
Adding custom code to Articulate Rise courses transforms them from standard eLearning content into dynamic, interactive experiences that engage learners and drive better outcomes. With RiseOverride, this powerful customization capability is available to everyone—completely free.
Whether you're creating simple styling enhancements or complex interactive applications, the techniques covered in this guide provide the foundation for unlimited creativity in your Rise courses. Start with small experiments and gradually build your custom code library as you become more comfortable with the possibilities.
Ready to revolutionize your Articulate Rise courses? Install RiseOverride for free and start adding custom code to your courses today!
What's Next?
- Explore our Block Library for ready-to-use custom components
- Check out our Reflection Block Generator tutorial for specialized learning activities
- Join our community to share custom code snippets and get support
- Stay tuned for advanced tutorials on API integrations and complex interactions