# HTML & CSS Style Guide Web standards for semantic markup, maintainable styling, and accessibility. ## Semantic HTML ### Document Structure ```html Page Title | Site Name
``` ### Semantic Elements ```html

Article Title

Article content...

Features

Section content...

Sales data showing 20% growth
Q4 2024 Sales Performance
HTML
HyperText Markup Language
CSS
Cascading Style Sheets
``` ### Form Elements ```html
We'll never share your email.
Preferred Contact Method
``` ## BEM Naming Convention ### Block, Element, Modifier ```css /* Block: Standalone component */ .card { } /* Element: Part of block (double underscore) */ .card__header { } .card__body { } .card__footer { } /* Modifier: Variation (double hyphen) */ .card--featured { } .card--compact { } .card__header--centered { } ``` ### BEM Examples ```html ``` ### BEM Best Practices ```css /* Avoid deep nesting */ /* Bad */ .card__header__title__icon { } /* Good - flatten structure */ .card__title-icon { } /* Avoid styling elements without class */ /* Bad */ .card h2 { } /* Good */ .card__title { } /* Modifiers extend base styles */ .button { padding: 8px 16px; border-radius: 4px; } .button--large { padding: 12px 24px; } .button--primary { background: blue; color: white; } ``` ## Accessibility ### ARIA Attributes ```html
Status updates appear here
About ``` ### Keyboard Navigation ```html
Custom button
``` ### Screen Reader Support ```css /* Visually hidden but accessible */ .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* Hide from screen readers */ [aria-hidden="true"] { /* Decorative content */ } ``` ```html Sales increased 20% in Q4 2024
User registration process
Step 1: Enter email. Step 2: Verify email. Step 3: Create password.
``` ## Responsive Design ### Mobile-First Approach ```css /* Base styles for mobile */ .container { padding: 16px; } .grid { display: grid; gap: 16px; grid-template-columns: 1fr; } /* Tablet and up */ @media (min-width: 768px) { .container { padding: 24px; } .grid { grid-template-columns: repeat(2, 1fr); } } /* Desktop and up */ @media (min-width: 1024px) { .container { padding: 32px; max-width: 1200px; margin: 0 auto; } .grid { grid-template-columns: repeat(3, 1fr); } } ``` ### Flexible Units ```css /* Use relative units */ body { font-size: 16px; /* Base size */ } h1 { font-size: 2rem; /* Relative to root */ margin-bottom: 1em; /* Relative to element */ } .container { max-width: 75ch; /* Character width for readability */ padding: 1rem; } /* Fluid typography */ h1 { font-size: clamp(1.5rem, 4vw, 3rem); } /* Fluid spacing */ .section { padding: clamp(2rem, 5vw, 4rem); } ``` ### Responsive Images ```html Description Hero image ``` ## CSS Best Practices ### Custom Properties (CSS Variables) ```css :root { /* Colors */ --color-primary: #0066cc; --color-primary-dark: #004c99; --color-secondary: #6c757d; --color-success: #28a745; --color-error: #dc3545; /* Typography */ --font-family-base: system-ui, sans-serif; --font-family-mono: ui-monospace, monospace; --font-size-sm: 0.875rem; --font-size-base: 1rem; --font-size-lg: 1.25rem; /* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; /* Borders */ --border-radius: 4px; --border-color: #dee2e6; /* Shadows */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.1); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); } /* Dark mode */ @media (prefers-color-scheme: dark) { :root { --color-primary: #4da6ff; --color-background: #1a1a1a; --color-text: #ffffff; } } /* Usage */ .button { background: var(--color-primary); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--border-radius); } ``` ### Modern Layout ```css /* Flexbox for 1D layouts */ .navbar { display: flex; justify-content: space-between; align-items: center; gap: var(--spacing-md); } /* Grid for 2D layouts */ .page-layout { display: grid; grid-template-areas: "header header" "sidebar main" "footer footer"; grid-template-columns: 250px 1fr; grid-template-rows: auto 1fr auto; min-height: 100vh; } .header { grid-area: header; } .sidebar { grid-area: sidebar; } .main { grid-area: main; } .footer { grid-area: footer; } /* Auto-fit grid */ .card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--spacing-lg); } ``` ### Performance ```css /* Avoid expensive properties in animations */ /* Bad - triggers layout */ .animate-bad { animation: move 1s; } @keyframes move { to { left: 100px; top: 100px; } } /* Good - uses transform */ .animate-good { animation: move-optimized 1s; } @keyframes move-optimized { to { transform: translate(100px, 100px); } } /* Use will-change sparingly */ .will-animate { will-change: transform; } /* Contain for layout isolation */ .card { contain: layout style; } /* Content-visibility for off-screen content */ .below-fold { content-visibility: auto; contain-intrinsic-size: 500px; } ``` ## HTML Best Practices ### Validation and Attributes ```html ``` ### Performance Attributes ```html Description ``` ### Microdata and SEO ```html

Article Title

Article content...
```