Body fat percentage calculator template
US Navy body fat from height, neck, waist and hip measurements, with fat and lean mass, in US or metric units. Twelve inputs, six calculation fields shown by conditional logic.
Try the live Body fat percentage calculator first- Import-ready Gravity Forms JSON
- One-page install guide
- The plugins it needs, with links
- Everything in Template
- Step-by-step PDF with screenshots of every field and formula
- The CSS skin from this site, with notes on matching your brand
What you'll need
Check these before you buy so there are no surprises. Links may be affiliate links.
- Required Gravity Forms (any license) Calculation fields and conditional logic are in core; log() needs GP Advanced Calculations.
- Required GP Advanced Calculations (Gravity Wiz) Exponents, functions and date math in calculation fields. The formulas in this template use its syntax. Part of Gravity Perks; needs the Spellbook plugin active as well.
Free build guide: Body fat percentage calculator for WordPress
This guide rebuilds the Body fat percentage calculator from this site in Gravity Forms: 12 inputs, 6 live results and no submit button. Expect about 54 minutes by hand. The template above is the same form as an import file, and the bundle adds a PDF version of this guide with a screenshot of every setting, plus the stylesheet.
You will end up with:
- Body fat (%)
- Body fat (%)
- Fat mass (lb)
- Lean mass (lb)
- Fat mass (kg)
- Lean mass (kg)
What you need
- Gravity Forms (any license) — Calculation fields and conditional logic are in core; log() needs GP Advanced Calculations.
- GP Advanced Calculations (Gravity Wiz) — Exponents, functions and date math in calculation fields. The formulas in this template use its syntax. Part of Gravity Perks; needs the Spellbook plugin active as well.
The formulas below use GP Advanced Calculations syntax: exponents, functions or date math that core calculation fields cannot do. Install and activate it, with its Spellbook parent plugin, before you start; without it every result shows 0.
1. Create the form
- Go to Forms → New Form and name it Body fat percentage.
- In Form Settings → Form Layout, set the CSS Class Name to
fo-live-only. Step 3 uses it to hide the submit button. - Leave the form open in the editor; the fields come next.
2. Add the fields, in this order
Field IDs are assigned as you add fields. If yours come out differently, change the {Label:ID} references in the formulas to match your IDs. Settings not mentioned stay at their defaults.
1. Units · Radio Buttons · ID 1
Custom CSS Class (Appearance tab) fo-segmented.
Choices (tick show values and enter each value):
- in / lb — value
us(selected by default) - cm / kg — value
metric
2. Sex · Radio Buttons · ID 2
Custom CSS Class (Appearance tab) fo-segmented.
Choices (tick show values and enter each value):
- Male — value
1(selected by default) - Female — value
0
3. Height (in) · Number · ID 3
Number Format 9,999.99; Default Value 70; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is in / lb..
4. Weight (lb) · Number · ID 4
Number Format 9,999.99; Default Value 180; Description “For the fat and lean mass figures.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is in / lb..
5. Neck (in) · Number · ID 5
Number Format 9,999.99; Default Value 15; Description “Just below the larynx, tape sloping slightly down at the front.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is in / lb..
6. Waist (in) · Number · ID 6
Number Format 9,999.99; Default Value 34; Description “Men: at the navel. Women: at the narrowest point.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is in / lb..
7. Hips (in) · Number · ID 7
Number Format 9,999.99; Default Value 38; Description “Women only: at the widest point.”; Conditional Logic (Advanced tab): Show this field if Units is in / lb and Sex is Female..
8. Height (cm) · Number · ID 8
Number Format 9,999.99; Default Value 178; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
9. Weight (kg) · Number · ID 9
Number Format 9,999.99; Default Value 82; Description “For the fat and lean mass figures.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
10. Neck (cm) · Number · ID 10
Number Format 9,999.99; Default Value 38; Description “Just below the larynx, tape sloping slightly down at the front.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
11. Waist (cm) · Number · ID 11
Number Format 9,999.99; Default Value 86; Description “Men: at the navel. Women: at the narrowest point.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
12. Hips (cm) · Number · ID 12
Number Format 9,999.99; Default Value 97; Description “Women only: at the widest point.”; Conditional Logic (Advanced tab): Show this field if Units is cm / kg and Sex is Female..
13. Body fat (%) · Number · ID 13
Number Format 9,999.99; Description “US Navy method, usually within 3–4 points of a scan. Men: 6–13% athletic, 14–17% fit, 18–24% average, 25%+ obese. Women: 14–20, 21–24, 25–31, 32%+.”; Custom CSS Class (Appearance tab) fo-result; tick Enable Calculation, Rounding 1; Conditional Logic (Advanced tab): Show this field if Units is in / lb..
( {Sex:2} * ( 86.010 * log( ( {Waist in:6} / 1 ) - ( {Neck in:5} / 1 ) ) - 70.041 * log( ( {Height in:3} / 1 ) ) + 36.76 ) + ( 1 - {Sex:2} ) * ( 163.205 * log( ( {Waist in:6} / 1 ) + ( {Hip in:7} / 1 ) - ( {Neck in:5} / 1 ) ) - 97.684 * log( ( {Height in:3} / 1 ) ) - 78.387 ) )
14. Body fat (%) · Number · ID 14
Number Format 9,999.99; Description “US Navy method, usually within 3–4 points of a scan. Men: 6–13% athletic, 14–17% fit, 18–24% average, 25%+ obese. Women: 14–20, 21–24, 25–31, 32%+.”; Custom CSS Class (Appearance tab) fo-result; tick Enable Calculation, Rounding 1; Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
( {Sex:2} * ( 86.010 * log( ( {Waist cm:11} / 2.54 ) - ( {Neck cm:10} / 2.54 ) ) - 70.041 * log( ( {Height cm:8} / 2.54 ) ) + 36.76 ) + ( 1 - {Sex:2} ) * ( 163.205 * log( ( {Waist cm:11} / 2.54 ) + ( {Hip cm:12} / 2.54 ) - ( {Neck cm:10} / 2.54 ) ) - 97.684 * log( ( {Height cm:8} / 2.54 ) ) - 78.387 ) )
15. Fat mass (lb) · Number · ID 15
Number Format 9,999.99; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 1; Conditional Logic (Advanced tab): Show this field if Units is in / lb..
{Weight lb:4} * ( {Sex:2} * ( 86.010 * log( ( {Waist in:6} / 1 ) - ( {Neck in:5} / 1 ) ) - 70.041 * log( ( {Height in:3} / 1 ) ) + 36.76 ) + ( 1 - {Sex:2} ) * ( 163.205 * log( ( {Waist in:6} / 1 ) + ( {Hip in:7} / 1 ) - ( {Neck in:5} / 1 ) ) - 97.684 * log( ( {Height in:3} / 1 ) ) - 78.387 ) ) / 100
16. Lean mass (lb) · Number · ID 16
Number Format 9,999.99; Description “Muscle, bone, organs, water.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 1; Conditional Logic (Advanced tab): Show this field if Units is in / lb..
{Weight lb:4} * ( 1 - ( {Sex:2} * ( 86.010 * log( ( {Waist in:6} / 1 ) - ( {Neck in:5} / 1 ) ) - 70.041 * log( ( {Height in:3} / 1 ) ) + 36.76 ) + ( 1 - {Sex:2} ) * ( 163.205 * log( ( {Waist in:6} / 1 ) + ( {Hip in:7} / 1 ) - ( {Neck in:5} / 1 ) ) - 97.684 * log( ( {Height in:3} / 1 ) ) - 78.387 ) ) / 100 )
17. Fat mass (kg) · Number · ID 17
Number Format 9,999.99; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 1; Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
{Weight kg:9} * ( {Sex:2} * ( 86.010 * log( ( {Waist cm:11} / 2.54 ) - ( {Neck cm:10} / 2.54 ) ) - 70.041 * log( ( {Height cm:8} / 2.54 ) ) + 36.76 ) + ( 1 - {Sex:2} ) * ( 163.205 * log( ( {Waist cm:11} / 2.54 ) + ( {Hip cm:12} / 2.54 ) - ( {Neck cm:10} / 2.54 ) ) - 97.684 * log( ( {Height cm:8} / 2.54 ) ) - 78.387 ) ) / 100
18. Lean mass (kg) · Number · ID 18
Number Format 9,999.99; Description “Muscle, bone, organs, water.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 1; Conditional Logic (Advanced tab): Show this field if Units is cm / kg..
{Weight kg:9} * ( 1 - ( {Sex:2} * ( 86.010 * log( ( {Waist cm:11} / 2.54 ) - ( {Neck cm:10} / 2.54 ) ) - 70.041 * log( ( {Height cm:8} / 2.54 ) ) + 36.76 ) + ( 1 - {Sex:2} ) * ( 163.205 * log( ( {Waist cm:11} / 2.54 ) + ( {Hip cm:12} / 2.54 ) - ( {Neck cm:10} / 2.54 ) ) - 97.684 * log( ( {Height cm:8} / 2.54 ) ) - 78.387 ) ) / 100 )
3. Hide the submit button
The results are live, so nothing needs submitting. Add this filter to your theme’s functions.php or a code-snippets plugin; it hides the button on any form carrying the fo-live-only class:
add_filter( 'gform_submit_button', function ( $button, $form ) {
return str_contains( (string) rgar( $form, 'cssClass' ), 'fo-live-only' ) ? '' : $button;
}, 10, 2 );
Or with CSS alone: .fo-live-only_wrapper .gform_footer { display: none; }
4. Put it on a page and make it look like this
Add the form to any page with the Gravity Forms block, or the shortcode [gravityform id="X" title="false" ajax="false"]. The form inherits your theme’s styles; the classes you set in step 2 are hooks for the look you see on this site:
fo-resulton a calculation field makes it the big teal result panel.fo-result fo-result--submakes the smaller secondary figures.fo-segmentedon a radio field turns it into a segmented switch.- Two fields on one row is the editor’s own column layout: drag a field beside another and the row splits in half. No CSS class is needed, and the old
gf_left_halfReady Classes are deprecated.
The bundle includes the two stylesheets that implement those classes, with notes on matching your brand colors. Without them the form still works; it just looks like your theme’s default Gravity Forms styling.
How the math works is explained under “How it’s calculated” on the live Body fat percentage calculator.