============================================================ */ (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 Slope Ratio Calculator
Instantly find rise, run, slope ratio, angle & ADA compliance — any unit, worldwide.
Inputs — Mode 1
Enter the vertical rise and horizontal run of your ramp to get the slope ratio, angle, percentage, and ADA compliance status.
Vertical Rise (Height)
Vertical height the ramp climbs
Horizontal Run (Length)
Horizontal distance of the ramp
!
Please enter valid positive values.
Results
Inputs — Mode 2
Know your rise and want to target a specific slope ratio (e.g. 1:12 for ADA)? Enter both below to get the minimum run length required.
Vertical Rise
Target Ratio (1 : X)
Enter X only — e.g. 12 for 1:12
Output Unit
!
Please enter valid positive values.
Results
Inputs — Mode 3
Have a slope percentage (e.g. from a survey or blueprint)? Convert it instantly to a slope ratio and degrees.
Slope Percentage (%)
e.g. 8.33% = 1:12 ADA ramp
Ramp Use Type
!
Please enter a valid positive slope percentage.
Results
Formulas, Standards & Notes
  • Slope Ratio: Ratio = Run ÷ Rise → expressed as 1 : X
  • Slope Percentage: Slope% = (Rise ÷ Run) × 100
  • Slope Angle: Angle° = arctan(Rise ÷ Run)
  • Required Run: Run = Rise × Ratio Multiplier
  • ADA Standard (ADAAG): Maximum slope 1:12 (8.33%) for accessible ramps. Short ramps under 6 in rise: max 1:10. Under 3 in rise: max 1:8.
  • UK Building Regs (Part M): Preferred 1:20, maximum 1:12 for general access.
  • AS 1428.1 (Australia): Maximum gradient 1:14 for unassisted wheelchair use; 1:8 absolute max.
  • All calculations assume a straight, uniform slope with no landings or turns.
  • For safety-critical or structural use, verify with a licensed engineer.

Ramp Slope Ratio Calculator: Find the Right Rise-to-Run Ratio Instantly

Whether you’re designing an accessible wheelchair ramp, a loading dock, or a driveway incline, getting the slope right is non-negotiable. The Ramp Slope Ratio Calculator on Zo Calculator takes your measurements and instantly tells you whether your ramp is safe, code-compliant, and fit for purpose — no manual math required.


What This Calculator Tells You

Enter a few basic measurements and the tool will calculate:

  • Slope ratio (expressed as 1:X, e.g., 1:12)
  • Rise — the total vertical height the ramp climbs
  • Run — the total horizontal length of the ramp
  • Slope percentage — how steep the ramp is as a percentage
  • Slope angle in degrees — for engineering or construction reference
  • ADA / accessibility compliance status — whether your ramp meets standard guidelines

How the Calculator Works (The Formula & Logic)

The core logic behind any ramp slope calculation is straightforward. Here’s how to calculate ramp slope ratio manually:

Slope Ratio = Run ÷ Rise For example, a ratio of 1:12 means for every 1 inch of rise, the ramp must extend 12 inches horizontally.

Additional derived values use these formulas:

  • Slope Percentage = (Rise ÷ Run) × 100
  • Slope Angle (degrees) = arctan(Rise ÷ Run)
  • Required Run = Rise × Ratio Multiplier (e.g., Rise × 12 for a 1:12 ramp)

To understand how to calculate the slope ratio of a ramp step by step: divide the vertical rise by the horizontal run, then express it as a 1-to-X ratio. A ramp that rises 10 inches over 120 inches of run has a slope ratio of 1:12.


Standard Ramp Slope Ratings & Classifications

Slope RatioSlope %Angle (°)Common UseADA Compliant?
1:205%2.9°Preferred accessible ramp✅ Yes
1:128.3%4.8°Standard wheelchair ramp✅ Yes
1:1010%5.7°Short ramps (max 6 in rise)⚠️ Conditional
1:812.5%7.1°Very short ramps (max 3 in rise)⚠️ Conditional
1:616.7%9.5°Utility / vehicle ramps❌ Not for wheelchairs
Steeper than 1:6>16.7%>9.5°Stairs recommended❌ No

ADA compliance thresholds per the Americans with Disabilities Act Accessibility Guidelines (ADAAG).


Step-by-Step Practical Example

Let’s say you’re building a wheelchair ramp for a building entrance with a 10-inch rise.

Step 1 — Identify your rise. The doorway threshold sits 10 inches above ground level. Rise = 10 inches.

Step 2 — Apply the standard ratio. For an ADA-compliant ramp, the recommended ratio is 1:12. Required Run = Rise × 12 = 10 × 12 = 120 inches (10 feet).

Step 3 — Verify the slope percentage. Slope % = (10 ÷ 120) × 100 = 8.33% — within the ADA maximum of 8.33%.

Result: Your ramp needs to be at least 10 feet long to safely accommodate a 10-inch rise at a 1:12 slope ratio.


How to Use Zo Calculator’s Ramp Slope Ratio Tool

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

  1. Enter the Rise — Type in the vertical height your ramp needs to cover (in inches, cm, or feet).
  2. Enter the Run (or your target ratio) — Input the horizontal distance, or let the tool calculate it from a desired slope ratio.
  3. Select your unit of measurement — Choose between imperial (inches/feet) or metric (cm/m).
  4. Click Calculate — The tool instantly returns your slope ratio, percentage, angle, and required run length.
  5. Check the compliance indicator — A clear green/yellow/red flag tells you if your ramp meets ADA or general accessibility standards.
  6. Adjust and compare — Tweak the rise or run values to explore different design options in real time.

Practical Applications and Real-World Uses

Knowing how to calculate ramp ratio is valuable across many industries and personal projects:

  • Wheelchair & Accessibility Ramps — Architects, contractors, and homeowners use slope ratios to meet ADA and building code requirements for safe access.
  • Loading Docks & Warehouses — Logistics and facilities managers calculate ramp angles to ensure forklifts and pallet jacks can navigate safely.
  • Driveway & Curb Ramps — Homeowners and municipalities need precise slope data to prevent vehicle scraping and water pooling.
  • Skateparks & Recreational Structures — Designers use slope ratios to calibrate incline intensity for different skill levels.
  • Construction & Civil Engineering — Engineers reference ramp gradient calculations for roads, parking garages, and pedestrian walkways.
  • Home Improvement & DIY Projects — Anyone building a shed ramp, dog ramp, or furniture mover slope can use this tool to get a safe, practical result.

Important Notes & Technical Limitations

For full transparency and to support informed use, please note the following:

  1. This tool is for planning and reference use only. Always verify ramp designs with a licensed architect, engineer, or contractor before construction.
  2. ADA compliance thresholds vary by context. The 1:12 maximum applies to standard accessible routes; different limits exist for curb ramps, vehicle ramps, and certain existing structures. Consult your local building authority.
  3. The calculator assumes a straight, uniform slope. It does not account for switchbacks, landings, surface material friction, or structural load requirements.
  4. Unit conversions are approximated. For high-precision engineering work, confirm all values using certified measurement tools and official engineering tables.

Helpful References & Sources

  • ADA National Network— Authoritative guidance on ADA accessibility standards, ramp slope requirements, and compliance guidelines.
  • U.S. Access Board — The federal agency responsible for ADAAG standards, including detailed ramp and slope specifications.
  • Wikipedia — Grade (slope) — A clear reference for slope terminology, percentage grades, and ratio conventions used in civil engineering.

🙋 Frequently Asked Questions (FAQs)

What is a ramp slope ratio?

A ramp slope ratio is a way of expressing how steep a ramp is by comparing its vertical rise to its horizontal run. It is written as 1:X, where X is the number of horizontal units for every 1 unit of vertical rise. For example, a 1:12 ratio means the ramp travels 12 inches forward for every 1 inch it climbs upward.

How do I calculate ramp slope ratio manually?

To calculate the slope ratio of a ramp, divide the horizontal run by the vertical rise. If your ramp has a run of 96 inches and a rise of 8 inches, the ratio is 96 ÷ 8 = 12, giving you a 1:12 slope ratio. You can also express this as a percentage by dividing rise by run and multiplying by 100.

What is the ADA-compliant ramp slope ratio?

The ADA (Americans with Disabilities Act) requires that accessible ramps have a maximum slope ratio of 1:12, which equals an 8.33% grade. This means for every inch of vertical rise, the ramp must extend at least 12 inches horizontally. Steeper slopes are only permitted for very short rises under strictly defined conditions.

What is the difference between slope ratio and slope percentage?

Slope ratio (e.g., 1:12) and slope percentage (e.g., 8.33%) both describe steepness but express it differently. The ratio format is more common in accessibility and construction contexts, while percentage is widely used in road engineering and landscaping. You can convert between them: Slope % = (Rise ÷ Run) × 100.

How do I calculate the run length needed for a ramp?

To find the required run, multiply your vertical rise by the ratio multiplier. For a 1:12 ADA-compliant ramp with a 15-inch rise, the calculation is 15 × 12 = 180 inches, or 15 feet. The Zo Calculator ramp ratio calculator handles this automatically — just enter your rise and target ratio.

What slope ratio is used for vehicle and loading dock ramps?

Vehicle ramps and loading docks typically use steeper slopes ranging from 1:6 to 1:10, depending on the type of vehicle and payload. A 1:8 slope (12.5%) is common for light truck ramps, while heavier equipment may require gentler grades for traction and safety. Always check the equipment manufacturer’s specifications alongside local codes.

Can I use the ramp slope ratio calculator for driveways?

Yes, the ramp slope ratio calculator is well-suited for driveway planning. Residential driveway slopes are generally recommended to stay between 1:8 (12.5%) and 1:20 (5%) to balance drainage with vehicle clearance. Steeper than 1:5 can cause vehicle scraping, while too flat may cause water pooling near the garage.

What is a safe slope ratio for a wheelchair ramp at home?

For a home wheelchair ramp, the safest and most commonly recommended slope ratio is 1:12 or gentler. If the user is self-propelling a manual wheelchair, a 1:16 or 1:20 slope is far more manageable. The steeper you go beyond 1:12, the more difficult and potentially dangerous the ramp becomes for wheelchair users.

How does slope angle in degrees relate to the slope ratio?

Slope angle is the geometric angle of inclination measured from horizontal, calculated using the arctangent of (Rise ÷ Run). A 1:12 ramp has an angle of approximately 4.76°, while a 1:4 ramp is about 14.04°. Degrees are commonly used in engineering drawings and structural assessments, while ratios are more prevalent in accessibility standards.

Is there a difference between ramp gradient and ramp slope ratio?

Ramp gradient and ramp slope ratio describe the same concept but in slightly different formats. Gradient is typically expressed as a percentage or a ratio written as “rise:run” (e.g., 1:12), while slope ratio is the same ratio written in the same form. In everyday use, the terms are interchangeable, though “gradient” is more common in road and civil engineering while “slope ratio” is standard in accessibility and construction.


Explore Related Calculators on Zo Calculator