Pool Fence Compliance Calculator
ANA›Life Services Authority›National 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:
- Fence Height ≥ 48 inches — measured on the outside (non-pool) face of the barrier (ISPSC §305.2)
- Bottom Gap ≤ 2 inches — clearance between the ground and the bottom of the barrier (ISPSC §305.4)
- Picket / Opening ≤ 4 inches — no opening shall allow passage of a 4-inch-diameter sphere (ISPSC §305.3)
- Setback ≥ 3 feet — horizontal distance from the water's edge to the inside face of the barrier (ISPSC §305.1)
- Gate Height ≥ 48 inches — gate must match or exceed fence height (ISPSC §305.5)
- Latch Height ≥ 54 inches — latch located on pool side must be ≥ 54" from ground; if on non-pool side, must be recessed or shielded (ISPSC §305.6)
- Self-Closing — gate must return to closed position without manual assistance (ISPSC §305.5)
- Self-Latching — gate must latch automatically upon closing (ISPSC §305.5)
- Outward Swing — gate must swing away from the pool (outward) to prevent a child pushing it open from the pool side (ISPSC §305.5)
#### Assumptions & Limitations
- Standards are based on the 2021 ISPSC and IRC Appendix G; local amendments may impose stricter requirements.
- The minimum fence height of 48 inches applies to residential pools. Some jurisdictions require 60 inches or more.
- This calculator does not evaluate above-ground pool wall compliance, natural barriers, house-as-barrier configurations, or pool covers as alternative barriers.
- Latch height rules assume the latch is on the pool side of the gate. If the latch is on the non-pool side and is recessed or shielded, a lower height may be permitted — consult your local code.
- This tool is for informational purposes only and does not constitute legal or engineering advice.
More Calculators
- Pennsylvania Construction Permit Cost Estimator
- Pennsylvania Prevailing Wage Rate Calculator
- Pool Deck Square Footage Calculator
- Pool Filtration System Sizing Calculator
- Pool Excavation Volume Calculator
- Pool Filter Sizing Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...