Design & Graphics

BACKGROUND PATTERN GENERATOR

Create seamless SVG and CSS background patterns (dots, blueprints, isometric grids, diagonal stripes) with live scale and color controls.

Pattern Type
Pattern Size / Scale 24px
Stroke / Dot Radius 2px
Pattern Color
Background Color

        
Developer Reference

Core Algorithm & Standalone Script

Standalone, zero-dependency JavaScript implementation powering this tool. Free to inspect, copy, and build upon.

let currentType = 'dots';
    const elSize = document.getElementById('input-size');
    const elStroke = document.getElementById('input-stroke');
    const elFg = document.getElementById('input-fg');
    const elBg = document.getElementById('input-bg');

    const stage = document.getElementById('pattern-stage');
    const cssOut = document.getElementById('css-output');
    const toast = document.getElementById('toast');

    let lastSvgCode = '';

    function showToast(msg) {
      toast.textContent = msg;
      toast.classList.add('show');
      setTimeout(() => toast.classList.remove('show'), 2000);
    }

    function generatePatternSvg() {
      const size = parseInt(elSize.value);
      const stroke = parseInt(elStroke.value);
      const fg = elFg.value;
      const bg = elBg.value;

      document.getElementById('val-size').textContent = size + 'px';
      document.getElementById('val-stroke').textContent = stroke + 'px';

      let patternContent = '';

      if (currentType === 'dots') {
        patternContent = `<circle cx="${size/2}" cy="${size/2}" r="${stroke}" fill="${fg}" />`;
      } else if (currentType === 'grid') {
        patternContent = `<path d="M ${size} 0 L 0 0 0 ${size}" fill="none" stroke="${fg}" stroke-width="${stroke}" />`;
      } else if (currentType === 'iso') {
        patternContent = `<path d="M 0 ${size/2} L ${size/2} 0 L ${size} ${size/2} L ${size/2} ${size} Z" fill="none" stroke="${fg}" stroke-width="${stroke}" />`;
      } else if (currentType === 'stripes') {
        patternContent = `<path d="M 0 ${size} L ${size} 0 M -${size/4} ${size/4} L ${size/4} -${size/4} M ${size*3/4} ${size*5/4} L ${size*5/4} ${size*3/4}" fill="none" stroke="${fg}" stroke-width="${stroke}" />`;
      }

      const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}">
  <rect width="100%" height="100%" fill="${bg}" />
  ${patternContent}
</svg>`;

      lastSvgCode = svg;

      const encoded = encodeURIComponent(svg).replace(/'/g, "%27").replace(/"/g, "%22");
      const css = `background-color: ${bg};\nbackground-image: url("data:image/svg+xml,${encoded}");\nbackground-size: ${size}px ${size}px;`;

      stage.style.cssText = css;
      cssOut.textContent = css;
    }

    document.querySelectorAll('.btn-preset').forEach(btn => {
      btn.addEventListener('click', () => {
        document.querySelectorAll('.btn-preset').forEach(b => b.classList.remove('active'));
        btn.classList.add('active');
        currentType = btn.dataset.type;
        generatePatternSvg();
      });
    });

    [elSize, elStroke, elFg, elBg].forEach(input => {
      input.addEventListener('input', generatePatternSvg);
    });

    document.getElementById('btn-copy-css').addEventListener('click', () => {
      navigator.clipboard.writeText(cssOut.textContent);
      showToast('CSS Background copied!');
    });

    document.getElementById('btn-copy-svg').addEventListener('click', () => {
      navigator.clipboard.writeText(lastSvgCode);
      showToast('SVG Code copied!');
    });

    generatePatternSvg();
Copied to clipboard!