16 hand-coded CSS portfolio layouts for freelance developers, UX/UI designers, product designers, illustrators, photographers and agency teams: grid galleries, Apple-style bento, native masonry walls, sticky-sidebar splits, hover-overlay grids, horizontal scroll showcases, split screens, dark-mode token systems, single-page dev sites, UX case studies, minimalist indexes, freelancer pricing layouts, 3D card flips, full-screen heroes and sticky app-shells. 14 Pure CSS + 2 tiny JS snippets, WCAG 2.2 AA, modern CSS surface (:has(), @container, scroll-timeline, @supports masonry, oklch()). Scoped under .cpl-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.

16 light JSPublished

Related31 CSS Hero Sections17 CSS Dashboard Layouts15 CSS Card Grid Layouts

CSS Grid Portfolio Layout Example HTML CSS — preview
01 / 16CSS only

CSS Grid Portfolio Layout Example HTML CSS

The canonical portfolio grid, done the 2026 way: one line of repeat(auto-fill, minmax()) generates every breakpoint for free, a featured project spans a 2×2 block, and a container query — not a media query — collapses the feature when the grid gets pasted somewhere narrow. Cards lift on hover with a compositor-only translate, covers zoom inside an overflow clip, and the whole thing is 100% CSS.

Published

Bento Grid Portfolio Layout HTML CSS — preview
02 / 16CSS only

Bento Grid Portfolio Layout HTML CSS

The Apple-keynote bento: a 6-column grid where every tile buys the exact real estate its content deserves — a 4×2 statement tile, a 2×2 profile, single-row stat chips, twin project covers — all placed with nothing but grid-column/row spans. A sheen sweeps across tiles on hover, the availability dot pulses, and a container query re-deals the whole board into two columns when space runs out.

Published

CSS Masonry Portfolio Layout No JavaScript — preview
03 / 16CSS only

CSS Masonry Portfolio Layout No JavaScript

A Pinterest-style wall of mixed-height pieces with zero JavaScript and zero libraries: CSS multi-columns do the packing, break-inside:avoid keeps every card whole, and captions slide up over the art on hover or keyboard focus. Column count is fluid — columns: 3 220px means 'up to three, never narrower than 220px' — so the wall re-packs itself for any container it lands in.

Published

2 Column Portfolio Layout CSS Flexbox — preview
04 / 16CSS only

2 Column Portfolio Layout CSS Flexbox

The freelancer classic: a fixed-width identity column on the left that stays put while the project list scrolls on the right — built with two flex children and one position:sticky, no JS scroll math. The sidebar carries name, bio, section nav and socials; the content column is a stack of project rows with thumb, summary and tag chips. Under 560px of container width it degrades to a natural single-column stack.

Published

Responsive Portfolio Grid with Hover Overlay CSS — preview
05 / 16CSS only

Responsive Portfolio Grid with Hover Overlay CSS

Project thumbnails that keep quiet until you ask: hover (or Tab onto) a card and a gradient scrim fades up, the title and tags rise in a stagger, and a 'View case' pill arrives last — all transform/opacity, all CSS. The part most tutorials skip is here too: the overlay fires on :focus-visible as well as :hover, so keyboard users get the identical reveal, and touch users see a permanent compact caption via a hover-capability media query.

Published

Horizontal Scrolling Portfolio Layout CSS Only — preview
06 / 16CSS only

Horizontal Scrolling Portfolio Layout CSS Only

A side-scrolling showcase the way agencies build them: grid-auto-flow:column lays the panels in a row, scroll-snap lands each one crisply, and a scroll-driven progress bar (pure CSS animation-timeline: scroll()) fills as you traverse — zero JavaScript anywhere. The scroller is keyboard-operable out of the box (tabindex + arrow keys), momentum-friendly on trackpads, and each panel numbers itself with a CSS counter.

Published

Split Screen Portfolio Layout HTML CSS — preview
07 / 16CSS only

Split Screen Portfolio Layout HTML CSS

A true 50/50 split: the left half is a pinned identity panel — name, thesis, index of cases — while the right half scrolls through case studies. The 2026 twist is one selector: the stage uses :has() to watch which case you're hovering and repaints the left panel's accent to that project's hue, so the two halves feel wired together without a byte of JavaScript.

Published

Dark Mode Portfolio Website Layout CSS Variables — preview
08 / 16CSS + JS

Dark Mode Portfolio Website Layout CSS Variables

One layout, two skins, five lines of real logic: every color in the page routes through custom properties declared once for light and re-declared once under [data-theme='dark'], so the toggle only flips an attribute. It respects prefers-color-scheme on first paint, the sun morphs into a moon with a pure-CSS mask trick, and color-scheme keeps native scrollbars and form controls in sync with the theme.

