According to Toshi Omagari, the author of Arcade Game Typography, the world’s first multi-colored digital font was created in 1982 for a never-released video game called Insector. Multi-colored fonts, sometimes called chromatic typeare still relatively rare on the web, even though the COLR font format has had full cross-browser support since 2018 (even in Internet Explorer!).
The technology opens up an entirely new vein of typographic creativity. While some of the color fonts I’ve seen have been lurid, at best, chromatic fonts are fun, innovative and attention-grabbing. With both the addition of a new CSS features – including the
font-palette property and
@font-palette-values rule – for controlling the color palette of color fonts and the evolution of the COLR font format, it’s a great time to dive in and experiment with what modern web typography can do.
I last wrote about color fonts in 2018. At the time, there were four different standards for multicolored typefaces: OpenType-SVG, COLR, SBIX, and CBDT / CBLC. You can use ChromaCheck to see what color font formats your own browser supports.
Google Chrome has Mark OpenType-SVG as “wontfix” meaning that format will never be supported by Chrome or Edge. SBIX and CBDT / CBLC can mostly be ignored for use on the web as they are both based on raster images and become blurry at larger font sizes. The large file size of bitmap-based fonts also makes them a bad choice for the web.
Ulrike Rausch is the creator of LiebeHeide, a bitmap color font which uncannily replicates the look of a ballpoint pen. “My biggest goal was always to reproduce handwritten text as authentically as possible,” she told me. “For LiebeHeide, I was finally able to simulate these handmade attributes with a font. The downside? All the PNG images in the font file add up and result in an enormous OTF file size. This might not be a problem for desktop applications, like Adobe InDesign, but for use on the web the font is hardly applicable. ”
All browsers support COLR fonts (now generally referred to as COLRv0). Version 98 of Chrome (and Edge), released in February, added support for COLRv1, an evolution of the format.
Mobile / Tablet
|Android Chrome||Android Firefox||Android||iOS Safari|
COLRv0 and COLRv1
COLRv1 is part of the OpenType 1.9 standard. While the initial COLRv0 lacked many of the creative possibilities of OpenType-SVG, COLRv1 matches those possibilities while avoiding certain drawbacks. COLRv0, for example, could only do solid colors whereas COLRv1 can do linear, radial, and conic gradients. The format also adds compositing and blending and allows for shape reuse to save on file size.
Typography expert Roel Nieskins explains: “I used to say the OpenType-SVG format was the best format as it offered the most versatility – until I realized this is just too complex for a low-level job like text rendering. It implements a basic subset of SVG on the font rendering level. But it does not work well with other font tech (hinting, variable axes, etc.), and it’s a pain to implement. So, I switched sides to COLR. COLR basically re-uses everything that OpenType fonts already have. It ‘only’ adds layering, and the possibility to change the color of each layer. Simple, but effective. ”
Here’s a striking example from Ulrike Rausch of what’s possible with the format, a (currently unreleased) typeface which digitally recreates the look of a neon sign:
Akiem Helmling of the type foundry Underware is enamored with COLRv1, telling me that “[t]he COLRv1 format can potentially have a similar (or even bigger) impact on type design than variable fonts had in recent years. ” For Akiem, it’s undoubtedly the superior format. “All former color formats have been bad hacks to add colors to glyphs. While OpenType-SVG is regarded by some people as a good solution, it is, from my point of view, not at all. From a pragmatic point of view, SVG is a ‘locked room’ within the open structure of OpenType. There is no way to re-use or link data or to create a connection between other font tables and the SVG table. And because of this, we can not make a variable font with variable SVG data. ”
It’s still early days for the format. Mozilla has not yet shipped COLRv1 but has taken a positive position on the format, stating that it has “the potential to supersede OpenType-SVG fonts in web use.” Apple is reluctant to implement it in Safari.
COLRv1 fonts will still show up and be readable in these browsers but all the letter’s will be a single solid color (which you can set with the CSS
color property, just like with a normal font). We’ve yet to see many type foundries release COLRv1 typefaces, and some popular design tools like Figma do not even support COLRv0, but I’m hopeful and believe it will be the future of color typography on the web. In the short time COLRv1 has been around there have already been some beautiful examples of what the technology can do, such as Reem Kufi and Bradley Initials.
COLR and CSS
If you’re using a color font, you probably want to be able to control its colors. Until now, that was impossible to do with CSS. The
font-palette property brings the power to override the default color scheme of a typeface and apply your own. This property works on COLRv0 and COLRv1 typefaces. (Apple’s Myles Maxfield explains that SVG fonts can opt-in to using palettes, whereas all the colors of a COLR typeface are automatically overridden by CSS.)
Coming up with a decent color palette is a fine art. Some type designers have done the hard work for us and include alternative palettes inside the font. You can select from these different color schemes using
base-palette in CSS.
How do you find out if a font offers an alternate palette? The site for the font might tell you. If not, there’s a handy tool called Wakamai Fondue that will list all the available color schemes (shown in the image below). For this example, I’ll use Rocher Color, a free variable color font from Henrique Beier with a Flintstones vibe. From looking at Wakamai Foundue we can see that this typeface uses four colors and comes with eleven different palette options.
base-palette: 0 will select the default color palette (in the case of Rocher, that’s shades of orange and a brown).
base-palette: 1 will select the first alternative palette defined by the creator of the typeface, and so on. In the following code example, I’m selecting a color palette that’s different shades of gray:
@font-palette-values --Grays font-family: Rocher; base-palette: 9;
Once you’ve selected a palette with the CSS
@font-palette-values rule, you can apply it using the
.grays font-family: 'Rocher'; font-palette: --Grays;
Of course, you might want to create your own palette to match your brand colors or to meet your own design sensibility. If you’re going to override all the colors then you do not need to specify the
Let’s take Bungee from pioneering type designer David Jonathan Ross as an example. It only uses two colors by default, red and white. In the following example, I’m overriding both colors of the font, so the
base-palette does not matter and is omitted:
@font-palette-values --PinkAndGray font-family: bungee; override-colors: 0 #c1cbed, 1 #ff3a92; @font-palette-values --GrayAndPink font-family: bungee; override-colors: 0 #ff3a92, 1 #c1cbed;
Alternatively, you can set the
base-palette as a starting point and selectively change just some of the colors. Below I’m using the gray color palette of Rocher, but overriding one color with a minty green:
@font-palette-values --GraysRemix font-family: Rocher; base-palette: 9; override-colors: 2 rgb(90,290,210); body font-family: "Rocher"; font-palette: --GraysRemix;
override-colors it’s difficult to know which bit of the font will be overridden by which number – you have to play around and experiment and achieve the desired effect through trial and error.
One regrettable limitation, at least for the time being is that CSS custom properties do not work in
@font-palette-values. That means the following is invalid:
@font-palette-values --PinkAndBlue font-family: bungee; override-colors: 0 var(--pink), 1 var(--blue);
Another limitation: animations and transitions from one
font-palette to another do not interpolate – meaning you can switch instantly from one palette to another, but can not gradually animate between them. My dream of a luridly animated emoji font is sadly unrealized.
@font-palette-values have been supported in Safari since version 15.4, and landed in Chrome and Edge with the release of version 101.
Mobile / Tablet
|Android Chrome||Android Firefox||Android||iOS Safari|
You can probably already imagine how you might use color fonts in your own projects. There are a couple of specific use cases, though, that are worth calling out.
COLR and icon fonts
Icon fonts may no longer be the most popular method for displaying icons on the web (Chris explains why) but they are still widely used. If you use an icon font with multiple colors, like Duotone from FontAwesome or the two-tone icons from Material Design,
font-palette could offer an easier method for customization.
Solving the emoji problem
If you support user generated content, your users probably use emojis. Today it’s very common to scan text and replace any emoji encountered with images to ensure consistent cross-platform rendering and the ability to support newer emojis than the OS supports. Those images then have to be switched back to text during clipboard operations.
If it receives greater browser support, COLRv1 emoji fonts will offer a far simpler approach. COLRv1 also comes with the benefit of looking crisp at any size, whereas native browser emojis get blurry and pixelated at larger font sizes.
Before color fonts, typographic creativity on the web was limited to applying strokes or gradient fills with CSS. You could always do something more custom with a vector image, but that’s not real text – it can not be selected by the user and copied to the clipboard, it can not be searched on the page with Command+Fit is not read by screen readers or search engines, and you’d need to open Adobe Illustrator just to edit the copy.
Color fonts have the potential to really grab a user’s attention, making them perfect for landing pages and banners. They may not be something you reach for often, but they promise new expressive and creative possibilities for web design that can make your site stand out.