Flat Design
Clean, two-dimensional interfaces that prioritize clarity and usability over decorative effects.
Core Principles
1. Two-Dimensional Elements
No shadows, gradients, or textures that create artificial depth. Everything exists on a single plane.
2. Bright, Saturated Colors
Bold color choices that pop against simple backgrounds.
3. Simple Typography
Clean sans-serif fonts with clear hierarchy.
4. Minimal Visual Effects
No bevels, embossing, drop shadows, or glossy effects.
5. Clear Iconography
Simple, geometric icons that communicate function directly.
Visual Characteristics
Color Palette
/* Flat design colors - bold and saturated */
:root {
--turquoise: #1abc9c;
--green-sea: #16a085;
--emerald: #2ecc71;
--nephritis: #27ae60;
--peter-river: #3498db;
--belize-hole: #2980b9;
--amethyst: #9b59b6;
--wisteria: #8e44ad;
--wet-asphalt: #34495e;
--midnight-blue: #2c3e50;
--sun-flower: #f1c40f;
--orange: #f39c12;
--carrot: #e67e22;
--pumpkin: #d35400;
--alizarin: #e74c3c;
--pomegranate: #c0392b;
--clouds: #ecf0f1;
--silver: #bdc3c7;
--concrete: #95a5a6;
--asbestos: #7f8c8d;
}
Typography
/* Clean, geometric sans-serifs */
body {
font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
font-weight: 400;
line-height: 1.6;
}
h1, h2, h3 {
font-family: 'Montserrat', 'Helvetica Neue', Arial, sans-serif;
font-weight: 700;
line-height: 1.2;
}
Buttons
.flat-button {
padding: 12px 24px;
background: #3498db;
color: white;
border: none;
border-radius: 4px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: background 0.3s ease;
}
.flat-button:hover {
background: #2980b9; /* Slightly darker */
}
.flat-button:active {
background: #2574a9; /* Even darker for press */
}
/* No shadows, just color changes */
Implementation Examples
Flat UI Card
<div class="flat-card">
<div class="flat-card-image">
<img src="product.jpg" alt="Product">
</div>
<div class="flat-card-content">
<h3>Product Title</h3>
<p>Simple description of the product that gets straight to the point.</p>
<button class="flat-button">Add to Cart</button>
</div>
</div>
.flat-card {
background: white;
border-radius: 8px;
overflow: hidden;
/* No shadow - pure flat */
}
.flat-card-image img {
width: 100%;
display: block;
}
.flat-card-content {
padding: 20px;
}
.flat-card h3 {
margin: 0 0 12px 0;
color: #2c3e50;
font-size: 1.5rem;
}
.flat-card p {
margin: 0 0 20px 0;
color: #7f8c8d;
line-height: 1.6;
}
Flat Navigation
<nav class="flat-nav">
<div class="logo">Brand</div>
<ul class="nav-menu">
<li><a href="#home" class="active">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
.flat-nav {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 40px;
background: #2c3e50;
}
.logo {
color: white;
font-size: 1.5rem;
font-weight: 700;
}
.nav-menu {
display: flex;
gap: 30px;
list-style: none;
margin: 0;
padding: 0;
}
.nav-menu a {
color: #ecf0f1;
text-decoration: none;
padding: 8px 16px;
border-radius: 4px;
transition: background 0.3s;
}
.nav-menu a:hover,
.nav-menu a.active {
background: #34495e;
color: white;
}
Flat Hero Section
<section class="flat-hero">
<div class="hero-content">
<h1>Welcome to Flat Design</h1>
<p>Clean, simple, and effective interfaces that users love</p>
<button class="flat-button large">Get Started</button>
</div>
<div class="hero-visual">
<div class="shape shape-1"></div>
<div class="shape shape-2"></div>
<div class="shape shape-3"></div>
</div>
</section>
.flat-hero {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
padding: 80px 40px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
.hero-content h1 {
font-size: 3rem;
margin-bottom: 20px;
line-height: 1.2;
}
.hero-content p {
font-size: 1.25rem;
margin-bottom: 30px;
opacity: 0.9;
}
.hero-visual {
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.shape {
position: absolute;
border-radius: 20px;
}
.shape-1 {
width: 200px;
height: 200px;
background: rgba(255, 255, 255, 0.1);
transform: rotate(45deg);
}
.shape-2 {
width: 150px;
height: 150px;
background: rgba(255, 255, 255, 0.15);
transform: rotate(-15deg) translateX(-60px);
}
.shape-3 {
width: 100px;
height: 100px;
background: rgba(255, 255, 255, 0.2);
transform: rotate(30deg) translateX(80px);
}
Flat Icons
<div class="icon-grid">
<div class="icon-item">
<div class="icon" style="background: #e74c3c;">
<svg><!-- Heart icon --></svg>
</div>
<p>Favorites</p>
</div>
<div class="icon-item">
<div class="icon" style="background: #3498db;">
<svg><!-- Star icon --></svg>
</div>
<p>Featured</p>
</div>
<div class="icon-item">
<div class="icon" style="background: #2ecc71;">
<svg><!-- Check icon --></svg>
</div>
<p>Completed</p>
</div>
</div>
.icon-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 30px;
}
.icon-item {
text-align: center;
}
.icon {
width: 80px;
height: 80px;
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 15px;
transition: transform 0.2s;
}
.icon:hover {
transform: translateY(-4px);
}
.icon svg {
width: 40px;
height: 40px;
fill: white;
}
.icon-item p {
color: #2c3e50;
font-weight: 600;
}
When to Use Flat Design
Perfect For
- Mobile apps: Clear, touch-friendly interfaces
- Dashboards: Information-dense layouts
- SaaS products: Professional, modern feel
- E-commerce: Product-focused design
- Content platforms: Readable, accessible
Real-World Examples
- Windows 8/10: Microsoft's Metro design
- iOS 7+: Apple's shift from skeuomorphism
- Google (pre-Material): Early flat implementations
- Duolingo: Playful, colorful flat design
Pros and Cons
Advantages
- ✅ Clean, modern appearance
- ✅ Fast loading (fewer assets)
- ✅ Easy to scale (responsive-friendly)
- ✅ Accessible when done right
- ✅ Clear visual hierarchy
- ✅ Works well with bold colors
- ✅ Easy to maintain and update
Disadvantages
- ❌ Can lack visual interest
- ❌ Affordance issues (what's clickable?)
- ❌ Everything looks similar
- ❌ Can be too stark
- ❌ Relies heavily on color for meaning
Common Mistakes
1. No Affordance Cues
Wrong: Everything looks the same and users don't know what's clickable.
/* Wrong - button looks like text */
.bad-button {
background: none;
color: #3498db;
border: none;
}
Right: Clear visual distinction for interactive elements.
/* Right - obviously a button */
.good-button {
background: #3498db;
color: white;
padding: 12px 24px;
border-radius: 4px;
border: none;
}
.good-button:hover {
background: #2980b9;
cursor: pointer;
}
2. Overusing Bright Colors
Wrong: Every element is a different saturated color, creating visual chaos.
Right: Use bright colors strategically for emphasis.
/* Right - balanced color use */
:root {
--primary: #3498db; /* Main actions */
--secondary: #95a5a6; /* Less important */
--success: #2ecc71; /* Positive actions */
--danger: #e74c3c; /* Destructive actions */
--neutral: #ecf0f1; /* Backgrounds */
}
3. Insufficient Contrast
Wrong: Light gray on white because "it's cleaner."
Right: Meet accessibility standards.
/* Wrong */
color: #e0e0e0;
background: #ffffff;
/* Right */
color: #7f8c8d;
background: #ffffff;
4. Ignoring Hierarchy
Wrong: Same font size and weight everywhere.
Right: Clear type scale.
h1 { font-size: 2.5rem; font-weight: 700; }
h2 { font-size: 2rem; font-weight: 700; }
h3 { font-size: 1.5rem; font-weight: 600; }
p { font-size: 1rem; font-weight: 400; }
Flat Design Evolution
Flat 1.0 (2012-2014)
- Pure 2D, no depth at all
- Extremely minimal
- Sometimes too stark
Almost Flat / Flat 2.0 (2014-2016)
- Subtle shadows for depth
- Long shadows became popular
- Slight gradients acceptable
/* Almost flat - subtle shadow */
.almost-flat-card {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* Very subtle, not skeuomorphic */
}
Modern Flat (2016-Present)
- Incorporates subtle depth strategically
- Merges with Material Design principles
- Uses color and motion for feedback
Button Variations
/* Primary action */
.btn-primary {
background: #3498db;
color: white;
border: none;
padding: 12px 24px;
border-radius: 4px;
font-weight: 600;
}
/* Secondary action */
.btn-secondary {
background: transparent;
color: #3498db;
border: 2px solid #3498db;
padding: 10px 22px;
border-radius: 4px;
font-weight: 600;
}
/* Success */
.btn-success {
background: #2ecc71;
color: white;
}
/* Danger */
.btn-danger {
background: #e74c3c;
color: white;
}
/* Ghost button */
.btn-ghost {
background: transparent;
color: #2c3e50;
border: 2px solid #2c3e50;
}
Form Design
<form class="flat-form">
<div class="form-group">
<label for="name">Full Name</label>
<input type="text" id="name" placeholder="John Doe">
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email" placeholder="john@example.com">
</div>
<button type="submit" class="flat-button">Submit</button>
</form>
.flat-form {
max-width: 500px;
}
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
margin-bottom: 8px;
color: #2c3e50;
font-weight: 600;
}
.form-group input {
width: 100%;
padding: 12px 16px;
border: 2px solid #bdc3c7;
border-radius: 4px;
font-size: 1rem;
transition: border-color 0.3s;
}
.form-group input:focus {
outline: none;
border-color: #3498db;
}
.form-group input::placeholder {
color: #95a5a6;
}
Color Combinations
Professional
--primary: #2c3e50; /* Dark blue-gray */
--accent: #3498db; /* Bright blue */
--background: #ecf0f1; /* Light gray */
Energetic
--primary: #e74c3c; /* Red */
--secondary: #f39c12; /* Orange */
--accent: #f1c40f; /* Yellow */
Fresh
--primary: #1abc9c; /* Turquoise */
--secondary: #2ecc71; /* Green */
--background: #ecf0f1; /* Light gray */
Elegant
--primary: #9b59b6; /* Purple */
--secondary: #3498db; /* Blue */
--neutral: #34495e; /* Dark gray */
Responsive Flat Design
/* Mobile-first approach */
.flat-grid {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
padding: 20px;
}
@media (min-width: 768px) {
.flat-grid {
grid-template-columns: repeat(2, 1fr);
gap: 30px;
padding: 40px;
}
}
@media (min-width: 1024px) {
.flat-grid {
grid-template-columns: repeat(3, 1fr);
gap: 40px;
}
}
Animation in Flat Design
/* Simple, purposeful animations */
.flat-element {
transition: all 0.3s ease;
}
.flat-element:hover {
transform: translateY(-4px);
}
/* Loading spinner */
@keyframes spin {
to { transform: rotate(360deg); }
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid #ecf0f1;
border-top-color: #3498db;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
Checklist for Flat Design
- [ ] No 3D effects, shadows, or textures
- [ ] Bold, saturated colors used strategically
- [ ] Clean sans-serif typography
- [ ] Simple, geometric iconography
- [ ] Clear visual hierarchy
- [ ] Interactive elements are obviously clickable
- [ ] Meets accessibility contrast standards
- [ ] Responsive across devices
- [ ] Purposeful animations (not decorative)
- [ ] Consistent spacing and alignment
Resources
Design Systems
- Flat UI: designmodo.github.io/Flat-UI
- Semantic UI: Classic flat framework
- Bootstrap 4+: Modern flat implementation
Color Palettes
Icon Sets
- Feather Icons: Simple, consistent line icons
- Ionicons: Flat, outlined icons
- Font Awesome: Wide variety of flat icons