============================================================ */ (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(); } })();
θ
Shed Ramp Angle Calculator
Instantly calculate ramp angle, slope & board length — for any shed, garage, or platform.
Ramp Dimensions
Rise (Vertical Height)
Run (Horizontal Length)
Output Unit for Length
Ramp Purpose
Surface Material
Rise = vertical height from ground to shed floor.  Run = horizontal ground distance the ramp will cover. Both values must be in the same physical measurement — the unit selectors handle conversion automatically.
!
Please enter valid positive values for both Rise and Run.
Results
Formulas, References & Notes
  • Ramp Length: L = √(Rise² + Run²) — Pythagorean theorem
  • Angle: θ = arctan(Rise ÷ Run) — result in degrees
  • Slope %: Slope = (Rise ÷ Run) × 100
  • Rise-to-Run Ratio: 1 : (Run ÷ Rise)
  • ADA standard for wheelchair accessibility: max slope 1:12 ≈ 4.76° (8.33%)
  • General safe range for shed use: 10° – 15° (18% – 27%)
  • All unit conversions performed in inches internally before calculation.
  • Results are for planning & reference only — verify with local building codes.
  • Source: ADA.gov, OSHA.gov, Wikipedia — Inclined Plane

Shed Ramp Angle Calculator: Find the Right Slope Instantly

Building a ramp for your shed sounds simple — until you realize the angle makes or breaks the whole project. The Zo Calculator Shed Ramp Angle Calculator takes your ramp’s rise (height) and run (horizontal length) and instantly tells you the exact angle in degrees, the slope percentage, and the total ramp length you need. Whether you’re rolling a lawnmower in, moving heavy storage bins, or loading equipment, this tool helps homeowners, contractors, and DIYers get it right the first time.


What This Calculator Tells You

Enter two basic measurements and the shed ramp calculator returns everything you need to build with confidence:

  • Ramp angle in degrees — the precise tilt from ground to shed floor
  • Slope percentage — expressed as rise-over-run × 100, useful for comparing against accessibility or safety standards
  • Total ramp length — the actual board length you’ll need to cut, calculated along the hypotenuse
  • Rise-to-run ratio — a quick reference for how steep or gradual your ramp is
  • Recommended ramp category — whether your ramp falls in the safe, moderate, or steep range

How the Calculator Works (The Formula & Logic)

The shed ramp slope calculator is built on basic trigonometry and the Pythagorean theorem. Here’s how each value is derived — no math degree required.

The three core inputs:

  • Rise = the vertical height from the ground to the shed floor (in inches or cm)
  • Run = the horizontal distance the ramp will cover

Formulas used:

Ramp Length (Hypotenuse) = √(Rise² + Run²)

Angle (degrees) = arctan(Rise ÷ Run)

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

So if your shed floor sits 12 inches off the ground and you want a 48-inch run, the calculator computes: √(12² + 48²) = √(144 + 2304) = √2448 ≈ 49.5 inches of actual ramp board length, at an angle of arctan(12/48) ≈ 14.04°, and a slope of 25%.


Standard Ramp Angle Ratings & Classifications

This reference chart helps you quickly assess whether your planned ramp is safe and practical for its intended use.

Angle (°)Slope (%)ClassificationBest For
0° – 5°0% – 9%Very GentleWheelchair access, elderly users
6° – 10°10% – 18%GentleHand trucks, light equipment
11° – 15°19% – 27%ModerateLawnmowers, bikes, small ATVs
16° – 20°28% – 36%SteepCapable adults, powered equipment
21° – 25°37% – 47%Very SteepNot recommended for heavy loads
26°+48%+HazardousUnsafe for most practical shed use

General reference values. Always verify with local building codes for your specific application.


Step-by-Step Practical Example

Let’s say you have a storage shed with a floor sitting 10 inches above the ground, and you have 48 inches of space in front of the shed to work with.

Step 1 — Identify Rise and Run

  • Rise = 10 inches (shed floor height)
  • Run = 48 inches (available ground space)

Step 2 — Calculate Ramp Length

  • Ramp Length = √(10² + 48²) = √(100 + 2304) = √2404 ≈ 49.0 inches

Step 3 — Calculate Angle and Slope

  • Angle = arctan(10 ÷ 48) = arctan(0.208) ≈ 11.8°
  • Slope = (10 ÷ 48) × 100 ≈ 20.8%

Result: You need roughly a 49-inch board, your ramp sits at about 12°, and the slope is around 21% — putting it in the Moderate category. Perfectly usable for rolling out a lawnmower or moving bins.


How to Use Zo Calculator’s Shed Ramp Angle Tool

Using the shed ramp length calculator on ZoCalculator.com takes under a minute:

  1. Enter the Rise — Measure the vertical height from the ground to your shed’s door threshold. Enter this in inches or centimeters.
  2. Enter the Run — Measure the horizontal distance you have available in front of the shed. This is how long the ramp footprint will be on the ground.
  3. Select your unit — Choose inches, feet, or centimeters depending on your preference.
  4. Click Calculate — The tool instantly returns the ramp angle, slope percentage, ramp board length, and a safety classification.
  5. Read the results — Use the angle to plan your cut, the board length to buy your lumber, and the classification to confirm the ramp is safe for its intended load.
  6. Adjust as needed — If the angle is too steep, increase your Run value and recalculate until you reach a comfortable slope.

Practical Applications and Real-World Uses