Published

Developer Portfolio Layout HTML CSS Single Page — preview
09 / 16CSS only

Developer Portfolio Layout HTML CSS Single Page

The complete single-page engineer portfolio — Hero, Stack, Projects, Contact — in one HTML file with zero dependencies and a weight budget a Lighthouse audit would frame. Navigation is plain anchor links with CSS smooth scrolling and scroll-margin, the stack is a chip cloud, projects are honest cards with metric lines, and the sticky mini-nav shows a scroll-driven reading-progress hairline where supported.

Published

UX Designer Portfolio Case Study Layout CSS — preview
10 / 16CSS only

UX Designer Portfolio Case Study Layout CSS

The case-study page hiring managers actually want to read: a header that states role, team and timeline up front; a three-stat outcome strip (the numbers first, not last); a problem statement set as a real pull quote; a wireframe evidence grid; and a numbered process rail drawn entirely with CSS counters. The measure is capped at 62ch because case studies are reading, and reading has rules.

Published

Minimalist Graphic Design Portfolio Layout HTML CSS — preview
11 / 16CSS only

Minimalist Graphic Design Portfolio Layout HTML CSS

Portfolio-as-index: no cards, no grid of thumbnails — just an oversized name, six hairline-ruled rows of work, and a thumbnail that blooms in at the row's edge only when you hover or focus it. The restraint is the design: two font sizes doing the work of six, one accent used exactly once, and white space measured in multiples of a 8px rhythm. Swiss typography rules, written in CSS.

Published

Freelance Web Developer Portfolio Layout with Pricing Table — preview
12 / 16CSS only

Freelance Web Developer Portfolio Layout with Pricing Table

A portfolio that closes deals, not just compliments: proof first (client results as testimonial cards), then a three-tier pricing table with the middle plan doing the featured-column trick — lifted, accent-bordered, 'Most booked' badge — and honest feature lists with real checkmarks drawn as CSS ::before glyphs. The tiers are one grid; the featured lift is one class; the whole section stacks cleanly when narrow.

Published

Clean Simple Inline Portfolio Cards CSS Grid — preview
13 / 16CSS only

Clean Simple Inline Portfolio Cards CSS Grid

The beginner's demo, engineered on purpose: about 30 lines of CSS, every one of which earns a comment in the tutorial below. One grid rule handles all screen sizes, one card recipe (cover, title, tag), one hover. No custom properties beyond five color tokens, no pseudo-element tricks, no queries of any kind — this is the smallest correct version of a portfolio card grid, and the base every other demo in this collection builds on.

Published

CSS Card Flip Portfolio Layout — preview
14 / 16CSS + JS

CSS Card Flip Portfolio Layout

