#cat-size-calculator {
max-width: 700px;
margin: 20px auto;
padding: 20px;
background: #ffffff;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
font-family: -apple-system, BlinkMacSystemFont, ‘Arial’, sans-serif;
color: #333333;
box-sizing: border-box;
line-height: 1.5;
}
h2 {
text-align: center;
margin: 0 0 15px;
font-size: 1.5rem;
font-weight: 600;
color: #222222;
}
p {
text-align: center;
color: #666666;
font-size: 0.9rem;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 20px;
position: relative;
}
label {
display: block;
margin-bottom: 6px;
font-size: 0.9rem;
font-weight: 600;
color: #333333;
}
input[type=”number”], select, #breed-input {
width: 100%;
padding: 10px;
border: 1px solid #dddddd;
border-radius: 4px;
font-size: 0.9rem;
box-sizing: border-box;
transition: border-color 0.3s;
}
input:focus, select:focus, #breed-input:focus {
border-color: #0073aa;
outline: none;
}
.autocomplete-list {
position: absolute;
width: 100%;
max-height: 150px;
overflow-y: auto;
background: #ffffff;
border: 1px solid #dddddd;
border-radius: 4px;
z-index: 10;
margin-top: 2px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.autocomplete-item {
padding: 8px;
font-size: 0.9rem;
cursor: pointer;
}
.autocomplete-item:hover {
background: #f0f0f0;
}
.tooltip {
position: relative;
display: inline-block;
margin-left: 5px;
cursor: help;
}
.tooltip .tooltip-text {
visibility: hidden;
width: 200px;
background: #333333;
color: #ffffff;
text-align: center;
border-radius: 4px;
padding: 6px;
position: absolute;
z-index: 10;
bottom: 125%;
left: 50%;
transform: translateX(-50%);
opacity: 0;
transition: opacity 0.3s;
font-size: 0.75rem;
}
.tooltip:hover .tooltip-text {
visibility: visible;
opacity: 1;
}
.button-group {
display: flex;
gap: 12px;
justify-content: center;
margin: 20px 0;
}
button {
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 0.9rem;
font-weight: 500;
transition: background 0.3s;
}
#calculate-btn {
background: #0073aa;
color: #ffffff;
}
#calculate-btn:hover {
background: #005177;
}
#reset-btn {
background: #6c757d;
color: #ffffff;
}
#reset-btn:hover {
background: #5a6268;
}
#copy-btn {
background: #28a745;
color: #ffffff;
}
#copy-btn:hover {
background: #218838;
}
#result {
margin-top: 20px;
padding: 15px;
border-radius: 4px;
font-size: 0.9rem;
line-height: 1.6;
min-height: 30px;
}
#result.success {
background: #e6f4ea;
border: 1px solid #28a745;
}
#result.error {
background: #f8d7da;
border: 1px solid #dc3545;
}
.recommendations {
margin-top: 15px;
font-size: 0.85rem;
}
.recommendations ul {
padding-left: 20px;
}
noscript {
display: block;
color: #dc3545;
text-align: center;
margin-top: 15px;
font-size: 0.9rem;
}
@media (max-width: 600px) {
#cat-size-calculator {
margin: 10px;
padding: 15px;
}
h2 {
font-size: 1.3rem;
}
.button-group {
flex-direction: column;
}
button {
width: 100%;
}
}
Sex: ${sex.charAt(0).toUpperCase() + sex.slice(1)}
Age: ${age} ${ageUnitVal}
Current Weight: ${weight} ${weightUnitVal}
Estimated Adult Weight: ${displayWeight}
Estimated Adult Length: ${displayLength} (nose to base of tail)
Growth Status: ${growthStatus}
How Big Will My Cat Get Calculator
Estimate your cat’s adult size to plan for care. Consult a veterinarian for personalized advice.
Male
Female
Months
Years
Pounds (lb)
Kilograms (kg)
Enter your cat’s breed, sex, age, and weight, then click “Calculate”.
JavaScript is disabled. Please enable it to use the calculator.
(function() {
// Encapsulate to avoid WordPress conflicts
const calculator = document.getElementById(‘cat-size-calculator’);
if (!calculator) return;
const form = document.getElementById(‘calc-form’);
const breedInput = document.getElementById(‘breed-input’);
const breedValue = document.getElementById(‘breed-value’);
const autocompleteList = document.getElementById(‘autocomplete-list’);
const sexInput = document.getElementById(‘sex’);
const ageInput = document.getElementById(‘age’);
const ageUnit = document.getElementById(‘age-unit’);
const weightInput = document.getElementById(‘weight’);
const weightUnit = document.getElementById(‘weight-unit’);
const resultDiv = document.getElementById(‘result’);
const breeds = [
{ name: ‘Abyssinian’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘American Shorthair’, weight: { male: [10, 15], female: [8, 12] }, length: [18, 22] },
{ name: ‘American Wirehair’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Australian Mist’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Balinese’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Bengal’, weight: { male: [10, 15], female: [8, 12] }, length: [18, 22] },
{ name: ‘Birman’, weight: { male: [9, 15], female: [6, 12] }, length: [17, 21] },
{ name: ‘Bombay’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘British Shorthair’, weight: { male: [12, 18], female: [9, 14] }, length: [18, 22] },
{ name: ‘Burmese’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Burmilla’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Chartreux’, weight: { male: [10, 16], female: [7, 12] }, length: [17, 21] },
{ name: ‘Chausie’, weight: { male: [12, 18], female: [9, 14] }, length: [18, 22] },
{ name: ‘Cheetoh’, weight: { male: [12, 17], female: [8, 12] }, length: [18, 22] },
{ name: ‘Colorpoint Shorthair’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Cornish Rex’, weight: { male: [6, 9], female: [5, 8] }, length: [15, 19] },
{ name: ‘Cymric’, weight: { male: [10, 14], female: [8, 12] }, length: [17, 21] },
{ name: ‘Devon Rex’, weight: { male: [6, 9], female: [5, 8] }, length: [15, 19] },
{ name: ‘Donskoy’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Egyptian Mau’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘European Shorthair’, weight: { male: [10, 15], female: [8, 12] }, length: [18, 22] },
{ name: ‘Exotic Shorthair’, weight: { male: [10, 14], female: [7, 11] }, length: [17, 21] },
{ name: ‘Foldex’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Havana Brown’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Highlander’, weight: { male: [12, 16], female: [8, 12] }, length: [18, 22] },
{ name: ‘Himalayan’, weight: { male: [9, 15], female: [7, 12] }, length: [17, 21] },
{ name: ‘Japanese Bobtail’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Javanese’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Khao Manee’, weight: { male: [7, 11], female: [5, 9] }, length: [15, 19] },
{ name: ‘Korat’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Kurilian Bobtail’, weight: { male: [10, 15], female: [8, 12] }, length: [18, 22] },
{ name: ‘LaPerm’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Lykoi’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Maine Coon’, weight: { male: [15, 25], female: [10, 18] }, length: [19, 25] },
{ name: ‘Manx’, weight: { male: [10, 14], female: [8, 12] }, length: [17, 21] },
{ name: ‘Mekong Bobtail’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Minuet (Napoleon)’, weight: { male: [6, 9], female: [5, 8] }, length: [15, 19] },
{ name: ‘Minskin’, weight: { male: [4, 6], female: [3, 5] }, length: [14, 18] },
{ name: ‘Mixed/Other’, weight: { male: [8, 12], female: [6, 10] }, length: [15, 20] },
{ name: ‘Munchkin’, weight: { male: [6, 9], female: [4, 8] }, length: [14, 18] },
{ name: ‘Norwegian Forest Cat’, weight: { male: [12, 18], female: [9, 14] }, length: [18, 22] },
{ name: ‘Ocicat’, weight: { male: [10, 15], female: [7, 12] }, length: [17, 21] },
{ name: ‘Ojos Azules’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Oriental’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Persian’, weight: { male: [9, 14], female: [7, 11] }, length: [17, 21] },
{ name: ‘Peterbald’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Pixiebob’, weight: { male: [12, 17], female: [8, 12] }, length: [18, 22] },
{ name: ‘Ragdoll’, weight: { male: [12, 20], female: [8, 15] }, length: [18, 23] },
{ name: ‘Russian Blue’, weight: { male: [10, 15], female: [7, 12] }, length: [17, 21] },
{ name: ‘Safari’, weight: { male: [12, 18], female: [9, 14] }, length: [18, 22] },
{ name: ‘Savannah’, weight: { male: [12, 20], female: [8, 15] }, length: [18, 23] },
{ name: ‘Scottish Fold’, weight: { male: [9, 13], female: [6, 10] }, length: [16, 20] },
{ name: ‘Selkirk Rex’, weight: { male: [10, 16], female: [7, 12] }, length: [17, 21] },
{ name: ‘Serengeti’, weight: { male: [10, 15], female: [8, 12] }, length: [17, 21] },
{ name: ‘Siamese’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 21] },
{ name: ‘Siberian’, weight: { male: [12, 18], female: [8, 14] }, length: [18, 22] },
{ name: ‘Singapura’, weight: { male: [4, 8], female: [4, 6] }, length: [14, 18] },
{ name: ‘Sokoke’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Somali’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Sphynx’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Thai’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Tonkinese’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Toybob’, weight: { male: [4, 6], female: [3, 5] }, length: [14, 18] },
{ name: ‘Turkish Angora’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Turkish Van’, weight: { male: [10, 16], female: [7, 12] }, length: [17, 21] },
{ name: ‘Ukrainian Levkoy’, weight: { male: [8, 12], female: [6, 10] }, length: [16, 20] },
{ name: ‘Van Kedisi’, weight: { male: [10, 16], female: [7, 12] }, length: [17, 21] },
{ name: ‘York Chocolate’, weight: { male: [10, 15], female: [8, 12] }, length: [17, 21] }
];
function populateAutocomplete(query = ”) {
autocompleteList.innerHTML = ”;
const filteredBreeds = breeds.filter(b => b.name.toLowerCase().includes(query.toLowerCase()));
filteredBreeds.forEach(breed => {
const item = document.createElement(‘div’);
item.className = ‘autocomplete-item’;
item.textContent = breed.name;
item.setAttribute(‘role’, ‘option’);
item.addEventListener(‘click’, () => {
breedInput.value = breed.name;
breedValue.value = breed.name;
autocompleteList.innerHTML = ”;
});
autocompleteList.appendChild(item);
});
}
breedInput.addEventListener(‘input’, () => {
populateAutocomplete(breedInput.value);
});
breedInput.addEventListener(‘focus’, () => {
populateAutocomplete(breedInput.value);
});
document.addEventListener(‘click’, (e) => {
if (!breedInput.contains(e.target) && !autocompleteList.contains(e.target)) {
autocompleteList.innerHTML = ”;
}
});
function calculate() {
resultDiv.className = ”;
resultDiv.innerHTML = ”;
try {
const breedName = breedValue.value || breedInput.value || ‘Mixed/Other’;
const sex = sexInput.value;
const age = parseFloat(ageInput.value) || 0;
const ageUnitVal = ageUnit.value;
const weight = parseFloat(weightInput.value) || 0;
const weightUnitVal = weightUnit.value;
if (!breedName) {
throw new Error(‘Please select a breed.’);
}
if (age <= 0) {
throw new Error('Please enter a valid age greater than 0.');
}
if (weight b.name.toLowerCase() === breedName.toLowerCase()) || breeds.find(b => b.name === ‘Mixed/Other’);
const ageMonths = ageUnitVal === ‘years’ ? age * 12 : age;
const weightKg = weightUnitVal === ‘kg’ ? weight : weight / 2.20462;
const weightLb = weightUnitVal === ‘lb’ ? weight : weight * 2.20462;
// Estimate adult size
let weightRange = sex === ‘male’ ? breed.weight.male : breed.weight.female;
let lengthRange = breed.length;
let growthStatus = ”;
let recommendations = [];
// Adjust based on age
if (ageMonths < 6) {
growthStatus = 'Rapidly growing, expect significant size increase.';
recommendations.push('Ensure a high-quality kitten diet to support rapid growth.', 'Monitor weight gain with regular vet checkups.');
// Estimate based on current weight (50–75% of adult weight)
const avgAdultWeight = (weightRange[0] + weightRange[1]) / 2;
const growthFactor = weightLb / (avgAdultWeight * 0.625); // Midpoint of 50–75%
weightRange = [
Math.max(weightRange[0], weightLb / 0.75).toFixed(1),
Math.min(weightRange[1], weightLb / 0.5).toFixed(1)
];
} else if (ageMonths (l * 2.54).toFixed(1));
const displayWeight = weightUnitVal === ‘lb’ ? `${weightRange[0]}–${weightRange[1]} lb` : `${(weightRange[0] / 2.20462).toFixed(1)}–${(weightRange[1] / 2.20462).toFixed(1)} kg`;
const displayLength = weightUnitVal === ‘lb’ ? `${lengthRange[0]}–${lengthRange[1]} in` : `${lengthCm[0]}–${lengthCm[1]} cm`;
resultDiv.innerHTML = `
Breed: ${breed.name}Sex: ${sex.charAt(0).toUpperCase() + sex.slice(1)}
Age: ${age} ${ageUnitVal}
Current Weight: ${weight} ${weightUnitVal}
Estimated Adult Weight: ${displayWeight}
Estimated Adult Length: ${displayLength} (nose to base of tail)
Growth Status: ${growthStatus}
Recommendations:
`;
resultDiv.className = ‘success’;
document.getElementById(‘copy-btn’).addEventListener(‘click’, () => {
const text = `
How Big Will My Cat Get Results
Breed: ${breed.name}
Sex: ${sex.charAt(0).toUpperCase() + sex.slice(1)}
Age: ${age} ${ageUnitVal}
Current Weight: ${weight} ${weightUnitVal}
Estimated Adult Weight: ${displayWeight}
Estimated Adult Length: ${displayLength} (nose to base of tail)
Growth Status: ${growthStatus}
Recommendations:
${recommendations.map(r => `- ${r}`).join(‘\n’)}
– Consult a veterinarian for personalized growth and health advice.
– Size varies due to genetics, diet, and health; this is an estimate.
`.trim();
navigator.clipboard.writeText(text).then(() => {
alert(‘Results copied to clipboard!’);
}).catch(() => {
alert(‘Failed to copy results. Please copy manually.’);
});
});
} catch (error) {
resultDiv.innerHTML = `Error: ${error.message}`;
resultDiv.className = ‘error’;
}
}
function reset() {
form.reset();
breedInput.value = ”;
breedValue.value = ”;
autocompleteList.innerHTML = ”;
resultDiv.className = ”;
resultDiv.innerHTML = ‘Enter your cat’s breed, sex, age, and weight, then click “Calculate”.’;
breedInput.focus();
}
document.getElementById(‘calculate-btn’).addEventListener(‘click’, calculate);
document.getElementById(‘reset-btn’).addEventListener(‘click’, reset);
form.addEventListener(‘keypress’, (e) => {
if (e.key === ‘Enter’ && e.target.tagName !== ‘BUTTON’) {
e.preventDefault();
calculate();
}
});
})();
-
${recommendations.map(r => `
- ${r} `).join(”)}
- Consult a veterinarian for personalized growth and health advice.
- Size varies due to genetics, diet, and health; this is an estimate.