YouTube

YouTube's iOS app is a content-forward canvas whose entire job is to surface a 16:9 thumbnail and let you tap it.

Back to all styles

A live page in this style is not built yet — the CSS variables and the prompt below are enough to reproduce it.

At a glance

24tokens
9type steps
1radius steps
8pxspacing base

YouTube, in one page

YouTube's iOS app is a content-forward canvas whose entire job is to surface a 16:9 thumbnail and let you tap it. The feed is a vertical stream of video cards — each one a wide still frame with a red-circled duration tag, a channel avatar, a two-line title, and metadata — arranged edge-to-edge with generous gaps between them. On light mode (the default in recent versions), the app canvas is clinical white (#FFFFFF); on dark mode, a near-black #0F0F0F that's been the flagship surface since 2017. Whichever mode you're in, the red is the same: YouTube Red (#FF0000), an unshifted, saturated, traffic-light red reserved for the Subscribe button, the live indicator, and the play-button logomark. Everything else — backgrounds, text, chrome — is achromatic.

The accent system has one job: mark the verb "Subscribe." When you tap Subscribe, the red pill morphs to a gray "Subscribed" state, the bell icon appears, and a light haptic fires — and that's the only time red ever appears on an action in the UI. Red is otherwise reserved for three static marks: the "LIVE" pill on live-stream thumbnails, the small "•" unread indicator on the subscriptions tab, and the play arrow inside YouTube's logomark. This restraint is what makes YouTube Red instantly iconic — when you see red in this app, you're looking at a brand element, not interactive UI.

Typography is YouTube Sans (proprietary, released in 2017) for display moments — the wordmark, large headers, the video player UI — paired with Roboto for body text (because the app was built by Google and its Material roots still show). On iOS, a fallback stack of SF Pro covers both when the custom fonts are unavailable. The hierarchy is compact: sizes run 11–20pt, weights at 400 / 500 / 700. Video titles sit at 16pt weight 500 with 2-line clamp — the single most common type moment in the app. There are no display-sized hero titles in the feed itself; the thumbnail is the headline, the title is the caption.

Key Characteristics:

Do's and don'ts

