#concrete-calculator-wrapper .calc-box {
background: #f9f9f9;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 25px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
margin-bottom: 30px;
}
#concrete-calculator-wrapper .form-group {
margin-bottom: 15px;
}
#concrete-calculator-wrapper label {
display: block;
font-weight: 600;
margin-bottom: 5px;
color: #2c3e50;
}
#concrete-calculator-wrapper input[type="number"],
#concrete-calculator-wrapper select {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
}
#concrete-calculator-wrapper .row {
display: flex;
gap: 20px;
flex-wrap: wrap;
}
#concrete-calculator-wrapper .col {
flex: 1;
min-width: 200px;
}
#concrete-calculator-wrapper button.calc-btn {
background-color: #e67e22;
color: white;
border: none;
padding: 12px 24px;
font-size: 18px;
font-weight: bold;
border-radius: 4px;
cursor: pointer;
width: 100%;
transition: background-color 0.2s;
margin-top: 10px;
}
#concrete-calculator-wrapper button.calc-btn:hover {
background-color: #d35400;
}
#concrete-calculator-wrapper .results-box {
background: #fff;
border: 2px solid #e67e22;
border-radius: 6px;
padding: 20px;
margin-top: 25px;
display: none;
}
#concrete-calculator-wrapper .result-item {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #eee;
padding: 10px 0;
}
#concrete-calculator-wrapper .result-item:last-child {
border-bottom: none;
}
#concrete-calculator-wrapper .result-label {
color: #555;
}
#concrete-calculator-wrapper .result-value {
font-weight: 700;
color: #2c3e50;
}
#concrete-calculator-wrapper .highlight {
color: #e67e22;
font-size: 1.1em;
}
#concrete-calculator-wrapper h2 {
color: #2c3e50;
border-bottom: 2px solid #e67e22;
padding-bottom: 10px;
margin-top: 30px;
}
#concrete-calculator-wrapper h3 {
color: #34495e;
margin-top: 25px;
}
#concrete-calculator-wrapper p {
line-height: 1.6;
margin-bottom: 15px;
}
#concrete-calculator-wrapper ul {
margin-bottom: 15px;
padding-left: 20px;
}
#concrete-calculator-wrapper li {
margin-bottom: 8px;
line-height: 1.5;
}
How to Estimate Concrete for a Slab
Calculating the correct amount of concrete is crucial for any construction project, whether you are pouring a patio, a driveway, or a foundation for a shed. Ordering too little can result in a structural "cold joint," while ordering too much wastes money and creates disposal issues. This calculator helps you determine the exact volume in cubic yards and cubic feet, accounting for standard waste margins.
The Concrete Calculation Formula
To calculate the volume of concrete required for a slab, you need to determine the area in square feet and multiply it by the thickness in feet. Since thickness is usually measured in inches, the formula requires a unit conversion:
Volume (cu. ft.) = Length (ft) × Width (ft) × (Thickness (in) ÷ 12)
Once you have the cubic footage, you typically convert this to cubic yards, as this is how ready-mix suppliers sell concrete:
Cubic Yards = Cubic Feet ÷ 27
Why Include a Waste Margin?
Professional contractors never order the exact mathematical volume. Several factors contribute to needing more material than the perfect geometric calculation suggests:
- Uneven Subgrade: The ground beneath the slab is rarely perfectly flat, creating pockets that require extra concrete.
- Form Spillage: Some concrete may push out under the wooden forms.
- Spillage: Minor amounts are lost during the pouring and screeding process.
We recommend a 5% safety margin for standard projects and up to 10% for complex shapes or uneven ground.
Ready-Mix vs. Bagged Concrete
When should you order a truck versus buying bags from the hardware store?
- Bagged Concrete (Pre-Mix): Best for small projects under 1 cubic yard (approx. 45-50 bags of 80lb concrete). It is labor-intensive to mix by hand.
- Ready-Mix Truck: Best for projects over 1 cubic yard. It guarantees a consistent mix and saves immense physical labor, though minimum order charges may apply (often 3-4 yards minimum).
Use the calculator above to compare the costs between ordering a truck (based on price per yard) and buying bags (based on price per bag) to make the most cost-effective decision for your specific project.
function calculateConcrete() {
// Get input values
var length = parseFloat(document.getElementById("slabLength").value);
var width = parseFloat(document.getElementById("slabWidth").value);
var thickness = parseFloat(document.getElementById("slabThickness").value);
var waste = parseFloat(document.getElementById("wastePercent").value);
var pricePerYard = parseFloat(document.getElementById("pricePerYard").value);
var pricePerBag = parseFloat(document.getElementById("pricePerBag").value);
// Validation
if (isNaN(length) || isNaN(width) || isNaN(thickness)) {
alert("Please enter valid numbers for Length, Width, and Thickness.");
return;
}
if (length <= 0 || width <= 0 || thickness <= 0) {
alert("Dimensions must be greater than zero.");
return;
}
// Calculations
// 1. Calculate base volume in cubic feet
// Thickness converted to feet: thickness / 12
var volumeCubicFeet = length * width * (thickness / 12);
// 2. Add Waste Margin
var totalVolumeCubicFeet = volumeCubicFeet * (1 + (waste / 100));
// 3. Convert to Cubic Yards
var totalVolumeCubicYards = totalVolumeCubicFeet / 27;
// 4. Calculate Bags (Based on standard yield)
// An 80lb bag typically yields ~0.60 cubic feet
// A 60lb bag typically yields ~0.45 cubic feet
// Alternatively, density ~133 lbs/cu ft.
// Total lbs needed = totalVolumeCubicFeet * 133
var lbsNeeded = totalVolumeCubicFeet * 133; // average concrete density
var bags80 = Math.ceil(lbsNeeded / 80);
var bags60 = Math.ceil(lbsNeeded / 60);
// 5. Calculate Costs
var totalTruckCost = totalVolumeCubicYards * pricePerYard;
var totalBagCost = bags80 * pricePerBag;
// Handle missing price inputs smoothly
if (isNaN(totalTruckCost)) totalTruckCost = 0;
if (isNaN(totalBagCost)) totalBagCost = 0;
// Update DOM
document.getElementById("resYards").innerText = totalVolumeCubicYards.toFixed(2);
document.getElementById("resFeet").innerText = totalVolumeCubicFeet.toFixed(2);
document.getElementById("resTruckCost").innerText = "$" + totalTruckCost.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resBagCount").innerText = bags80;
document.getElementById("resBagCost").innerText = "$" + totalBagCost.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resBagCount60").innerText = bags60;
// Show results
document.getElementById("calcResults").style.display = "block";
}