============================================================ */ (function(){ 'use strict'; function init(){ var root = document.getElementById('zssb'); if(!root) return; /* ── State ──────────────────────────────────────── */ var s1Type = 'sleeper'; // 'sleeper' or 'offduty' var s2Type = 'sleeper'; /* ── Toggle button setup ────────────────────────── */ function setupToggle(slpId, offId, callback){ var slpBtn = document.getElementById(slpId); var offBtn = document.getElementById(offId); if(!slpBtn || !offBtn) return; slpBtn.addEventListener('click', function(){ slpBtn.classList.add('active'); offBtn.classList.remove('active'); callback('sleeper'); }); offBtn.addEventListener('click', function(){ offBtn.classList.add('active'); slpBtn.classList.remove('active'); callback('offduty'); }); } setupToggle('zssb-s1-sleeper', 'zssb-s1-offduty', function(t){ s1Type = t; }); setupToggle('zssb-s2-sleeper', 'zssb-s2-offduty', function(t){ s2Type = t; }); /* ── Format decimal hours → "Xh Ym" ─────────────── */ function fmtHrs(h){ if(isNaN(h) || h < 0) return '0h 0m'; var hh = Math.floor(h); var mm = Math.round((h - hh) * 60); if(mm === 60){ hh++; mm = 0; } if(hh === 0 && mm === 0) return '0h 0m'; if(hh === 0) return mm + 'm'; if(mm === 0) return hh + 'h'; return hh + 'h ' + mm + 'm'; } /* ── Add decimal hours to a time string ─────────── */ function addHrs(timeStr, hrs){ if(!timeStr || timeStr === '') return null; var parts = timeStr.split(':'); if(parts.length < 2) return null; var totalMins = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10) + Math.round(hrs * 60); totalMins = ((totalMins % 1440) + 1440) % 1440; var h = Math.floor(totalMins / 60); var m = totalMins % 60; return (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m; } /* ── Convert 24hr "HH:MM" → 12hr "H:MM AM/PM" ─── */ function to12hr(t24){ if(!t24) return null; var p = t24.split(':'); var h = parseInt(p[0], 10); var m = p[1]; var ampm = h >= 12 ? 'PM' : 'AM'; h = h % 12; if(h === 0) h = 12; return h + ':' + m + ' ' + ampm; } /* ── Warning helpers ─────────────────────────────── */ function showWarn(msg){ var w = document.getElementById('zssb-warn'); var wm = document.getElementById('zssb-wmsg'); if(w && wm){ wm.textContent = msg; w.classList.add('show'); } } function hideWarn(){ var w = document.getElementById('zssb-warn'); if(w) w.classList.remove('show'); } /* ── Status bar progress ─────────────────────────── */ function setStatus(step){ var pills = ['zssb-pill-1', 'zssb-pill-2', 'zssb-pill-3']; for(var i = 0; i < pills.length; i++){ var el = document.getElementById(pills[i]); if(el){ el.classList[i < step ? 'add' : 'remove']('active'); } } } /* ════════════════════════════════════════════════ MAIN CALCULATION — FMCSA 49 CFR §395.1(g) ════════════════════════════════════════════════ */ function calc(){ hideWarn(); setStatus(2); /* Read inputs */ var drivenBefore = parseFloat(document.getElementById('zssb-driven').value) || 0; var drivenBetween = parseFloat(document.getElementById('zssb-driven-between').value) || 0; var s1h = parseFloat(document.getElementById('zssb-s1-hrs').value) || 0; var s1m = parseFloat(document.getElementById('zssb-s1-min').value) || 0; var s2h = parseFloat(document.getElementById('zssb-s2-hrs').value) || 0; var s2m = parseFloat(document.getElementById('zssb-s2-min').value) || 0; var s1Start = document.getElementById('zssb-s1-start').value; var s2Start = document.getElementById('zssb-s2-start').value; /* Convert to decimal hours */ var split1 = s1h + (s1m / 60); var split2 = s2h + (s2m / 60); /* ── Validation ────────────────────────────────── */ if(split1 <= 0 && split2 <= 0){ showWarn('Please enter the duration for at least one split rest period.'); return; } if(split1 < 0 || split2 < 0){ showWarn('Rest period durations cannot be negative.'); return; } if(drivenBefore < 0 || drivenBetween < 0){ showWarn('Driving hours cannot be negative.'); return; } var totalDriven = drivenBefore + drivenBetween; if(totalDriven > 11){ showWarn('Total hours driven (' + totalDriven.toFixed(2) + ' hrs) exceeds the 11-hour driving limit.'); return; } /* ── FMCSA Split Sleeper Berth Logic ───────────── RULE 1: Combined rest >= 10 hours RULE 2: The longer period must be >= 7 hrs AND in sleeper berth RULE 3: The shorter period must be >= 2 hrs (sleeper or off-duty) ─────────────────────────────────────────────────── */ var totalRest = split1 + split2; var combinedOk = totalRest >= 10; var longSplit = Math.max(split1, split2); var shortSplit = Math.min(split1, split2); var longIsS1 = split1 >= split2; var longType = longIsS1 ? s1Type : s2Type; /* Long split: must be >= 7 hrs AND sleeper berth */ var longOk = (longSplit >= 7) && (longType === 'sleeper'); /* Short split: must be >= 2 hrs (any type) */ var shortOk = (shortSplit >= 2); /* Single-split detection (only one period entered) */ var oneSplit = (split1 > 0 && split2 === 0) || (split1 === 0 && split2 > 0); var isCompliant = false; var reason = ''; if(oneSplit){ isCompliant = false; reason = 'Only one split period entered. Please enter both Split 1 and Split 2 durations to check full FMCSA compliance.'; } else { var failReasons = []; if(!longOk){ if(longSplit < 7){ failReasons.push('Longer split (' + fmtHrs(longSplit) + ') is under the required 7-hour minimum.'); } else { failReasons.push('Longer split (' + fmtHrs(longSplit) + ') must be in the sleeper berth, not off-duty.'); } } if(!shortOk){ failReasons.push('Shorter split (' + fmtHrs(shortSplit) + ') is under the required 2-hour minimum.'); } if(!combinedOk){ failReasons.push('Combined rest (' + fmtHrs(totalRest) + ') is under the 10-hour minimum required.'); } isCompliant = longOk && shortOk && combinedOk; if(isCompliant){ reason = 'Both splits meet FMCSA requirements. Your 14-hour clock is paused during both rest periods and restarts at the end of Split 2.'; } else { reason = failReasons.join(' '); } } /* ── Remaining drive time ───────────────────────── */ var driveRemaining = Math.max(0, 11 - totalDriven); /* ── Timeline data (if start times provided) ──── */ var timelineData = null; if(s1Start && s1Start !== ''){ var s1End = addHrs(s1Start, split1); var midDrive = s2Start && s2Start !== '' ? s2Start : (s1End ? addHrs(s1End, drivenBetween) : null); var s2End = midDrive ? addHrs(midDrive, split2) : null; timelineData = { s1Start: to12hr(s1Start), s1End: to12hr(s1End), s2Start: s2Start && s2Start !== '' ? to12hr(s2Start) : (midDrive ? to12hr(midDrive) : null), s2End: to12hr(s2End), resumeTime: s2End ? to12hr(s2End) : null }; } /* ── Render results ──────────────────────────────── */ renderResults(isCompliant, reason, { split1: split1, split2: split2, totalRest: totalRest, longSplit: longSplit, shortSplit: shortSplit, longOk: longOk, shortOk: shortOk, combinedOk: combinedOk, longType: longType, drivenBefore: drivenBefore, drivenBetween: drivenBetween, totalDriven: totalDriven, driveRemaining:driveRemaining, s1Type: s1Type, s2Type: s2Type, oneSplit: oneSplit }, timelineData); setStatus(3); } /* ════════════════════════════════════════════════ RENDER RESULTS ════════════════════════════════════════════════ */ function renderResults(isCompliant, reason, d, tl){ /* Element refs */ var resEl = document.getElementById('zssb-res'); var banner = document.getElementById('zssb-banner'); var bannerStatus= document.getElementById('zssb-banner-status'); var bannerReason= document.getElementById('zssb-banner-reason'); var bannerSvg = document.getElementById('zssb-banner-svg'); var cardsEl = document.getElementById('zssb-cards'); var breakdownEl = document.getElementById('zssb-breakdown'); var timelineEl = document.getElementById('zssb-timeline'); var tlWrap = document.getElementById('zssb-timeline-wrap'); /* ── Compliance Banner ──────────────────────────── */ if(d.oneSplit){ banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = 'Incomplete — Enter Both Splits'; bannerSvg.innerHTML = ''; } else if(isCompliant){ banner.className = 'compliance-banner compliant'; bannerStatus.textContent = '✅ FMCSA Compliant — Valid Split'; bannerSvg.innerHTML = ''; } else { banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = '❌ Non-Compliant — Invalid Split'; bannerSvg.innerHTML = ''; } bannerReason.textContent = reason; /* ── Summary Cards ──────────────────────────────── */ var cards = []; if(!d.oneSplit){ cards.push({ v: fmtHrs(d.split1), u: d.s1Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 1 Duration', cls: d.s1Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.split2), u: d.s2Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 2 Duration', cls: d.s2Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.totalRest), u: 'TOTAL REST', n: 'Combined Off-Duty', cls: d.combinedOk ? 'green' : 'red' }); cards.push({ v: fmtHrs(d.driveRemaining), u: 'REMAINING', n: 'Drive Time Left', cls: d.driveRemaining > 4 ? 'green' : (d.driveRemaining > 2 ? 'orange' : 'red') }); } cardsEl.innerHTML = cards.map(function(c){ return '
' + '
' + c.v + '
' + '
' + c.u + '
' + '
' + c.n + '
' + '
'; }).join(''); /* ── Breakdown Table ────────────────────────────── */ var rows = []; if(!d.oneSplit){ rows.push({lbl: 'Split 1 (' + (d.s1Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split1), cls: ''}); rows.push({lbl: 'Split 2 (' + (d.s2Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split2), cls: ''}); rows.push({lbl: 'Combined Rest Total', val: fmtHrs(d.totalRest) + (d.totalRest >= 10 ? ' ✓' : ' ✗ (Need ≥10h)'), cls: d.combinedOk ? 'ok' : 'fail'}); rows.push({lbl: 'Longer Split ≥7 hrs in Sleeper Berth', val: d.longOk ? '✓ Pass' : '✗ Fail', cls: d.longOk ? 'ok' : 'fail'}); rows.push({lbl: 'Shorter Split ≥2 hrs (any type)', val: d.shortOk ? '✓ Pass' : '✗ Fail', cls: d.shortOk ? 'ok' : 'fail'}); rows.push({lbl: 'Hours Driven Before Split 1', val: fmtHrs(d.drivenBefore), cls: 'info'}); rows.push({lbl: 'Hours Driven Between Splits', val: fmtHrs(d.drivenBetween), cls: 'info'}); rows.push({lbl: 'Total Hours Driven', val: fmtHrs(d.totalDriven) + ' / 11 hrs max', cls: d.totalDriven < 11 ? 'ok' : 'fail'}); rows.push({lbl: 'Drive Time Remaining After Splits', val: fmtHrs(d.driveRemaining), cls: d.driveRemaining > 0 ? 'ok' : 'fail'}); rows.push({lbl: '14-Hour Clock Paused During Splits', val: isCompliant ? 'Yes — Both periods excluded' : 'Not applicable (fix issues above)', cls: isCompliant ? 'ok' : 'fail'}); } breakdownEl.innerHTML = rows.map(function(r){ return '
' + '' + r.lbl + '' + '' + r.val + '' + '
'; }).join(''); /* ── Timeline ───────────────────────────────────── */ if(!d.oneSplit){ tlWrap.style.display = 'block'; var items = []; items.push({ dot: 'drive', label: 'Started Driving', desc: 'Drove ' + fmtHrs(d.drivenBefore) + ' before first rest period.' }); items.push({ dot: 'sleep', label: 'Split 1 Begins' + (tl && tl.s1Start ? ' at ' + tl.s1Start : ''), desc: fmtHrs(d.split1) + ' ' + (d.s1Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s1End ? ' → Ends: ' + tl.s1End : '') }); if(d.drivenBetween > 0){ items.push({ dot: 'drive', label: 'Resumed Driving Between Splits', desc: 'Drove ' + fmtHrs(d.drivenBetween) + ' between the two rest periods.' }); } items.push({ dot: 'sleep', label: 'Split 2 Begins' + (tl && tl.s2Start ? ' at ' + tl.s2Start : ''), desc: fmtHrs(d.split2) + ' ' + (d.s2Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s2End ? ' → Ends: ' + tl.s2End : '') }); if(isCompliant){ items.push({ dot: 'done', label: '14-Hour Clock Restarts' + (tl && tl.resumeTime ? ' at ' + tl.resumeTime : ''), desc: 'Both splits complete. ' + fmtHrs(d.driveRemaining) + ' drive time remaining.' }); } else { items.push({ dot: 'off', label: 'Non-Compliant — Cannot Resume', desc: 'Fix the split issues above before resuming driving.' }); } timelineEl.innerHTML = items.map(function(it){ return '
' + '
' + '
' + '
' + it.label + '
' + '
' + it.desc + '
' + '
'; }).join(''); } else { tlWrap.style.display = 'none'; } /* ── Show results panel ─────────────────────────── */ resEl.classList.add('show'); setTimeout(function(){ resEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 100); } /* ════════════════════════════════════════════════ RESET ════════════════════════════════════════════════ */ function resetAll(){ /* Clear number inputs */ var numIds = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numIds.forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Clear time inputs */ ['zssb-s1-start', 'zssb-s2-start'].forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Reset toggle states */ s1Type = 'sleeper'; s2Type = 'sleeper'; ['zssb-s1-sleeper', 'zssb-s2-sleeper'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.add('active'); }); ['zssb-s1-offduty', 'zssb-s2-offduty'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.remove('active'); }); /* Hide warning and results */ hideWarn(); var resEl = document.getElementById('zssb-res'); if(resEl) resEl.classList.remove('show'); setStatus(1); } /* ── Event Listeners ──────────────────────────────── */ var calcBtn = document.getElementById('zssb-btn'); if(calcBtn) calcBtn.addEventListener('click', calc); var rstBtn = document.getElementById('zssb-reset'); if(rstBtn) rstBtn.addEventListener('click', resetAll); /* Enter key triggers calculation */ var numFields = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numFields.forEach(function(id){ var el = document.getElementById(id); if(el) el.addEventListener('keydown', function(e){ if(e.key === 'Enter') calc(); }); }); } /* end init() */ /* ── Safe DOM-ready execution ───────────────────────── */ if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', init); } else { init(); } })();
Ramp Pitch Calculator
Instantly find slope %, angle, pitch ratio & ramp length — ADA compliance included.
Select Calculation Mode
Enter the vertical rise and horizontal run to calculate slope %, angle in degrees, pitch ratio, and ramp surface length.
Inputs
Vertical Rise
Horizontal Run
Output Unit for Rise, Run & Surface Length
!
Please enter valid positive values in all fields.
ADA Compliant
Meets the 1:12 maximum pitch standard
Results
△ Visual Ramp Diagram
RISE RUN SURFACE LENGTH θ°
Formulas, References & Notes
  • Pitch Ratio: Pitch = Rise ÷ Run
  • Slope %: Slope = (Rise ÷ Run) × 100
  • Angle: θ = arctan(Rise ÷ Run) in degrees
  • Surface Length: L = √(Rise² + Run²) — Pythagorean theorem
  • ADA standard: max pitch of 1:12 (8.33%) for wheelchair ramps — ADA.gov
  • All unit conversions: 1 ft = 12 in  |  1 m = 100 cm  |  1 in = 25.4 mm
  • Results are for planning & reference only. Always verify with local building codes and a licensed professional for safety-critical installations.

Ramp Pitch Calculator: Find Your Ramp Slope & Angle Instantly

A ramp pitch calculator helps you instantly determine the correct slope, angle, and rise-to-run ratio for any ramp — whether you’re building a wheelchair access ramp, a loading dock, a skateboard ramp, or a vehicle entry ramp. This tool is built for homeowners, contractors, architects, and DIY builders who need accurate pitch values before they cut a single board or pour any concrete.


What This Calculator Tells You

Enter just a couple of measurements and the Zo Calculator ramp pitch tool will instantly give you:

  • Pitch ratio (e.g., 1:12 or 1:20) — the rise for every unit of horizontal run
  • Slope percentage — expressed as a percentage grade (e.g., 8.33%)
  • Ramp angle in degrees — the exact inclination angle (e.g., 4.76°)
  • Total rise — the vertical height the ramp must cover
  • Total run (horizontal length) — how far the ramp extends along the ground
  • Ramp surface length — the actual sloped distance along the ramp’s face

How the Calculator Works (The Formula & Logic)

Ramp pitch is fundamentally a ratio of vertical rise to horizontal run. The three core formulas powering this tool are simple geometry:

Pitch Ratio = Rise ÷ Run Slope (%) = (Rise ÷ Run) × 100 Ramp Angle (°) = arctan(Rise ÷ Run) Ramp Surface Length = √(Rise² + Run²)

In plain language:

  • Rise is how high the ramp needs to climb (vertical measurement).
  • Run is how far it travels horizontally (horizontal measurement).
  • Dividing rise by run gives you the pitch as a decimal — multiply by 100 for the slope percentage, or run it through an inverse tangent (arctan) function for the angle in degrees.
  • The actual surface length of the ramp is calculated using the Pythagorean theorem, since the ramp itself forms the hypotenuse of a right triangle.

The calculator handles all three formulas simultaneously the moment you enter your values — no manual math needed.


Standard Ramp Pitch Ratings & Classifications

Pitch RatioSlope %Angle (°)Common Use & Accessibility Rating
1:205%2.86°Ideal — Best for wheelchair & mobility device access
1:128.33%4.76°ADA compliant minimum for wheelchair ramps
1:1010%5.71°Acceptable for short runs with assistance
1:812.5%7.13°Steep — suitable for able-bodied users only
1:616.67%9.46°Very steep — loading ramps, vehicle use only
1:425%14.04°Maximum practical ramp; not ADA-compliant
Above 1:425%+14°+Considered a staircase incline — not a ramp

Note: The ADA (Americans with Disabilities Act) mandates a maximum pitch of 1:12 for wheelchair-accessible ramps in most commercial and public settings.


Step-by-Step Practical Example

Scenario: You need to build a wheelchair ramp from ground level up to a front door that is 30 inches (2.5 feet) above the ground.

Step 1 — Identify Your Rise Your rise is fixed by the door height: Rise = 30 inches (2.5 ft)

Step 2 — Apply the ADA-Compliant Pitch Ratio Using the standard 1:12 ratio: Run = Rise × 12 = 30 × 12 = 360 inches = 30 feet

Step 3 — Calculate the Ramp Surface Length Using the Pythagorean theorem: Surface Length = √(30² + 360²) = √(900 + 129,600) = √130,500 ≈ 361.2 inches ≈ 30.1 feet

Result: Your ramp needs to be approximately 30 feet long horizontally, with an actual sloped surface length of about 30.1 feet, at a perfectly ADA-compliant 1:12 pitch (8.33% slope, 4.76°).


How to Use Zo Calculator’s Ramp Pitch Tool

Using the ramp pitch calculator on ZoCalculator.com takes under 30 seconds:

  1. Enter the Rise — Type the vertical height your ramp must climb. Use inches, feet, centimeters, or meters — the tool handles unit conversion.
  2. Enter the Run OR your desired Pitch Ratio — You can input the horizontal length you have available, OR choose a target pitch ratio (like 1:12) and let the calculator find the required run.
  3. Click “Calculate” — The tool instantly displays slope percentage, angle in degrees, pitch ratio, and ramp surface length all at once.
  4. Read the compliance indicator — A clear label tells you whether your ramp meets ADA wheelchair accessibility standards.
  5. Adjust and recalculate — Change any value freely to explore different configurations until your design fits your space and compliance requirements.
  6. Copy or note your results — Use the displayed values directly in your blueprint, building permit application, or material estimate.

Practical Applications and Real-World Uses

  • Wheelchair & accessibility ramp design — Verify ADA compliance before construction to avoid costly rebuilds or permit rejections on residential and commercial properties.
  • Loading dock and freight ramp planning — Ensure safe pitch for forklifts, pallet jacks, and delivery vehicles where exceeding a grade limit causes equipment tipping hazards.
  • Skateboard and bike ramp building — Calculate exact launch angles and surface lengths for DIY skate ramps, pump tracks, and BMX features with precision.
  • Vehicle entry ramps for garages & trailers — Determine if a car hauler, RV entry ramp, or driveway apron has a safe enough pitch for low-clearance vehicles.
  • Architectural and landscaping design — Integrate ramp pitches into garden paths, retaining wall transitions, and commercial building entrances during the planning phase.
  • Building permit applications — Provide inspectors with documented slope percentages and pitch ratios to satisfy local code and zoning requirements upfront.

Important Notes & Technical Limitations

  1. ADA compliance is jurisdiction-specific. While the 1:12 ratio is the federal ADA standard in the United States, local building codes, state regulations, and international standards (such as the UK’s Part M or Australia’s AS 1428) may differ. Always verify with your local authority.
  2. This tool calculates geometric pitch only. It does not account for material strength, load-bearing capacity, surface friction, handrail requirements, or landing platform dimensions — all of which are required for a fully code-compliant ramp structure.
  3. Results assume a straight, uniform slope. Curved ramps, switchback ramps, or ramps with variable pitch sections require more complex engineering calculations beyond what any single-formula calculator provides.
  4. For professional or commercial projects, consult a licensed engineer or architect. ZoCalculator.com provides this ramp pitch calculator for educational, planning, and reference purposes. It is not a substitute for professional structural assessment or official building code compliance review.

Helpful References & Sources

  • ADA.gov — Official U.S. Americans with Disabilities Act standards for accessible ramp design, slope ratios, and landing requirements.
  • Wikipedia.org — Detailed overview of inclined plane geometry, slope calculations, and ramp engineering principles.
  • ICC (International Code Council) — Publisher of the International Building Code (IBC), which governs ramp construction standards for commercial buildings worldwide.

🙋 Frequently Asked Questions (FAQs)

What is ramp pitch and how is it measured?

Ramp pitch is the ratio of a ramp’s vertical rise to its horizontal run, expressed as a ratio like 1:12 or as a percentage like 8.33%. It tells you how steep a ramp is — a 1:12 pitch means the ramp rises 1 inch for every 12 inches of horizontal distance. You measure it by dividing the total rise by the total run.

What is the standard pitch for a wheelchair ramp?

The ADA-standard maximum pitch for a wheelchair ramp is 1:12, meaning 1 inch of rise for every 12 inches of horizontal run, which equals an 8.33% slope or approximately 4.76 degrees. For longer ramps or those used by powered wheelchairs and mobility scooters, a gentler slope of 1:16 or 1:20 is strongly recommended to reduce user effort and improve safety.

How do I calculate ramp pitch without a calculator?

To calculate ramp pitch manually, divide the rise (vertical height) by the run (horizontal length). For example, a ramp that rises 6 inches over 72 inches of run has a pitch of 6 ÷ 72 = 0.0833, or 8.33%. Multiply by 100 for slope percentage, or use the arctan function on a scientific calculator to convert to degrees (arctan(0.0833) ≈ 4.76°).

What is the maximum safe pitch for a ramp?

For wheelchair accessibility, the maximum recommended pitch is 1:12 (8.33%). For general pedestrian use without wheelchairs, a pitch up to 1:8 (12.5%) is considered manageable for short distances. Anything steeper than 1:4 (25%) is generally classified as a staircase incline rather than a functional ramp, and is unsafe for wheeled traffic.

What is the difference between ramp pitch, slope, and angle?

All three describe the same steepness but in different formats. Pitch is a ratio (1:12), slope is a percentage (8.33%), and angle is in degrees (4.76°). They are mathematically equivalent and can be converted into each other — the ramp pitch calculator does this conversion automatically so you always have all three values at once.

How long does a ramp need to be for a 24-inch rise?

For a 24-inch rise at the ADA-standard 1:12 pitch, your ramp run needs to be 24 × 12 = 288 inches, or 24 feet of horizontal length. The actual sloped surface of the ramp will be slightly longer — approximately 24.08 feet — calculated using the Pythagorean theorem. If space is limited, you may need a switchback ramp design with a flat landing platform in the middle.

Does ramp pitch affect building permit approval?

Yes, absolutely. Most local building departments require documented proof of ramp pitch, especially for accessibility ramps on commercial properties or public buildings. Submitting a calculated pitch ratio, slope percentage, and ramp length — which you can generate instantly with the Zo Calculator ramp pitch tool — can support your permit application and reduce back-and-forth with inspectors.

What pitch is used for vehicle loading ramps?

Vehicle loading ramps — such as those on car hauler trailers, parking garages, and warehouse loading docks — typically use pitches between 1:6 (16.67%) and 1:10 (10%), depending on the vehicle’s ground clearance and the load being carried. Forklifts and pallet jacks generally require no steeper than 1:10, while standard cars on trailer ramps can handle up to 1:6 in short-run scenarios.

Can I use this calculator for a skateboard ramp?

Yes — the ramp pitch calculator works for any inclined surface, including skateboard quarter-pipes, launch ramps, and pump track transitions. Simply enter your desired rise and run dimensions to get the exact angle in degrees, which is the most useful measurement for skate ramp construction. Most beginner skate ramps use angles between 30° and 45°, far steeper than accessibility ramps.

Is a 1:12 ramp pitch the same as an 8% slope?

Not exactly, but very close. A 1:12 pitch equals 8.333…% slope, which is commonly rounded to 8% in everyday usage. For strict ADA compliance documentation, the precise figure is 8.33%, but for general construction planning and material estimation, 8% is an acceptable working approximation. The ramp pitch calculator on ZoCalculator.com always displays the full decimal precision so your plans are accurate.


Explore Related Calculators on Zo Calculator