Direct Code Block
Standalone code blocks with copy button, used for API documentation and code snippets
<div class="nds-code nds-expandable">
<div class="nds-code-action">
<button class="nds-btn nds-subtle nds-copy" aria-label="Copy code example">
<i class="nds-icon nds-hgi-copy-01"></i>
</button>
</div>
<div class="nds-expandable-content">
<code class="lang-html code">
<!-- Your code here -->
</code>
</div>
</div>
<div class="nds-code nds-expandable">
<div class="nds-code-action">
<button class="nds-btn nds-subtle nds-copy" aria-label="Copy code example">
<i class="nds-icon nds-hgi-copy-01"></i>
</button>
</div>
<div class="nds-expandable-content">
<code class="lang-javascript line-numbers">
// Your code here
</code>
</div>
</div>
<div class="nds-code nds-expandable">
<div class="nds-code-action">
<button class="nds-btn nds-subtle nds-copy" aria-label="Copy code example">
<i class="nds-icon nds-hgi-copy-01"></i>
</button>
</div>
<div class="nds-expandable-content">
<code class="lang-javascript line-numbers">
// Long code content here
// Will collapse with "Show More" button
</code>
</div>
</div>
Tabbed Code Block
Code blocks with tab navigation for showing multiple languages or file types
<button class="nds-btn nds-primary nds-lg">
<i class="nds-icon nds-hgi-plus-sign" aria-hidden="true"></i>
<span class="nds-label">Button Text</span>
</button>
<div class="demo-code">
<div class="nds-tabs nds-code nds-divided">
<div class="nds-tab-list-container nds-scroll-more">
<nav class="nds-tab-list nds-scroll-more-content oneRowContent" role="tablist" aria-label="Tab navigation">
<button class="nds-btn nds-subtle nds-tab" role="tab" aria-selected="true"
aria-controls="panel-id" id="tab-id">
<span class="nds-tab-label">HTML</span>
</button>
</nav>
</div>
<div class="nds-tab-content">
<div class="nds-tab-panel code-example" role="tabpanel" id="panel-id"
aria-labelledby="tab-id">
<div class="nds-code-action">
<button class="nds-btn nds-subtle nds-copy" aria-label="Copy code example">
<i class="nds-icon nds-hgi-copy-01"></i>
</button>
</div>
<code class="lang-html code">
<!-- Your code here -->
</code>
</div>
</div>
</div>
</div>
<div class="nds-alert nds-card" data-status="success">
<span class="nds-feedback nds-alert-icon nds-outline">
<span class="nds-feedback-icon">
<i class="nds-icon" aria-hidden="true"></i>
</span>
</span>
<div class="nds-alert-content">
<div class="nds-alert-text">
<span class="nds-alert-title">Success</span>
<p class="nds-alert-description">Operation completed.</p>
</div>
</div>
</div>
NDS.Alert.create({
variant: 'success',
title: 'Success',
description: 'Operation completed.',
target: '#container'
});
.nds-alert {
display: flex;
align-items: flex-start;
gap: var(--spacing-md);
padding: var(--spacing-lg);
}
When used inside demo cards, tabbed code blocks start with the hidden attribute. The showcase JavaScript reveals them with a toggle button. Click the code icon below any demo card to see this in action.
Language Classes
Supported language identifiers for the code element
| Class | Language | Usage |
|---|---|---|
| lang-html | HTML / XML | Markup and template examples |
| lang-css | CSS / SCSS | Stylesheet examples |
| lang-javascript | JavaScript | Script and API examples |
Usage Guidelines
Structure
- All code blocks must be wrapped in .nds-code.nds-expandable
- Use .nds-code-action for the copy button container
- Wrap the code element inside div.nds-expandable-content
- Add language class to the code element (lang-html, lang-css, lang-javascript)
Direct vs Tabbed
- Direct: .nds-code.nds-expandable > .nds-expandable-content > code
- Tabbed: .nds-tabs.nds-code.nds-divided > .nds-tab-panel > code
- Add hidden attribute when tabbed code is inside demo cards
- Tabbed variant inherits tab component behavior
Features
- Add line-numbers class for numbered lines
- .nds-expandable enables auto show/hide for long code
- Copy button auto-copies content and shows "Copied" feedback
- Code is always rendered LTR regardless of page direction
Best Practices
- Keep code examples concise and focused
- Use expandable for code longer than ~15 lines
- Match tab labels to the actual language shown
- Ensure all panel IDs and tab IDs are unique per page
CSS Implementation
Core styles for the code block component