How to Create CSS Gradients — Linear, Radial & Conic Tutorial

Master CSS gradients from syntax to production. Learn linear, radial, and conic gradient mechanics, color stops, angles, performance best practices, and WCAG contrast.

By PS Color Design Team PS Color Design & Accessibility Research

1. What Are CSS Gradients?

In modern web design, a CSS gradient is not a static raster image file (like PNG or JPEG); it is a synthetic image generated algorithmically by the browser's graphics rendering engine. Gradients are defined using the background or background-image CSS property and provide multiple significant performance benefits:

  • Zero HTTP Network Overhead: Gradients require no external asset requests, DNS lookups, or image decoding latency, resulting in faster Largest Contentful Paint (LCP) times.
  • Infinite Resolution Scalability: Because gradients are vector calculations, they render with razor-sharp fidelity on standard displays, 4K Retina screens, and ultra-wide mobile viewports without pixelation.
  • Dynamic Customizability: Color stops, angles, and opacities can be adjusted dynamically in real time using CSS custom properties (variables) or JavaScript state.

CSS Level 3 and 4 Image Values specifications define three primary gradient types: Linear Gradients (transitions along a directional axis), Radial Gradients (emanating from a central focal point), and Conic Gradients (rotational sweeps around a center point).

2. CSS Linear Gradients (Syntax & Angles)

A linear gradient transitions smoothly between two or more colors along a straight imaginary line called the gradient ray. The syntax accepts an optional direction followed by a comma-separated list of color stops:

CSS Linear Gradient Syntax
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);

Understanding the Angle Coordinate System

Angles specify the trajectory of the gradient ray. By standard CSS convention:

Angle (deg) Keyword Equivalent Direction of Flow
0deg to top Bottom to Top (vertical upward)
90deg to right Left to Right (horizontal forward)
135deg to bottom right Top-Left to Bottom-Right (classic UI diagonal)
180deg to bottom Top to Bottom (default if angle omitted)
270deg to left Right to Left (horizontal backward)
Pro Tip on Corner Angles: When using named keywords such as to bottom right, the gradient ray targets the exact corner of the element, adapting proportionally if the element is resized. When using fixed degree values like 135deg, the angle remains strictly invariant regardless of container aspect ratio.

3. CSS Radial Gradients (Shapes & Positioning)

Radial gradients radiate colors outward from a focal point, expanding in concentric circles or ellipses. They are ideal for creating spotlight effects, soft background glows, and futuristic atmospheric depths.

CSS Radial Gradient Syntax
background: radial-gradient(circle at center, #f857a6 0%, #ff5858 50%, #111827 100%);

Key Parameters:

  • Shape: circle maintains an exact 1:1 circular aspect ratio; ellipse (default) stretches automatically to fill the container's width and height.
  • Position: Defined using the at <position> clause. Standard presets include at center, at top left, at bottom right, or exact coordinates like at 30% 70%.
  • Extent Keywords: closest-side, farthest-side, closest-corner, and farthest-corner (default) govern how far the ending color stop extends relative to container boundaries.

4. CSS Conic Gradients (Angles & Sweeps)

Conic gradients sweep colors around a central point, similar to a radar sweep, color wheel, or pie chart slice. Unlike radial gradients where colors diffuse outward from the center, conic colors rotate around the center point from a starting angle.

CSS Conic Gradient Syntax
background: conic-gradient(from 0deg at 50% 50%, #f43f5e, #fbbf24, #10b981, #3b82f6, #f43f5e);
Seamless 360° Looping: To avoid a harsh seam line where the sweep begins and ends, ensure your starting color and terminating color are identical (e.g. #f43f5e at 0% and 100%).

5. Multi-Stop Gradients & Position Control

A CSS gradient requires a minimum of 2 color stops, but can support up to 8 or more stops to craft rich, multidimensional color tapestries. Color stops can be assigned explicit position percentages (e.g., 0%, 25%, 60%, 100%).

Creating Hard Stripe Transitions

By placing two distinct color stops at the exact same percentage position, you eliminate the smooth blend and produce an instant crisp line (hard stop):

Crisp Split Dual Tone
background: linear-gradient(90deg, #1e293b 0%, #1e293b 50%, #3b82f6 50%, #3b82f6 100%);

6. Eliminating Color Banding & Muddy Grays

One of the most frequent frustrations in gradient design is color banding or the "gray dead zone" — when transitioning between two vibrant complementary hues (such as blue and orange), standard sRGB interpolation blends through an unappealing, desaturated muddy brownish-gray.

Solutions:

  • Add an Intermediate Bridge Stop: Introduce a harmonious third color stop near the 50% midpoint (such as purple between blue and red, or turquoise between blue and yellow) to keep luminance and saturation high.
  • Modern CSS Color Spaces (CSS Color 4): Modern browsers now support color space interpolation syntax:
    background: linear-gradient(in oklch 90deg, #3b82f6, #f97316);
    The oklch and srgb-linear color spaces calculate transitions based on perceptual human lightness, completely eliminating muddy gray midpoints.

7. Text Contrast & Accessibility Over Gradients

When displaying typography or interactive UI elements over a gradient background, compliance with WCAG 2.1 Level AA (minimum 4.5:1 contrast for normal text, 3:1 for large text) is essential. Because gradients shift in luminance across their surface, a text color that passes on one side might completely fail on the other.

Accessibility Best Practices:
  • Calculate contrast against both the lightest and darkest stops in the gradient.
  • If text spans across both light and dark stops, introduce a semi-transparent dark backing card: background: rgba(17, 19, 24, 0.75); backdrop-filter: blur(8px);.
  • Never rely on faint CSS text-shadow alone to compensate for severe contrast failures.

8. Interactive Tool: PS Color Gradient Generator

Live Generator

PS Color CSS Gradient Generator

Design, customize, and export high-performance linear, radial, and conic gradients in real time. Features full 0–360° angle dials, 2 to 8 editable color stops, instant CSS copy, and 4K PNG downloads with zero setup.

9. Frequently Asked Questions

Q: What is the difference between background and background-image for gradients?

background-image specifically sets the gradient layers, whereas the shorthand background also resets background-color, background-position, background-repeat, and background-attachment to their defaults. Shorthand background is widely preferred for clean, single-declaration styling.

Q: Can CSS gradients be animated with transitions?

Traditionally, browsers could not interpolate between gradient strings in CSS transitions. However, by using modern CSS Houdini @property declarations to animate custom property values (such as an angle or color stop percentage), smooth 60fps gradient animations are now natively achievable in all modern browsers.

Q: How do I export my gradient as a high-resolution PNG image?

Use the PS Color Gradient Generator. Simply configure your desired gradient, select your target aspect ratio (Square 1080×1080, Portrait 1080×1350, or Landscape 1920×1080), and click "Download PNG" to export locally with PS Color quality branding.