css
CSS Style Guide
This skill applies Google's CSS style guide conventions to ensure clean, maintainable, and efficient CSS code.
Core Principles
Valid CSS
Use valid CSS code tested with W3C CSS Validator:
- Catches errors early
- Ensures browser compatibility
- Improves maintainability
- Exception: vendor-specific prefixes and required proprietary syntax
Meaningful Class Names
Use functional or generic class names, not presentational:
/* Not recommended: presentational */
.button-green {}
.clear {}
.yee-1901 {} /* meaningless */
/* Recommended: functional */
.gallery {}
.login {}
.video {}
.aux {} /* generic helper */
.alt {} /* generic alternative */
Avoid ID Selectors
IDs have high specificity and reduce reusability:
/* Not recommended */
#example {}
#navigation {}
/* Recommended */
.example {}
.navigation {}
CSS Style Rules
Class Naming Conventions
Use short but meaningful names:
/* Not recommended */
.navigation {}
.atr {}
/* Recommended */
.nav {}
.author {}
Use hyphens as delimiters:
/* Not recommended */
.demoimage {}
.error_status {}
/* Recommended */
.video-id {}
.ads-sample {}
Use prefixes for large projects (optional):
/* For namespacing in large projects */
.adw-help {} /* AdWords */
.maia-note {} /* Maia */
Avoid Type Selectors
Don't qualify class names with type selectors:
/* Not recommended */
ul.example {}
div.error {}
/* Recommended */
.example {}
.error {}
Reason: Performance and flexibility
Shorthand Properties
Use shorthand when possible:
/* Not recommended */
border-top-style: none;
font-family: palatino, georgia, serif;
font-size: 100%;
line-height: 1.6;
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;
/* Recommended */
border-top: 0;
font: 100%/1.6 palatino, georgia, serif;
padding: 0 1em 2em;
Units
Omit units after 0 values:
/* Not recommended */
margin: 0px;
padding: 0em;
/* Recommended */
margin: 0;
padding: 0;
/* Exception: required units */
flex: 0px; /* flex-basis requires unit */
flex: 1 1 0px; /* needed in IE11 */
Include leading 0s:
/* Not recommended */
font-size: .8em;
/* Recommended */
font-size: 0.8em;
Color Values
Use 3-character hex when possible:
/* Not recommended */
color: #eebbcc;
/* Recommended */
color: #ebc;
Use lowercase:
/* Not recommended */
color: #E5E5E5;
/* Recommended */
color: #e5e5e5;
Important Declarations
Avoid !important - use specificity instead:
/* Not recommended */
.example {
font-weight: bold !important;
}
/* Recommended */
.example {
font-weight: bold;
}
/* If override needed, increase specificity */
.container .example {
font-weight: bold;
}
Browser Hacks
Avoid CSS hacks and user agent detection - use progressive enhancement:
/* Not recommended */
.example {
width: 100px\9; /* IE hack */
}
/* Recommended: Use feature queries */
@supports (display: grid) {
.example {
display: grid;
}
}
Formatting Rules
Indentation
Indent by 2 spaces (no tabs):
.example {
color: blue;
}
@media screen, projection {
html {
background: #fff;
color: #444;
}
}
Declaration Order
Alphabetize declarations for consistency (optional):
/* Recommended */
background: fuchsia;
border: 1px solid;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
color: black;
text-align: center;
text-indent: 2em;
Note: Ignore vendor prefixes for sorting, but keep them grouped
Semicolons
Always end declarations with semicolons:
/* Not recommended */
.test {
display: block;
height: 100px
}
/* Recommended */
.test {
display: block;
height: 100px;
}
Property-Value Spacing
Single space after colon, no space before:
/* Not recommended */
h3 {
font-weight:bold;
}
/* Recommended */
h3 {
font-weight: bold;
}
Declaration Block Spacing
Single space before opening brace, same line:
/* Not recommended: missing space */
.video{
margin-top: 1em;
}
/* Not recommended: unnecessary line break */
.video
{
margin-top: 1em;
}
/* Recommended */
.video {
margin-top: 1em;
}
Selector and Declaration Separation
New line for each selector and declaration:
/* Not recommended */
a:focus, a:active {
position: relative; top: 1px;
}
/* Recommended */
h1,
h2,
h3 {
font-weight: normal;
line-height: 1.2;
}
Rule Separation
Blank line between rules:
html {
background: #fff;
}
body {
margin: auto;
width: 50%;
}
Quotation Marks
Use single quotes for attribute selectors and property values:
/* Not recommended */
@import url("https://www.google.com/css/maia.css");
html {
font-family: "open sans", arial, sans-serif;
}
/* Recommended */
@import url(https://www.google.com/css/maia.css);
html {
font-family: 'open sans', arial, sans-serif;
}
/* Exception: @charset requires double quotes */
@charset "utf-8";
Do not quote URLs:
/* Recommended */
background: url(images/bg.png);
Organizing CSS
Section Comments
Group related rules with comments (optional):
/* Header */
.adw-header {}
.adw-header-logo {}
/* Footer */
.adw-footer {}
/* Gallery */
.adw-gallery {}
.adw-gallery-item {}
File Organization
Organize CSS files logically:
/* Base styles */
html,
body {
margin: 0;
padding: 0;
}
/* Typography */
h1, h2, h3 {
font-family: 'Arial', sans-serif;
}
/* Layout */
.container {
max-width: 1200px;
margin: 0 auto;
}
/* Components */
.button {
padding: 10px 20px;
}
/* Utilities */
.hidden {
display: none;
}
Best Practices
Specificity Management
Keep specificity low for easier overrides:
/* Not recommended: too specific */
html body div.container ul.nav li.item a.link {}
/* Recommended */
.nav-link {}
Avoid Over-nesting
/* Not recommended */
.header .nav .menu .item .link {
color: blue;
}
/* Recommended */
.nav-link {
color: blue;
}
Mobile-First Media Queries
/* Base styles for mobile */
.container {
width: 100%;
}
/* Progressively enhance for larger screens */
@media (min-width: 768px) {
.container {
width: 750px;
}
}
@media (min-width: 1024px) {
.container {
width: 960px;
}
}
Reusable Classes
Create utility classes for common patterns:
/* Layout utilities */
.flex {
display: flex;
}
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
/* Spacing utilities */
.mt-1 { margin-top: 0.5rem; }
.mt-2 { margin-top: 1rem; }
.mt-3 { margin-top: 1.5rem; }
Quick Reference
| Rule | Convention |
|---|---|
| Indentation | 2 spaces |
| Case | Lowercase |
| Quotes | Single (') except @charset |
| Semicolons | Required after every declaration |
| Units | Omit after 0 |
| Leading zeros | Always include (0.8em) |
| Hex colors | 3-char when possible, lowercase |
| ID selectors | Avoid |
| Type selectors | Don't qualify classes |
!important |
Avoid |
| Property order | Alphabetical (optional) |
| Line breaks | New line per selector/declaration |
| Rule separation | Blank line between rules |
| Comments | Section comments for organization |
Common Patterns
Button Component
.button {
background-color: #007bff;
border: 0;
border-radius: 4px;
color: #fff;
cursor: pointer;
display: inline-block;
font-size: 1rem;
padding: 0.5rem 1rem;
text-align: center;
text-decoration: none;
}
.button:hover {
background-color: #0056b3;
}
.button-secondary {
background-color: #6c757d;
}
.button-large {
font-size: 1.25rem;
padding: 0.75rem 1.5rem;
}
Card Component
.card {
background: #fff;
border: 1px solid #ddd;
border-radius: 8px;
padding: 1.5rem;
}
.card-header {
border-bottom: 1px solid #ddd;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
}
.card-title {
font-size: 1.5rem;
margin: 0;
}
.card-body {
line-height: 1.6;
}
Grid System
.grid {
display: grid;
gap: 1rem;
grid-template-columns: repeat(12, 1fr);
}
.col-4 {
grid-column: span 4;
}
.col-6 {
grid-column: span 6;
}
.col-12 {
grid-column: span 12;
}
Additional Resources
references/css-detailed.md- Advanced CSS patterns, methodologies, and best practices- W3C CSS Validator
- Google HTML/CSS Style Guide
Summary
Write CSS that is:
- Valid: Passes W3C validation
- Semantic: Meaningful class names
- Maintainable: Low specificity, avoid IDs
- Consistent: Follow formatting rules
- Efficient: Use shorthand, avoid repetition
- Readable: Proper spacing and organization
- Lowercase: All selectors and properties
- Quoted: Single quotes (except
@charset)