Skip to content
Convertto

Font to Base64 & CSS Generator

Convert font files directly into CSS @font-face data URIs.

Font to Base64 & CSS Generator converts font files between TTF, OTF, WOFF, WOFF2, and Base64 CSS definitions locally in your web browser. Font data processing runs entirely on your device without transmitting files over the network.

Runs in your browser
Privacy
Runs entirely in your browser — nothing is uploaded
Cost
Free, unlimited, no sign-up

What an inlined @font-face actually is

Inlining replaces the URL in an @font-face rule with a data: URI holding the font bytes, encoded as base64 per RFC 4648. The stylesheet stops referencing a separate file and starts carrying the font itself. Browsers treat a data: source exactly like any other: the format() hint still decides whether the entry is used, and the media type in the URI should match what you encoded, font/woff2 for WOFF2 and font/ttf for TrueType.

@font-face {
  font-family: 'Example Sans';
  src: url('data:font/woff2;base64,d09GMgABAAAA...') format('woff2');
  font-weight: 400;
  font-display: block;
}

The one-third tax

Base64 encodes every three bytes as four ASCII characters, so an encoded font is about 33 percent larger than the file it came from before any transfer compression is applied. Compressing the stylesheet claws some of that back, but never all of it, and the font bytes inside were already compressed if you encoded a WOFF2. Inlining a 90 KB web font adds roughly 120 KB to a stylesheet that previously fit in a few kilobytes.

When inlining helps

  • A tiny icon font of a dozen glyphs, where one fewer request beats a few hundred extra bytes.
  • A single-file HTML deliverable, a report, a slide export or an offline document that has to render correctly with no network at all.
  • A build that cannot serve static assets from a second origin, or an environment where relative font URLs keep breaking.

When it hurts

  • The font can no longer be cached separately. Change one CSS rule and every visitor re-downloads the font with it.
  • Stylesheets are render-blocking. A font inside the stylesheet is now on the critical path, where a linked font was not.
  • unicode-range splitting stops paying off, because the browser has already downloaded every range whether the page uses it or not.
  • font-display has less to do. There is no separate fetch to swap in, so the tuning that hides font loading behaviour no longer applies the same way.
  • Diffs and version control get unpleasant: one changed glyph rewrites a single enormous line.
FormatOutline dataCompressionWhere it belongs
.ttf TrueTypeQuadratic curves in the glyf and loca tablesNoneDesktop installation, Android build pipelines, tools that only read glyf
.otf OpenType with PostScript outlinesCubic curves in a CFF or CFF2 tableNoneDesktop installation, print and design applications
.woff WOFF 1.0Whichever of the two the wrapped font already usedzlib, applied to each table separatelyA fallback source for browsers too old for WOFF2
.woff2 WOFF 2.0Whichever of the two the wrapped font already usedBrotli over the whole font, after a reversible transform of glyf, loca and hmtxThe format to actually serve on the web
.eot Embedded OpenTypeEither, wrapped in a Microsoft-specific containerOptional MicroType ExpressInternet Explorer 8 and earlier. A W3C Member Submission that never became a standard
.ttc / .otc collectionEither, with tables shared between several facesNone on its own, though WOFF2 can wrap a collectionShipping a whole family in one file, common for CJK fonts
TTF and OTF are two flavours of the same sfnt container. WOFF and WOFF2 are packaging placed around one of them, not a third kind of outline.

Frequently asked questions

Is my font file uploaded anywhere?

No, font conversion happens entirely in your browser using JavaScript.

What is the difference between OTF and TTF?

Both are OpenType fonts using the same sfnt container. A TTF stores glyph outlines as quadratic curves in the glyf and loca tables; an OTF stores them as cubic curves in a CFF or CFF2 table. The extension reflects which outline format the file uses, and the rasteriser decides by reading the version tag inside the file rather than the extension.

Is converting a font lossless?

Unwrapping WOFF or WOFF2 back to sfnt is defined to be reversible, so the table data comes back intact. Converting between outline formats, such as OTF to TTF, is not: cubic curves have to be approximated by quadratics, and hinting and variable-font axes do not carry over.

Am I allowed to convert a commercial font?

Often not. Many font licences forbid modification, web embedding or redistribution, and converting a font is a modification. The OS/2 table carries an fsType field in which the foundry declares its embedding permission. Check the EULA before converting a font you did not make.

Can I convert an EOT or TTC file here?

No. This tool accepts TTF, OTF, WOFF and WOFF2. EOT is a retired Microsoft container for Internet Explorer 8 and earlier, and TTC is a collection holding several faces in one file, which needs a different unpacking step.

How to use the font to base64 & css generator

  1. 1Select your font file — the file stays on your device and is never uploaded.
  2. 2Press Run, then download the result when it is ready.

Sources & specifications

Embed this tool

Put the working font to base64 & css generator on your own site. It runs in your visitors' browsers exactly as it does here — free, no account, nothing uploaded.

Share this tool

Last updated

More developer tools