SecretoCho
menu

component 13 / 28WORKING

SC CSS Pattern

type
Code Component
platform
Framer
read time
7–9 min
license
SecretoCho Design
needs JavaScript

demo · runs with JavaScript

fig 00 · live demo, ported from SC_CSS_Pattern.tsx

Pure-CSS pattern generator (grid, stripes, checks, dots, zigzag, triangles) with size/spacing/angle controls and optional text-clip mode; GPU-accelerated backgrounds.

SC CSS Pattern is a pure-CSS pattern generator for Framer. It renders repeatable grids, stripes, dots, zigzags, triangles, and more using background-image gradients—no SVG or canvas. Optionally, the pattern can be clipped into text for bold, typographic fills.

Perfect for hero textures, section dividers, posters, or animated layouts when paired with Framer’s scroll/hover effects.

  • Visual
  • Pattern Generator
  • CSS

Main

Overview

Built With
React, CSS, Framer Code Component API
Layout Support
Fully Responsive or fixed width/height
Orientation
Full Fill or Text Clip
Ideal Use Case
Decorative backgrounds, patterned text, section textures

Tags

  • css
  • gradients
  • repeating-linear
  • radial
  • background-clip
  • text
  • pattern

Code comment

SC_CSS_Pattern.tsx · lines 4–9 · the file’s header comment
/** * @framerDisableUnlink * @framerSupportedLayoutWidth any * @framerSupportedLayoutHeight any * © SecretoCho Design 2025 (https://secretocho.design) */

Dependencies

Technologies
None (pure CSS)
Notes
No runtime libraries required; works with Framer’s standard runtime.

Complexity

Logic Level
Low–Medium (computed CSS)
Runtime Cost
Very Low (GPU-accelerated background paints)
Component Size
~2–3 KB (raw TSX)
Notes
Text clip mode benefits from large font sizes for crisp results.

Guide

Instructions

  1. Paste the SCCssPattern code component into your Framer project.
  2. Place it on the canvas. It defaults to fill its parent (width/height: 100%).
  3. Choose a Pattern via Pattern (grid, checks, stripes, dots, zigzag, triangles, etc.).
  4. Tune Look with Size, Stroke Width, Dot Size, Spacing, and angles (Angle, Triangle Angle).
  5. Color sets the pattern color (uses currentColor, so it also drives text color when not clipped).
  6. Text Clip (optional): Enable Text Clip, then edit Text, Font Size, Font Weight, and Align.
  7. Responsive Tips: Use the layer’s constraints or set explicit width/height props for fixed tiles.

Examples / Presets

  • Subtle Grid

    patternType
    grid
    size
    28
    strokeWidth
    1
    color
    #CCD3DC
  • Bold Diagonal

    patternType
    diagonal-stripes
    size
    12
    strokeWidth
    4
    angle
    45
    color
    #111
  • Dot Matrix

    patternType
    dots
    dotSize
    2
    spacing
    14
    color
    #00A3FF
  • Text Fill

    isTextPattern
    true
    text
    "PATTERN"
    fontSize
    96
    patternType
    checks

Mechanics

How it Works

  • Computed Styles: A switch on patternType returns a patternStyle containing one or more gradient layers.
  • Line & Grid Patterns: Use linear-gradient or repeating-linear-gradient with backgroundSize to space strokes.
  • Dots / Cross Dots: Use radial-gradient “dot” plus optional offset layer for cross-hatch placement.
  • Stripes: Horizontal/vertical/diagonal variants rely on gradient direction and repeat size; diagonal uses angle.
  • Checks & Zigzag: Layered gradients with offsets create checkerboards and zig patterns.
  • Triangles: A single linear-gradient at triangleAngle produces tiled right triangles.
  • Text Clip Mode: Applies the pattern to the text by setting background-clip: text and -webkit-background-clip: text with transparent fill, leaving only the patterned glyphs visible.

Performance & Tuning

  • Paint-cheap; avoid extreme Size on huge canvases.
  • Dots: keep dotSize 1–3 with spacing 10–24.
  • Text Clip: large fonts reduce moiré; keep lineHeight ≈ 1.2.

