Pool Fence Compliance Calculator

ANALife Services AuthorityNational Calculator Authority›Pool Fence Compliance Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

# Pool Fence Compliance Calculator

Use this tool to check whether your pool barrier meets common residential pool fencing requirements based on the International Swimming Pool and Spa Code (ISPSC) and widely adopted local standards. Enter your fence and gate specifications below to receive a compliance summary.

Fence / Barrier Height (inches)

Bottom Gap — Ground to Fence Bottom (inches)

Largest Fence Opening / Picket Gap (inches)

Fence Setback from Water Edge (feet)

Gate Height (inches)

Gate Latch Height from Ground (inches)

Gate is Self-Closing?

-- Select -- Yes No

Gate is Self-Latching?

-- Select -- Yes No

Gate Swings Away from Pool?

-- Select -- Yes No

Check Compliance Fill in all fields above and click "Check Compliance".

function pfcCalculate() { const resultEl = document.getElementById('pfc-result');

// --- Gather inputs --- const fenceHeight = parseFloat(document.getElementById('pfc-fence-height').value); const bottomGap = parseFloat(document.getElementById('pfc-bottom-gap').value); const maxOpening = parseFloat(document.getElementById('pfc-max-opening').value); const setback = parseFloat(document.getElementById('pfc-setback').value); const gateHeight = parseFloat(document.getElementById('pfc-gate-height').value); const latchHeight = parseFloat(document.getElementById('pfc-latch-height').value); const selfClosing = document.getElementById('pfc-self-closing').value; const selfLatching = document.getElementById('pfc-self-latching').value; const outwardSwing = document.getElementById('pfc-outward-swing').value;

// --- Validate --- if ( isNaN(fenceHeight) || isNaN(bottomGap) || isNaN(maxOpening) || isNaN(setback) || isNaN(gateHeight) || isNaN(latchHeight) || selfClosing === '' || selfLatching === '' || outwardSwing === '' ) { resultEl.innerHTML = '⚠️ Please complete all fields before checking compliance.'; return; }

if ( fenceHeight ⚠️ All numeric values must be greater than zero (bottom gap may be 0).'; return; }

// --- ISPSC / IRC Standards --- const MIN_FENCE_HEIGHT_IN = 48; // inches (ISPSC §305.2) const MAX_BOTTOM_GAP_IN = 2; // inches (ISPSC §305.4) const MAX_OPENING_IN = 4; // inches (ISPSC §305.3 — 4-inch sphere rule) const MIN_SETBACK_FT = 3; // feet (common local code; ISPSC §305.1) const MIN_GATE_HEIGHT_IN = 48; // inches (matches fence) const MIN_LATCH_HEIGHT_IN = 54; // inches (ISPSC §305.6 — or on pool side if = MIN_FENCE_HEIGHT_IN; checks.push({ label : 'Fence Height', pass : fencePass, detail: fenceHeight.toFixed(1) + '" measured — minimum required: ' + MIN_FENCE_HEIGHT_IN + '"', ref : 'ISPSC §305.2' });

// 2. Bottom gap const bottomPass = bottomGap = MIN_SETBACK_FT; checks.push({ label : 'Setback from Water Edge', pass : setbackPass, detail: setback.toFixed(1) + " ft — minimum required: " + MIN_SETBACK_FT + ' ft', ref : 'ISPSC §305.1' });

// 5. Gate height const gateHeightPass = gateHeight >= MIN_GATE_HEIGHT_IN; checks.push({ label : 'Gate Height', pass : gateHeightPass, detail: gateHeight.toFixed(1) + '" — minimum required: ' + MIN_GATE_HEIGHT_IN + '"', ref : 'ISPSC §305.5' });

// 6. Latch height // If latch is on pool side it must be ≥54"; if on non-pool side ≥54" OR recessed/shielded const latchPass = latchHeight >= MIN_LATCH_HEIGHT_IN; checks.push({ label : 'Gate Latch Height', pass : latchPass, detail: latchHeight.toFixed(1) + '" from ground — minimum required: ' + MIN_LATCH_HEIGHT_IN + '" (or recessed on non-pool side)', ref : 'ISPSC §305.6' });

// 7. Self-closing gate const selfClosingPass = selfClosing === 'yes'; checks.push({ label : 'Self-Closing Gate', pass : selfClosingPass, detail: selfClosing === 'yes' ? 'Gate is self-closing ✓' : 'Gate must be self-closing', ref : 'ISPSC §305.5' });

// 8. Self-latching gate const selfLatchingPass = selfLatching === 'yes'; checks.push({ label : 'Self-Latching Gate', pass : selfLatchingPass, detail: selfLatching === 'yes' ? 'Gate is self-latching ✓' : 'Gate must be self-latching', ref : 'ISPSC §305.5' });

// 9. Outward swing const swingPass = outwardSwing === 'yes'; checks.push({ label : 'Gate Swing Direction', pass : swingPass, detail: outwardSwing === 'yes' ? 'Gate swings away from pool ✓' : 'Gate must swing away from (outward from) the pool', ref : 'ISPSC §305.5' });

// --- Tally --- const totalChecks = checks.length; const passedChecks = checks.filter(c => c.pass).length; const failedChecks = totalChecks - passedChecks; const allPass = failedChecks === 0;

// --- Build result HTML --- let html = '';

if (allPass) { html += ''; html += '✅ COMPLIANT — All ' + totalChecks + ' checks passed.'; html += 'Your pool barrier meets the standard requirements reviewed by this calculator. Always verify with your local building authority before final inspection.

'; html += ''; } else { html += ''; html += '❌ NON-COMPLIANT — ' + failedChecks + ' of ' + totalChecks + ' check(s) failed.'; html += 'Address the items marked below before your inspection. Consult your local pool code for jurisdiction-specific requirements.

'; html += ''; }

html += ''; html += ''; html += 'Check'; html += 'Status'; html += 'Detail'; html += 'Reference'; html += '';

checks.forEach(function(c, i) { const bg = c.pass ? '#f9fff9' : '#fff5f5'; const icon = c.pass ? '✅' : '❌'; const border = i '; html += '' + c.label + ''; html += '' + icon + ''; html += '' + c.detail + ''; html += '' + c.ref + ''; html += ''; });

html += '';

// Score summary html += 'Compliance Score: ' + passedChecks + ' / ' + totalChecks + ' checks passed.

';

resultEl.innerHTML = html; }

#### Standards & Formulas Applied

This calculator applies the following threshold checks derived from the International Swimming Pool and Spa Code (ISPSC) and the International Residential Code (IRC) Appendix G:

#### Assumptions & Limitations

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References