Project cards with two faces: the front is the artwork, and a corner button flips the card 180° in 3D to reveal the tech stack and live/code links on the back. The rotation is the classic perspective + preserve-3d + backface-visibility trio, but built the accessible way — a real button drives the flip (not a hover you can't perform on touch), links on the hidden face are inert until it's showing, and reduced-motion swaps the spin for a crossfade.

Published

Full Screen Hero Image Portfolio Layout CSS — preview
15 / 16CSS only

Full Screen Hero Image Portfolio Layout CSS

The visual-storyteller opener: a hero that owns the entire first viewport — layered imagery, a display-scale title, a bouncing scroll cue — followed by the work. Under the drama sit the two details that separate 2026 heroes from 2016 ones: it's sized with small-viewport units (100svh, not the iOS-broken 100vh), and the hero art recedes with a scroll-driven parallax that costs zero JavaScript and calms itself under prefers-reduced-motion.

Published

Sticky Header Sidebar Portfolio Layout Template CSS — preview
16 / 16CSS only

Sticky Header Sidebar Portfolio Layout Template CSS

The full app-shell template: a sticky header across the top, a sticky section rail down the left, and a long project list scrolling between them — the modern 'holy grail' with grid-template-areas naming the regions and two cooperating stickies doing what fixed positioning used to fake. The only trick worth memorizing is the offset handshake: the sidebar sticks at top: var(--headerH), so the two never fight.

Published

FAQ

Frequently asked questions

Which CSS portfolio layout should a freelance developer or UX/UI designer pick in 2026 — grid gallery, bento, masonry, split-screen, or single-page?
The right choice depends on the ONE job your portfolio has to do the moment a recruiter, art director, or client lands. If the goal is rapid at-a-glance scanning so a hiring manager sees 6-9 projects on load without scrolling, ship the responsive CSS Grid gallery (Demo 01) or the Apple-style bento grid (Demo 02) — the bento's featured hero cell (2-col × 2-row span) signals your best case study before the eye reaches anything else. Every top-tier product-designer portfolio on Read.cv, Bestfolios, and Awwwards uses some flavour of bento for exactly this reason. If your best work is photography, illustration, or brand identity with mixed aspect ratios, the native CSS masonry wall (Demo 03) is the correct pick — real Pinterest-style back-fill with zero JavaScript via grid-template-rows: masonry (Chrome 121+, Safari 17.4+, Firefox behind flag) plus a grid-auto-flow: dense fallback that looks equally polished in older engines. For freelancer sites that need to convert (a portfolio + services + rate card in one scroll), Demo 12 (Freelance Web Developer Portfolio with Pricing Table) is the reference — testimonials block above a 3-tier pricing table with a featured middle plan is the highest-converting pattern on Awwwards SOTD-winning freelancer sites. For senior UX designers submitting case studies, Demo 10 (UX Case Study Layout) ships the exact 1fr/62ch/1fr content grid that IDEO, Frog Design, and Google Design portfolios use — a reading-width column with room for full-bleed hero imagery breakout. And for developers who want a fast, single-page personal site, Demo 09 (Single-Page Developer Portfolio) is the correct picking pattern — anchor-navigation between hero → work → about → contact, a scroll-timeline hairline progress rail, and full keyboard support out of the box.
How do I build a modern CSS portfolio grid with auto-fit minmax columns that responds to container width (not viewport) — zero JavaScript, no media queries?
The modern 2026 portfolio grid (Demos 01, 05, 13) uses two CSS-Grid recipes stacked. First, on the outer gallery: grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)) — the auto-fit keyword collapses empty tracks so a 4-column layout on a 1440px canvas becomes 3 columns at 1024px, 2 columns at 640px, and 1 column on mobile without a single @media query. The min(280px, 100%) guard prevents the classic 'overflow on ultra-narrow viewports' bug where minmax(280px, 1fr) alone would force the container to grow past 100% width when the viewport is 260px (iPhone SE landscape). Second, when the gallery lives inside a variable-width container (sidebar-embedded portfolio, dashboard preview, project modal), wrap the gallery in container-type: inline-size then use @container (min-width: 720px) { .card { grid-template-columns: auto 1fr; } } — the card component now reflows based on ITS OWN container width, not the viewport, so it works correctly whether the parent sidebar is expanded or collapsed. This is exactly the recipe Bestfolios, Read.cv, and every 2026 Awwwards SOTD ships in production — no CSS Grid framework, no JS resize listener, no dependencies. See Demos 01 (auto-fit + span-2 featured card), 05 (auto-fit + hover-overlay stagger), 08 (dark-mode auto-fit), and 13 (beginner-friendly auto-fit cards) for the full worked recipes at three complexity levels.
How do I make a CSS portfolio that is fully WCAG 2.2 AA accessible for tier-1 country recruiters and enterprise agency clients?
Every demo in this collection is engineered for WCAG 2.2 AA out of the box because tier-1 recruiter portals, enterprise agency procurement, and government/education gigs (US federal Section 508, Canada AODA, UK Equality Act, EU EN 301 549, Australia DDA) have accessibility as a hard filter on portfolio review. The canonical accessible portfolio recipe: (1) Semantic landmarks — <header>, <nav aria-label='Primary'>, <main>, <article> per project card, <footer>. Screen readers surface these in the landmark rotor so keyboard-only users can jump directly to your work. (2) Focus-visible rings on every interactive card (Demos 01, 05, 13, 14) — never :focus alone which fires for mouse users too. Focus rings are at least 2px thick with 3:1 contrast against the card background (WCAG 2.4.13, the Oct 2023 update most 'accessible portfolio' templates predate). (3) Hover = focus parity on every project reveal (Demos 05, 11, 14) — every effect that triggers on :hover also fires on :focus-visible, so keyboard-only users see the same reveal a mouse user does. (4) prefers-reduced-motion: reduce guard on every animation (all 16 demos) — WCAG 2.3.3 (AAA but rapidly becoming a filter). (5) The 3D card-flip demo (Demo 14) uses inert on the back-face so tabbing skips hidden content correctly; the dark-mode demo (Demo 08) uses a real <button aria-pressed> for the toggle. (6) Colour contrast in oklch() tokens hit 4.5:1 on body copy and 3:1 on UI text (WCAG 1.4.3). Every card link has an aria-label when the visible text is only 'View →'. This clears Section 508, AODA, EN 301 549, and the ADA Title III standards in one shot — passing the accessibility filter that eliminates most portfolio templates before human review even begins.
How does CSS portfolio design affect Core Web Vitals, LCP, INP and CLS for personal-brand SEO ranking?
Personal-brand SEO for freelancers and designers lives and dies by Core Web Vitals because Google's ranking factors weight them at ~15-25% of the total score for content-thin pages (a portfolio homepage IS content-thin — a few images + short copy + your work). Every portfolio demo in this collection ships zero-runtime-cost interactivity: LCP (Largest Contentful Paint) is the hero image — Demos 05, 15 and 07 use <img loading='eager' fetchpriority='high'> on the above-the-fold hero and loading='lazy' on grid images below the fold. LCP under 2.5s on Slow 4G (Google's testing threshold) is achievable when you're not shipping a 400KB Next.js/React runtime just to render an image. INP (Interaction to Next Paint, promoted to a Core Web Vital in March 2024) is 0-4ms on every demo because interactivity is CSS-only: filter tabs use :has() + :checked (Demo 07 accent recolor), project card reveals use :hover / :focus-visible (Demos 05, 11, 14), dark-mode toggle uses data-theme attribute swap (Demo 08, ~15 lines of vanilla JS with zero re-render cost). CLS (Cumulative Layout Shift) is 0 because every image element has aspect-ratio declared (Demos 01, 05, 13, 14 — the aspect-ratio: 4/3 or 1/1 reservation means the layout stops shifting the moment the browser knows the ratio, even before pixels download). Compared to a Next.js portfolio template with 200-400KB of client JS: this collection ships 0KB of runtime JS by default, which is what moves a 'Poor CWV' portfolio into 'Good CWV' territory and lifts you above 70% of freelancer competitors in Google's SERP for '<your name> portfolio', '<your city> designer', and long-tail vertical queries like 'freelance react developer <region>' — the queries that actually convert to leads.
Which CSS portfolio layout fits high-CPM verticals — freelance legal/insurance/fintech consultancy, architecture firms, medical/healthcare design, agency case studies?
Freelancers and small agencies targeting very-high-CPM verticals (legal-tech consultancy, insurance UX, fintech dashboards, healthcare/HIPAA-compliant apps, mortgage-broker CRMs) need portfolio layouts that signal enterprise-grade rigor — not creative-agency flair. The four demos this collection tunes for those verticals: Demo 10 (UX Case Study Layout) is the canonical shell for showcasing a single deep case study — 1fr/62ch/1fr content grid with room for full-bleed hero imagery breakout and a step-numbered ordered list. This is the exact layout IDEO, Frog Design, Fjord, Method, and Publicis Sapient case-study pages use because it reads as 'consultancy report' rather than 'design showcase' — the tone regulated-industry buyers respond to. Demo 12 (Freelance Web Developer Portfolio with Pricing Table) works exceptionally well for consultancy productization — testimonials block above a 3-tier pricing table (Discovery / Build / Enterprise Retainer) with the middle 'Build' tier featured. Enterprise buyers in fintech and insurance want to see a concrete engagement structure before they'll book a discovery call. Demo 04 (Sticky-Sidebar 2-Column) is the reference for portfolios organized by service line rather than project — the sidebar becomes a persistent nav across 'Fintech UX / Insurance CRM / Legal-Tech / Healthcare EHR' service pages, each with its own scrolling project column. This structure lets you rank for multiple vertical long-tail queries from a single portfolio site. Demo 16 (Sticky Header + Sidebar App Shell) is the correct pick when your portfolio is itself a product demo — enterprise dashboard designers, admin-panel devs, and B2B SaaS teams should ship their portfolio inside the same shell they'll build the client's product in. Each of these very-high-CPM verticals rewards the WCAG 2.2 AA accessibility + INP-under-100ms performance moat this collection ships, because enterprise procurement in regulated industries has accessibility and Core Web Vitals as literal checklist items on the vendor questionnaire.
Do these CSS portfolio layouts work in React, Vue, Svelte, Astro, Next.js, Remix, and SvelteKit — and what's the framework portability story vs premium admin templates?
Every layout is plain HTML + CSS with zero dependencies, zero build steps, and zero framework lock-in. To port to React / Next.js App Router: rename class to className, drop the JSX into any server or client component (no 'use client' directive needed for the 14 Pure CSS layouts because they have no interactivity that requires hydration; only Demos 08 dark-mode toggle and 14 card-flip need 'use client', and each ships under 20 lines of vanilla JS). Vue 3 / Nuxt 3: accepts as-is, class attribute is native. Svelte / SvelteKit: accepts as-is, class is native. Astro: drop into any .astro component. Remix: any route module. Solid.js / Qwik: accepts as-is. Compared to premium portfolio templates on ThemeForest, Framer, and Webflow: template sites lock you into a specific framework (Framer's runtime is ~150KB gzipped; Webflow's is ~90KB; ThemeForest React templates typically ship 200KB-1.5MB of framework CSS + JS you can't strip) — and none can be dropped into an existing codebase without a wholesale rewrite of your build pipeline. The hand-coded pattern here totals 4-8KB gzipped per demo when you cherry-pick, and the entire 16-demo collection is under 55KB combined. The .cpl-NN numeric-prefix scoping means all 16 layouts coexist on the gallery page without a single class collision, and the same prefix guarantees you can drop any one demo into a codebase that already uses .portfolio, .grid, .card, .hero, or .gallery classes without renaming a single selector. MIT licensed, no attribution required, no watermark, no signup, no email capture.

Related collections

15 CSS Aspect Ratio Demos preview

15 CSS Aspect Ratio Demos

15 hand-coded CSS aspect-ratio demos for video embeds, product galleries, IAB ad slots, native dialogs, and CLS-safe placeholders: 16:9 iframe YouTube embed with click-to-load facade + up-next rail, 21:9 full-screen hero video with min-height/max-height:100svh guardrails + Ken Burns drift, 1:1 Instagram-style square grid with 2×2 feature tile, 4:3 magazine card image cover, 9:16 vertical stories rail (TikTok/Reels/Shorts pattern) with scroll-snap + segment bars, 4:5 apparel product image gallery with radio-driven state + 1:1 thumbnails, 1:1 zoom thumbnail carousel with pointer-tracked --zx/--zy magnifier, prevent-layout-shift placeholder with live PerformanceObserver CLS meter (before/after side-by-side lab), dynamic content fallback with three policies (bend/strict/auto) via :has() toggle, IAB ad banner slots (728×90 leaderboard, 300×250 medium rectangle, 300×600 half-page, 320×50 mobile) with skeletons + container-query mobile swap, responsive modal dialog sized min(92vw, 88svh×16/9, 1080px) with @starting-style animation, responsive OpenStreetMap iframe wrapper with 16:9 → 1:1 container-query narrow swap, media query orientation live HUD + resize:both container-ratio playground, object-fit logo cloud with contain/cover/fill switcher via :has(), and side-by-side padding-top hack (height:0 + padding-top:56.25%) → modern aspect-ratio migration comparison with live ratio picker. 11 truly Pure CSS + 4 with a tiny optional vanilla JS snippet (facade swap, pointer magnifier, CLS meter, native dialog). Every demo is scoped under a unique .car-NN prefix so it drops into any project without CSS collisions, ships prefers-reduced-motion guards, and is framework-agnostic (works as-is in React, Vue, Svelte, Astro, Next.js, Remix, or plain HTML).

6 CSS Bento Grid Layouts preview

6 CSS Bento Grid Layouts

6 production CSS bento grid layouts with 12 hand-coded designs — Apple-style product showcase, SaaS feature value-prop matrix, analytics dashboard overview, creative portfolio, e-commerce category hub, and link-in-bio social hub. Each topic ships 2 sub-variants side-by-side so visitors see both a keynote aesthetic and a paper-doc variant at once. Container queries, CSS Grid, zero dependencies, copy-paste ready.

20 CSS Blog Layouts preview

20 CSS Blog Layouts

20 hand-coded CSS blog and editorial layouts for magazine homepages, news sites, personal archives, newsletter back-issues, recipe and podcast blogs, developer tutorials, and long-form journalism. Covers a magazine homepage with hero plus editor-picks rail, a news homepage with breaking-news ticker, blog archives with sticky year separators, Substack-style issue-numbered archives, recipe card grids with prep-time badges, podcast episode lists with waveforms, long-form articles with scroll-driven reading progress, drop caps and floated pull quotes via first-letter, Medium-style 65ch centred reader layouts, dev tutorials with a sticky code panel beside prose, interview transcripts with alternating speakers, case-study pages with stat counters, video blogs with an episode rail, full-bleed photo essays, news articles with sticky related-stories sidebars, documentation pages with prev/next chapter nav, a standalone blog post card, a scroll-snap category filter bar, an inline newsletter callout that breaks out of the prose column, and a horizontal featured-post rail. 12 are pure CSS with zero JavaScript. Every layout is scoped under a .bl-NN prefix for no-collision pasting, guards prefers-reduced-motion, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.

Search CodeFronts

Loading…