The shed ramp angle calculator is a surprisingly versatile tool used across many everyday projects:

  • Homeowners building DIY shed ramps — Get the exact board length and angle before buying lumber, eliminating waste and guesswork.
  • Landscapers and gardeners — Ensure mowers, wheelbarrows, and carts roll in and out safely without the ramp being too steep to push loads up.
  • Contractors and builders — Quickly verify that a client’s ramp plan meets practical slope safety thresholds before construction begins.
  • Garage and workshop owners — Plan ramps for rolling tool chests, motorcycles, or ATVs in and out of elevated floor spaces.
  • Rental property owners — Check whether an existing or planned ramp meets basic accessibility considerations for tenants with mobility equipment.
  • Event and equipment rental setups — Calculate load ramp angles when staging equipment deliveries into raised platform areas or trailers.

Important Notes & Technical Limitations

This tool is designed for planning and reference purposes. Keep these points in mind before breaking ground:

  1. Results assume a flat, level surface. If your ground in front of the shed slopes or is uneven, measurements will need manual adjustment on-site.
  2. Material thickness is not factored in. The ramp length calculated is the centerline of the board. For thick lumber (e.g., 2-inch stock), actual cut length may differ slightly.
  3. This is not a structural engineering tool. The calculator does not assess load-bearing capacity, wood species strength, or fastener requirements. For heavy equipment ramps, consult a builder or structural guide.
  4. Local building codes vary. Some municipalities have specific ramp slope or construction requirements, especially for residential accessibility. Always check with your local authority before building.

Helpful References & Sources

  • Wikipedia.orgInclined plane article provides foundational physics behind ramp angle and mechanical advantage.
  • ADA.gov — The Americans with Disabilities Act guidelines outline maximum ramp slope ratios (1:12) useful as a benchmark for accessible ramp design.
  • OSHA.gov — OSHA’s walking-working surfaces standards provide slope and traction guidance relevant to any load-bearing ramp construction.

🙋 Frequently Asked Questions (FAQs)

What is a good angle for a shed ramp?

A good shed ramp angle is typically between 10° and 15° (roughly an 18%–27% slope). This range is manageable for pushing lawnmowers, hand trucks, and bins without excessive effort. For heavier or motorized equipment, staying closer to 10° or lower is recommended for safety.

How do I calculate the length of a shed ramp?

To calculate shed ramp length, use the Pythagorean theorem: Ramp Length = √(Rise² + Run²). Measure the height of your shed floor (rise) and the horizontal distance you plan to cover (run), plug those into the formula, and the result is the actual board length you need. The Zo Calculator shed ramp length calculator does this instantly for you.

What slope percentage is safe for a shed ramp?

A slope of under 25% (about 14°) is generally considered safe for most shed uses, including moving garden equipment and storage items. Slopes above 30–35% become difficult to use safely with heavy loads and increase the risk of slipping or tipping. For human accessibility, the ADA standard of 1:12 (approximately 8.3%) is the benchmark.

What is the difference between ramp angle and ramp slope?

Ramp angle is measured in degrees and tells you the tilt of the ramp relative to the ground — for example, 12°. Ramp slope is expressed as a percentage and is calculated as Rise ÷ Run × 100 — for example, 25%. Both describe the same steepness in different units. Contractors often use slope percentage, while angle in degrees is more intuitive for most DIYers.

How long should a shed ramp be for a 12-inch rise?

For a 12-inch rise, the recommended ramp run depends on your target angle. To achieve a gentle 12° angle (roughly 21% slope), you’d want about a 56-inch run, giving you a ramp board length of approximately 57.3 inches. For an even gentler slope under 10°, extend the run to 68 inches or more. Use the shed ramp slope calculator on ZoCalculator.com to test different run lengths instantly.

Can I use this calculator for a wheelchair ramp?

This calculator can give you the angle and slope figures needed for accessibility planning, but for a formal wheelchair ramp the ADA standard requires a maximum slope of 1:12 (one inch of rise per 12 inches of run), which equals about 4.8°. The tool will show you whether your planned ramp meets that threshold, though full ADA compliance involves handrail and surface requirements beyond what this calculator covers.

What is the formula for ramp angle?

The ramp angle formula is: Angle = arctan(Rise ÷ Run). Divide the vertical rise by the horizontal run, then take the inverse tangent (arctan) of that value. Most scientific calculators and all smartphones can compute arctan. For example, a rise of 10 inches and a run of 48 inches gives arctan(10/48) ≈ 11.8°.

How do I make a shed ramp less steep?

To reduce a shed ramp’s steepness, increase the horizontal run — extend how far the ramp stretches out from the shed. Since angle = arctan(Rise ÷ Run), a longer run produces a smaller angle. If space in front of your shed is limited, consider building a switchback or angled approach ramp to gain extra run distance without requiring more linear footage.

Does wood thickness affect ramp length calculations?

The calculated ramp length is based on the centerline measurement using rise and run, so lumber thickness has a minimal effect on the cut length for standard 1.5-inch dimensional boards. However, the ramp’s effective rise will be slightly reduced by the board’s thickness where it meets the ground. For most practical shed ramp builds, this difference is negligible, but precision woodworkers may want to account for it.

What type of wood is best for a shed ramp?

Pressure-treated lumber is the most common and recommended choice for outdoor shed ramps because it resists moisture, rot, and insect damage. 2×6 or 2×8 pressure-treated boards are standard for the ramp surface. For added grip, consider adding anti-slip strips or using ribbed composite decking boards. The ramp frame (stringers) is typically built from 2×6 or 2×8 pressure-treated stock as well.


Explore Related Calculators on Zo Calculator