Compatibility & Limits

  • Evergreen browsers (Chrome, Edge, Firefox, Safari).
  • Text clipping uses background-clip: text + -webkit- prefix (included).
  • No external dependencies.

Quality

Accessibility

  • Decorative by default. If purely ornamental, wrap with aria-hidden="true".
  • In Text Clip mode, ensure sufficient contrast and legible size.

Security & Privacy

  • No network calls; no storage.
  • Typed props; no dangerouslySetInnerHTML / eval.
  • No device permissions. Pure style computation; no global listeners.

Reference

Props

nametypedefaultdescription
widthstring|number100%Component width (supports %, px)
heightstring|number100%Component height (supports %, px)
patternTypestringgridType of pattern to render
sizenumber25Base pattern size for lines/checks/etc.
colorstring#0099FFPattern color (used as currentColor)
strokeWidthnumber1Line width for grid/lines/diagonal stripes
anglenumber45Angle (deg) for diagonal stripes
triangleAnglenumber(enum)45Triangle fill angle (45, 135, -45, -135)
dotSizenumber2Dot radius for dot-based patterns
spacingnumber15Dot spacing for dots/cross-dots
isTextPatternbooleanfalseClip pattern into text instead of background
textstringPattern TextText content when Text Clip is enabled
fontSizenumber72Font size (px) for text pattern
fontWeightnumber700Font weight for text pattern (100–900)
textAlignstring(enum)centerHorizontal alignment of text (left/center/right)

Notes & Tips

  • Prefer integer Size and Stroke Width 1–2px for crisp lines.
  • Neutral colors for backgrounds; high contrast for text fills.

Troubleshooting / FAQ

Pattern looks blurry

Use integer size; reduce strokeWidth; avoid scaling transforms.

Text invisible

Ensure Text Clip is on and global CSS doesn’t override WebkitTextFillColor.

Moiré

Increase size/spacing or lower contrast.

Source

Header comment

SC_CSS_Pattern.tsx has no doc comment: its header, lines 4–9, holds only Framer’s annotations (shown under [MAIN]).

props [REF]

Key excerpt

Every pattern is one CSS background recipe drawn in currentColor: the size guards and the first four of the eleven cases.

SC_CSS_Pattern.tsx · lines 72–102 · tsx
    const getPatternStyle = (): React.CSSProperties => {        const s = Math.max(size, 1)        const sw = Math.max(strokeWidth, 0.1)        const ds = Math.max(dotSize, 0.1)        const sp = Math.max(spacing, 1)        switch (patternType) {            case "checks":                return {                    backgroundImage: `repeating-linear-gradient(45deg, currentColor 25%, transparent 25%, transparent 75%, currentColor 75%, currentColor), repeating-linear-gradient(45deg, currentColor 25%, transparent 25%, transparent 75%, currentColor 75%, currentColor)`,                    backgroundPosition: `0 0, ${s}px ${s}px`,                    backgroundSize: `${s * 2}px ${s * 2}px`,                }            case "grid":                return {                    backgroundImage: `linear-gradient(currentColor ${sw}px, transparent ${sw}px), linear-gradient(to right, currentColor ${sw}px, transparent ${sw}px)`,                    backgroundSize: `${s}px ${s}px`,                }            case "dots":                return {                    backgroundImage: `radial-gradient(currentColor ${ds}px, transparent ${ds}px)`,                    backgroundSize: `${sp}px ${sp}px`,                }            case "cross-dots": {                const sp2 = sp / 2                return {                    backgroundImage: `radial-gradient(currentColor ${ds}px, transparent ${ds}px), radial-gradient(currentColor ${ds}px, transparent ${ds}px)`,                    backgroundSize: `${sp}px ${sp}px`,                    backgroundPosition: `0 0, ${sp2}px ${sp2}px`,                }            }

Credits

Credits

Inspired by classic CSS gradient pattern techniques.
Original implementation and Framer adaptation by SecretoCho Design.

license
SecretoCho Design

SecretoCho Design 2025

Disclaimer

Proves

Hiring a design engineer?

I’m open to senior design engineer roles: remote from Belgrade, or relocation with visa sponsorship. Write to me, or read the CV first. Client work stays selective, one project at a time.

sc@secretocho.design

read the CV · LinkedIn