Measure key facial features to determine your face shape.
Your Face Shape is:
—
Understanding Your Face Shape
Determining your face shape is a popular way to understand your unique facial structure, which can be incredibly useful for choosing hairstyles, eyeglasses, makeup contouring techniques, and even understanding facial harmony. While face shapes can be complex and individuals often have features of multiple shapes, there are generally seven common shapes: Oval, Round, Square, Oblong/Rectangle, Heart, Diamond, and Triangle.
This calculator uses basic measurements to provide an approximation of your face shape. By measuring your forehead width, cheekbone width, jawline length, and overall face length, we can analyze the ratios and proportions that define each shape.
How the Calculation Works
The calculator takes four key measurements:
Forehead Width: Measure across the widest part of your forehead, usually about halfway between your eyebrows and hairline.
Cheekbone Width: Measure across the widest part of your cheekbones, typically just below the eyes.
Jawline Length: Measure from the tip of your chin to the point below your ear where your jaw angles upwards. Multiply this by two for a more complete jawline measurement.
Face Length: Measure from the center of your hairline straight down to the tip of your chin.
The calculator then compares these measurements, looking at ratios such as:
Is the face length significantly greater than the width (Oblong/Rectangle)?
Are the cheekbones the widest part (Diamond)?
Is the jawline the widest part (Triangle)?
Is the forehead the widest part, with a narrower chin (Heart)?
Are all measurements relatively similar, with soft, rounded edges (Round)?
Are all measurements relatively similar, with sharp, angular features (Square)?
Does the face have a slightly wider forehead and cheekbones that taper to a narrower chin, with softened jaw angles (Oval)?
It's important to note that these are guidelines. Many people have a combination of features. This calculator provides a starting point based on common definitions of each face shape.
Use Cases for Knowing Your Face Shape:
Hairstyling: Certain haircuts complement specific face shapes by balancing proportions. For example, layers can soften a square jawline, while volume on the sides can add width to a narrow face.
Eyewear: Frame shapes that contrast with your face shape tend to be the most flattering. For instance, angular frames can balance a round face, and rounder frames can soften a square face.
Makeup: Contouring and highlighting techniques are often tailored to face shapes to create the illusion of desired proportions (e.g., slimming a round face, widening a long face).
Beard Styles: For men, beard styles can be chosen to enhance or balance facial features.
Use this calculator as a fun and informative tool to discover your face shape and explore how different styles can enhance your natural features.
function calculateFaceShape() {
var foreheadWidth = parseFloat(document.getElementById("foreheadWidth").value);
var cheekboneWidth = parseFloat(document.getElementById("cheekboneWidth").value);
var jawlineLength = parseFloat(document.getElementById("jawlineLength").value) * 2; // Multiply by 2 for total jawline width
var faceLength = parseFloat(document.getElementById("faceLength").value);
var resultValueElement = document.getElementById("result-value");
var resultContainer = document.getElementById("result");
if (isNaN(foreheadWidth) || isNaN(cheekboneWidth) || isNaN(jawlineLength) || isNaN(faceLength) ||
foreheadWidth <= 0 || cheekboneWidth <= 0 || jawlineLength <= 0 || faceLength 0.95 && widthToLengthRatio < 1.05 && Math.abs(foreheadWidth – cheekboneWidth) < 1 && Math.abs(cheekboneWidth – jawlineLength) < 1) {
// Similar widths, check if angular or rounded
if (Math.abs(faceLength – width) width * 1.1) { // Length is significantly greater than width
faceShape = "Oblong/Rectangle";
} else {
faceShape = "Square"; // Default if close
}
} else if (foreheadWidth > cheekboneWidth && foreheadWidth > jawlineLength && jawlineLength width * 1.1) { // Longer than wide
faceShape = "Heart";
} else { // Width close to length
faceShape = "Diamond"; // Could be heart if forehead is significantly wider
}
} else if (cheekboneWidth > foreheadWidth && cheekboneWidth > jawlineLength && cheekboneWidth > faceLength * 0.6) {
// Cheekbones widest
if (faceLength > width * 1.1) { // Longer than wide
faceShape = "Diamond";
} else if (Math.abs(faceLength – width) foreheadWidth && jawlineLength > cheekboneWidth) {
// Jawline widest
if (Math.abs(faceLength – jawlineLength) jawlineLength * 1.1) { // Significantly longer
faceShape = "Triangle"; // A longer triangle
} else {
faceShape = "Triangle";
}
} else if (Math.abs(faceLength – faceLength * 0.9) < faceLength * 0.1 && Math.abs(foreheadWidth – cheekboneWidth) < foreheadWidth * 0.1 && Math.abs(cheekboneWidth – jawlineLength) width * 1.1) { // Length is noticeably greater than width
faceShape = "Oval";
} else if (Math.abs(faceLength – width) < faceLength * 0.1) { // Length and width are very similar
// Check for softer jawline vs angular
var angleTolerance = 0.1; // Tolerance for angles
if (Math.abs(jawlineLength – foreheadWidth) < jawlineLength * angleTolerance && Math.abs(jawlineLength – cheekboneWidth) faceWidth * 1.1) { // General check for length > width
faceShape = "Oblong/Rectangle";
} else if (faceLength length
if (foreheadWidth > cheekboneWidth && foreheadWidth > jawlineLength) {
faceShape = "Heart";
} else if (cheekboneWidth > foreheadWidth && cheekboneWidth > jawlineLength) {
faceShape = "Diamond";
} else {
faceShape = "Round";
}
}
// Refined checks for edge cases and better accuracy
var isLonger = faceLength > (Math.max(foreheadWidth, cheekboneWidth, jawlineLength) * 1.1);
var isWider = Math.max(foreheadWidth, cheekboneWidth, jawlineLength) > (faceLength * 1.1);
var isBalanced = Math.abs(faceLength – Math.max(foreheadWidth, cheekboneWidth, jawlineLength)) cheekboneWidth && foreheadWidth > jawlineLength;
var cheekboneDominant = cheekboneWidth > foreheadWidth && cheekboneWidth > jawlineLength;
var jawlineDominant = jawlineLength > foreheadWidth && jawlineLength > cheekboneWidth;
if (isBalanced) {
if (foreheadDominant && jawlineDominant === false && cheekboneDominant === false) { // Forehead wider, jawline narrower
faceShape = "Heart";
} else if (cheekboneDominant) {
faceShape = "Diamond";
} else if (jawlineDominant) {
faceShape = "Triangle";
} else {
// Balanced, but we need to distinguish square/round
var angleTolerance = 0.05; // Tighter tolerance for angles
if (Math.abs(foreheadWidth – jawlineLength) < faceLength * angleTolerance && Math.abs(cheekboneWidth – jawlineLength) < faceLength * angleTolerance && Math.abs(foreheadWidth – cheekboneWidth) < faceLength * angleTolerance) {
faceShape = "Square";
} else {
faceShape = "Round";
}
}
} else if (isLonger) {
if (foreheadDominant && jawlineDominant === false && cheekboneDominant === false) { // Forehead wider, jawline narrower
faceShape = "Heart"; // Long heart
} else if (cheekboneDominant) {
faceShape = "Diamond"; // Long diamond
} else if (jawlineDominant) {
faceShape = "Triangle"; // Long triangle
} else {
faceShape = "Oblong/Rectangle";
}
} else if (isWider) {
if (foreheadDominant && jawlineDominant === false && cheekboneDominant === false) {
faceShape = "Heart";
} else if (cheekboneDominant) {
faceShape = "Diamond";
} else if (jawlineDominant) {
faceShape = "Triangle";
} else {
faceShape = "Round"; // Wider than long and balanced, likely round
}
} else {
// Fallback for complex cases or near misses
if (foreheadDominant && jawlineLength cheekboneWidth * 1.1) {
faceShape = "Triangle";
} else if (cheekboneWidth > foreheadWidth && cheekboneWidth > jawlineLength && cheekboneWidth > faceLength * 0.7) {
faceShape = "Diamond";
} else if (faceLength > width * 1.1) {
faceShape = "Oblong/Rectangle";
} else {
faceShape = "Oval"; // Default to Oval if none of the above strongly match
}
}
// Final adjustments for common shape characteristics
if (faceShape === "Oblong/Rectangle" && Math.abs(foreheadWidth – cheekboneWidth) < 1 && Math.abs(cheekboneWidth – jawlineLength) < 1) {
// If it's long but width is uniform, it might just be a long square or oval
if (Math.abs(foreheadWidth – jawlineLength) < faceLength * 0.05) {
faceShape = "Square"; // If width is very uniform and length is also not excessively more
} else {
faceShape = "Oval";
}
}
if (faceShape === "Square" && faceLength foreheadWidth * 0.9) {
// If jawline is almost as wide as forehead in diamond, it leans towards oval/heart
faceShape = "Oval";
}
if (faceShape === "Triangle" && foreheadWidth > jawlineLength * 0.9) {
// If forehead is nearly as wide as jawline in triangle, it might be square/oval
faceShape = "Square";
}
if (faceShape === "Heart" && cheekboneWidth > foreheadWidth * 0.9) {
// If cheekbones are almost as wide as forehead in heart, it leans towards diamond/oval
faceShape = "Diamond";
}
if (faceShape === "Round" && Math.abs(faceLength – width) < faceLength * 0.1) {
// If round appears to have similar length and width, might be square
faceShape = "Square";
}
resultValueElement.innerText = faceShape;
resultValueElement.style.color = "var(–success-green)";
resultContainer.style.borderColor = "var(–success-green)";
}