Tiktok

TikTok's iOS app is a full-bleed black canvas that exists to get out of the way of a single vertical video.

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

12tokens
8type steps
3radius steps
6pxspacing base

Tiktok, in one page

TikTok's iOS app is a full-bleed black canvas that exists to get out of the way of a single vertical video. From the moment you open the app you are dropped into the For You feed: a 9:16 clip fills the entire screen edge-to-edge, status-bar to home-indicator, and every piece of UI — captions, action icons, music ticker, tab bar — floats as a translucent overlay on top of that content. The design equivalent is a movie theater with the lights off and the usher wearing a black suit: nothing competes with the screen.

The accent system is built around a single, very loud idea: chromatic aberration. The TikTok wordmark splits the letter "d" into a cyan (#25F4EE) copy and a red / rose (#FE2C55) copy, offset a few pixels from the white original, mimicking the look of a 3D-glasses glitch or a VHS tape tracking error. Those two colors — cyan and rose — are the entire brand. Rose is the verb (the heart, the Follow button, the video scrubber, any "this is the action" moment). Cyan is the accent (the centered Create button, subtle highlights, loading states). White is neutral. Everything else is black or a hair-of-grey elevation. There is no secondary palette. There is no light mode.

Typography is Proxima Nova — a humanist geometric sans that TikTok has used across the product since its re-brand from Musical.ly. It sits slightly warmer than a pure grotesque but more neutral than SF Pro, so captions and usernames read as content rather than chrome. The hierarchy is compact and overlay-friendly: sizes run 11-24pt, weights concentrated at 400 / 600 / 700, and almost everything that sits on a video uses a subtle rgba(0,0,0,0.4) drop shadow so the text stays legible over bright or busy frames. The only place display type appears is the Live / profile header; the feed itself never shows a headline larger than 17pt because the video is the headline.

Key Characteristics:

Do's and don'ts

Do

  • Use #010101 as the canvas — true black, because video frames need the deepest possible bezel
  • Reserve rose #FE2C55 for Like, Follow, scrubber fill, and any "this is the primary verb" moment
  • Use cyan #25F4EE sparingly — Create button and chromatic accents only
  • Apply the rgba(0,0,0,0.4) text shadow on every label sitting on top of a video
  • Use chromatic aberration (cyan -3pt X, rose +3pt X offset around a white core) on the wordmark, Create button, and loading spinner
  • Bold hashtags inline within captions (weight 700 amid weight 400 caption text)
  • Fill the feed edge-to-edge; UI overlays float, they do not contain
  • Use 4pt corner radius on buttons and inputs — TikTok's "almost-square" softness
  • Abbreviate counts (1.2M, 34.5K) — never raw 6-digit integers
  • Double-tap heart = center-screen 120pt burst with heavy haptic
  • Spinning music disc rotates continuously while video is playing

Don't

  • Don't use #000000 — the brand token is #010101, a hair warmer
  • Don't add secondary accent colors — cyan and rose are the only chromatic moments
  • Don't use a light mode — TikTok is dark-only; there is no cream, no off-white canvas
  • Don't use a full-pill corner on buttons — 4pt is the signature
  • Don't let captions sit on video without a drop shadow — they become unreadable on bright frames
  • Don't use chromatic aberration decoratively — it's a logo / brand moment, not a flourish
  • Don't inset the video feed — it fills edge-to-edge, UI floats on top
  • Don't use white text on a gray surface — text on dark is always pure white
  • Don't animate slowly — all feed interactions are 200-400ms springs; longer feels broken
  • Don't hide the right-side action rail on the feed — it's load-bearing UX
  • Don't use rose for inactive states or borders — it must stay a verb

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 Tiktok design language. Follow the measured tokens below — do not substitute your own palette.

Colors:
- TikTok Rose: #fe2c55
- TikTok Cyan: #25f4ee
- Pure White: #ffffff
- Canvas Black: #010101
- Elevated Surface: #161823
- Comment Compose: #2f2f2f
- Text Primary: #ffffff
- Text Secondary: #e5e5e5
- Live Red: #fe2c55
- Unread Badge: #fe2c55

Type:
- families: Proxima Nova, Fallback Stack
- scale: 10, 12, 13, 14, 15, 16, 17, 24
- weights: 400, 500, 600, 700

Shape:
- radius: 4, 8, 12
- elevation: Proxima Nova throughout, 400 / 600 / 700 weights, with text-on-video shadow | Count label below each icon: 13pt weight 700 `#FFFFFF` with the same drop shadow | Apply the `rgba(0,0,0,0.4)` text shadow on every label sitting on top of a video

Spacing: 6

Rules:
- Use `#010101` as the canvas — true black, because video frames need the deepest possible bezel
- Reserve rose `#FE2C55` for Like, Follow, scrubber fill, and any "this is the primary verb" moment
- Use cyan `#25F4EE` sparingly — Create button and chromatic accents only
- Apply the `rgba(0,0,0,0.4)` text shadow on every label sitting on top of a video
- Use chromatic aberration (cyan -3pt X, rose +3pt X offset around a white core) on the wordmark, Create button, and loading spinner
- Bold hashtags inline within captions (weight 700 amid weight 400 caption text)

Avoid:
- Don't use `#000000` — the brand token is `#010101`, a hair warmer
- Don't add secondary accent colors — cyan and rose are the only chromatic moments
- Don't use a light mode — TikTok is dark-only; there is no cream, no off-white canvas
- Don't use a full-pill corner on buttons — 4pt is the signature
- Don't let captions sit on video without a drop shadow — they become unreadable on bright frames
- Don't use chromatic aberration decoratively — it's a logo / brand moment, not a flourish

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

The specification

Colour paletteRead the full spec

Primary

  • TikTok Rose (#FE2C55): Primary CTA, Follow button (unfollowed state), Like heart active, video progress scrubber fill, notification badges, chromatic aberration red-channel.
  • TikTok Cyan (#25F4EE): Create button accent, chromatic aberration cyan-channel, subtle highlights, loading spinners.
  • Pure White (#FFFFFF): Primary text on video, neutral icons, Create button core fill.

Canvas & Surfaces

  • Canvas Black (#010101): Primary canvas — effectively true black, absorbs letterboxing on non-9:16 content.
  • Elevated Surface (#161823): DMs inbox, profile settings list, sheet backgrounds — a hair warmer than black so elevation reads.
  • Comment Compose (#2F2F2F): Input field on the comments sheet, search bar on Discover.
  • Follower Gray (rgba(255,255,255,0.15)): "Following" / followed-state pill background, secondary CTAs on dark overlays.
  • Overlay Scrim (rgba(0,0,0,0.4)): Drop-shadow under text that sits on video, used to protect legibility.
  • Sheet Dim (rgba(0,0,0,0.6)): Background dim behind bottom sheets (comments, share).

Text

  • Text Primary (#FFFFFF): Captions, usernames, icon glyphs, all text overlaid on video.
  • Text Secondary (#E5E5E5): Hashtag color in captions (slightly softer than white), like / comment counts, music title on the marquee.
  • Text Tertiary (rgba(255,255,255,0.6)): Timestamps, "Suggested for you" labels, placeholder text in comment input.
  • Text Disabled (rgba(255,255,255,0.3)): Inactive tab labels, disabled button states.

Semantic

  • Live Red (#FE2C55): "LIVE" badge on profile avatars, same token as rose.
  • Unread Badge (#FE2C55): Red dot on inbox tab, same token.
  • Success Green (#25F4EE): Rarely used; cyan covers "success" states semantically.
  • Error Red (#FE2C55): Same token as rose.

Dark-Only

TikTok has no official light mode. Every screen — feed, profile, inbox, search, settings — is dark. The only "light" surfaces are the composer sheet when selecting effects (a white-background picker) and the camera viewfinder (the camera's own image).

Type scaleRead the full spec

Font Family

  • Primary: Proxima Nova (TikTok uses a lightly modified version of the Mark Simonson family across product UI)
  • Fallback Stack: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif
  • CJK / Non-Latin: Platform-native — PingFang SC (Chinese), Hiragino Sans (Japanese), Apple SD Gothic Neo (Korean), system Arabic and Thai stacks
  • TikTok does not publish a proprietary typeface; Proxima Nova is used across product UI per multiple industry references

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Profile Display NameProxima Nova24pt7001.2-0.2ptLarge name on own-profile header
Section / Sheet TitleProxima Nova17pt6001.25-0.1pt"Comments (1,234)", "Share to"
CaptionProxima Nova15pt4001.350ptVideo caption over the feed, 2-line clamp before "more"
Caption HashtagProxima Nova15pt7001.350ptInline hashtags bold in captions
Username (Feed)Proxima Nova16pt7001.20pt@username on feed overlay, precedes caption
Username (List)Proxima Nova15pt6001.250ptSearch results, follower lists, inbox
Action CountProxima Nova13pt7001.20pt"1.2M" under heart, "34.5K" under comment
Music MarqueeProxima Nova13pt5001.20pt"original sound - @creator" bottom ticker
BodyProxima Nova14pt4001.40ptComment text, DM text
Meta / TimestampProxima Nova12pt4001.30pt"2h ago", "Viewed 5m"
Tab LabelProxima Nova10pt6001.00.1ptHome / Shop / Inbox / Profile
Button (Primary)Proxima Nova16pt7001.00ptFollow / Sign up / Continue
Button (Secondary)Proxima Nova14pt6001.00ptFollowing / Share / Cancel
Hashtag ChipProxima Nova13pt6001.00pt"#fyp #foryou" chip buttons

Principles

  • Weights concentrated at 400 / 600 / 700: Regular for body, semibold for UI, bold for titles and counts
  • Overlay shadow is non-negotiable: Any text rendered over a video frame uses a rgba(0,0,0,0.4) drop shadow at 1pt Y offset and 4pt blur
  • Hashtags bold inline: Inside a caption, # tokens are 700 while the surrounding caption text is 400 — this is the TikTok signature for captions
  • Numeric counts abbreviate: 1.2M, 34.5K, 999 — never raw integers above 1,000
  • Dynamic Type respected on Latin; fixed size on overlays: Feed captions and action counts do not scale with Dynamic Type (layout-sensitive); profile and sheet text do
Components and layoutRead the full spec

Buttons

Follow Button (the iconic rose pill)

  • Shape: Pill, 28pt height, 56-64pt wide depending on "Follow" vs "Following"
  • Unfollowed: background #FE2C55, text #FFFFFF, 14pt weight 700 ("Follow")
  • Followed: background rgba(255,255,255,0.15), text #FFFFFF ("Following"), 14pt weight 600
  • Corner radius: 4pt (intentionally softer than full-pill — this is a TikTok-specific detail)
  • Padding: 6pt vertical, 16pt horizontal
  • Pressed: scale 0.95 with success haptic on follow, soft haptic on unfollow

Primary Pill (Sign up / Continue / Send)

  • Background: #FE2C55
  • Text: #FFFFFF, 16pt weight 700
  • Height: 48pt, full-width on sheets, corner radius 4pt
  • Pressed: opacity 0.85, scale 0.98, with medium haptic

Right-Rail Icon Button (Heart / Comment / Bookmark / Share)

  • Size: 32pt glyph, 48pt hit area (stacked vertically at 24pt intervals)
  • Default: #FFFFFF glyph with rgba(0,0,0,0.25) drop shadow (so it stays legible over video)
  • Active (heart liked): #FE2C55 fill with 1.0 → 1.3 → 1.0 spring bounce, heavy haptic
  • Count label below each icon: 13pt weight 700 #FFFFFF with the same drop shadow
  • Tap hit area extends to include the count label

Double-Tap-to-Like (Center Explosion)

  • Large #FE2C55 heart appears at the center of the video where the second tap landed
  • Scale animation: 0.0 → 1.4 → 1.0 over 400ms with spring, then fade to 0 over 200ms
  • Size at peak: 120pt
  • Heavy haptic on first tap of the pair; no haptic on second tap

Create Button (Tab Bar Center)

  • Shape: Rounded rectangle, 44pt wide × 30pt tall, corner radius 8pt
  • Construction: a white fill layer, a cyan (#25F4EE) layer offset -3pt X / 0pt Y, a rose (#FE2C55) layer offset +3pt X / 0pt Y — all clipped to the rounded-rect shape so you see cyan on the left edge, rose on the right edge, white in the middle, and the aberration effect at the seams
  • Centered white "+" glyph (SF Symbol plus, 18pt weight bold, #010101 color)
  • Pressed: entire button scales 0.94; heavy haptic

Cards & Containers

Video Feed Cell (For You)

  • Full viewport: width × height of the screen (safe-area-to-safe-area, but video content itself ignores safe areas and fills edge-to-edge)
  • No card chrome — the video IS the cell
  • Overlays:
  • Right-rail action stack positioned 12pt from right edge, centered vertically between ~55% and ~90% of the height
  • Bottom-left info block positioned 16pt from left edge, bottom-aligned above the tab bar safe area
  • Progress scrubber sits 1pt tall at the very bottom of the video area (hidden until the user long-presses or scrubs)

Right-Side Action Rail

  • Stack layout, 24pt gap between items
  • Order top-to-bottom: 1. Creator avatar (48pt circle, 2pt white border, a red + badge at bottom-right when not followed — the badge disappears on follow with a spring shrink) 2. Heart icon (32pt) + count 3. Comment bubble (32pt) + count 4. Bookmark icon (32pt) + count 5. Share arrow (32pt) + count 6. Spinning music disc (44pt circle, rotating 360° / 6s, shows the cover art of the audio track)

Bottom-Left Info Overlay

  • Width: ~65% of screen, right edge stops before the action rail
  • Top: @username (16pt weight 700 white)
  • Middle: caption (15pt weight 400 white, hashtags bold) with 2-line clamp and "more" trailing
  • Bottom: music marquee — music note icon + "original sound - @creator" in 13pt weight 500, horizontally scrolls right-to-left if truncated

Comments Bottom Sheet

  • Height: ~75% viewport, corner radius 12pt top-only
  • Background: #161823 (elevated surface)
  • Header: 48pt tall, centered 36pt × 4pt grabber, title "Comments (1,234)" at 17pt weight 600 white, close X top-right
  • List: comment row with 36pt avatar left, username 14pt weight 700 + comment 14pt weight 400 stacked, like icon 18pt right with count below
  • Compose bar (bottom, pinned above keyboard): 44pt tall field, background #2F2F2F, corner radius 4pt, placeholder "Add comment..." at 14pt tertiary, emoji shortcuts row above

Profile Header

  • Centered avatar (96pt circle, 3pt white border, LIVE red ring if currently live-streaming)
  • Display name (24pt weight 700) + @handle (15pt weight 400 secondary) stacked below
  • Stat row: Following count, Followers count, Likes count — each as a vertical stack (big number 17pt weight 700 white, label 13pt weight 400 secondary) separated by 16pt gap
  • Follow button (if not own profile) + Message secondary pill + share icon
  • Bio text (14pt weight 400 white, max 3 lines)
  • Tab row: grid icon (posts) / lock icon (private) / heart icon (liked) — 32pt, active indicator is a 2pt white bar below

Navigation

Bottom Tab Bar

  • Height: 48pt + safe area bottom
  • Background: rgba(1,1,1,0.92) with .regularMaterial blur, 0.5pt top divider at rgba(255,255,255,0.08)
  • 5 tabs: Home / Discover (magnifying glass) / Create (centered, chromatic) / Inbox / Profile
  • Labels: Proxima Nova 10pt weight 600, below icon
  • Active: #FFFFFF. Inactive: rgba(255,255,255,0.5). Notification badge: 8pt #FE2C55 dot top-right of icon
  • On the feed screen specifically, the tab bar is *transparent* with only the glyphs and labels visible — no material, just text-shadowed icons over the video

Top Feed Tabs

  • Positioned at top center, below Dynamic Island / notch safe area
  • "Following" / "For You" horizontal tabs — only these two labels visible
  • Active: white 17pt weight 700. Inactive: rgba(255,255,255,0.6) 17pt weight 400
  • Hairline animated underline (2pt wide #FFFFFF) slides between the labels on tab change
  • No container — just text floating on top of the video

Navigation Bar (Inbox / Profile / Sheets)

Responsive behaviourRead the full spec

Device Sizes

DeviceWidthKey Changes
iPhone SE (3rd gen)375ptAction rail at 12pt spacing instead of 24pt; video letterboxed slightly
iPhone 13/14/15390ptStandard layout, 9:16 video fills perfectly
iPhone 15/16 Pro393ptDynamic Island accommodated, top tabs shifted 12pt down
iPhone 15/16 Pro Max430ptLarger avatar (52pt) on action rail, 15pt caption bumped to 16pt
iPad768pt+Two-column feed (video left, comments inline right) in landscape; single-column portrait with max-width 430pt centered

Dynamic Type

  • Sheet content (comments, inbox, settings): full scale
  • Feed captions, usernames, action counts: fixed size (layout-sensitive)
  • Tab bar labels: fixed 10pt
  • Profile display name: scales up to 28pt max

Orientation

  • Feed: portrait-locked — 9:16 video is the whole thesis
  • Live streams: portrait-locked for the viewer
  • Video player modal (from profile grid): rotates to landscape; controls shift to one side
  • Discover / Inbox / Profile: portrait-locked

Touch Targets

  • Right-rail icons: 32pt glyph, 48pt hit area
  • Follow button: 28pt tall, 56-64pt wide, full button tappable
  • Tab bar: 48pt tall, icons 24pt with 44pt hit
  • Create button: 44 × 30pt, 56pt hit area
  • Double-tap zone: the entire video frame (anywhere)

Safe Area Handling

  • Video content: ignores safe area, fills edge-to-edge (video is allowed under the Dynamic Island)
  • UI overlays: respect safe area — right rail, info block, tab bar, top tabs all sit inside
  • Status bar: always .lightContent on feed (white over video); matches surface color on sheets
  • Home indicator: respected by tab bar; feed video passes under it

Drop-in CSS variables

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

body.theme-tiktok {--page-bg: #010101;
  --page-bg-gradient: none;
  --text-color: #ffffff;
  --heading-color: #ffffff;
  --link-color: #fe2c55;
  --link-hover-color: #f60131;
  --border-color: #2f2f2f;
  --card-bg: #010101;
  --card-shadow: 0 1px 2px rgba(255,255,255,0.06);
  --card-hover-shadow: 0 6px 18px rgba(255,255,255,0.12);
  --header-bg: #151515;
  --header-text-color: #ffffff;
  --header-shadow: none;
  --footer-bg: #010101;
  --footer-text-color: #a6a6a6;
  --button-bg: #fe2c55;
  --button-text-color: #000000;
  --button-hover-bg: #f60131;
  --button-border: none;
  --button-border-radius: 8px;
  --button-secondary-bg: #101010;
  --button-secondary-text-color: #ffffff;
  --button-secondary-hover-bg: #1f1f1f;
  --button-secondary-border: 1px solid #2f2f2f;
  --prompt-bg: #0e0e0e;
  --prompt-text-color: #ffffff;
  --base-font: var(--font-sans);
  --heading-font: var(--font-sans);
  --card-border-radius: 8px;
}

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/social/tiktok/DESIGN.md · 25.8 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.