Do

  • Use #FFFFFF as light canvas and #0F0F0F as dark — YouTube's signature "near-black," never pure black
  • Reserve YouTube Red (#FF0000) for the Subscribe button, LIVE indicator, and logomark — nothing else
  • Render video thumbnails at full screen width with NO corner radius — hard edges are the signature
  • Place the duration tag in the bottom-right of every thumbnail, dark chip, white text
  • Pair YouTube Sans (display) with Roboto (body) — keep the two in their lanes
  • Use the gray "Subscribed" state after a user subscribes — never leave the red pill active
  • Hide the dislike count (reflects 2021+ product decision)
  • Use 18pt corner radius on Subscribe and action pills — YouTube's rounded-rect button shape
  • Support full color inversion on selected filter chips (black bg / white text when active)
  • Animate the mini-player with a shared-element transition from the full player
  • Use heart-from-creator overlay for creator-highlighted comments — 20pt red heart with creator avatar
  • Use haptics: light on Subscribe, light on like, success on share confirm

Don't

  • Don't use pure black #000000 for dark canvas — #0F0F0F is the brand token (slightly warmer)
  • Don't round thumbnail corners on the feed — hard edges are load-bearing aesthetic
  • Don't use red on non-Subscribe actions — red is a brand element, not an action accent
  • Don't display dislike counts publicly (post-2021 product decision)
  • Don't use a full-pill corner on Subscribe — it's 18pt, not 500pt
  • Don't use thin or light font weights — 400 / 500 / 700 only
  • Don't forget the shadow on Shorts captions — text over video needs rgba(0,0,0,0.5) drop shadow
  • Don't omit the duration tag — every thumbnail must show runtime
  • Don't hide the mini-player when the user navigates away during playback — it's load-bearing UX
  • Don't animate the Subscribe morph with a slide — it's an in-place color cross-fade

Copy this into your AI builder

Paste it as-is. Every value below was measured from the original site, not guessed.

Assembled from the measured tokens — the source document has no prompt block.

Build a page in the YouTube design language. Follow the measured tokens below — do not substitute your own palette.

Colors:
- YouTube Red: #ff0000
- YouTube Red Pressed: #cc0000
- Red Hover: #e60000
- Canvas White: #ffffff
- Surface 1: #f9f9f9
- Surface 2: #f2f2f2
- Divider: #e5e5e5
- Input Background: #f2f2f2
- Canvas Dark: #0f0f0f
- Surface 1 Dark: #1f1f1f

Type:
- families: YouTube Sans, Primary Display, Roboto, Primary Body
- scale: 10, 11, 12, 13, 14, 15, 16, 18, 20
- weights: 400, 500, 600, 700

Shape:
- radius: 18
- elevation: Like (thumbs-up) 32pt white + count below (13pt weight 500 white with shadow)

Spacing: 8, 10, 16

Rules:
- Use `#FFFFFF` as light canvas and `#0F0F0F` as dark — YouTube's signature "near-black," never pure black
- Reserve YouTube Red (`#FF0000`) for the Subscribe button, LIVE indicator, and logomark — nothing else
- Render video thumbnails at full screen width with NO corner radius — hard edges are the signature
- Place the duration tag in the bottom-right of every thumbnail, dark chip, white text
- Pair YouTube Sans (display) with Roboto (body) — keep the two in their lanes
- Use the gray "Subscribed" state after a user subscribes — never leave the red pill active

Avoid:
- Don't use pure black `#000000` for dark canvas — `#0F0F0F` is the brand token (slightly warmer)
- Don't round thumbnail corners on the feed — hard edges are load-bearing aesthetic
- Don't use red on non-Subscribe actions — red is a brand element, not an action accent
- Don't display dislike counts publicly (post-2021 product decision)
- Don't use a full-pill corner on Subscribe — it's 18pt, not 500pt
- Don't use thin or light font weights — 400 / 500 / 700 only

Keep every value literal. If a token is given, use that exact value.

The specification

Colour paletteRead the full spec

Primary

  • YouTube Red (#FF0000): The iconic brand red — Subscribe button (unsubscribed state), LIVE indicator pill, brand logomark (play arrow in the square), the red dot in notification badges, and the progress-fill color on the video scrubber.
  • YouTube Red Pressed (#CC0000): Pressed / active-state variant for red CTAs.
  • Red Hover (#E60000): Slight deepening for web-style hover; matched on iOS as a pressed alt.

Canvas & Surfaces (Light Mode)

  • Canvas White (#FFFFFF): Primary light canvas — all main feed surfaces.
  • Surface 1 (#F9F9F9): Elevated card backgrounds on some sheets, section backing.
  • Surface 2 (#F2F2F2): Pressed-state background on list rows and chips.
  • Divider (#E5E5E5): 1pt hairline dividers between list items and sections.
  • Input Background (#F2F2F2): Search bar fill in light mode.

Canvas & Surfaces (Dark Mode)

  • Canvas Dark (#0F0F0F): Primary dark canvas — YouTube's signature "not-quite-black."
  • Surface 1 Dark (#1F1F1F): Sheet backgrounds, context menu, comment compose.
  • Surface 2 Dark (#272727): Pressed-state on dark rows, hover overlays.
  • Surface 3 Dark (#3F3F3F): Higher elevation — player chrome, sticky headers.
  • Divider Dark (#303030): Hairline dividers in dark mode.

Text (Light Mode)

  • Text Primary (#0F0F0F): Video titles, channel names, primary headings.
  • Text Secondary (#606060): Metadata — view counts, upload date, channel subscriber count.
  • Text Tertiary (#909090): Timestamps, placeholders, lowest-emphasis labels.
  • Text Disabled (#C0C0C0): Disabled button text.

Text (Dark Mode)

  • Text Primary Dark (#FFFFFF): Video titles, channel names, headings on dark.
  • Text Secondary Dark (#AAAAAA): Metadata on dark.
  • Text Tertiary Dark (#717171): Lowest-emphasis labels on dark.

Semantic

  • Live Red (#FF0000): LIVE indicator pill — same token as brand red.
  • Error Red (#FF0000): Playback / network errors, same token.
  • Success Green (#3EA6FF is info, not success — YouTube uses blue): Minimal success states.
  • Info Blue (#3EA6FF): Links inline within descriptions, "Show more," clickable hashtags in comments.
  • Warning Yellow (#FFC400): Rarely used — age-restriction warnings, content advisories.

Content Accent: Channel & Playlist

  • Channel pages accept a custom banner image and an accent color — but this accent never bleeds into the app's chrome. It only appears as a subtle header overlay.
Type scaleRead the full spec

Font Family

  • Primary Display: YouTube Sans (proprietary, released 2017 — rounded geometric sans, close to Nunito / Rubik in feel)
  • Primary Body: Roboto (Google's signature sans — used for video titles, metadata, body copy)
  • Fallback Stack: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Roboto', 'Segoe UI', Helvetica, Arial, sans-serif
  • CJK / Non-Latin: Platform-native — PingFang SC, Hiragino Sans, Apple SD Gothic Neo, Noto Sans extended
  • YouTube Sans is used for the wordmark, the large "Shorts" / "Live" labels, and display moments; Roboto handles everything else

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Screen TitleYouTube Sans20pt7001.2-0.1pt"Home", "Subscriptions" top nav
Video Detail TitleRoboto18pt6001.3-0.1ptBelow the full-player on the video detail page
Video Title (Feed)Roboto16pt5001.30ptVideo card title — 2-line clamp — the most common type moment
Channel NameRoboto14pt5001.30ptBelow video title, next to channel avatar
MetadataRoboto13pt4001.30pt"1.2M views · 3 days ago"
Comment TextRoboto14pt4001.40ptComment body on video detail
Comment AuthorRoboto13pt5001.30ptUsername + "• 2 hours ago"
BodyRoboto14pt4001.450ptDescription, About sections
Button (Primary — Subscribe)Roboto14pt5001.00ptRed Subscribe / gray Subscribed pill
Button (Secondary)Roboto14pt5001.00ptShare, Download, Join, etc.
ChipRoboto14pt4001.00ptFilter chips on Home ("All", "Music", "Gaming")
Tab LabelRoboto10pt5001.00.1ptBottom tab labels
Duration TagRoboto11pt5001.00pt"12:34" in bottom-right of thumbnail
TimestampRoboto12pt4001.00pt"•1:23 / 4:56" on player scrubber
Like CountRoboto13pt5001.00pt"1.2K" under the like icon
Shorts Overlay CaptionYouTube Sans15pt5001.350ptCaption on Shorts, shadow-backed

Principles

  • Weight concentration at 400 / 500 / 700: Regular for body, medium for titles and buttons, bold for display
  • No thin, light, or black weights: The fonts ship with them but the product does not use them
  • Two font families: YouTube Sans for display, Roboto for body — keep them in their lanes
  • Video titles at 16pt medium: This is the most common type moment; its weight 500 gives visual weight without being bold
  • View-count metadata compresses: "1.2M views", "234K views", "1,234 views" — abbreviate above 10K
  • Dynamic Type supported: Titles, descriptions, and comments scale with user preference; tab labels and duration tags stay fixed
  • Shorts captions need shadow: Any text over Shorts video gets a subtle rgba(0,0,0,0.5) drop shadow for legibility
Components and layoutRead the full spec

Buttons

Subscribe Button (The Iconic Red → Gray Morph)

  • Unsubscribed state:
  • Shape: Rounded rectangle with 18pt corner radius (NOT full pill — YouTube's signature is the rounded rect)
  • Background: #FF0000
  • Text: #FFFFFF, Roboto 14pt weight 500 ("Subscribe")
  • Padding: 8pt vertical, 16pt horizontal
  • Height: 36pt
  • Subscribed state:
  • Background: #F2F2F2 light / #272727 dark
  • Text: #0F0F0F light / #FFFFFF dark ("Subscribed")
  • Often paired with a trailing bell icon (notification toggle) — 16pt SF Symbol bell
  • Pressed: opacity 0.85, scale 0.98, light haptic on state change
  • Transition: 200ms spring morph between red and gray

Primary Pill (Sign in / Continue)

  • Used on sign-in flows, creator tools
  • Background: #0F0F0F (dark text button in light mode) or #3EA6FF (blue info button)
  • Padding: 10pt vertical, 24pt horizontal
  • Corner radius: 18pt (matches Subscribe)
  • Text: #FFFFFF 14pt weight 500

Action Button Row (Like / Dislike / Share / Download / Save / Remix)

  • A horizontal pill-group below the video title on the video detail page
  • Each button: 36pt tall capsule with light gray background (#F2F2F2 light / #272727 dark)
  • Leading 20pt SF Symbol glyph + trailing count label (13pt weight 500)
  • Corner radius: 18pt, padding 8pt vertical / 12pt horizontal
  • Gap between pills: 8pt
  • Like: thumbs-up SF Symbol with count ("1.2K"); tap toggles fill and turns #0F0F0F solid; no color change (YouTube removed the blue-highlight treatment)
  • Dislike: thumbs-down SF Symbol; count is hidden (per 2021 product decision); only the user sees their own dislikes
  • Pressed: scale 0.97, light haptic

Icon Button (Player Controls — Play / Pause / Skip)

  • Glyph size: 32pt (main play/pause), 20pt (skip forward/back, captions, fullscreen)
  • Color: #FFFFFF over video — always white since the player is on a dark canvas
  • Hit area: 44pt
  • Pressed: scale 0.9, soft haptic

Text Button ("Show more", "Sort by")

  • Font: Roboto 14pt weight 500
  • Color: #0F0F0F light / #FFFFFF dark
  • No underline, no background

Cards & Containers

Video Card (Feed) — The Atomic Unit

  • Width: full screen width
  • Structure (top to bottom): 1. 16:9 thumbnail — full-width, image fills with no letterbox, no corner rounding (0pt, hard edges) on the feed card itself (some experiments use 12pt; the signature is hard edge) 2. Duration tag — positioned absolute bottom-right of thumbnail, 6pt from corners; background rgba(0,0,0,0.75), text #FFFFFF 11pt weight 500, 4pt corner radius, 4pt vertical / 6pt horizontal padding 3. LIVE tag (if live) — top-left of thumbnail; background #FF0000, text "LIVE" white 11pt weight 700, same 4pt radius 4. Metadata row below thumbnail: 12pt top padding, 16pt horizontal padding
  • Left: 28pt circular channel avatar
  • Right stack:
  • Video title: Roboto 16pt weight 500, 2-line clamp with ellipsis, #0F0F0F light / #FFFFFF dark
  • Channel name + metadata on one line: Roboto 13pt weight 400 #606060 light / #AAAAAA dark — format "Channel Name · 1.2M views · 3 days ago"
  • Trailing: 24pt ellipsis overflow icon, 44pt hit 5. Bottom padding: 16pt (gap before next card)
  • Background: transparent (canvas shows through)
  • No corner radius on the card itself — cards are flush to screen edges; the thumbnail's hard edges are the defining aesthetic

Shorts Card (Vertical Video)

  • Full-viewport 9:16 video (width × height of screen)
  • Overlays (over the video):
  • Right-rail action stack, 12pt from right, centered vertically 50–90%
  • Creator avatar (44pt circle, 2pt white border) with + Subscribe badge
  • Like (thumbs-up) 32pt white + count below (13pt weight 500 white with shadow)
  • Dislike (thumbs-down) 32pt white + count hidden
  • Comment bubble 32pt white + count
  • Share arrow 32pt white
  • Remix icon (music note + play) 32pt
  • Audio disc — 44pt rotating circle showing the audio source cover
  • Bottom-left info: 16pt from left, bottom-align above tab bar
  • @channel 15pt weight 500 white
  • Caption YouTube Sans 15pt weight 500 white, 2-line clamp, shadow rgba(0,0,0,0.5) 0 1px 3px
  • Audio marquee — music note + "Original audio" or song title, 13pt weight 400 white
  • Progress scrubber at bottom — 2pt tall, track rgba(255,255,255,0.3), fill #FFFFFF (not red on Shorts — kept white for minimalism)

Video Detail (Full Player + Info)

  • Top: 16:9 player, full width — black letterbox if video is not 16:9
  • Below player:
  • Title: Roboto 18pt weight 600, can be 2–3 lines, 16pt horizontal / 12pt top padding
  • View count + upload date row: 13pt weight 400 secondary
  • Channel row: 40pt circle avatar + channel name (14pt weight 500) + subscriber count (13pt weight 400 secondary) + Subscribe pill trailing right
  • Action button row: horizontal scroll of pills (Like, Dislike, Share, Remix, Download, Save, Report)
  • Description card: 16pt padding, collapsible with "Show more" — contains description, hashtags, chapters, playlist links
  • Comments preview: tap opens comment sheet
  • Up-next recommendations — vertical list of related video cards

Mini-Player

  • Sits at the bottom of the screen, above the tab bar, when the user swipes down from a full player
  • Height: 72pt
  • Full width, background #FFFFFF light / #1F1F1F dark
  • Left: 72pt-tall 16:9 thumbnail (128pt wide approx)
  • Center: video title 14pt weight 500 (1 line), channel name 12pt weight 400 (1 line)
  • Right: Play/pause 20pt SF Symbol + close X 20pt
  • Drag up: expands back to full player with shared-element animation
  • Drag down past 40pt from bottom: dismisses

Comment Row

Responsive behaviourRead the full spec

Device Sizes

DeviceWidthKey Changes
iPhone SE (3rd gen)375ptTitle clamp tighter, chip row shows 4 instead of 5
iPhone 13/14/15390ptStandard card layout — 16:9 thumbnail ~219pt tall
iPhone 15/16 Pro393ptDynamic Island accommodated in top nav
iPhone 15/16 Pro Max430ptThumbnail ~242pt tall, more metadata fits inline
iPad768pt+2–3 column grid, mini-player pins to bottom-right corner

Dynamic Type

  • Video titles, descriptions, comments: full scale
  • Duration tag: fixed at 11pt (never scales — layout-sensitive)
  • Subscribe button text: fixed at 14pt
  • Tab labels: fixed at 10pt
  • Shorts caption: fixed size (tight layout)
  • Metadata row: scales to ~20% larger maximum to avoid wrapping

Orientation

  • Feed / Subscriptions / You: portrait-locked
  • Video Detail: rotates to landscape — video goes fullscreen, controls overlay
  • Shorts: portrait-locked
  • Comments sheet: portrait-locked (would be weird in landscape)

Touch Targets

  • Subscribe: 36pt pill (hit area expanded to 44pt vertically)
  • Video card: full card tappable (thumbnail + metadata as one touch target)
  • Overflow icon: 44pt hit
  • Player controls: 44pt each
  • Shorts action icons: 32pt glyph with 48pt hit area
  • Tab bar: 44pt hit

Safe Area Handling

  • Top: status bar / Dynamic Island respected by top app bar
  • Bottom: tab bar respects home indicator; mini-player sits above both
  • Video player (fullscreen landscape): ignores safe area for video content, respects for controls
  • Shorts: respects safe area only for overlays; video extends edge-to-edge

Drop-in CSS variables

The same values as a theme block. Add the class to <body> and the site repaints.

body.theme-youtube {--page-bg: #ffffff;
  --page-bg-gradient: none;
  --text-color: #0f0f0f;
  --heading-color: #0f0f0f;
  --link-color: #eb0000;
  --link-hover-color: #b80000;
  --border-color: #d4d4d4;
  --card-bg: #ffffff;
  --card-shadow: 0 1px 2px rgba(15,15,15,0.06);
  --card-hover-shadow: 0 6px 18px rgba(15,15,15,0.12);
  --header-bg: #0f0f0f;
  --header-text-color: #ffffff;
  --header-shadow: none;
  --footer-bg: #ffffff;
  --footer-text-color: #636363;
  --button-bg: #ff0000;
  --button-text-color: #000000;
  --button-hover-bg: #cc0000;
  --button-border: none;
  --button-border-radius: 18px;
  --button-secondary-bg: #f1f1f1;
  --button-secondary-text-color: #0f0f0f;
  --button-secondary-hover-bg: #e2e2e2;
  --button-secondary-border: 1px solid #d4d4d4;
  --prompt-bg: #f3f3f3;
  --prompt-text-color: #0f0f0f;
  --base-font: var(--font-helvetica);
  --heading-font: var(--font-roboto);
  --card-border-radius: 18px;
}

Download theme.css

Visually close to

Measured with a deterministic colour + geometry comparison across 958 styles. Not a hand-picked list.

Where this came from

Source document
ios/design-md/video/youtube/DESIGN.md · 29.6 KB
Repository
Meliwat/awesome-ios-design-md
Licence
MIT

Source text is reproduced under its original licence. Tokens, similarity scores and page structure are ours.