selectors { style-property : value; ... }
example: body { padding:5%; background-color: #ddd; }
htmltags: body, div, span, img, ... custom-tags: nav-keys, spacer-10, ... .classnames: .indent, .undent, .photo, ... #idnames: #placeHolder, #mastheadPhoto, ... psuedo-classes: a:link, a:hover, ... psuedo-elements: p::first-letter, p::first-line, ... attributes: [attr], [attr=value], ...
s1, s2, ... applied to s1 and s2 and ... s1 s2 applied to s2 if it has s1 ancestor s1 > s2 applied to s2 if it has s1 parent s1 + s2 applied to s2 if it has adjacent sibling s1 s1 ~ s2 applied to s2 if it has sibling s1
ol, ul { margin-top:10px; margin-bottom: 10px; } // all ordered and unordered lists
div li { background-color: #dddddd; } // all list items with div ancestor
div.indent > p { color: #333333; } // all paragraphs that are children
// of div with class indent
t-b {
display: block;
max-width: 60ch;
margin-bottom: 0.75rem;
}
| Group | Property / Context | Predefined CSS Keywords (aka “built-in styles”) |
|---|---|---|
| Global values (work on almost all properties) | ||
| Global | (any property) | inherit, initial, unset, revert, revert-layer |
| Layout: display & positioning | ||
| Display | display | none, contents, block, inline, inline-block, list-item, flow-root, table, inline-table, table-row, table-cell, flex, inline-flex, grid, inline-grid, ruby |
| Positioning | position | static, relative, absolute, fixed, sticky |
| Overflow | overflow | visible, hidden, clip, scroll, auto |
| Visibility | visibility | visible, hidden, collapse |
| Box sizing | box-sizing | content-box, border-box |
| Borders, outlines & text decoration | ||
| Border/Outline style | border-style, outline-style | none, hidden, dotted, dashed, solid, double, groove, ridge, inset, outset |
| Text decoration style | text-decoration-style | solid, double, dotted, dashed, wavy |
| Text decoration line | text-decoration-line | none, underline, overline, line-through |
| Backgrounds & images | ||
| Background repeat | background-repeat | repeat, repeat-x, repeat-y, no-repeat, space, round |
| Background attachment | background-attachment | scroll, fixed, local |
| Background size | background-size | auto, cover, contain |
| Object fit | object-fit | fill, contain, cover, none, scale-down |
| Typography | ||
| Generic families | font-family | serif, sans-serif, monospace, cursive, fantasy, system-ui, ui-serif, ui-sans-serif, ui-monospace, ui-rounded, emoji, math, fangsong |
| Font style | font-style | normal, italic, oblique (oblique <angle> optional) |
| Font weight | font-weight | normal (400), bold (700), lighter, bolder, 100–900 |
| Font stretch | font-stretch | ultra-condensed, extra-condensed, condensed, semi-condensed, normal, semi-expanded, expanded, extra-expanded, ultra-expanded |
| Font kerning | font-kerning | auto, normal, none |
| Text transform | text-transform | none, capitalize, uppercase, lowercase, full-width, full-size-kana |
| Text align | text-align | start, end, left, right, center, justify, match-parent |
| White space | white-space | normal, nowrap, pre, pre-wrap, pre-line, break-spaces |
| Word break | word-break | normal, break-all, keep-all, break-word (legacy alias) |
| Hyphens | hyphens | none, manual, auto |
| Text overflow | text-overflow | clip, ellipsis |
| Lists | ||
| List style type | list-style-type | none, disc, circle, square, decimal, lower-roman, upper-roman, lower-alpha, upper-alpha (and many others) |
| List position | list-style-position | inside, outside |
| Floats & clears | ||
| Float | float | inline-start, inline-end, left, right, none |
| Clear | clear | inline-start, inline-end, left, right, both, none |
| Writing modes | ||
| Writing mode | writing-mode | horizontal-tb, vertical-rl, vertical-lr |
| Text direction | direction | ltr, rtl |
| Text orientation | text-orientation | mixed, upright, sideways |
| Table layout | ||
| Border collapse | border-collapse | separate, collapse |
| Table layout | table-layout | auto, fixed |
| Empty cells | empty-cells | show, hide |
| Effects & misc | ||
| Pointer events | pointer-events (HTML content) | auto, none |
| Image rendering | image-rendering | auto, crisp-edges, pixelated |
| Mix blend mode | mix-blend-mode | normal, multiply, screen, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, hue, saturation, color, luminosity |
| Filter | filter (keyword) | none (otherwise uses functions like blur(), grayscale()) |
| Caret color | caret-color | auto (or any color) |
| Resize | resize | none, both, horizontal, vertical, block, inline |
| Outline width | outline-width | thin, medium, thick |
| Cursor | cursor (common) | auto, default, pointer, text, move, wait, crosshair, not-allowed, help, progress … |
| Name | Description | Example |
|---|---|---|
| Universal (*) | Selects all elements | * { margin:0; } |
| Type (element) | Selects all instances of an element | p { color:blue; } |
| Class (.class) | Selects elements with a given class | .note { font-style:italic; } |
| ID (#id) | Selects a single element with the given ID | #header { background:gray; } |
| [attr] | Elements with the given attribute | [title] { border:1px solid; } |
| [attr=value] | Elements where attr equals value | input[type="text"] { width:200px; } |
| [attr^=value] | Attr value starts with given string | a[href^="https"] { color:green; } |
| [attr$=value] | Attr value ends with given string | a[href$=".pdf"] { color:red; } |
| [attr*=value] | Attr value contains given substring | [class*="warning"] { color:orange; } |
| Descendant (A B) | Selects B inside A (any level) | div p { line-height:1.5; } |
| Child (A > B) | Selects B if it is a direct child of A | ul > li { list-style:none; } |
| Adjacent sibling (A + B) | Selects B if immediately after A | h1 + p { font-size:1.2em; } |
| General sibling (A ~ B) | Selects B if preceded by A (not necessarily adjacent) | h1 ~ p { color:gray; } |
| :hover | Element under mouse pointer | a:hover { text-decoration:underline; } |
| :first-child | First child of its parent | p:first-child { font-weight:bold; } |
| :last-child | Last child of its parent | p:last-child { color:blue; } |
| :nth-child(n) | nth child of its parent (pattern) | li:nth-child(2n) { background:#eee; } |
| :not(selector) | Excludes elements matching selector | p:not(.note) { color:black; } |
| :checked | Checked form elements (radio, checkbox) | input:checked { outline:2px solid blue; } |
| ::before | Content inserted before element’s content | p::before { content:"→ "; } |
| ::after | Content inserted after element’s content | p::after { content:" ★"; } |
| ::first-line | Styles only the first line of text | p::first-line { font-weight:bold; } |
| ::first-letter | Styles only the first letter | p::first-letter { font-size:2em; } |
| ::selection | Styles text selected by user | ::selection { background:yellow; } |
| Rule | Description | Example |
|---|---|---|
| Importance |
Declarations marked with !important override all other rules (except inline styles also marked !important).
Should be used sparingly.
|
p { color:blue !important; } |
| Origin |
Styles come from different origins:
|
body { margin:0; } overrides browser’s default margin. |
| Specificity |
Each selector has a "weight":
|
#id { } beats .class { }
div.note { } beats div { }
|
| Source Order | If selectors have the same specificity and importance, the **later rule in the CSS file wins**. |
p { color:red; }
p { color:blue; }
→ Paragraph text is blue
|
| Cascade | The overall process combining all the above (importance → origin → specificity → order) to decide the final style applied. | Think: "last resort tiebreaker is order" |
| Inheritance |
Some properties (like font, color) are inherited from parent to child by default.
Others (like margin, border) are not.
|
body { color:green; } → all child text is green unless overridden |
| Kind | Member (signature) | Returns / Type | Notes / Small example |
|---|---|---|---|
| Element property | |||
| Property | element.classList |
DOMTokenList |
Tokenized view of the element’s class attribute. |
DOMTokenList methods (used via element.classList) | |||
| Method | add(...tokens) |
void |
el.classList.add('active','wide') |
| Method | remove(...tokens) |
void |
el.classList.remove('hidden','wide') |
| Method | toggle(token[, force]) |
boolean |
Returns true if present after call. el.classList.toggle('open', true) |
| Method | replace(oldToken, newToken) |
boolean |
el.classList.replace('old','new') |
| Method | contains(token) |
boolean |
el.classList.contains('active') |
| Method | item(index) |
string | null |
el.classList.item(0) → first class or null |
| Method | forEach(callback[, thisArg]) |
void |
el.classList.forEach(c => console.log(c)) |
| Method | entries() |
Iterator<[index, token]> |
for (const [i,t] of el.classList.entries()) {...} |
| Method | keys() |
Iterator<index> |
[...el.classList.keys()] |
| Method | values() |
Iterator<token> |
[...el.classList.values()] |
| Method | toString() |
string |
Space-separated classes. el.classList.toString() |
| Method* | supports(token) |
boolean |
*Only applies to token lists with defined supported tokens (e.g., link.relList), not typical classList. |
| DOMTokenList properties | |||
| Property | length |
number |
Count of tokens. el.classList.length |
| Property | value |
string |
Get/set space-separated value. el.classList.value = 'a b c' |
| Unit | Category | Description / Example |
|---|---|---|
| px | Absolute length | Pixels (CSS reference pixels). Example: width:200px; |
| cm, mm, in | Absolute length | Centimeters, millimeters, inches. Example: margin:1in; |
| pt, pc | Absolute length | Points (1/72 inch), picas (12pt = 1pc). Example: font-size:12pt; |
| em | Relative length | Relative to element font size. Example: padding:2em; |
| rem | Relative length | Relative to root element font size. Example: font-size:1.5rem; |
| ex | Relative length | Height of lowercase “x”. Example: line-height:2ex; |
| ch | Relative length | Width of “0” glyph. Example: width:40ch; |
| vw, vh | Relative to viewport | 1% of viewport width/height. Example: height:100vh; |
| vmin, vmax | Relative to viewport | 1% of smaller/larger viewport dimension. Example: font-size:5vmin; |
| % | Relative | Relative to parent property context. Example: width:50%; |
| deg | Angle | Degrees. Example: transform:rotate(45deg); |
| rad | Angle | Radians (2π = full circle). Example: rotate(1.57rad); |
| grad | Angle | Gradians (400 = full circle). Example: rotate(100grad); |
| turn | Angle | Turns (1 = full circle). Example: rotate(.5turn); |
| s, ms | Time | Seconds / milliseconds. Example: transition:all 300ms; |
| dpi, dpcm, dppx | Resolution | Dots per inch, centimeter, or CSS pixel. Example: @media (min-resolution:2dppx) |
| calc() | Functional | Performs math. Example: width:calc(100% - 2rem); |
| min(), max(), clamp() | Functional | Choose or constrain values. Example: font-size:clamp(1rem, 2vw, 2rem); |
| dvh, dvw | Relative to dynamic viewport |
1% of the current viewport height/width.
Adjusts automatically as browser UI appears/disappears.
Example: main { min-height:100dvh; }
|
| lvh, lvw | Relative to large viewport |
1% of the largest possible viewport height/width.
Ignores dynamic UI like mobile address bars (represents max available space).
Example: header { height:100lvh; }
|
| svh, svw | Relative to small viewport |
1% of the smallest possible viewport height/width.
Includes any space taken by dynamic UI (represents min available space).
Example: aside { height:100svh; }
|
| dvmin, dvmax | Relative to dynamic viewport |
1% of the smaller/larger of dvh and dvw.
Useful for responsive scaling.
Example: section { font-size:5dvmin; }
|
| Font Family | Sample Text |
|---|---|
| Roboto | These are fonts from the googleapis --- 0123456789 |
| Open Sans | These are fonts from the googleapis --- 0123456789 |
| Lato | These are fonts from the googleapis --- 0123456789 |
| Montserrat | These are fonts from the googleapis --- 0123456789 |
| Inter | These are fonts from the googleapis --- 0123456789 |
| Source Sans Pro | These are fonts from the googleapis --- 0123456789 |
| Varela Round | These are fonts from the googleapis --- 0123456789 |
| Nunito | These are fonts from the googleapis --- 0123456789 |
| Poppins | These are fonts from the googleapis --- 0123456789 |
| Rubik | These are fonts from the googleapis --- 0123456789 |
| Work Sans | These are fonts from the googleapis --- 0123456789 |
| Barlow | These are fonts from the googleapis --- 0123456789 |
| Oswald | These are fonts from the googleapis --- 0123456789 |
| Anek Devanagari | These are fonts from the googleapis --- 0123456789 |
| Noto Sans | These are fonts from the googleapis --- 0123456789 |
| Playfair Display | These are fonts from the googleapis --- 0123456789 |
| Source Serif Pro | These are fonts from the googleapis --- 0123456789 |
| Alegreya | These are fonts from the googleapis --- 0123456789 |
| Merriweather | These are fonts from the googleapis --- 0123456789 |
| Bitter | These are fonts from the googleapis --- 0123456789 |
| Font Name | Sample |
|---|---|
| Windows 11 | |
| Segoe UI Variable | system fonts --- 0123456789 |
| Segoe UI | system fonts --- 0123456789 |
| Calibri | system fonts --- 0123456789 |
| Cambria | system fonts --- 0123456789 |
| Georgia | system fonts --- 0123456789 |
| Arial | system fonts --- 0123456789 |
| Verdana | system fonts --- 0123456789 |
| Tahoma | system fonts --- 0123456789 |
| Trebuchet MS | system fonts --- 0123456789 |
| Consolas (mono) | system fonts --- 0123456789 |
| Courier New (mono) | system fonts --- 0123456789 |
| macOS | |
| -apple-system (San Francisco) | system fonts --- 0123456789 |
| Helvetica Neue | system fonts --- 0123456789 |
| Helvetica | system fonts --- 0123456789 |
| Arial | system fonts --- 0123456789 |
| Avenir | system fonts --- 0123456789 |
| Georgia | system fonts --- 0123456789 |
| Times | system fonts --- 0123456789 |
| Menlo (mono) | system fonts --- 0123456789 |
| Monaco (mono) | system fonts --- 0123456789 |
| Ubuntu Linux | |
| Ubuntu | system fonts --- 0123456789 |
| Ubuntu Condensed | system fonts --- 0123456789 |
| Ubuntu Mono (mono) | system fonts --- 0123456789 |
| DejaVu Sans | system fonts --- 0123456789 |
| DejaVu Serif | system fonts --- 0123456789 |
| DejaVu Sans Mono (mono) | system fonts --- 0123456789 |
| Noto Sans | system fonts --- 0123456789 |
| Noto Serif | system fonts --- 0123456789 |
| Cantarell | system fonts --- 0123456789 |
| Generic Family | Sample |
|---|---|
| system-ui | generic fallback fonts --- 0123456789 |
| ui-sans-serif | generic fallback fonts --- 0123456789 |
| ui-serif | generic fallback fonts --- 0123456789 |
| ui-monospace | generic fallback fonts --- 0123456789 |
| ui-rounded | generic fallback fonts --- 0123456789 |
| sans-serif | generic fallback fonts --- 0123456789 |
| serif | generic fallback fonts --- 0123456789 |
| monospace | generic fallback fonts --- 0123456789 |
| cursive | generic fallback fonts --- 0123456789 |
| fantasy | generic fallback fonts --- 0123456789 |
| emoji | generic fallback fonts --- 0123456789 |
| math | generic fallback fonts --- 0123456789 |
| fangsong | generic fallback fonts --- 0123456789 |
| Property / Concept | Applies to | Purpose / Common Values | Small Example |
|---|---|---|---|
| display | Container | Enable flex formatting context. Values: flex, inline-flex. |
.row { display:flex; } |
| Main / Cross Axis | Concept | Main axis follows flex-direction; cross axis is perpendicular. |
row → main=x, cross=y |
| flex-direction | Container | Direction of main axis: row | row-reverse | column | column-reverse. |
.row { flex-direction:row; } |
| flex-wrap | Container | Wrap items: nowrap | wrap | wrap-reverse. |
.row { flex-wrap:wrap; } |
| flex-flow | Container | Shorthand for direction + wrap. <flex-direction> <flex-wrap>. |
.row { flex-flow:row wrap; } |
| justify-content | Container | Distribute along main axis: flex-start | center | flex-end | space-between | space-around | space-evenly. |
.row { justify-content:space-between; } |
| align-items | Container | Align items on cross axis: stretch | flex-start | center | flex-end | baseline. |
.row { align-items:center; } |
| align-content | Container (multi-line) | Align lines on cross axis when wrapping: same values as justify-content. |
.row { align-content:space-around; } |
| gap / row-gap / column-gap | Container | Spacing between items/lines; no side margins needed. | .row { gap:.75rem; } |
| order | Item | Controls visual order (default 0). Lower shows first. | .item:first-child { order:2; } |
| flex-grow | Item | Share remaining space along main axis (ratio). 0 = don’t grow. |
.item { flex-grow:1; } |
| flex-shrink | Item | Shrink when overflowing (ratio). 0 = don’t shrink. |
.item { flex-shrink:0; } |
| flex-basis | Item | Initial main-size before grow/shrink. Common: auto, 0, lengths (e.g., 12rem, 30%). |
.card { flex-basis:16rem; } |
| flex | Item | Shorthand: flex: <grow> <shrink> <basis>. Handy presets:• flex:1 → 1 1 0• flex:auto → 1 1 auto• flex:none → 0 0 auto
|
.fill { flex:1 1 0; } |
| align-self | Item | Override align-items per item: auto | flex-start | center | flex-end | stretch | baseline. |
.logo { align-self:flex-end; } |
| Equal columns | Recipe | Make children share width equally. | .row{display:flex}.row>*{flex:1 1 0} |
| Fixed + fluid | Recipe | Sidebar fixed, content fills remaining. | .side{flex:0 0 12rem}.main{flex:1 1 0} |
| Center box | Recipe | Center one item both axes. | .center{display:flex;justify-content:center;align-items:center} |
| Right-align last | Recipe | Push trailing item to the end. | .row{display:flex}.last{margin-left:auto} |
| Min-size traps | Tip | Items can refuse to shrink due to min-content. Use min-width:0 (row) or min-height:0 (column) on items or parents. |
.item{min-width:0} |
| Overflow scrolling | Tip | For scrollable flex children, set min-height:0 on parent and overflow:auto on the child. |
.parent{min-height:0}.pane{overflow:auto} |
| Property / Concept | Applies to | Purpose / Common Values | Small Example |
|---|---|---|---|
| display | Container | Enable grid formatting context. Values: grid, inline-grid. |
.grid { display:grid; } |
| grid-template-columns / grid-template-rows | Container | Define track sizes. Values: lengths, %, fr, auto, functions (repeat(), minmax()). |
.grid { grid-template-columns:200px 1fr; } |
| grid-template-areas | Container | Name areas for semantic placement. | "header header" |
| grid-template | Container | Shorthand for rows / columns / areas. | .grid { grid-template: "h h" 60px "s m" 1fr / 200px 1fr; } |
| grid-auto-rows / grid-auto-columns | Container | Size for tracks auto-created by content. | .grid { grid-auto-rows:minmax(100px,auto); } |
| grid-auto-flow | Container | How items fill unassigned cells: row | column | dense variations. |
.grid { grid-auto-flow:row dense; } |
| gap / row-gap / column-gap | Container | Spacing between rows/columns. | .grid { gap:1rem; } |
| justify-items | Container | Align items in their cell (inline axis): start | center | end | stretch. |
.grid { justify-items:center; } |
| align-items | Container | Align items in their cell (block axis). | .grid { align-items:start; } |
| justify-content | Container | Align the whole grid within container (inline axis). Values: start | center | end | space-between | space-around | space-evenly. |
.grid { justify-content:space-between; } |
| align-content | Container | Align the whole grid within container (block axis). | .grid { align-content:center; } |
| place-items | Container | Shorthand for align-items + justify-items. |
.grid { place-items:center; } |
| place-content | Container | Shorthand for align-content + justify-content. |
.grid { place-content:center space-between; } |
| grid-column / grid-row | Item | Place item by grid line numbers or names: start / end. |
.item { grid-column:1 / 3; grid-row:2; } |
| grid-area | Item | Assign to a named area or shorthand for row/column placement. | .header { grid-area:header; } |
| justify-self | Item | Align a single item in its cell (inline axis). | .item { justify-self:end; } |
| align-self | Item | Align a single item in its cell (block axis). | .item { align-self:center; } |
| place-self | Item | Shorthand for align-self + justify-self. |
.item { place-self:start stretch; } |
| Basic 2-col layout | Recipe | Sidebar + content columns. | .grid { display:grid; grid-template-columns:200px 1fr; } |
| 12-col responsive | Recipe | Equal-width flexible columns. | .grid { grid-template-columns:repeat(12,1fr); gap:1rem; } |
| Auto-fill cards | Recipe | Responsive card layout with wrapping. | .grid { grid-template-columns:repeat(auto-fill, minmax(200px,1fr)); gap:1rem; } |
| Named areas | Recipe | Define semantic regions. | .grid { grid-template-areas:"header header" "side main"; } |
| Module | Purpose | Status |
|---|---|---|
| Selectors (MDN) | Define patterns to target elements (classes, attributes, pseudo-classes like :hover, :nth-child, etc.). | Level 3: REC Level 4: Working Draft |
| Selectors (W3C) | ||
| Cascade & Inheritance (MDN) | How style conflicts are resolved (specificity, importance, source order); inheritance rules for properties. | Level 3: REC Level 4: Working Draft |
| Cascade & Inheritance (W3C) | ||
| Box Model & Display (MDN) | Defines content, padding, border, margin, and how elements are displayed (block, inline, inline-block, etc.). | REC (CSS2.1) Draft updates ongoing |
| Box Model & Display (W3C) | ||
| Backgrounds & Borders (MDN) | Properties for background images, gradients, borders, border-radius, and multiple backgrounds. | Level 3: REC Level 4: Working Draft |
| Backgrounds & Borders (W3C) | ||
| Color (MDN) | Color values and spaces: named colors, RGB, HSL, HWB, Lab, LCH, alpha transparency, color-mix(). | Level 3: REC Level 4: Working Draft |
| Color (W3C) | ||
| Values & Units (MDN) | Core units: px, em, rem, %, vh/vw, fr; math functions: calc(), min(), max(), clamp(). | Level 3: REC Level 4: Working Draft |
| Values & Units (W3C) | ||
| Media Queries (MDN) | Adapts styles to device characteristics like width, resolution, orientation, light/dark mode. | Level 3: REC Level 4: Candidate Rec |
| Media Queries (W3C) | ||
| Flexbox (MDN) | One-dimensional layout model: distributes space, aligns items, handles responsive resizing. | Level 1: REC |
| Flexbox (W3C) | ||
| Grid Layout (MDN) | Two-dimensional layout model: rows & columns with explicit/implicit placement. | Level 1: REC Level 2: Working Draft |
| Grid Layout (W3C) | ||
| Transforms & Animations (MDN) | 2D/3D transforms (rotate, scale, translate), transitions, keyframe animations. | Level 1: REC Level 2: Working Draft |
| Transforms & Animations (W3C) | ||
| Fonts & Text (MDN) | Web fonts (@font-face), font-variant, OpenType features, text decoration, line breaking. | REC (various levels) Updates in draft |
| Fonts & Text (W3C) | ||
| Scroll & Overflow (MDN) | Controls overflow behavior, scrollbars, scroll snapping, overscroll handling. | Level 3: REC Level 4: Working Draft |
| Scroll & Overflow (W3C) |
| Library | CSS-only? | Notes |
|---|---|---|
| General frameworks | ||
| Bootstrap | No | Interactive components require JS. |
| Foundation | No | Many components need JS. |
| Bulma | Yes | Modern, flexbox-first, no JS. |
| Tailwind CSS | Yes | Utility classes; typical build step, no runtime JS. |
| Tachyons | Yes | Functional utility classes. |
| UIkit | No | Component behavior provided via JS. |
| Pure.css | Yes | Very lightweight modules, CSS only. |
| Skeleton | Yes | Tiny starter for basic layouts. |
| Milligram | Yes | Minimal, clean defaults. |
| Spectre.css | Yes | Lightweight components; CSS only. |
| Classless / semantic-first | ||
| Pico.css | Yes | Classless styles for semantic HTML. |
| Water.css | Yes | Auto dark/light themes; CSS only. |
| MVP.css | Yes | Zero classes; drop-in defaults. |
| new.css | Yes | Opinionated classless theme. |
| awsm.css | Yes | Readable classless theme. |
| Resets & normalizers | ||
| Normalize.css | Yes | Standardize cross-browser defaults. |
| modern-normalize | Yes | Modernized slim normalize. |
| sanitize.css | Yes | Normalize + opinionated defaults. |
| The New CSS Reset | Yes | Hard reset you rebuild from. |
| Animation & effects | ||
| Animate.css | Yes | Keyframe animations via CSS classes. |
| Hover.css | Yes | Hover transitions; CSS only. |
| Magic.css | Yes | Extra animation presets (CSS). |
| AOS (Animate On Scroll) | No | Scroll reveals require JS runtime. |
| Layout & grids | ||
| Flexbox Grid | Yes | Responsive grid built on flexbox. |
| Simple Grid | Yes | Minimal responsive grid. |
| Gridlex | Yes | Flexbox-based grid utility. |
| Neat (Bourbon Neat) | Yes | SCSS mixins compile to CSS; no JS. |
| Utilities / tokens | ||
| Open Props | Yes | CSS custom properties (colors, easings, etc.). |
| CSSTools PostCSS presets | No (tooling) | PostCSS plugins/polyfills at build time. |
| Material & components | ||
| Materialize | No | Interactive components use JS. |
| Material Design Lite | No | MDL components rely on JS (legacy). |
| Shoelace | No | Web components (JS) themed via CSS vars. |
| Typography & long-form | ||
| Typebase.css | Yes | Typographic defaults; CSS only. |
| Tufte CSS | Yes | Beautiful long-form essay styling. |
| Icons | ||
| Font Awesome | Yes* | Works with CSS + font/SVG; JS optional for advanced features. |
| Material Icons | Yes | Icon font/SVG with CSS; no JS required. |
| Bootstrap Icons | Yes | SVG/CSS icons; no JS required. |