├── CNAME
├── icon
├── logo.png
├── favicon.ico
├── favicon-16x16.png
├── favicon-32x32.png
├── apple-touch-icon.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon-60x60.png
├── apple-touch-icon-76x76.png
└── apple-touch-icon-120x120.png
├── LICENSE
├── CONTRIBUTING.md
├── README.md
├── examples
├── dashboard.html
└── starter-template.html
├── neubrutalism.js
├── docs
└── DOCUMENTATION.md
└── index.html
/CNAME:
--------------------------------------------------------------------------------
1 | neubrutalism.dpdns.org
--------------------------------------------------------------------------------
/icon/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/logo.png
--------------------------------------------------------------------------------
/icon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/favicon.ico
--------------------------------------------------------------------------------
/icon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/favicon-16x16.png
--------------------------------------------------------------------------------
/icon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/favicon-32x32.png
--------------------------------------------------------------------------------
/icon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/apple-touch-icon.png
--------------------------------------------------------------------------------
/icon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/android-chrome-192x192.png
--------------------------------------------------------------------------------
/icon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/android-chrome-512x512.png
--------------------------------------------------------------------------------
/icon/apple-touch-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/apple-touch-icon-60x60.png
--------------------------------------------------------------------------------
/icon/apple-touch-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/apple-touch-icon-76x76.png
--------------------------------------------------------------------------------
/icon/apple-touch-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OshekharO/Neubrutalism/HEAD/icon/apple-touch-icon-120x120.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Saksham Shekher
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Neubrutalism CSS
2 |
3 |
4 | ## 🌟 Welcome Contributors!
5 |
6 |
7 | First off, thank you for considering contributing to Neubrutalism CSS! It's people like you that make the open-source community such an amazing place to learn, inspire, and create.
8 |
9 |
10 | ## 🤝 How Can You Contribute?
11 |
12 |
13 | We welcome contributions in various forms:
14 | - Reporting bugs
15 | - Suggesting enhancements
16 | - Adding new components
17 | - Improving documentation
18 | - Fixing issues
19 |
20 |
21 | ## 🐛 Reporting Bugs
22 |
23 |
24 | 1. Check existing issues to avoid duplicates
25 | 2. Use the bug report template
26 | 3. Provide detailed information:
27 | - Clear description
28 | - Steps to reproduce
29 | - Expected vs. actual behavior
30 | - Screenshots if possible
31 |
32 |
33 | ## 🚀 Feature Requests
34 |
35 |
36 | 1. Check existing feature requests
37 | 2. Explain the feature
38 | 3. Provide use cases
39 | 4. Discuss potential implementation
40 |
41 |
42 | ## 📝 Pull Request Process
43 |
44 | 1. Update documentation
45 | 2. Ensure all tests pass
46 | 3. Get review from maintainers
47 | 4. Discuss and refine if needed
48 |
49 | ## 🎨 Design Principles
50 |
51 | 1. Prioritize function over form
52 | 2. Maintain high-contrast aesthetic
53 | 3. Keep components lightweight
54 | 4. Ensure cross-browser compatibility
55 |
56 | ## 💡 Code of Conduct
57 |
58 | 1. Be respectful
59 | 2. Collaborate constructively
60 | 3. Welcome diverse perspectives
61 | 4. Focus on quality and user experience
62 |
63 | ## 📬 Contact
64 |
65 | - Open an issue for discussions
66 | - Telegram: https://t.me/OshekherO
67 |
68 | 6. ## 🏆 Contributors
69 |
70 | Your contributions will be recognized here! Star contributors get special mentions.
71 |
72 | ### Happy Coding! 🚀
73 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Neubrutalism CSS
2 |
3 | A modern, minimalist CSS library that embraces bold design principles, high-contrast aesthetics, and a no-nonsense approach to web design. Inspired by the Brutalist architecture movement, this library focuses on raw, honest, and functional design.
4 |
5 | ## 🚀 Quick Start
6 |
7 | Get started in seconds with the CDN:
8 |
9 | ```html
10 |
11 |
12 |
13 |
14 |
15 | ```
16 |
17 | ## 📚 Documentation & Examples
18 |
19 | - **[Full Documentation](docs/DOCUMENTATION.md)** - Comprehensive guide with all components and utilities
20 | - **[Starter Template](examples/starter-template.html)** - Ready-to-use landing page template
21 | - **[Dashboard Example](examples/dashboard.html)** - Admin dashboard layout example
22 |
23 | ## ✨ Key Features
24 |
25 | - 🎨 **High-contrast design** - Bold black and white with striking shadows
26 | - ⚡ **Lightweight** - ~70KB unminified, no dependencies
27 | - 🌙 **Dark mode** - Automatic (system preference) or manual toggle
28 | - ♿ **Accessible** - Focus-visible states, reduced motion support, screen reader friendly
29 | - 📱 **Responsive** - Mobile-first design with flexible components
30 | - 🔧 **Customizable** - Easy theming with CSS custom properties
31 | - 🧩 **40+ Components** - Everything you need to build modern UIs
32 |
33 | ## 🧩 Components
34 |
35 | | Category | Components |
36 | |----------|------------|
37 | | **Typography** | Headings, Display text, Blockquotes, Code blocks |
38 | | **Buttons** | Standard, Animated, Icon buttons, Button groups |
39 | | **Cards** | Content cards, Headers, Footers, Images |
40 | | **Forms** | Inputs, Checkboxes, Radio, Switches, Range sliders, Input groups |
41 | | **Navigation** | Navbar, Breadcrumbs, Pagination, Tabs |
42 | | **Feedback** | Alerts, Toasts, Badges, Progress bars, Spinners |
43 | | **Data Display** | Tables, Lists, Avatars, Tags, Timeline, Rating |
44 | | **Overlays** | Modals, Dropdowns, Tooltips, Accordion |
45 | | **Layout** | Grid system (1-6 columns), Containers, Masonry |
46 | | **Utilities** | Colors, Spacing, Display, Text alignment |
47 |
48 | ## 🌙 Dark Mode
49 |
50 | ```javascript
51 | // Toggle dark mode
52 | toggleDarkMode(true); // Enable
53 | toggleDarkMode(false); // Disable
54 |
55 | // Check current state
56 | if (isDarkMode()) {
57 | console.log("Dark mode is active");
58 | }
59 | ```
60 |
61 | Or add the class manually:
62 | ```html
63 |
64 | ```
65 |
66 | ## 🎨 Customization
67 |
68 | Override CSS custom properties to match your brand:
69 |
70 | ```css
71 | :root {
72 | --nb-primary: #000;
73 | --nb-secondary: #fff;
74 | --nb-accent: #3498db;
75 | --nb-success: #2ecc71;
76 | --nb-danger: #e74c3c;
77 | --nb-warning: #f39c12;
78 | --nb-border-width: 2px;
79 | --nb-shadow-offset: 4px;
80 | }
81 | ```
82 |
83 | ## 📱 Browser Support
84 |
85 | - ✅ Chrome (latest)
86 | - ✅ Firefox (latest)
87 | - ✅ Safari (latest)
88 | - ✅ Edge (latest)
89 |
90 | ## 📋 Changelog
91 |
92 | - ✅ Comprehensive documentation
93 | - ✅ 5 new components (Skeleton, Timeline, Stepper, Rating, Empty State)
94 | - ✅ Improved responsive design across all screen sizes
95 | - ✅ Mobile navigation with slide-out menu
96 | - ✅ Dark mode support
97 | - ✅ Example templates
98 |
99 | ## 🤝 Contributing
100 |
101 | Contributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) before submitting a pull request.
102 |
103 | ## 📄 License
104 |
105 | MIT License - see [LICENSE](LICENSE) for details.
106 |
107 | ## 🌟 Credits
108 |
109 | Created by [Saksham Shekher](https://github.com/OshekharO)
110 |
111 | ### Give a ⭐ if you like the project!
112 |
--------------------------------------------------------------------------------
/examples/dashboard.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Dashboard Example - Neubrutalism CSS
7 |
8 |
62 |
63 |
64 |
65 |
66 |
82 |
83 |
84 |
85 |
98 |
99 |
100 |
101 |
102 |
1,234
103 |
Total Users
104 |
107 |
108 |
109 |
$12,345
110 |
Revenue
111 |
114 |
115 |
116 |
567
117 |
Orders
118 |
121 |
122 |
123 |
89%
124 |
Satisfaction
125 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | Order
140 | Customer
141 | Status
142 |
143 |
144 |
145 |
146 | #001
147 | John Doe
148 | Complete
149 |
150 |
151 | #002
152 | Jane Smith
153 | Pending
154 |
155 |
156 | #003
157 | Bob Wilson
158 | Complete
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
2 hours ago
171 |
172 |
New user registered
173 |
john@example.com signed up
174 |
175 |
176 |
177 |
5 hours ago
178 |
179 |
Order completed
180 |
Order #001 was delivered
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 | ⚠️ System maintenance scheduled for tomorrow at 2:00 AM UTC
192 |
193 |
194 |
195 |
196 |
197 |
198 |
204 |
205 |
206 |
--------------------------------------------------------------------------------
/examples/starter-template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Neubrutalism CSS - Starter Template
7 |
8 |
9 |
10 |
11 | Skip to main content
12 |
13 |
14 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | Home
26 | About
27 | Services
28 | Contact
29 |
30 |
31 |
32 |
33 |
34 | Welcome to MySite
35 | A bold, minimalist design that makes an impact. Built with Neubrutalism CSS.
36 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | Features
48 | What makes us different
49 |
50 |
51 |
52 |
⚡
53 |
Fast
54 |
Lightning-quick performance with no bloat.
55 |
56 |
57 |
🎨
58 |
Beautiful
59 |
Stunning visual design that stands out.
60 |
61 |
62 |
🔧
63 |
Flexible
64 |
Easy to customize to match your brand.
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
About Us
74 |
We believe in bold, honest design that puts function first.
75 |
Our approach combines the raw aesthetic of brutalist design with modern usability principles. The result? Websites that are both striking and user-friendly.
76 |
Read Our Story
77 |
78 |
79 |
80 |
81 |
82 | Simplicity over complexity
83 | Function over decoration
84 | Accessibility for everyone
85 | Performance matters
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | What People Say
95 | Testimonials from our clients
96 |
97 |
98 |
99 |
"This design approach completely transformed how our users interact with our site. Bold, clear, and effective."
100 |
101 | ★
102 | ★
103 | ★
104 | ★
105 | ★
106 |
107 |
— Jane Doe, CEO
108 |
109 |
110 |
"Finally, a CSS framework that doesn't look like everything else. Our brand really stands out now."
111 |
112 | ★
113 | ★
114 | ★
115 | ★
116 | ★
117 |
118 |
— John Smith, Designer
119 |
120 |
121 |
122 |
123 |
124 |
143 |
144 |
145 |
146 |
147 |
163 |
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/neubrutalism.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Neubrutalism CSS - JavaScript Utilities
3 | * A minimalist, high-contrast CSS library inspired by Brutalist design principles.
4 | */
5 |
6 | document.addEventListener("DOMContentLoaded", function () {
7 | "use strict";
8 |
9 | // ==========================================================================
10 | // Mobile Menu Toggle
11 | // ==========================================================================
12 |
13 | const mobileMenuButton = document.querySelector(".mobile-menu-button");
14 | const navbarMenu = document.querySelector(".navbar-menu");
15 |
16 | if (mobileMenuButton && navbarMenu) {
17 | mobileMenuButton.addEventListener("click", function () {
18 | navbarMenu.classList.toggle("active");
19 | // Toggle aria-expanded for accessibility
20 | const isExpanded = navbarMenu.classList.contains("active");
21 | mobileMenuButton.setAttribute("aria-expanded", isExpanded);
22 | });
23 |
24 | // Close mobile menu when clicking outside
25 | document.addEventListener("click", function (event) {
26 | if (!navbarMenu.classList.contains("active")) {
27 | return;
28 | }
29 |
30 | const isClickInsideMenu = navbarMenu.contains(event.target);
31 | const isClickOnMenuButton = mobileMenuButton.contains(event.target);
32 |
33 | if (!isClickInsideMenu && !isClickOnMenuButton) {
34 | navbarMenu.classList.remove("active");
35 | mobileMenuButton.setAttribute("aria-expanded", "false");
36 | }
37 | });
38 |
39 | // Close menu on Escape key
40 | document.addEventListener("keydown", function (event) {
41 | if (event.key === "Escape" && navbarMenu.classList.contains("active")) {
42 | navbarMenu.classList.remove("active");
43 | mobileMenuButton.setAttribute("aria-expanded", "false");
44 | mobileMenuButton.focus();
45 | }
46 | });
47 | }
48 |
49 | // ==========================================================================
50 | // Toast Notifications
51 | // ==========================================================================
52 |
53 | /**
54 | * Creates a toast notification
55 | * @param {string} message - The message to display
56 | * @param {string} type - Toast type: 'default', 'success', 'danger', 'warning'
57 | * @param {number} duration - Duration in milliseconds (default: 5000)
58 | * @returns {HTMLElement} The toast element
59 | */
60 | function createToast(message, type = "default", duration = 5000) {
61 | const toast = document.createElement("div");
62 | toast.classList.add("nb-toast", `nb-toast-${type}`);
63 | toast.setAttribute("role", "alert");
64 | toast.setAttribute("aria-live", "polite");
65 |
66 | const toastContent = document.createElement("div");
67 | toastContent.classList.add("nb-toast-content");
68 | toastContent.textContent = message;
69 |
70 | const closeBtn = document.createElement("button");
71 | closeBtn.classList.add("nb-toast-close");
72 | closeBtn.innerHTML = "×";
73 | closeBtn.setAttribute("aria-label", "Close notification");
74 |
75 | let autoRemoveTimer = null;
76 |
77 | const removeToast = () => {
78 | if (autoRemoveTimer) {
79 | clearTimeout(autoRemoveTimer);
80 | autoRemoveTimer = null;
81 | }
82 | toast.classList.add("nb-toast-hide");
83 | setTimeout(() => {
84 | if (toast.parentNode) {
85 | toast.remove();
86 | }
87 | }, 300);
88 | };
89 |
90 | closeBtn.addEventListener("click", removeToast);
91 |
92 | toast.appendChild(toastContent);
93 | toast.appendChild(closeBtn);
94 | document.body.appendChild(toast);
95 |
96 | // Auto-remove toast
97 | autoRemoveTimer = setTimeout(removeToast, duration);
98 |
99 | // Expose method to clear auto-remove timer
100 | toast.clearAutoRemove = () => {
101 | if (autoRemoveTimer) {
102 | clearTimeout(autoRemoveTimer);
103 | autoRemoveTimer = null;
104 | }
105 | };
106 |
107 | return toast;
108 | }
109 |
110 | // ==========================================================================
111 | // Copy Component HTML to Clipboard
112 | // ==========================================================================
113 |
114 | /**
115 | * Copy HTML content of a component section to clipboard
116 | * @param {Event} event - Click event
117 | */
118 | async function copyComponentHTML(event) {
119 | const section = event.target.closest("section");
120 |
121 | if (!section) {
122 | return;
123 | }
124 |
125 | // Get all HTML content within the section, excluding the heading
126 | const componentHTML = Array.from(section.children)
127 | .filter(el => el.tagName !== "H2")
128 | .map(el => el.outerHTML)
129 | .join("\n");
130 |
131 | try {
132 | // Use modern Clipboard API with fallback
133 | if (window.isSecureContext && navigator.clipboard && navigator.clipboard.writeText) {
134 | await navigator.clipboard.writeText(componentHTML.trim());
135 | } else {
136 | // Fallback for older browsers or insecure contexts
137 | const tempTextArea = document.createElement("textarea");
138 | tempTextArea.value = componentHTML.trim();
139 | tempTextArea.style.position = "fixed";
140 | tempTextArea.style.opacity = "0";
141 | tempTextArea.setAttribute("aria-hidden", "true");
142 | document.body.appendChild(tempTextArea);
143 | tempTextArea.select();
144 | document.execCommand("copy");
145 | document.body.removeChild(tempTextArea);
146 | }
147 |
148 | // Create a temporary toast/feedback
149 | const toast = document.createElement("div");
150 | toast.textContent = "Component HTML copied to clipboard!";
151 | toast.className = "nb-copy-toast";
152 | toast.setAttribute("role", "status");
153 | toast.setAttribute("aria-live", "polite");
154 |
155 | document.body.appendChild(toast);
156 |
157 | // Remove toast after 2 seconds
158 | setTimeout(() => {
159 | if (toast.parentNode) {
160 | document.body.removeChild(toast);
161 | }
162 | }, 2000);
163 | } catch (err) {
164 | console.error("Failed to copy:", err);
165 | }
166 | }
167 |
168 | // Use event delegation for better performance
169 | // Only copy sections within the components container
170 | document.body.addEventListener("click", function(event) {
171 | const section = event.target.closest("section");
172 | // Only copy if section exists and is within the main content container
173 | if (section && section.closest(".nb-container")) {
174 | copyComponentHTML(event);
175 | }
176 | });
177 |
178 | // ==========================================================================
179 | // Dark Mode Toggle (Optional)
180 | // ==========================================================================
181 |
182 | /**
183 | * Toggle dark mode on the document
184 | * @param {boolean} enable - Whether to enable dark mode
185 | */
186 | function toggleDarkMode(enable) {
187 | if (enable) {
188 | document.documentElement.classList.add("nb-dark");
189 | try {
190 | localStorage.setItem("nb-dark-mode", "true");
191 | } catch (e) {
192 | // LocalStorage not available (privacy mode, etc.)
193 | }
194 | } else {
195 | document.documentElement.classList.remove("nb-dark");
196 | try {
197 | localStorage.setItem("nb-dark-mode", "false");
198 | } catch (e) {
199 | // LocalStorage not available (privacy mode, etc.)
200 | }
201 | }
202 | }
203 |
204 | /**
205 | * Check if dark mode is enabled
206 | * @returns {boolean}
207 | */
208 | function isDarkMode() {
209 | return document.documentElement.classList.contains("nb-dark");
210 | }
211 |
212 | // Check for saved dark mode preference
213 | try {
214 | const savedDarkMode = localStorage.getItem("nb-dark-mode");
215 | if (savedDarkMode === "true") {
216 | document.documentElement.classList.add("nb-dark");
217 | }
218 | } catch (e) {
219 | // LocalStorage not available (privacy mode, etc.)
220 | }
221 |
222 | // ==========================================================================
223 | // Expose Global Functions
224 | // ==========================================================================
225 |
226 | window.createToast = createToast;
227 | window.toggleDarkMode = toggleDarkMode;
228 | window.isDarkMode = isDarkMode;
229 | });
230 |
--------------------------------------------------------------------------------
/docs/DOCUMENTATION.md:
--------------------------------------------------------------------------------
1 | # Neubrutalism CSS Documentation
2 |
3 | Comprehensive documentation for Neubrutalism CSS - a minimalist, high-contrast CSS library inspired by Brutalist design principles.
4 |
5 | ## Table of Contents
6 |
7 | - [Getting Started](#getting-started)
8 | - [Installation](#installation)
9 | - [CSS Custom Properties](#css-custom-properties)
10 | - [Typography](#typography)
11 | - [Layout & Grid](#layout--grid)
12 | - [Components](#components)
13 | - [Form Elements](#form-elements)
14 | - [Utilities](#utilities)
15 | - [Dark Mode](#dark-mode)
16 | - [Accessibility](#accessibility)
17 | - [Browser Support](#browser-support)
18 | - [Examples](#examples)
19 |
20 | ---
21 |
22 | ## Getting Started
23 |
24 | Neubrutalism CSS is a lightweight, dependency-free CSS library that provides bold, high-contrast components perfect for modern web applications.
25 |
26 | ### Key Features
27 |
28 | - 🎨 High-contrast black and white design
29 | - ⚡ Lightweight (~70KB unminified)
30 | - 🌙 Built-in dark mode support
31 | - ♿ Accessibility-first approach
32 | - 📱 Responsive components
33 | - 🔧 Customizable with CSS custom properties
34 | - 🎯 No JavaScript dependencies for styling
35 |
36 | ---
37 |
38 | ## Installation
39 |
40 | ### CDN (Recommended)
41 |
42 | Add the following to your HTML ``:
43 |
44 | ```html
45 |
46 | ```
47 |
48 | ### Optional JavaScript
49 |
50 | For interactive components like toasts and dark mode toggle:
51 |
52 | ```html
53 |
54 | ```
55 |
56 | ### Download
57 |
58 | Download the CSS file directly from the [GitHub repository](https://github.com/OshekharO/Neubrutalism) and include it in your project:
59 |
60 | ```html
61 |
62 | ```
63 |
64 | ---
65 |
66 | ## CSS Custom Properties
67 |
68 | Customize Neubrutalism by overriding CSS custom properties in your stylesheet:
69 |
70 | ### Core Colors
71 |
72 | ```css
73 | :root {
74 | --nb-primary: #000; /* Primary color (black) */
75 | --nb-secondary: #fff; /* Secondary color (white) */
76 | --nb-accent: #3498db; /* Accent color for focus states */
77 | }
78 | ```
79 |
80 | ### Status Colors
81 |
82 | ```css
83 | :root {
84 | --nb-success: #2ecc71; /* Success state */
85 | --nb-danger: #e74c3c; /* Error/danger state */
86 | --nb-warning: #f39c12; /* Warning state */
87 | --nb-info: #3498db; /* Information state */
88 | }
89 | ```
90 |
91 | ### Neutral Colors (Gray Scale)
92 |
93 | ```css
94 | :root {
95 | --nb-gray-100: #f8f9fa;
96 | --nb-gray-200: #e9ecef;
97 | --nb-gray-300: #dee2e6;
98 | --nb-gray-400: #ced4da;
99 | --nb-gray-500: #adb5bd;
100 | --nb-gray-600: #6c757d;
101 | --nb-gray-700: #495057;
102 | --nb-gray-800: #343a40;
103 | --nb-gray-900: #212529;
104 | }
105 | ```
106 |
107 | ### Border & Shadow
108 |
109 | ```css
110 | :root {
111 | --nb-border-width: 2px;
112 | --nb-border-radius: 4px;
113 | --nb-shadow-offset: 4px;
114 | --nb-shadow-color: var(--nb-primary);
115 | }
116 | ```
117 |
118 | ### Spacing
119 |
120 | ```css
121 | :root {
122 | --nb-spacing-xs: 5px;
123 | --nb-spacing-sm: 10px;
124 | --nb-spacing-md: 15px;
125 | --nb-spacing-lg: 20px;
126 | --nb-spacing-xl: 30px;
127 | }
128 | ```
129 |
130 | ### Typography
131 |
132 | ```css
133 | :root {
134 | --nb-font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
135 | --nb-font-size-sm: 0.8rem;
136 | --nb-font-size-base: 1rem;
137 | --nb-font-size-lg: 1.2rem;
138 | --nb-font-size-xl: 1.5rem;
139 | }
140 | ```
141 |
142 | ### Transitions
143 |
144 | ```css
145 | :root {
146 | --nb-transition-fast: 0.2s ease;
147 | --nb-transition-base: 0.3s ease;
148 | }
149 | ```
150 |
151 | ---
152 |
153 | ## Typography
154 |
155 | ### Headings
156 |
157 | All heading elements (h1-h6) are styled with bold weights and proper hierarchy:
158 |
159 | ```html
160 | Heading 1
161 | Heading 2
162 | Heading 3
163 | Heading 4
164 | Heading 5
165 | Heading 6
166 | ```
167 |
168 | ### Display Headings
169 |
170 | For larger, more impactful headings:
171 |
172 | ```html
173 | Display 1
174 | Display 2
175 | Display 3
176 | Display 4
177 | ```
178 |
179 | ### Text Utilities
180 |
181 | ```html
182 |
183 | Larger, emphasized text for introductions.
184 |
185 |
186 | Small text for fine print.
187 |
188 |
189 | Less prominent text.
190 |
191 |
192 | Highlighted text
193 |
194 |
195 | Ctrl + C
196 | ```
197 |
198 | ### Blockquote
199 |
200 | ```html
201 |
202 | Quote text goes here.
203 | - Author Name
204 |
205 | ```
206 |
207 | ### Code Block
208 |
209 | ```html
210 | function example() {
211 | return "Neubrutalism";
212 | }
213 | ```
214 |
215 | ---
216 |
217 | ## Layout & Grid
218 |
219 | ### Containers
220 |
221 | ```html
222 |
223 | Content
224 |
225 |
226 | Container with shadow
227 | Purple themed container
228 | Yellow themed container
229 | Cyan themed container
230 | ```
231 |
232 | #### Container Sizes
233 |
234 | ```html
235 | Small container (max-width: 540px)
236 | Medium container (max-width: 720px)
237 | Large container (max-width: 960px)
238 | Extra large container (max-width: 1140px)
239 | Fluid container (100% width)
240 | ```
241 |
242 | #### Container Styles
243 |
244 | ```html
245 |
246 | Bordered container
247 |
248 |
249 | Card-style container with larger shadow
250 |
251 |
252 | Centered content
253 | ```
254 |
255 | #### Container Color Variants
256 |
257 | ```html
258 | Primary colored container
259 | Success colored container
260 | Warning colored container
261 | Danger colored container
262 | Info colored container
263 | Light colored container
264 | Dark colored container
265 | ```
266 |
267 | ### Grid System
268 |
269 | Responsive grid layouts with 1-6 columns:
270 |
271 | ```html
272 |
273 |
274 |
Column 1
275 |
Column 2
276 |
Column 3
277 |
278 |
279 |
280 |
281 |
Column 1
282 |
Column 2
283 |
284 | ```
285 |
286 | Available classes: `nb-grid-1`, `nb-grid-2`, `nb-grid-3`, `nb-grid-4`, `nb-grid-5`, `nb-grid-6`
287 |
288 | ### Bordered Grid
289 |
290 | ```html
291 |
292 |
Item 1
293 |
Item 2
294 |
Item 3
295 |
296 | ```
297 |
298 | ### Masonry Grid
299 |
300 | ```html
301 |
302 |
Item 1
303 |
Tall Item
304 |
Item 3
305 |
306 | ```
307 |
308 | ---
309 |
310 | ## Components
311 |
312 | ### Buttons
313 |
314 | ```html
315 |
316 | Default
317 | Small
318 | Large
319 | Rounded
320 | Disabled
321 | Full Width
322 |
323 |
324 |
325 | Click
326 | ...
327 |
328 |
329 |
330 | Animate
331 | ```
332 |
333 | ### Group
334 |
335 | Group related elements together like buttons, badges, or tags.
336 |
337 | ```html
338 |
339 |
340 | Left
341 | Middle
342 | Right
343 |
344 |
345 |
346 |
347 | First
348 | Second
349 | Third
350 |
351 |
352 |
353 |
354 | Option 1
355 | Option 2
356 | Option 3
357 |
358 |
359 |
360 |
361 | HTML
362 | CSS
363 | JS
364 |
365 |
366 |
367 |
368 | Action 1
369 | Action 2
370 |
371 | ```
372 |
373 | Available modifiers: `nb-group-shadow`, `nb-group-vertical`, `nb-group-spaced`, `nb-group-responsive`
374 |
375 | ### Badges
376 |
377 | ```html
378 | Default
379 | Primary
380 | Success
381 | Danger
382 | Warning
383 | Pill Badge
384 | ```
385 |
386 | ### Tags
387 |
388 | ```html
389 | Default
390 | Primary
391 | Success
392 | Danger
393 | Warning
394 | Removable ×
395 | ```
396 |
397 | ### Cards
398 |
399 | ```html
400 |
401 |
402 |
403 |
Card Title
404 |
Card content goes here.
405 |
406 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
Card Title
416 |
Card content.
417 |
418 |
419 | ```
420 |
421 | ### Alerts
422 |
423 | ```html
424 | Success message!
425 | Error message!
426 | Warning message!
427 | Info message!
428 |
429 |
430 | Simple success!
431 | Simple error!
432 | ```
433 |
434 | ### Tables
435 |
436 | ```html
437 |
438 |
439 |
440 | Header 1
441 | Header 2
442 |
443 |
444 |
445 |
446 | Cell 1
447 | Cell 2
448 |
449 |
450 |
451 | ```
452 |
453 | Table modifiers: `nb-table-striped`, `nb-table-bordered`, `nb-table-hover`
454 |
455 | #### Scrollable Table
456 |
457 | Wrap tables in a scrollable container for wide tables on small screens:
458 |
459 | ```html
460 |
466 | ```
467 |
468 | #### Compact Table
469 |
470 | A more condensed table variant:
471 |
472 | ```html
473 |
476 | ```
477 |
478 | #### Borderless Table
479 |
480 | Clean table without heavy borders:
481 |
482 | ```html
483 |
486 | ```
487 |
488 | #### Dense Table
489 |
490 | Even more compact for data-heavy displays:
491 |
492 | ```html
493 |
496 | ```
497 |
498 | #### Row Highlights
499 |
500 | Add contextual background colors to rows:
501 |
502 | ```html
503 | ...
504 | ...
505 | ...
506 | ...
507 | ```
508 |
509 | ### Progress Bars
510 |
511 | ```html
512 |
515 |
516 |
517 |
520 |
521 |
522 |
525 | ```
526 |
527 | ### Spinners
528 |
529 | ```html
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 | ```
550 |
551 | ### Modal
552 |
553 | Pure CSS modal using the checkbox hack:
554 |
555 | ```html
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
Modal Title
567 |
Modal content here.
568 |
571 |
572 |
573 |
574 |
575 |
576 | Open Modal
577 | ```
578 |
579 | ### Accordion
580 |
581 | ```html
582 |
583 |
584 |
585 |
589 |
590 |
Answer to question 1.
591 |
592 |
593 |
594 | ```
595 |
596 | ### Tabs
597 |
598 | ```html
599 |
600 |
601 |
Tab 1
602 |
Tab 1 content
603 |
604 |
605 |
Tab 2
606 |
Tab 2 content
607 |
608 | ```
609 |
610 | ### Scrollable Tabs
611 |
612 | Perfect for scenarios with many tabs that don't fit on screen. Uses flexbox with order property to keep tab switching functionality working.
613 |
614 | ```html
615 |
629 | ```
630 |
631 | ### Dropdown
632 |
633 | ```html
634 |
635 | Select Option
636 |
641 |
642 | ```
643 |
644 | ### Tooltips
645 |
646 | ```html
647 |
648 | Hover me
649 |
650 |
651 |
652 |
653 | Hover me
654 |
655 | ```
656 |
657 | ### Breadcrumb
658 |
659 | ```html
660 |
665 | ```
666 |
667 | ### Pagination
668 |
669 | ```html
670 |
681 | ```
682 |
683 | ### Lists
684 |
685 | ```html
686 |
687 |
688 | Item 1
689 | Item 2
690 |
691 |
692 |
693 |
694 | First
695 | Second
696 |
697 |
698 |
699 |
700 | Bullet 1
701 | Bullet 2
702 |
703 | ```
704 |
705 | ### Avatar
706 |
707 | ```html
708 |
709 | ```
710 |
711 | ### Navbar
712 |
713 | ```html
714 |
715 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 | Home
726 | About
727 | Get Started
728 |
729 |
730 | ```
731 |
732 | #### Navbar Variants
733 |
734 | Color variants:
735 | ```html
736 | ...
737 | ...
738 | ...
739 | ...
740 | ...
741 | ...
742 | ```
743 |
744 | Position variants:
745 | ```html
746 |
747 | ...
748 |
749 |
750 | ...
751 |
752 |
753 | ...
754 |
755 |
756 | ...
757 | ```
758 |
759 | Size variants:
760 | ```html
761 |
762 | ...
763 |
764 |
765 | ...
766 | ```
767 |
768 | ### Nav Pills
769 |
770 | Pill-style navigation tabs:
771 |
772 | ```html
773 |
778 | ```
779 |
780 | #### Pills Color Variants
781 |
782 | ```html
783 |
784 |
785 |
786 |
787 | ```
788 |
789 | #### Pills Size Variants
790 |
791 | ```html
792 |
793 |
794 |
795 |
796 |
797 | ```
798 |
799 | #### Pills Style Variants
800 |
801 | ```html
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 | ```
817 |
818 | #### Pills with Badge
819 |
820 | ```html
821 |
829 | ```
830 |
831 | ### Footer
832 |
833 | ```html
834 |
841 | ```
842 |
843 | ### Hero Section
844 |
845 | ```html
846 |
847 | Hero Title
848 | Hero subtitle text.
849 |
853 |
854 | ```
855 |
856 | ### Feature Box
857 |
858 | ```html
859 |
860 |
🎨
861 |
Feature Title
862 |
Feature description.
863 |
864 | ```
865 |
866 | ### Marquee
867 |
868 | ```html
869 |
870 |
Scrolling text content here
871 |
872 | ```
873 |
874 | ### Carousel/Slider
875 |
876 | ```html
877 |
878 |
879 |
880 |
881 |
Slide 1
882 |
883 |
884 |
885 |
Slide 2
886 |
887 |
888 |
889 | ```
890 |
891 | ### Newsletter
892 |
893 | ```html
894 |
895 |
896 |
...
897 |
Subscribe
898 |
Stay updated
899 |
900 |
901 | Subscribe
902 |
903 |
904 |
905 | ```
906 |
907 | ### Testimonial
908 |
909 | ```html
910 |
911 |
"Testimonial quote here." - Author
912 |
913 | ```
914 |
915 | ---
916 |
917 | ## Form Elements
918 |
919 | ### Basic Form
920 |
921 | ```html
922 |
933 | ```
934 |
935 | ### Checkboxes
936 |
937 | ```html
938 |
939 | Default
940 |
941 |
942 |
943 |
944 |
945 | Rounded
946 | Outline
947 | Switch
948 | Success
949 | Danger
950 | ```
951 |
952 | ### Radio Buttons
953 |
954 | ```html
955 |
956 |
957 |
958 | Option 1
959 |
960 |
961 |
962 | ...
963 | ...
964 | ```
965 |
966 | ### Range Slider
967 |
968 | ```html
969 |
970 | ```
971 |
972 | ### Switch Toggle
973 |
974 | ```html
975 |
976 |
977 |
978 |
979 | ```
980 |
981 | ### Input Group
982 |
983 | ```html
984 |
985 |
986 | Search
987 |
988 | ```
989 |
990 | ---
991 |
992 | ## Utilities
993 |
994 | ### Display
995 |
996 | ```css
997 | .nb-flex /* display: flex */
998 | .nb-flex-column /* flex-direction: column */
999 | .nb-flex-center /* justify-content: center; align-items: center */
1000 | .nb-flex-wrap /* flex-wrap: wrap */
1001 | .nb-inline-flex /* display: inline-flex */
1002 | .nb-block /* display: block */
1003 | .nb-inline-block /* display: inline-block */
1004 | .nb-hidden /* display: none */
1005 | ```
1006 |
1007 | ### Text Alignment
1008 |
1009 | ```css
1010 | .nb-text-left /* text-align: left */
1011 | .nb-text-center /* text-align: center */
1012 | .nb-text-right /* text-align: right */
1013 | .nb-text-uppercase /* text-transform: uppercase */
1014 | .nb-text-lowercase /* text-transform: lowercase */
1015 | .nb-text-capitalize /* text-transform: capitalize */
1016 | .nb-font-bold /* font-weight: bold */
1017 | .nb-font-normal /* font-weight: normal */
1018 | ```
1019 |
1020 | ### Spacing
1021 |
1022 | ```css
1023 | /* Margin */
1024 | .nb-m-0 /* margin: 0 */
1025 | .nb-m-1 /* margin: 5px */
1026 | .nb-m-2 /* margin: 10px */
1027 | .nb-m-3 /* margin: 15px */
1028 | .nb-m-4 /* margin: 20px */
1029 |
1030 | /* Padding */
1031 | .nb-p-0 /* padding: 0 */
1032 | .nb-p-1 /* padding: 5px */
1033 | .nb-p-2 /* padding: 10px */
1034 | .nb-p-3 /* padding: 15px */
1035 | .nb-p-4 /* padding: 20px */
1036 | ```
1037 |
1038 | ### Width
1039 |
1040 | ```css
1041 | .nb-w-full /* width: 100% */
1042 | .nb-w-auto /* width: auto */
1043 | ```
1044 |
1045 | ### Color Utilities
1046 |
1047 | Background colors:
1048 | ```css
1049 | .nb-bg-primary /* Black background */
1050 | .nb-bg-secondary /* White background */
1051 | .nb-bg-success /* Green background */
1052 | .nb-bg-danger /* Red background */
1053 | .nb-bg-warning /* Orange background */
1054 | .nb-bg-info /* Blue background */
1055 | ```
1056 |
1057 | Text colors:
1058 | ```css
1059 | .nb-text-primary
1060 | .nb-text-secondary
1061 | .nb-text-success
1062 | .nb-text-danger
1063 | .nb-text-warning
1064 | .nb-text-info
1065 | .nb-text-muted
1066 | ```
1067 |
1068 | ---
1069 |
1070 | ## Dark Mode
1071 |
1072 | ### Automatic (System Preference)
1073 |
1074 | Dark mode is automatically applied when the user's system preference is set to dark mode using the `prefers-color-scheme` media query.
1075 |
1076 | ### Manual Toggle
1077 |
1078 | Add the `nb-dark` class to the `` or `` element:
1079 |
1080 | ```html
1081 |
1082 | ```
1083 |
1084 | ### JavaScript Toggle
1085 |
1086 | Using the included JavaScript:
1087 |
1088 | ```javascript
1089 | // Enable dark mode
1090 | toggleDarkMode(true);
1091 |
1092 | // Disable dark mode
1093 | toggleDarkMode(false);
1094 |
1095 | // Check if dark mode is enabled
1096 | if (isDarkMode()) {
1097 | console.log("Dark mode is active");
1098 | }
1099 | ```
1100 |
1101 | ### Custom Dark Mode Colors
1102 |
1103 | Override dark mode colors:
1104 |
1105 | ```css
1106 | .nb-dark {
1107 | --nb-primary: #fff;
1108 | --nb-secondary: #1a1a1a;
1109 | /* Add your custom dark mode colors */
1110 | }
1111 | ```
1112 |
1113 | ---
1114 |
1115 | ## Accessibility
1116 |
1117 | Neubrutalism CSS is built with accessibility in mind:
1118 |
1119 | ### Focus States
1120 |
1121 | All interactive elements have visible focus states using `:focus-visible`:
1122 |
1123 | ```css
1124 | :focus-visible {
1125 | outline: 2px solid var(--nb-accent);
1126 | outline-offset: 2px;
1127 | }
1128 | ```
1129 |
1130 | ### Reduced Motion
1131 |
1132 | Animations are disabled for users who prefer reduced motion:
1133 |
1134 | ```css
1135 | @media (prefers-reduced-motion: reduce) {
1136 | *, *::before, *::after {
1137 | animation-duration: 0.01ms !important;
1138 | transition-duration: 0.01ms !important;
1139 | }
1140 | }
1141 | ```
1142 |
1143 | ### Skip Link
1144 |
1145 | Add a skip link for keyboard navigation:
1146 |
1147 | ```html
1148 | Skip to main content
1149 | ```
1150 |
1151 | ### Screen Reader Only
1152 |
1153 | Hide content visually but keep it accessible to screen readers:
1154 |
1155 | ```html
1156 | Screen reader only text
1157 | ```
1158 |
1159 | ### ARIA Attributes
1160 |
1161 | Use proper ARIA attributes for interactive components:
1162 |
1163 | ```html
1164 |
1165 | ...
1166 |
1167 |
1168 | ...
1169 |
1170 |
1171 | ...
1172 | ```
1173 |
1174 | ---
1175 |
1176 | ## Browser Support
1177 |
1178 | Neubrutalism CSS supports all modern browsers:
1179 |
1180 | - ✅ Chrome (latest)
1181 | - ✅ Firefox (latest)
1182 | - ✅ Safari (latest)
1183 | - ✅ Edge (latest)
1184 | - ✅ Opera (latest)
1185 |
1186 | ### CSS Features Used
1187 |
1188 | - CSS Custom Properties (CSS Variables)
1189 | - Flexbox
1190 | - CSS Grid
1191 | - `:focus-visible` pseudo-class
1192 | - `prefers-color-scheme` media query
1193 | - `prefers-reduced-motion` media query
1194 |
1195 | ---
1196 |
1197 | ## Examples
1198 |
1199 | ### Complete Page Layout
1200 |
1201 | ```html
1202 |
1203 |
1204 |
1205 |
1206 |
1207 | My Neubrutalist Site
1208 |
1209 |
1210 |
1211 |
1212 |
1213 |
1216 |
1217 | Home
1218 | About
1219 | Contact
1220 |
1221 |
1222 |
1223 |
1224 |
1225 | Welcome
1226 | A bold, minimalist design.
1227 |
1230 |
1231 |
1232 |
1233 |
1234 |
1235 |
1236 |
⚡
1237 |
Fast
1238 |
Lightning quick performance.
1239 |
1240 |
1241 |
🎨
1242 |
Beautiful
1243 |
Stunning visual design.
1244 |
1245 |
1246 |
🔧
1247 |
Flexible
1248 |
Easy to customize.
1249 |
1250 |
1251 |
1252 |
1253 |
1254 |
1257 |
1258 |
1259 |
1260 |
1261 | ```
1262 |
1263 | ### Contact Form
1264 |
1265 | ```html
1266 |
1280 | ```
1281 |
1282 | ### Dashboard Card
1283 |
1284 | ```html
1285 |
1286 |
1287 |
1288 |
1289 |
1290 |
Total Users
1291 |
1,234
1292 |
1293 |
1294 |
Revenue
1295 |
$5,678
1296 |
1297 |
1298 |
1301 |
1302 |
1303 | ```
1304 |
1305 | ---
1306 |
1307 | ## JavaScript API
1308 |
1309 | ### Toast Notifications
1310 |
1311 | ```javascript
1312 | // Create a default toast
1313 | createToast("Hello World!");
1314 |
1315 | // Create a success toast
1316 | createToast("Success!", "success");
1317 |
1318 | // Create a danger toast
1319 | createToast("Error!", "danger");
1320 |
1321 | // Create a warning toast
1322 | createToast("Warning!", "warning");
1323 |
1324 | // Custom duration (in milliseconds)
1325 | createToast("Custom duration", "default", 10000);
1326 | ```
1327 |
1328 | ### Dark Mode
1329 |
1330 | ```javascript
1331 | // Enable dark mode
1332 | toggleDarkMode(true);
1333 |
1334 | // Disable dark mode
1335 | toggleDarkMode(false);
1336 |
1337 | // Check current state
1338 | const isDark = isDarkMode();
1339 | ```
1340 |
1341 | ---
1342 |
1343 | ## License
1344 |
1345 | Neubrutalism CSS is released under the [MIT License](https://github.com/OshekharO/Neubrutalism/blob/main/LICENSE).
1346 |
1347 | ---
1348 |
1349 | ## Contributing
1350 |
1351 | Contributions are welcome! Please read our [Contributing Guidelines](https://github.com/OshekharO/Neubrutalism/blob/main/CONTRIBUTING.md) before submitting a pull request.
1352 |
1353 | ---
1354 |
1355 | ## Credits
1356 |
1357 | Created by [Saksham Shekher](https://github.com/OshekharO)
1358 |
1359 | Inspired by Brutalist web design principles and modern minimalist UI trends.
1360 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | Neubrutalism CSS: A minimalist, high-contrast CSS library.
31 |
32 |
33 |
173 |
174 |
175 |
176 |
181 |
182 |
183 |
184 |
241 |
242 |
243 |
244 |
245 |
246 | Neubrutalism CSS
247 | A minimalist, high-contrast CSS library inspired by Brutalist design principles. Bold, clean, and unapologetically simple.
248 |
252 |
253 |
35 Stars
254 |
4 Forks
255 |
4 Contributors
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
🎨
264 |
High Contrast
265 |
Bold black and white design with striking shadows
266 |
267 |
268 |
⚡
269 |
Lightweight
270 |
No dependencies, pure CSS with minimal footprint
271 |
272 |
273 |
🌙
274 |
Dark Mode
275 |
Built-in dark mode support with easy toggle
276 |
277 |
278 |
279 |
280 |
281 |
282 | Installation
283 | Get started with Neubrutalism CSS in seconds
284 |
285 | CDN
286 | Add this to your HTML head:
287 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/OshekharO/Neubrutalism@main/neubrutalism.css">
288 |
289 | Optional: JavaScript
290 | For interactive components (toast, dark mode toggle):
291 | <script src="https://cdn.jsdelivr.net/gh/OshekharO/Neubrutalism@main/neubrutalism.js"></script>
292 |
293 |
294 |
295 |
296 | Headings
297 | Typography scale for all heading levels
298 |
299 |
300 |
Heading 1
301 | Heading 2
302 | Heading 3
303 | Heading 4
304 | Heading 5
305 | Heading 6
306 |
307 |
308 | Display Headings
309 |
310 |
Display 1
311 |
Display 2
312 |
Display 3
313 |
Display 4
314 |
315 |
316 |
317 |
318 |
319 | Text Utilities
320 | Common text styling utilities
321 |
322 |
323 |
This is a lead paragraph - larger and emphasized text for introductions.
324 |
This is a regular paragraph with bold text , italic text , and links .
325 |
This is small text for fine print.
326 |
This is muted text for less important content.
327 |
Highlight text with marked styling.
328 |
Use Ctrl + C to copy.
329 |
330 |
331 | Blockquote
332 |
333 |
334 | Design is not just what it looks like and feels like. Design is how it works.
335 | - Steve Jobs
336 |
337 |
338 |
339 | Code Block
340 |
341 |
function example() {
342 | return "Neubrutalism";
343 | }
344 |
345 |
346 | Dividers
347 |
348 |
Content above
349 |
350 |
Content below
351 |
OR
352 |
Alternative divider with text
353 |
354 |
355 |
356 |
357 |
383 |
384 |
385 |
386 | Group
387 | Group related elements together
388 |
389 |
390 |
Button Group
391 |
392 | Left
393 | Middle
394 | Right
395 |
396 |
397 |
Badge Group
398 |
399 | HTML
400 | CSS
401 | JS
402 |
403 |
404 |
Spaced Group
405 |
406 | Option 1
407 | Option 2
408 | Option 3
409 |
410 |
411 |
Vertical Group
412 |
413 | First
414 | Second
415 | Third
416 |
417 |
418 |
419 |
420 |
421 |
422 | Badges
423 | Labels and status indicators
424 |
425 |
426 | Default
427 | Primary
428 | Success
429 | Danger
430 | Warning
431 | Pill Badge
432 |
433 |
434 |
435 |
436 |
449 |
450 |
451 |
452 | Cards
453 | Content containers with various layouts
454 |
455 |
456 |
457 |
458 |
459 |
460 |
Card Title
461 |
This is a simple card with header and body content.
462 |
463 |
466 |
467 |
468 |
469 |
470 |
471 |
Card with Image
472 |
Cards can contain images and rich content.
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 | Alerts
482 | Contextual feedback messages
483 |
484 |
485 |
This is a success alert!
486 |
This is a danger alert!
487 |
This is a warning alert!
488 |
This is an info alert!
489 |
490 |
491 | Simple Alerts
492 |
493 |
Simple success alert!
494 |
Simple error alert!
495 |
496 |
497 |
498 |
499 |
500 | Tables
501 | Data tables with neubrutalist styling
502 |
503 |
504 |
Standard Table
505 |
506 |
507 |
508 | Name
509 | Role
510 | Status
511 |
512 |
513 |
514 |
515 | John Doe
516 | Developer
517 | Active
518 |
519 |
520 | Jane Smith
521 | Designer
522 | Active
523 |
524 |
525 | Bob Wilson
526 | Manager
527 | Away
528 |
529 |
530 |
531 |
532 |
Scrollable Table
533 |
572 |
573 |
Compact Table
574 |
575 |
576 |
577 | Item
578 | Qty
579 | Price
580 |
581 |
582 |
583 |
584 | Widget A
585 | 5
586 | $10.00
587 |
588 |
589 | Widget B
590 | 3
591 | $15.00
592 |
593 |
594 | Widget C
595 | 8
596 | $8.00
597 |
598 |
599 |
600 |
601 |
Borderless Table
602 |
603 |
604 |
605 | Product
606 | Category
607 | Price
608 |
609 |
610 |
611 |
612 | Laptop
613 | Electronics
614 | $999
615 |
616 |
617 | Desk Chair
618 | Furniture
619 | $250
620 |
621 |
622 | Notebook
623 | Office
624 | $5
625 |
626 |
627 |
628 |
629 |
Row Highlights
630 |
631 |
632 |
633 | Task
634 | Status
635 |
636 |
637 |
638 |
639 | Deploy to production
640 | Completed
641 |
642 |
643 | Code review pending
644 | In Progress
645 |
646 |
647 | Critical bug fix
648 | Blocked
649 |
650 |
651 | Documentation update
652 | Scheduled
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 | Progress Bars
662 | Visual progress indicators
663 |
664 |
665 |
668 |
671 |
674 |
677 |
678 |
Striped & Animated
679 |
682 |
683 |
684 |
685 |
686 |
687 | Spinners & Loaders
688 | Loading indicators
689 |
690 |
691 |
Circle Spinners
692 |
697 |
698 |
Color Variants
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
Square Spinner
707 |
708 |
709 |
Dots Loader
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
731 |
732 |
733 |
734 | Breadcrumb
735 | Navigation path indicator
736 |
737 |
744 |
745 |
746 |
747 |
748 | Modals
749 | Dialog windows for user interaction
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
Modal Title
762 |
763 |
This is a neubrutalist modal dialog. It can contain any content including forms, text, or other components.
764 |
765 |
768 |
769 |
770 |
771 |
772 |
773 | Open Modal
774 |
775 |
776 |
777 |
778 |
779 | Accordion
780 | Collapsible content sections
781 |
782 |
783 |
784 |
785 |
786 |
790 |
791 |
Neubrutalism is a modern CSS design approach that focuses on minimalist, high-contrast, and bold design principles.
792 |
793 |
794 |
795 |
796 |
800 |
801 |
Yes! Neubrutalism CSS is completely free and open source under the MIT license.
802 |
803 |
804 |
805 |
806 |
810 |
811 |
Neubrutalism CSS supports all modern browsers including Chrome, Firefox, Safari, and Edge.
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 | Tabs
821 | Tabbed content navigation
822 |
823 |
824 |
Standard Tabs
825 |
826 |
827 |
Tab 1
828 |
829 |
First Tab Content
830 |
This is the content for the first tab.
831 |
832 |
833 |
834 |
Tab 2
835 |
836 |
Second Tab Content
837 |
This is the content for the second tab.
838 |
839 |
840 |
841 |
Tab 3
842 |
843 |
Third Tab Content
844 |
This is the content for the third tab.
845 |
846 |
847 |
848 |
Scrollable Tabs
849 |
Perfect for many tabs - scroll horizontally to see more.
850 |
900 |
901 |
902 |
903 |
904 |
905 | Dropdown
906 | Dropdown menus
907 |
908 |
909 |
910 | Select Option
911 |
916 |
917 |
918 |
919 |
920 |
921 |
941 |
942 |
943 |
944 | Lists
945 | Styled list components
946 |
947 |
948 |
Basic List
949 |
950 | List item one
951 | List item two
952 | List item three
953 |
954 |
955 |
Ordered List
956 |
957 | First item
958 | Second item
959 | Third item
960 |
961 |
962 |
Bullet List
963 |
964 | Bullet item one
965 | Bullet item two
966 | Bullet item three
967 |
968 |
969 |
970 |
971 |
972 |
973 | Avatars
974 | User profile images
975 |
976 |
981 |
982 |
983 |
984 |
985 | Skeleton Loaders
986 | Loading placeholders for content
987 |
988 |
989 |
Card Skeleton
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
Avatar + Text Skeleton
999 |
1006 |
1007 |
Button Skeleton
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 | Timeline
1015 | Chronological display of events
1016 |
1017 |
1018 |
1019 |
1020 |
Jan 2024
1021 |
1022 |
Project Started
1023 |
Initial development phase began with core features.
1024 |
1025 |
1026 |
1027 |
Mar 2024
1028 |
1029 |
Beta Release
1030 |
First public beta released for testing.
1031 |
1032 |
1033 |
1034 |
Jun 2024
1035 |
1036 |
Version 1.0
1037 |
Official stable release with full documentation.
1038 |
1039 |
1040 |
1041 |
Dec 2024
1042 |
1043 |
Future Plans
1044 |
Upcoming features and improvements.
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1051 |
1052 |
1053 | Steps / Stepper
1054 | Multi-step process indicators
1055 |
1056 |
1057 |
Horizontal Steps
1058 |
1059 |
1060 |
1061 |
1062 |
Account
1063 |
Create account
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
Profile
1070 |
Setup profile
1071 |
1072 |
1073 |
1074 |
1075 |
1076 |
Settings
1077 |
Configure settings
1078 |
1079 |
1080 |
1081 |
1082 |
1083 |
Done
1084 |
Complete setup
1085 |
1086 |
1087 |
1088 |
1089 |
1090 |
1091 |
1092 |
1093 | Rating
1094 | Star rating components
1095 |
1096 |
1134 |
1135 |
1136 |
1137 |
1138 | Empty State
1139 | Placeholder for empty content areas
1140 |
1141 |
1142 |
1143 |
📭
1144 |
No messages yet
1145 |
When you receive messages, they will appear here.
1146 |
Send a message
1147 |
1148 |
1149 |
1150 |
1151 |
1152 |
1173 |
1174 |
1175 |
1176 | Checkboxes
1177 | Checkbox styles and variants
1178 |
1179 |
1213 |
1214 |
1215 |
1216 |
1217 | Radio Buttons
1218 | Radio button styles
1219 |
1220 |
1244 |
1245 |
1246 |
1247 |
1255 |
1256 |
1257 |
1272 |
1273 |
1274 |
1285 |
1286 |
1287 |
1288 | Containers
1289 | Content containers with various styles and sizes
1290 |
1291 |
1292 |
Basic Containers with Shadows
1293 |
Container with shadow
1294 |
Container-1 with shadow-1 (Purple)
1295 |
Container-2 with shadow-2 (Yellow)
1296 |
Container-3 with shadow-3 (Cyan)
1297 |
1298 |
Sized Containers
1299 |
1300 | Small container (max-width: 540px)
1301 |
1302 |
1303 | Medium container (max-width: 720px)
1304 |
1305 |
1306 | Large container (max-width: 960px)
1307 |
1308 |
1309 |
Card-style Container
1310 |
1311 | This container has card-like styling with a shadow offset, perfect for highlighting content.
1312 |
1313 |
1314 |
Color Variants
1315 |
Primary Container
1316 |
Success Container
1317 |
Warning Container
1318 |
Danger Container
1319 |
Info Container
1320 |
1321 |
Light/Dark Containers
1322 |
Light Container
1323 |
Dark Container
1324 |
1325 |
1326 |
1327 |
1328 |
1329 | Grid System
1330 | Responsive grid layouts
1331 |
1332 |
1333 |
3 Column Grid
1334 |
1335 |
Column 1
1336 |
Column 2
1337 |
Column 3
1338 |
1339 |
1340 |
Bordered Grid
1341 |
1342 |
Item 1
1343 |
Item 2
1344 |
Item 3
1345 |
1346 |
1347 |
Masonry Grid
1348 |
1349 |
Item 1
1350 |
Item 2
1351 |
Item 3
1352 |
Item 4
1353 |
1354 |
1355 |
1356 |
1357 |
1358 |
1359 | Navbar
1360 | Navigation bar components with various styles
1361 |
1362 |
1363 |
Standard Navbar
1364 |
1365 |
1368 |
1369 |
1370 |
1371 |
1372 |
1373 |
1374 |
1375 | Home
1376 | About
1377 | Contact
1378 | Get Started
1379 |
1380 |
1381 |
1382 |
Dark Navbar
1383 |
1384 |
1387 |
1388 | Home
1389 | About
1390 | Action
1391 |
1392 |
1393 |
1394 |
Primary Navbar
1395 |
1396 |
1399 |
1400 | Home
1401 | About
1402 | Action
1403 |
1404 |
1405 |
1406 |
Success Navbar
1407 |
1408 |
1411 |
1412 | Home
1413 | About
1414 | Action
1415 |
1416 |
1417 |
1418 |
Warning Navbar
1419 |
1420 |
1423 |
1424 | Home
1425 | About
1426 | Action
1427 |
1428 |
1429 |
1430 |
Danger Navbar
1431 |
1432 |
1435 |
1436 | Home
1437 | About
1438 | Action
1439 |
1440 |
1441 |
1442 |
Compact Navbar
1443 |
1444 |
1447 |
1448 | Home
1449 | About
1450 |
1451 |
1452 |
1453 |
Note: Use nb-navbar-sticky for sticky positioning, nb-navbar-fixed-top or nb-navbar-fixed-bottom for fixed positioning.
1454 |
1455 |
1456 |
1457 |
1458 |
1459 | Nav Pills
1460 | Pill-style navigation tabs
1461 |
1462 |
1463 |
Standard Pills
1464 |
1470 |
1471 |
Square Pills
1472 |
1477 |
1478 |
Color Variants
1479 |
1485 |
1491 |
1497 |
1503 |
1504 |
Small Pills
1505 |
1510 |
1511 |
Large Pills
1512 |
1516 |
1517 |
Pills with Badge
1518 |
1523 |
1524 |
Justified Pills
1525 |
1530 |
1531 |
Vertical Pills
1532 |
1538 |
1539 |
Scrollable Pills
1540 |
Scroll horizontally to see more pills.
1541 |
1552 |
1553 |
Bordered Pills Container
1554 |
1559 |
1560 |
1561 |
1562 |
1563 |
1582 |
1583 |
1584 |
1585 | Colors
1586 | Color utility classes
1587 |
1588 |
1589 |
Background Colors
1590 |
1591 |
Primary
1592 |
Success
1593 |
Danger
1594 |
Warning
1595 |
Info
1596 |
1597 |
1598 |
Text Colors
1599 |
Primary text color
1600 |
Success text color
1601 |
Danger text color
1602 |
Warning text color
1603 |
Muted text color
1604 |
1605 |
1606 |
1607 |
1608 |
1609 | Dark Mode
1610 | Toggle between light and dark themes
1611 |
1612 |
1613 |
Toggle Dark Mode
1614 |
Click the button to switch between light and dark mode. Your preference is saved automatically.
1615 |
1616 |
1617 |
1618 |
1619 |
1620 | Toast Notifications
1621 | Temporary notification messages
1622 |
1623 |
1624 | Default Toast
1625 | Success Toast
1626 | Danger Toast
1627 | Warning Toast
1628 |
1629 |
1630 |
1631 |
1632 |
1633 | Marquee
1634 | Scrolling text animation
1635 |
1636 |
1637 |
1638 |
Neubrutalism CSS: Minimalist Design • High Contrast • Bold Aesthetics • Clean Typography • Open Source
1639 |
1640 |
1641 |
1642 |
1643 |
1644 |
1645 | Carousel
1646 | Image slider component
1647 |
1648 |
1649 |
1650 |
1651 |
1652 |
1653 |
Slide 1
1654 |
1655 |
1656 |
1657 |
Slide 2
1658 |
1659 |
1660 |
1661 |
Slide 3
1662 |
1663 |
1664 |
1665 |
1666 |
1667 |
1668 |
1669 |
1670 | Newsletter
1671 | Email subscription form
1672 |
1673 |
1674 |
1675 |
1676 |
1679 |
Subscribe
1680 |
Stay updated with our latest news
1681 |
1682 |
1683 | Subscribe
1684 |
1685 |
1686 |
1687 |
1688 |
1689 |
1690 |
1691 |
1692 | Thumbnails & Images
1693 | Image styling utilities
1694 |
1695 |
1696 |
1697 |
1698 |
1699 |
1700 |
1701 |
1702 |
1703 |
1704 |
1705 |
1706 |
1707 |
1708 | Testimonials
1709 | Customer quotes and reviews
1710 |
1711 |
1712 |
1713 |
"Neubrutalism CSS has transformed how I approach web design. The bold, high-contrast aesthetic is exactly what I was looking for!" - Happy Developer
1714 |
1715 |
1716 |
1717 |
1718 |
1719 |
1729 |
1730 |
1758 |
1759 |
1760 |
--------------------------------------------------------------------------------