============================================================ */ (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 Incline Calculator
Instantly find angle, gradient %, slope ratio & ramp length — for any unit worldwide.
Calculation Mode
Inputs
Rise (Vertical Height)
Vertical height the ramp climbs
Run (Horizontal Distance)
Horizontal ground distance
Output Unit
Ramp length displayed in
Inputs
Rise (Vertical Height)
Vertical height the ramp climbs
Ramp Length (Surface)
Actual diagonal surface length
Output Unit
Run length displayed in
Inputs
Run (Horizontal Distance)
Horizontal ground distance
Ramp Length (Surface)
Actual diagonal surface length
Output Unit
Rise displayed in
!
Please enter valid positive values in both fields.
Calculation Results
Formulas, Standards & Notes
  • Angle: θ = arctan(Rise ÷ Run) — inverse tangent of the slope ratio
  • Gradient: % = (Rise ÷ Run) × 100
  • Ramp Length: L = √(Rise² + Run²) — Pythagorean theorem
  • Slope Ratio: 1 : (Run ÷ Rise) — e.g., 1:12
  • ADA / ANSI A117.1: Max accessible ramp gradient = 1:12 (8.33%)
  • Australian AS 1428.1: Max gradient for new buildings = 1:14 (7.14%)
  • DDA (UK): Preferred max = 1:20 (5%), absolute max = 1:12 (8.33%)
  • All results are for planning purposes only. Verify with local codes and a licensed engineer before construction.

Ramp Incline Calculator: Find the Perfect Angle Instantly

Designing a ramp without knowing the exact incline angle is a recipe for safety issues, code violations, or a structure that simply doesn’t work. The Ramp Incline Calculator on Zo Calculator takes your rise and run measurements and instantly delivers the slope angle, gradient percentage, and ratio — so you can build or plan with total confidence. Whether you’re a homeowner installing a wheelchair ramp, a contractor working on a loading dock, or an engineer reviewing specs, this tool saves you from manual math errors.


What This Calculator Tells You

Enter your measurements and the tool calculates all of the following in one click:

  • Slope Angle (°) – the incline expressed in degrees from horizontal
  • Gradient Percentage (%) – rise divided by run, shown as a percentage
  • Rise-to-Run Ratio – the classic format used in construction specs (e.g., 1:12)
  • Ramp Length – the actual diagonal surface length of the ramp
  • Horizontal Run – usable ground distance the ramp covers
  • Compliance Indicator – whether your incline meets common accessibility or building standards

How the Calculator Works (The Formula & Logic)

The calculator is built on fundamental trigonometry and slope geometry. Here’s exactly what happens under the hood, written in plain English:

Core Formulas Used:

Angle (°) = arctan(Rise ÷ Run)

Gradient (%) = (Rise ÷ Run) × 100

Ramp Length = √(Rise² + Run²)

Slope Ratio = 1 : (Run ÷ Rise)

  • Rise is the vertical height the ramp must climb (e.g., the height of a step or platform)
  • Run is the horizontal distance the ramp covers along the ground
  • arctan (inverse tangent) converts that ratio into a human-readable degree angle

If you know any two of these three values — rise, run, or ramp length — the calculator can solve for the third. This makes it flexible for both design-from-scratch scenarios and checking existing structures.


Standard Ramp Incline Ratings & Classifications

Different ramp applications have different incline requirements. This table gives you a fast reference for what’s acceptable where:

Slope AngleGradient %Rise:Run RatioTypical Application
1.1° – 2.9°2% – 5%1:50 to 1:20Pedestrian pathways, gentle access ramps
3.0° – 4.8°5% – 8.3%1:20 to 1:12ADA/DDA wheelchair accessibility standard
4.76°8.33%1:12Maximum wheelchair ramp (ADA/AS 1428.1)
5.0° – 10.0°8.7% – 17.6%1:11 to 1:5.7Utility ramps, loading docks, vehicle ramps
10.0° – 20.0°17.6% – 36.4%1:5.7 to 1:2.7Steep vehicle access, industrial use only
Above 20°Above 36%Steeper than 1:2.7Generally not recommended for ramps

Note for Australian builders: AS 1428.1 (the Australian accessibility standard) specifies a maximum gradient of 1:14 for new buildings and 1:8 as an absolute upper limit in constrained situations — stricter than some international codes.


Step-by-Step Practical Example

Let’s say you’re building a ramp for a shop entrance that has a step height of 15 cm (0.15 m) and you have 180 cm (1.80 m) of horizontal space available.

Step 1 — Identify Your Rise and Run

  • Rise = 15 cm
  • Run = 180 cm

Step 2 — Calculate the Gradient Percentage

  • Gradient = (15 ÷ 180) × 100 = 8.33%
  • Ratio = 1:12 ✅ (meets ADA and most international wheelchair standards)

Step 3 — Calculate the Angle in Degrees

  • Angle = arctan(15 ÷ 180) = arctan(0.0833) = 4.76°

Step 4 — Calculate Actual Ramp Length

  • Ramp Length = √(15² + 180²) = √(225 + 32400) = √32625 = 180.6 cm

Result: Your ramp will be approximately 180.6 cm long, sit at a 4.76° angle, and comply with standard wheelchair accessibility requirements. Plug these same numbers into Zo Calculator and you’ll see identical results instantly.


How to Use Zo Calculator’s Ramp Incline Tool

Using the tool on ZoCalculator.com takes less than 30 seconds:

  1. Enter the Rise – Type the vertical height your ramp needs to overcome (in cm, inches, or feet — select your unit).
  2. Enter the Run – Input the horizontal ground distance you’re working with. If you don’t know this, leave it blank and enter the ramp length instead.
  3. Or Enter Ramp Length – If you already know the physical length of the ramp surface, enter that alongside the rise.
  4. Hit Calculate – The tool instantly outputs angle in degrees, gradient percentage, slope ratio, and ramp surface length.
  5. Check the Compliance Indicator – A simple flag tells you whether your incline falls within common accessibility thresholds (1:12 / 8.33%).
  6. Adjust and Recalculate – Not happy with the angle? Change the run distance and see new results in real time.

No formulas to remember, no trigonometry tables — just clean, instant answers.


Practical Applications and Real-World Uses

Knowing how to calculate ramp incline accurately matters across a wide range of industries and projects:

  • Disability Access & Wheelchair Ramps – Architects and builders use the 1:12 ratio to ensure ramps are safe and legally compliant for wheelchair users under ADA, DDA, or Australian AS 1428.1 standards.
  • Construction & Civil Engineering – Learning how to calculate ramp incline in construction helps project managers design vehicle access ramps, loading bays, and multi-level parking structures that meet local building codes.
  • Australian Construction Projects – Knowing how to calculate ramp incline in construction in Australia is especially important given the stricter NCC (National Construction Code) and AS 1428 requirements that apply to public buildings.
  • Warehouse & Logistics Design – Forklift ramps and loading dock inclines must stay within a safe gradient range to prevent tip-overs and load shifts.
  • Home Renovations & DIY Projects – Homeowners building garden ramps, shed access ramps, or threshold ramps can verify safety before cutting a single piece of timber.
  • Landscape Architecture – Designers use slope calculations to plan driveways, pathways, and terraced gardens that are both functional and visually appealing.

Important Notes & Technical Limitations

This tool is designed for reference, planning, and educational use. Keep the following in mind:

  1. Always verify with local codes. Building regulations vary by country, state, and municipality. The compliance indicator in this tool reflects common international guidelines (like ADA 1:12), not every local standard. Always cross-check with your local authority or a licensed builder.
  2. Surface material affects real-world safety. A mathematically compliant incline on paper may still be slippery or unsafe depending on the surface material. Wet timber, smooth concrete, and painted metal all behave differently.
  3. Ramp width is not calculated here. This tool focuses on incline angle and length only. Minimum ramp width requirements (e.g., 1000 mm under AS 1428.1) must be checked separately.
  4. This is not a substitute for professional engineering advice. For large-scale commercial or public infrastructure, always engage a licensed structural engineer or accessibility consultant.

Helpful References & Sources

For further reading on ramp standards and slope calculations, these authoritative sources are worth bookmarking:

  • standards.org.au – Australian Standard AS 1428.1 covering access and mobility requirements for people with disabilities
  • ada.gov – The U.S. Access Board’s official ADA Standards for Accessible Design, including ramp gradient specifications
  • en.wikipedia.org/wiki/Slope – A clear academic overview of slope, gradient, and incline calculations with mathematical context

🙋 Frequently Asked Questions (FAQs)

What is the standard incline for a ramp?

The most widely accepted standard ramp incline for wheelchair accessibility is 1:12, which equals an 8.33% gradient or approximately 4.76°. This means for every 12 units of horizontal run, the ramp rises 1 unit. The ADA (Americans with Disabilities Act) and Australian Standard AS 1428.1 both use this ratio as the maximum recommended gradient for accessible ramps.

How do I calculate ramp incline manually?

To calculate ramp incline, divide the rise (vertical height) by the run (horizontal distance) and multiply by 100 to get a percentage. For the angle in degrees, apply the formula: Angle = arctan(Rise ÷ Run). For example, a ramp with a 20 cm rise and 240 cm run gives a gradient of 8.33% and an angle of 4.76°.

How do you calculate ramp incline in construction?

In construction, ramp incline is calculated using the rise-over-run method expressed as a ratio (e.g., 1:10) or a percentage. Contractors typically mark the desired rise and horizontal span on their plans, then confirm the resulting gradient complies with the applicable building code before construction begins. Using an incline calculator ramp tool like the one on ZoCalculator.com speeds up this verification process significantly on busy job sites.

How is ramp incline calculated in construction in Australia?

In Australia, ramp incline in construction must comply with the National Construction Code (NCC) and AS 1428.1. The standard maximum gradient for publicly accessible ramps is 1:14 (approximately 7.1%) for new buildings, with a stricter limit of 1:8 (12.5%) only acceptable in constrained heritage or existing building situations. Engineers and builders use the same arctan formula but must cross-check outputs against these Australian-specific thresholds rather than relying solely on ADA equivalents.

What is the maximum safe angle for a ramp?

For wheelchair and pedestrian access, the maximum safe angle is generally 4.76° (1:12 ratio). For vehicle ramps in parking structures, angles up to 10°–15° are common, though steeper gradients require safety features like textured surfaces and warning markings. Anything above 20° is not considered a functional ramp for most practical purposes and would be reclassified as a staircase or embankment slope.

What is a 1:12 ramp slope in degrees?

A 1:12 ramp slope is equal to 4.76 degrees. This is calculated using the inverse tangent: arctan(1 ÷ 12) = arctan(0.0833) ≈ 4.76°. It’s the internationally recognised gold standard for wheelchair-accessible ramps and is the benchmark built into most modern accessibility codes.

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

For a 12-inch (1 foot) rise at the maximum accessible gradient of 1:12, the ramp run must be at least 12 feet (approximately 3.65 metres) of horizontal distance. The actual surface length of the ramp would be slightly longer — approximately 12.04 feet — calculated using the Pythagorean theorem (√(1² + 12²) = √145 ≈ 12.04 ft).

Can I use this calculator for vehicle ramps and driveways?

Yes. While the compliance indicator is calibrated to pedestrian and wheelchair access standards, the core angle and gradient calculations are universal. You can use the incline calculator ramp tool for vehicle access ramps, sloped driveways, loading dock ramps, or any other slope-based design — simply focus on the angle and percentage outputs rather than the accessibility compliance flag.

What is the difference between slope, gradient, and incline?

These three terms describe the same physical characteristic but are expressed differently. Slope is typically expressed as a ratio (rise:run), gradient is expressed as a percentage (rise ÷ run × 100), and incline usually refers to the angle in degrees measured from horizontal. All three are interconvertible, and the Zo Calculator ramp incline tool outputs all three simultaneously so you can communicate your design in whichever format your plans or codes require.

Is a 5% ramp grade ADA compliant?

Yes, a 5% gradient (1:20 ratio, approximately 2.86°) is ADA compliant and is actually more accessible than the 1:12 maximum, making it suitable for less able users and powered wheelchairs. The ADA specifies 1:12 as the maximum allowed gradient for ramps, not the ideal. A gentler slope like 5% is always preferable where space permits, as it reduces the physical effort required to traverse the ramp.


Explore Related Calculators on Zo Calculator