Formatting text elements is a key part of web design. It enhances readability and allows emphasizing important content. Two useful text formatting options are superscript and subscript.
In this comprehensive 2650+ words guide, we’ll cover different aspects of implementing superscript and subscript styling in CSS for the web.
Table of Contents
- Origin and History
- Use Cases
- Native HTML Tags
- Styling Superscript and Subscript Text in CSS
- Vertical Align
- Font Size
- Additional Styling
- Browser Compatibility
- Accessibility Considerations
- Real World Examples
- Math Expressions
- Chemical Formulas
- Physics Equations
- Footnotes and Annotations
- Data Visualizations
- Common Issues and Solutions
- JavaScript Solutions
- Tools and Libraries
- Non-Latin Scripts
- Key Takeaways
Origin and History
The practice of using superscripted or subscripted text has been used for hundreds of years. Some of the earliest examples are seen in mathematical and scientific texts to note exponents and chemical formulas.
In the early days of printing, superscripts and subscripts were created by engraving specialized typefaces. Later on, typefounders created specific sorts of movable type to allow printing superscripts and subscripts more easily.
In HTML‘s history, support for <sup> and <sub> tags was introduced in HTML 3.2 (January 1997) by the W3C. This allowed web documents to contain superscripts and subscripts natively.
However, styling and spacing of these tags varies across browsers. Over the years, with CSS support, developers have been able to craft cross-browser styles for consistency.
Use Cases
Some common use cases where superscripts and subscripts are heavily used include:
Mathematical expressions: For exponents, logarithms, square roots, etc. like x2, log10
Chemical formulas: For chemical compounds and molecules like H2SO4, C6H12O6
Physics equations: Physics variables that need superscripts or subscripts like v0, t2
Footnotes and annotations: For additional notes and citations marked with numbers or symbols in superscript
Data visualizations: In charts, graphs, infographics with superscript/subscript axes labels, legend values etc.
Language phonetics: To indicate tones, stresses, and pronunciation in linguistic texts.
This wide range of use cases means superscripts and subscripts are essential text formatting options for web documents and apps.
Native HTML Tags
Before we jump into CSS, let‘s briefly recap the native HTML tags that allow superscripts and subscripts:
<!-- For Superscript -->
<sup>Superscript text</sup>
<!-- For Subscript -->
<sub>Subscript text</sub>
For example:
<p>Water formula: H<sub>2</sub>O</p>
<p>x<sup>2</sup> + y<sup>2</sup> = z<sup>2</sup></p>
Renders as:
Water formula: H2O
x2 + y2 = z2
However, the default styling varies across browsers. To craft cross-browser styles, CSS is more reliable.
Styling Superscript and Subscript Text in CSS
CSS provides finer control over styling superscript and subscript text uniformly across browsers.
There are three key properties we need to understand:
- vertical-align
- font-size
- line-height
Let‘s explore them in detail.
The Vertical Align Property
The vertical-align property in CSS allows aligning elements vertically. Its syntax is:
vertical-align: value;
To position text in superscript or subscript, use these vertical-align values:
super: For superscript textsub: For subscript text
Here is an example:
.superscript {
vertical-align: super;
}
.subscript {
vertical-align: sub;
}
And corresponding HTML:
<p>
Water formula: H<span class="subscript">2</span>O
</p>
<p>
x<span class="superscript">2</span> + y<span class="superscript">2</span> = z<span class="superscript">2</span>
</p>
This will display superscripted and subscripted text consistently across browsers.
Font Size Property
By default, browsers render superscript and subscript text smaller than the container element‘s font size.
Use the font-size property to control the size explicitly:
.superscript {
vertical-align: super;
font-size: smaller;
}
.subscript {
vertical-align: sub;
font-size: x-small;
}
Font sizes like smaller, x-small or exact values like 12px, 0.8em work well without affecting spacing.
Line Height Property
Use the line-height property to control spacing between the baseline and superscript/subscript characters.
For example:
p {
line-height: 1.4;
}
.superscript {
vertical-align: super;
line-height: 1;
}
.subscript {
vertical-align: sub;
line-height: 1;
}
The spacing can be adjusted based on the font sizes used.
Additional Styling
A few other useful properties:
margin: To add space around super/subscript text
color: For chemical formulas with subscripts in different colors
background: Highlight super/subscripts with colors
padding: Improve spacing within super/subscript text
Browser Compatibility
The vertical-align property works well across modern browsers. Legacy IE may need a few fallbacks.
Subscripts and superscripts also work with variable fonts and CSS lock sizing. This allows dynamic resizing based on user preferences.
Here is the latest browser compatibility table:
| Browser | vertical-align | font-size | line-height |
|---|---|---|---|
| Chrome | Yes | Yes | Yes |
| Firefox | Yes | Yes | Yes |
| Safari | Yes | Yes | Yes |
| IE 11 | Partial – needs fallback | Yes | Yes |
| Edge | Yes | Yes | Yes |
View detailed browser compatibility
For older browsers, using SVG or JS fallbacks may be necessary based on your audience.
Accessibility Considerations
To make superscripts and subscripts accessible for users of assistive technology like screen readers:
- Don‘t rely solely on visual styling to convey meaning
- Use HTML
<sup>and<sub>elements as well as CSS - Convey meaning without superscripts/subscripts as some users may have trouble understanding shifted text
- Adjust line height and spacing between baseline and super/subscript text for readability
Additionally, make sure color contrast levels conform to WCAG standards so users with low vision can read the text.
Real World Examples
Let‘s explore some practical examples of using superscripts and subscripts in web documents.
Math Expressions
In mathematical formulas, equations, and diagrams, superscripts and subscripts add meaning:

The HTML markup for the above will be:
<div class="math">
<p>
E = mc<span class="superscript">2</span>
</p>
<p>
x<span class="superscript">2</span> +
y<span class="superscript">2</span> =
z<span class="superscript">2</span>
</p>
<p>
log<span class="subscript">2</span>N
</p>
</div>
And the corresponding CSS:
.math p {
font-size: 18px;
line-height: 1.5;
}
.math .superscript {
vertical-align: super;
font-size: smaller;
margin-left: 2px;
}
.math .subscript {
vertical-align: sub;
font-size: smaller;
}
This makes all formulas consistently readable with clean alignments.
Chemical Formulas
For chemistry contexts, subscripted numbers are commonly used in molecular formulas:

The HTML structure can be:
<div class="chemistry">
<p>
H<span class="subscript">2</span>O
</p>
<p>
C<span class="subscript">6</span>H<span
class="subscript">12</span>O
<span class="subscript">6</span>
</p>
</div>
And the CSS:
.chemistry p {
font-size: 24px;
}
.chemistry .subscript {
vertical-align: sub;
font-size: 18px;
color: #E22D2D;
}
This makes chemical formulas easily scannable and understandable.
Physics Equations
In physics textbooks and journals, subscript and superscript characters abound in equations:

We can markup the above equations as:
<div class="physics">
<p>
v = v<span class="subscript">0</span> + at
</p>
<p>
s = s<span class="subscript">0</span> +
v<span class="subscript">0</span>t +
(1/2)at<span class="superscript">2</span>
</p>
</div>
And style them as:
.physics p {
font-size: 20px;
line-height: 1.4;
}
.physics .subscript {
vertical-align: sub;
font-size: 16px;
}
.physics .superscript {
vertical-align: super;
font-size: smaller;
margin-left: 2px;
}
This presentation makes the variables stand out while keeping alignments intact.
Footnotes and Annotations
Superscripts are commonly used for marking footnotes with numbers or symbols.
Here is an example footnote indicator:
The approach greatly improved precision and recall over prior state-of-the-art algorithms.^1
This can be marked up as:
The approach greatly improved precision and recall over prior state-of-the-art algorithms.<sup>1</sup>
And styled with:
.footnote {
vertical-align: super;
font-size: smaller;
line-height: 1;
}
Similar markup can be used when showing sources of quotes, citations, etc.
Data Visualizations
In charts, graphs, and data graphics, superscripts and subscripts help label axes, provide units of measurement, and display legend keys:

Source: Our World in Data
The values along the y-axis as well as the measurement units rely on superscript formatting. Similar subscripts and superscripts are seen in various data visualizations.
By styling them appropriately, axes labeling and diagram legends can be designed cleanly.
Common Issues and Solutions
When working with superscripts and subscripts, developers face some common pain points:
1. Inconsistent default styling across browsers
- Use CSS resets and custom styles for cross-browser consistency
2. Spacing and alignment inconsistencies
- Tweak line-height, margins, and positioning
3. Styles affecting surrounding text
- Scope styles to classes to avoid leaks
4. Tiny font sizes hard to read
- Allow font size overrides for accessibility
5. Not conveying meaning without visuals
- Use HTML tags and provide context for screen readers
6. Subscripts/superscripts overflowing small containers
- Enlarge containers as needed or truncate text
With CSS, most spacing, sizing, alignment, and overflow issues can be addressed systematically.
JavaScript Solutions
For interactive apps, JavaScript can help enable better superscript and subscript features programmatically:
Dynamic generation: Generate superscripts/subscripts on the fly
Copy to clipboard: Add ‘Copy‘ options for quick sharing
Tooltip definitions: Explain sub/superscript on hover/focus
Math evaluation: Automatically compute and pretty print complex equations
Range formatting: Select and format as super/subscript
Export to image: Render mathemetical equations as images
This adds interactivity while maintaining accessibility compliance.
Tools and Libraries
Dedicated JS libraries like Superscript-Subscript.js and Simple Superscript make it easier to use superscripts/subscripts.
They provide React components, helpers for annotation, data visualization, math typesetting, and other common use cases out of the box.
For LaTeX-style math typesetting, KaTeX and MathJax are great options that natively support sub/superscript characters.
On the design side, using variable font technology helps fine-tune superscript and subscript styles interactively within the browser using the CSS font variation settings.
Non Latin Scripts
So far, we focused on the Latin script. However, superscripts and subscripts are used in several non-Latin writing systems:
Chinese: Characters may contain superscripted annotations
Arabic: Certain vowel marks and phonetic modifiers appear as superscripts
Devanagari: Vowel diacritics take the form of subscript and superscript characters under or to the side of other letters
Korean: Some syllable blocks contain subscript consonants
So with CSS support, these languages can also implement superscripting and subscripting more easily. The principles remain similar while adjusting for vertical orientation.
Key Takeaways
We‘ve explored various aspects of formatting superscript and subscript text with CSS:
- Native HTML tags complement CSS for semantics
vertical-align + font-sizeare key for basic styling- Formula math, chemical docs use sub/superscripts heavily
- Tools like KaTeX simplify typesetting complex use cases
- Interactivity can be added via JavaScript
- Accessibility best practices should be adhered to
- Support varies across language scripts
With this comprehensive guide, you should now have clarity on how to effectively style superscripts and subscripts using CSS and be able to apply the techniques based on your content‘s needs.
Is there any part of working with superscripts and subscripts that remains unclear? Or do you have any other use cases to share? Let me know in the comments below!


