Building a staircase, especially one with a landing, requires precise measurements and an understanding of building codes to ensure it is safe, comfortable, and functional. This calculator is designed to simplify the process for L-shaped (90° turn) and U-shaped (180° turn) staircases, which are common solutions for saving space or navigating corners.
Key Stair Terminology
Before using the calculator, it's helpful to understand the core components of a staircase:
Total Rise: The total vertical distance the staircase needs to cover, from the finished floor of the lower level to the finished floor of the upper level.
Riser: The vertical part of a step. The Riser Height is the height of a single step.
Tread: The horizontal part of a step that you walk on. The Tread Depth is the front-to-back measurement of the tread.
Run: The total horizontal distance covered by a flight of stairs.
Stringer: The structural support board that runs along the side of the staircase, into which the risers and treads are fixed.
Landing: A flat platform that breaks up a long flight of stairs or allows the staircase to change direction.
Headroom: The vertical clearance from the top of a tread to the ceiling or any obstruction above it. A minimum of 6′ 8″ (80 inches) is typically required.
Using the Stair Calculator with Landing
Our calculator automates the complex math involved in designing a staircase with a turn. Here's how to use it effectively:
Total Rise (A): Measure the exact vertical height from the surface of the lower floor to the surface of the upper floor. This is the most critical measurement.
Tread Depth (B): Enter your desired tread depth. A common and comfortable depth is 10 to 11 inches. Building codes often specify a minimum, typically 10 inches.
Stair Width (C): Input the desired width of your staircase. Most residential codes require a minimum of 36 inches.
Turn Type: Select whether you are building an L-shaped (90° turn) or U-shaped (180° turn) staircase. This affects the landing dimensions and overall footprint.
After you click "Calculate," the tool will provide a detailed breakdown for two separate flights of stairs connected by a landing, ensuring all dimensions comply with standard building practices.
Example Calculation
Let's say you are building an L-shaped staircase for a floor-to-floor height of 108 inches.
Total Rise: 108 inches
Tread Depth: 10 inches
Stair Width: 36 inches
Turn Type: L-Shape
The calculator would first determine the total number of risers. A common rule is to divide the total rise by 7.5 (an ideal riser height) to get an estimate: 108 / 7.5 = 14.4. This is rounded up to 15 risers. The actual riser height would then be 108 / 15 = 7.2 inches, which is a very comfortable height.
With 15 risers, you have 14 treads (Total Risers - 1). The calculator splits these as evenly as possible for the two flights around the landing. For instance, it might create a first flight with 7 risers (and 6 treads) and a second flight with 8 risers (and 7 treads). It then calculates the run and stringer length for each flight, along with the necessary landing dimensions.
Important Building Code Rules for Stairs
While codes can vary by location, the International Residential Code (IRC) provides widely adopted standards for safety and comfort:
Riser Height: Maximum of 7.75 inches. The variation between the tallest and shortest riser in a flight should not exceed 3/8 inch.
Tread Depth: Minimum of 10 inches. The variation between the deepest and shallowest tread should not exceed 3/8 inch.
Stair Safety Rules of Thumb:
Riser Height + Tread Depth should be between 17 and 18 inches.
(2 x Riser Height) + Tread Depth should be between 24 and 25 inches.
Landing Size: The depth of the landing (in the direction of travel) must be at least equal to the width of the stairs. For a 36-inch wide staircase, the landing must be at least 36 inches deep.
Our calculator automatically considers these rules, helping you design a compliant and safe staircase. Always double-check with your local building authority before beginning construction.
function calculateStairsWithLanding() {
var totalRise = parseFloat(document.getElementById('totalRise').value);
var treadDepth = parseFloat(document.getElementById('treadDepth').value);
var stairWidth = parseFloat(document.getElementById('stairWidth').value);
var turnType = document.getElementById('turnType').value;
var resultsDiv = document.getElementById('stairResults');
if (isNaN(totalRise) || isNaN(treadDepth) || isNaN(stairWidth) || totalRise <= 0 || treadDepth <= 0 || stairWidth 7.75) { // If rounding up makes riser too small, round down
totalRisers = Math.round(totalRise / idealRiserHeight);
}
var actualRiserHeight = totalRise / totalRisers;
var totalTreads = totalRisers – 1;
// — Distribute Risers and Treads between two flights —
var risersFlight1 = Math.floor(totalRisers / 2);
var risersFlight2 = totalRisers – risersFlight1;
var treadsFlight1 = risersFlight1; // The landing acts as the top tread of the first flight
var treadsFlight2 = risersFlight2 – 1;
// — Flight 1 Dimensions —
var riseFlight1 = risersFlight1 * actualRiserHeight;
var runFlight1 = treadsFlight1 * treadDepth;
var stringerFlight1 = Math.sqrt(Math.pow(riseFlight1, 2) + Math.pow(runFlight1, 2));
// — Flight 2 Dimensions —
var riseFlight2 = risersFlight2 * actualRiserHeight;
var runFlight2 = treadsFlight2 * treadDepth;
var stringerFlight2 = Math.sqrt(Math.pow(riseFlight2, 2) + Math.pow(runFlight2, 2));
// — Landing Dimensions —
var landingDepth, landingWidth;
if (turnType === 'L-Shape') {
landingDepth = stairWidth;
landingWidth = stairWidth;
} else { // U-Shape
landingDepth = stairWidth;
landingWidth = (stairWidth * 2) + 1; // Assuming a 1-inch gap between flights
}
// — Total Footprint —
var totalFootprint;
if (turnType === 'L-Shape') {
totalFootprint = (runFlight1 + landingWidth) + ' in. x ' + (runFlight2 + landingDepth) + ' in.';
} else { // U-Shape
totalFootprint = landingWidth + ' in. x ' + Math.max(runFlight1, runFlight2 + landingDepth) + ' in.';
}
// — Compliance Checks —
var rule1718 = actualRiserHeight + treadDepth;
var rule2425 = (2 * actualRiserHeight) + treadDepth;
var stairAngle = Math.atan(totalRise / (runFlight1 + runFlight2)) * (180 / Math.PI);
// — Generate Output HTML —
var outputHTML = '
Overall Stair Dimensions
';
outputHTML += '
';
outputHTML += '
Total Risers:' + totalRisers + '
';
outputHTML += '
Actual Riser Height:' + actualRiserHeight.toFixed(2) + ' in
';
outputHTML += '
Total Treads (excl. landing):' + (treadsFlight1 + treadsFlight2) + '
';
outputHTML += '
';
outputHTML += '
Flight 1 (Bottom)
';
outputHTML += '
';
outputHTML += '
Number of Risers:' + risersFlight1 + '
';
outputHTML += '
Number of Treads:' + treadsFlight1 + '
';
outputHTML += '
Rise (Flight 1):' + riseFlight1.toFixed(2) + ' in
';
outputHTML += '
Run (Flight 1):' + runFlight1.toFixed(2) + ' in
';
outputHTML += '
Stringer Length:' + stringerFlight1.toFixed(2) + ' in
';
outputHTML += '
';
outputHTML += '
Landing
';
outputHTML += '
';
outputHTML += '
Landing Dimensions:' + landingWidth.toFixed(2) + ' in x ' + landingDepth.toFixed(2) + ' in
';
outputHTML += '
';
outputHTML += '
Flight 2 (Top)
';
outputHTML += '
';
outputHTML += '
Number of Risers:' + risersFlight2 + '
';
outputHTML += '
Number of Treads:' + treadsFlight2 + '
';
outputHTML += '
Rise (Flight 2):' + riseFlight2.toFixed(2) + ' in
';
outputHTML += '
Run (Flight 2):' + runFlight2.toFixed(2) + ' in
';
outputHTML += '
Stringer Length:' + stringerFlight2.toFixed(2) + ' in
';
outputHTML += '
';
outputHTML += '
Compliance & Comfort Checks
';
outputHTML += '
';
outputHTML += '
Riser + Tread (17″-18″ ideal):' + rule1718.toFixed(2) + ' in
';
outputHTML += '
2*Riser + Tread (24″-25″ ideal):' + rule2425.toFixed(2) + ' in