.hr-calc-container {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
max-width: 800px;
margin: 20px auto;
padding: 25px;
border: 1px solid #e1e1e1;
border-radius: 12px;
background-color: #f9f9f9;
color: #333;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.hr-calc-header {
text-align: center;
margin-bottom: 25px;
}
.hr-calc-row {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-bottom: 20px;
}
.hr-calc-field {
flex: 1;
min-width: 200px;
}
.hr-calc-field label {
display: block;
font-weight: 600;
margin-bottom: 8px;
font-size: 14px;
}
.hr-calc-field input {
width: 100%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 6px;
font-size: 16px;
box-sizing: border-box;
}
.hr-calc-btn {
background-color: #d32f2f;
color: white;
border: none;
padding: 15px 30px;
font-size: 18px;
font-weight: bold;
border-radius: 6px;
cursor: pointer;
width: 100%;
transition: background-color 0.3s;
}
.hr-calc-btn:hover {
background-color: #b71c1c;
}
.hr-results {
margin-top: 30px;
display: none;
}
.hr-table-wrapper {
overflow-x: auto;
}
.hr-table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
background: white;
}
.hr-table th, .hr-table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #eee;
}
.hr-table th {
background-color: #f4f4f4;
font-weight: 700;
}
.zone-1 { border-left: 5px solid #4caf50; }
.zone-2 { border-left: 5px solid #8bc34a; }
.zone-3 { border-left: 5px solid #ffeb3b; }
.zone-4 { border-left: 5px solid #ff9800; }
.zone-5 { border-left: 5px solid #f44336; }
.hr-info-section {
margin-top: 40px;
line-height: 1.6;
}
.hr-info-section h2 {
color: #222;
border-bottom: 2px solid #d32f2f;
padding-bottom: 10px;
}
.hr-info-section h3 {
margin-top: 25px;
color: #444;
}
.hr-card {
background: #fff;
padding: 15px;
border-radius: 8px;
margin-bottom: 15px;
border: 1px solid #eee;
}
Current Age (Years)
Resting Heart Rate (BPM)
Calculate Training Zones
Your Calculated Zones
Based on a Maximum Heart Rate of BPM.
Zone
Intensity
Karvonen Method (BPM)
Max HR Method (BPM)
Training Effect
Understanding Heart Rate Zone Calculation Methods
To optimize your cardiovascular training, it is essential to understand how your heart responds to different levels of exertion. Fitness professionals primarily use two methods to define these boundaries: the Fox Formula (Max HR) and the Karvonen Formula .
The Max HR Method (Fox Formula)
The simplest way to calculate zones is based strictly on your age. The formula 220 - Age provides an estimated Maximum Heart Rate (MHR). While easy to use, it does not account for an individual's fitness level or resting pulse, making it a general baseline rather than a precision tool.
The Karvonen Method (Heart Rate Reserve)
The Karvonen formula is considered significantly more accurate for athletes. It incorporates your Heart Rate Reserve (HRR) , which is the difference between your maximum heart rate and your resting heart rate. By factoring in your resting pulse, the zones are tailored to your current cardiovascular efficiency.
Formula: Target HR = ((Max HR − Resting HR) × % Intensity) + Resting HR
The Five Training Zones Explained
Zone 1 (50-60%): Recovery & Health. Improves overall health and helps recovery after harder sessions.
Zone 2 (60-70%): Fat Burn & Endurance. Increases the body's ability to use fat as a fuel source and builds aerobic base.
Zone 3 (70-80%): Aerobic Capacity. Improves blood circulation and strengthens the heart and skeletal muscles.
Zone 4 (80-90%): Anaerobic Threshold. Increases speed endurance and the body's ability to handle lactic acid.
Zone 5 (90-100%): VO2 Max. Maximum effort for short bursts to increase peak performance and speed.
Example Calculation
For a 30-year-old with a resting heart rate of 60 BPM:
Max HR: 220 – 30 = 190 BPM
Heart Rate Reserve: 190 – 60 = 130 BPM
Zone 3 (70%) Karvonen: (130 * 0.70) + 60 = 151 BPM
Zone 3 (70%) Max HR Method: 190 * 0.70 = 133 BPM
Notice the significant difference; the Karvonen method usually results in higher, more accurate intensity targets for active individuals.
function calculateZones() {
var age = document.getElementById('age').value;
var rhr = document.getElementById('restingHR').value;
if (!age || age 120) {
alert("Please enter a valid age.");
return;
}
if (!rhr || rhr 150) {
alert("Please enter a valid resting heart rate (typical range 30-150).");
return;
}
var ageNum = parseFloat(age);
var rhrNum = parseFloat(rhr);
var maxHR = 220 – ageNum;
var hrr = maxHR – rhrNum;
document.getElementById('maxHRVal').innerText = maxHR;
var zones = [
{ name: "Zone 1", range: "50-60%", low: 0.50, high: 0.60, effect: "Recovery", class: "zone-1" },
{ name: "Zone 2", range: "60-70%", low: 0.60, high: 0.70, effect: "Fat Burn", class: "zone-2" },
{ name: "Zone 3", range: "70-80%", low: 0.70, high: 0.80, effect: "Aerobic", class: "zone-3" },
{ name: "Zone 4", range: "80-90%", low: 0.80, high: 0.90, effect: "Anaerobic", class: "zone-4" },
{ name: "Zone 5", range: "90-100%", low: 0.90, high: 1.00, effect: "VO2 Max", class: "zone-5" }
];
var html = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
// Karvonen Calculation
var kLow = Math.round((hrr * z.low) + rhrNum);
var kHigh = Math.round((hrr * z.high) + rhrNum);
// Max HR Calculation
var mLow = Math.round(maxHR * z.low);
var mHigh = Math.round(maxHR * z.high);
html += "
";
html += "" + z.name + " ";
html += "" + z.range + " ";
html += "" + kLow + " – " + kHigh + " BPM ";
html += "" + mLow + " – " + mHigh + " BPM ";
html += "" + z.effect + " ";
html += " ";
}
document.getElementById('hr-table-body').innerHTML = html;
document.getElementById('hr-results').style.display = 'block';
window.scrollTo({
top: document.getElementById('hr-results').offsetTop – 50,
behavior: 'smooth'
});
}