<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Jonathan Harrell | Front-End Engineer RSS Feed</title>
        <link>https://www.jonathanharrell.com/index.xml</link>
        <description>Tips, tutorials and thoughts from designer/developer Jonathan Harrell.</description>
        <lastBuildDate>Wed, 08 Apr 2026 12:28:50 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>2026, by Jonathan Harrell</copyright>
        <item>
            <title><![CDATA[Advanced CSS-Only HTML Form Styling]]></title>
            <link>https://www.jonathanharrell.com/blog/advanced-css-only-form-styling</link>
            <guid>https://www.jonathanharrell.com/blog/advanced-css-only-form-styling</guid>
            <pubDate>Tue, 31 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn about selectors both new and old that you can use to style form inputs based on requirement, validity and more.]]></description>
            <content:encoded><![CDATA[<p>HTML form inputs have always been notoriously difficult to style with CSS, but there are several little-used selectors that give us significant power to style inputs and surrounding elements. Some of these are relatively new, while others have been available for quite some time.</p>
<h2>:placeholder-shown</h2>

<p>The first selector is relatively new and doesn’t have complete <a href="https://caniuse.com/#feat=css-placeholder-shown" target="_blank" rel="noreferrer">browser support</a> yet. However, this seems like something that could easily work as a progressive enhancement. The selector allows us to detect whether a placeholder is currently visible to the user. This could come in handy if we want to dynamically hide and show the input’s associated label.</p>
<p>Here I am hiding the label until the user types in the input, thus hiding the placeholder. I use a nice transition effect to display the label. Note that for this to work, the label must come <em>after</em> the input.</p>
<pre><code class="language-html">&lt;div class=&quot;form-group&quot;&gt;
  &lt;input type=&quot;text&quot; id=&quot;dynamic-label-input&quot; placeholder=&quot;Enter some text&quot;&gt;
  &lt;label for=&quot;dynamic-label-input&quot;&gt;Enter some text&lt;/label&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.form-group {
  position: relative;
  padding-top: 1.5rem;
}

label {
  position: absolute;
  top: 0;
  opacity: 1;
  transform: translateY(0);
  transition: all 0.2s ease-out;
}

input:placeholder-shown + label {
  opacity: 0;
  transform: translateY(1rem);
}
</code></pre>
<h2>:required</h2>

<p>Use this selector to indicate that an input has the <code>required</code> attribute. Here I am using an empty <code>.help-text</code> span and placing some content dynamically using the <code>::before</code> pseudo-element. Realistically, this would be done with JavaScript, but I am including here to demonstrate a pure CSS approach.</p>
<pre><code class="language-html">&lt;label for=&quot;required-input&quot;&gt;Required input&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;required-input&quot; required&gt;
&lt;span class=&quot;help-text&quot;&gt;&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input:required + .help-text::before {
  content: &#x27;*Required&#x27;;
}
</code></pre>
<h2>:optional</h2>

<p>This selector does the opposite of <code>:required</code>. I am again using an empty <code>.help-text</code> <code>span</code> to display some optional text if the required attribute is NOT present.</p>
<pre><code class="language-css">input:optional + .help-text::before {
  content: &#x27;*Optional&#x27;;
}
</code></pre>
<h2>:disabled</h2>

<p>This one should be familiar to most of you, but still important to remember. It’s pretty essential to display whether or not an input is disabled to a user.</p>
<pre><code class="language-css">&amp;:disabled {
  border-color: var(--gray-lighter);
  background-color: var(--gray-lightest);
  color: var(--gray-light);
}
</code></pre>
<h2>:read-only</h2>

<p>An input with the <code>readonly</code> attribute should convey a slightly different meaning than a disabled input. Thankfully we have this selector to help with that.</p>
<pre><code class="language-html">&lt;input type=&quot;text&quot; value=&quot;Read-only value&quot; readonly&gt;
</code></pre>
<pre><code class="language-css">input:read-only {
  border-color: var(--gray-lighter);
  color: var(--gray);
  cursor: not-allowed;
}
</code></pre>
<h2>:valid</h2>

<p>While much form validation will happen with JavaScript, we are able to take advantage of HTML form validation and style inputs accordingly. This selector gives us the chance to style any input which is currently passing the native browser validation rules.</p>
<p>Here I am encoding an svg to display a checkbox in the input using the <code>background-image</code> property.</p>
<pre><code class="language-css">input:valid {
  border-color: var(--color-primary);
  background-image: url(&quot;data:image/svg+xml,...&quot;);
}
</code></pre>
<h2>:invalid</h2>

<p>This selector checks if an input is currently NOT passing the native browser validation rules (for example, if an email input does not contain a real email).</p>
<p>Again, I am encoding an svg to display an ‘x’ in the input.</p>
<pre><code class="language-css">input:invalid {
  border-color: var(--color-error);
  background-image: url(&quot;data:image/svg+xml,...&quot;);
}
</code></pre>
<p>I can also customize some validation messages for each input type using the <code>.help-text</code> span and the <code>::before</code> pseudo-element.</p>
<pre><code class="language-html">&lt;label for=&quot;invalid-email&quot;&gt;Invalid input&lt;/label&gt;
&lt;input type=&quot;email&quot; id=&quot;invalid-email&quot; value=&quot;notanemail&quot;&gt;
&lt;span class=&quot;help-text&quot;&gt;&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input[type=&#x27;email&#x27;]:invalid + .help-text::before {
  content: &#x27;You must enter a valid email.&#x27;
}
</code></pre>
<h2>:in-range/:out-of-range</h2>

<p>These selectors detect whether the value of a number input is within the min/max values specified or not.</p>
<pre><code class="language-html">&lt;label for=&quot;out-of-range-input&quot;&gt;Out-of-range input&lt;/label&gt;
&lt;input
  type=&quot;number&quot;
  id=&quot;out-of-range-input&quot;
  min=&quot;1&quot;
  max=&quot;10&quot;
  value=&quot;12&quot;
&gt;
&lt;span class=&quot;help-text&quot;&gt;(value must be between 1 and 10)&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input:out-of-range + .help-text::before {
  content: &#x27;Out of range&#x27;;
}
</code></pre>
<h2>:checked</h2>

<p>Most of you will be familiar with this selector. It gives us the ability to apply custom styles to checkboxes and radio buttons when checked. My technique for styling checkboxes involves creating a wrapper element and placing the <code>label</code> after the <code>input</code>.</p>
<p>I visually hide the input so that it disappears from view but is still clickable. Then I style <code>label::before</code> to look like the checkbox input and <code>label::after</code> to look like a checkmark. I use the <code>:checked</code> selector to style these two pseudo-elements appropriately:</p>
<pre><code class="language-html">&lt;div class=&quot;checkbox&quot;&gt;
  &lt;input type=&quot;checkbox&quot;/&gt;
  &lt;label&gt;Option&lt;/label&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">&amp;:checked + label::before {
  background-color: var(--color-primary);
}

&amp;:checked + label::after {
  display: block;
  position: absolute;
  top: 0.2rem;
  left: 0.375rem;
  width: 0.25rem;
  height: 0.5rem;
  border: solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
  content: &#x27;&#x27;;
}
</code></pre>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Better Typography with Font Variants]]></title>
            <link>https://www.jonathanharrell.com/blog/better-typography-with-font-variants</link>
            <guid>https://www.jonathanharrell.com/blog/better-typography-with-font-variants</guid>
            <pubDate>Sun, 07 Jan 2018 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use font variants, including ligatures, caps, numerals and alternate glyphs, to create more precise, beautiful typography on the web.]]></description>
            <content:encoded><![CDATA[<p>Typography on the web has always lagged behind its expression in print. This makes sense, as type on the printed page developed over centuries to a point of complexity that has been hard to replicate within the confines of a browser.</p>
<p>However, this is quickly changing thanks to the increasing availability of OpenType features in web fonts and the ability to control those features with CSS.</p>
<p>This article is an overview of how to control OpenType features using CSS, but remember that whatever web font you are using will also need to support these features.</p>
<h2>The font-variant- Properties</h2>
<p>You can control most OpenType features using various properties beginning with <code>font-variant-</code>. There is also a low-level property <code>font-feature-settings</code> which can be used to support legacy browsers. Whenever possible, however, you should use the more modern <code>font-variant</code> properties. One solution is to use an <code>@supports</code> rule to check if a font-variant property is supported and otherwise use <code>font-feature-settings</code>.</p>
<pre><code class="language-css">body {
  font-feature-settings: &quot;liga&quot; 1;
}

@supports (font-variant-ligatures: common-ligatures) {
  body {
    font-feature-settings: normal;
    font-variant-ligatures: common-ligatures;
  }
}
</code></pre>
<h2>font-variant-ligatures</h2>
<p>Ligatures are single glyphs made from two or more characters. They typically prevent ugly or awkward letter collisions and, therefore, aid legibility.</p>
<h3>common-ligatures</h3>
<p><figure><svg height="366" viewBox="0 0 800 366" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;ffi&#x27; text with common ligatures off (left) and common ligatures on (right). The ligatured version connects the letters more smoothly, and red dotted circles highlight the connected areas." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(134 76)"><path d="m93.84 11.28c0 3.28-1.24 5.86-3.72 7.74s-5.88 2.82-10.2 2.82c-3.84 0-7.72-1.48-11.64-4.44-3.28-2.48-6.2-3.72-8.76-3.72-5.44 0-10.08 3.02-13.92 9.06s-5.76 14.22-5.76 24.54v27.96h26.88c1.92 0 2.88 2.16 2.88 6.48s-.96 6.48-2.88 6.48l-27.12-.96v60.24c0 7.84.96 12.96 2.88 15.36s6.32 4.04 13.2 4.92c1.28.16 1.92 1.24 1.92 3.24 0 2.24-.64 3.36-1.92 3.36-3.28 0-7.44-.24-12.48-.72-5.68-.48-10.48-.72-14.4-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-57.36c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12s.72-3.28 2.16-3.6c10.24-2.32 15.36-4.56 15.36-6.72 0-19.36 5.9-36.42 17.7-51.18s25.42-22.14 40.86-22.14c5.36 0 9.58 1 12.66 3s4.62 4.76 4.62 8.28z"></path><path d="m174.24 11.28c0 3.28-1.24 5.86-3.72 7.74s-5.88 2.82-10.2 2.82c-3.84 0-7.72-1.48-11.64-4.44-3.28-2.48-6.2-3.72-8.76-3.72-5.44 0-10.08 3.02-13.92 9.06s-5.76 14.22-5.76 24.54v27.96h26.88c1.92 0 2.88 2.16 2.88 6.48s-.96 6.48-2.88 6.48l-27.12-.96v60.24c0 7.84.96 12.96 2.88 15.36s6.32 4.04 13.2 4.92c1.28.16 1.92 1.24 1.92 3.24 0 2.24-.64 3.36-1.92 3.36-3.28 0-7.44-.24-12.48-.72-5.68-.48-10.48-.72-14.4-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-57.36c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12s.72-3.28 2.16-3.6c10.24-2.32 15.36-4.56 15.36-6.72 0-19.36 5.9-36.42 17.7-51.18s25.42-22.14 40.86-22.14c5.36 0 9.58 1 12.66 3s4.62 4.76 4.62 8.28z"></path><path d="m198.12 25.92c0 3.36-1.22 6.28-3.66 8.76s-5.38 3.72-8.82 3.72-6.38-1.24-8.82-3.72-3.66-5.4-3.66-8.76c0-3.52 1.2-6.48 3.6-8.88s5.36-3.6 8.88-3.6c3.44 0 6.38 1.2 8.82 3.6s3.66 5.36 3.66 8.88zm16.8 145.08c0 2.24-.64 3.36-1.92 3.36-3.28 0-7.48-.24-12.6-.72-5.76-.48-10.6-.72-14.52-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-44.4c0-6.4-.82-10.6-2.46-12.6s-5.22-3.32-10.74-3.96c-1.28 0-1.92-1.04-1.92-3.12 0-1.92.64-2.88 1.92-2.88 8.4-2.16 15.28-4.46 20.64-6.9s8.72-4.46 10.08-6.06c.8-.96 1.68-1.44 2.64-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.92-1.92 31.84-1.92 41.76v37.68c0 7.84.98 12.96 2.94 15.36s6.42 4.04 13.38 4.92c1.28.16 1.92 1.24 1.92 3.24z"></path></g><path d="m197.28 171.12c0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-47.76c0-4.72-.98-7.98-2.94-9.78s-5.46-2.7-10.5-2.7h-37.2v60.24c0 7.76 1 12.88 3 15.36s6.44 4.16 13.32 5.04c1.28.16 1.92 1.2 1.92 3.12 0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-60.24h-45.84v60.24c0 7.76.96 12.88 2.88 15.36s6.32 4.16 13.2 5.04c1.28.16 1.92 1.2 1.92 3.12 0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-57.12c0-2.4-.96-3.6-2.88-3.6h-12.24c-1.76 0-2.64-1.04-2.64-3.12 0-2.16.72-3.36 2.16-3.6 10.32-2.24 15.48-4.4 15.48-6.48.08-17.36 6.46-33.02 19.14-46.98s27.78-20.94 45.3-20.94c4.4 0 8.72.82 12.96 2.46s7.56 3.74 9.96 6.3l3.24 3.24c11.84-11.84 25.52-17.76 41.04-17.76 6.96 0 13.22 1.7 18.78 5.1s8.34 7.14 8.34 11.22c0 6.24-4 9.36-12 9.36-2.88 0-6.8-1.84-11.76-5.52s-10.96-5.52-18-5.52c-18.4 0-27.6 11.92-27.6 35.76v24.96h36.72c7.04 0 12.86-.48 17.46-1.44s8.74-2.84 12.42-5.64c1.6-1.2 2.76-1.8 3.48-1.8 2.24 0 3.36.64 3.36 1.92 0 3.04-.32 9.64-.96 19.8s-.96 17.48-.96 21.96v37.44c0 7.76 1 12.88 3 15.36s6.44 4.16 13.32 5.04c1.28.16 1.92 1.2 1.92 3.12zm-100.08-139.68c-6.88-7.36-16.72-11.04-29.52-11.04-18.56 0-27.84 11.92-27.84 35.76v19.2h45.84v-1.68c0-16.16 3.84-30.24 11.52-42.24z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(451 76)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="160.046875" y="297">Common ligatures off</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="469.667969" y="297">Common ligatures on</tspan></text><path d="m614.234697 112.966543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.5615382-.922931-.3849641c-.246281.5903705-.516624 1.1701318-.810258 1.7379603l.888173.45951c.305396-.590563.587475-1.1951375.845016-1.8125062zm-44.532059-.9126517-.931972.3625315c.242614.6239585.510056 1.2355171.801112 1.8334624l.898847-.4382621c-.279826-.5749154-.536067-1.1612644-.767987-1.7577318zm45.76287-2.8914793-.97363-.2281349c-.146459.6237542-.3183 1.2401719-.514981 1.8480249l.951226.3084932c.204496-.6319437.384012-1.2751262.537385-1.9283832zm-46.861861-.8229393-.979108.2033412c.136207.6565946.298692 1.3035657.486305 1.9397645l.959143-.2829239c-.180601-.6124244-.336218-1.2328865-.46634-1.8601818zm47.454653-3.1407804-.99775-.0670456c-.04281.6408108-.111476 1.2772743-.205648 1.9083244l.989021.1477696c.097738-.6549075.169555-1.3182827.214377-1.9890484zm-47.926526-.7224656-.999222.0394396c.026299.6720717.079671 1.3371911.159054 1.9942982l.992665-.1208987c-.07645-.6330477-.12739-1.2710053-.152497-1.9128391zm47.98013-1.2190201c-.007631-.6727971-.04238-1.3390799-.103207-1.9978066l-.995773.0918395c.058624.6348503.091736 1.2741208.099038 1.9168098zm-48.820056-2.6876153c-.079399.6567798-.132811 1.3215654-.159178 1.9932983l.999225.0393589c.025184-.6416779.076189-1.2794792.152692-1.912371zm48.441635-1.3509399c-.117605-.6607347-.261694-1.3123055-.431132-1.9535755l-.966707.2558876c.163065.6171974.30099 1.2418748.4133 1.8728534zm-47.636728-2.5717139c-.186299.6365608-.347453 1.2838592-.482316 1.9407471l.979508.2014036c.128803-.6274123.283096-1.2480338.462373-1.8606627zm46.599791-1.3372391c-.224879-.6305914-.474864-1.2492626-.748752-1.85481l-.911108.4121669c.263442.5824572.503003 1.1757603.717985 1.7786069zm-45.147112-2.4320018c-.289862.5986803-.556076 1.2109443-.797428 1.8355786l.932936.3600433c.230647-.5968999.485631-1.1837262.764218-1.7591648zm43.483734-1.2392887c-.325312-.5841843-.673829-1.1536754-1.044305-1.7072273l-.830835.5565188c.355823.5316767.689834 1.0776441 1.0011 1.6365635zm-41.461825-2.1923753c-.38351.5443357-.745406 1.104995-1.084439 1.6807297l.861555.5076641c.324709-.5514254.671849-1.0893917 1.040452-1.6125621zm39.225035-1.1471089c-.41549-.5222254-.851856-1.0270994-1.307837-1.5133595l-.730049.6833952c.437837.4668778.85656.9513562 1.255023 1.4521586zm-36.633572-1.9547463c-.468072.474945-.916901.9689066-1.345221 1.4806208l.76679.6418975c.410782-.4907633.841394-.9647082 1.290665-1.4205765zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m601.167334 173.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m535.167334 173.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m559.167334 119.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.3336957-.267854-1.9824311l-.981784.1899977c.119336.6151633.203766 1.2387854.252555 1.8687724zm-34.483861-2.6482938c-.151202.6436458-.266871 1.3009878-.344825 1.9698428l.993317.115421c.073081-.6269337.181703-1.2465778.325051-1.8567581zm33.70785-1.3196086c-.20454-.6394284-.444848-1.2628628-.718571-1.8679496l-.910695.4130807c.258926.5724718.484941 1.1597527.676749 1.7593548zm-32.341151-2.4626681c-.296496.594511-.560155 1.2082667-.788602 1.8388918l.940321.3402895c.214348-.5916694.462453-1.1699726.742917-1.7323841zm30.705438-1.159937c-.342872-.5741376-.717695-1.1269877-1.122015-1.6560953l-.794188.6076718c.381979.4999114.735182 1.0211703 1.057686 1.5612093zm-28.526149-2.1878034c-.424449.5130808-.82019 1.050779-1.184762 1.6106335l.837872.5458672c.3432-.5270498.716309-1.0342173 1.117307-1.5189599zm26.084823-1.0030196c-.463157-.4799571-.953497-.9335094-1.468539-1.3581776l-.635889.7717808c.485486.4003155.947931.8280353 1.384922 1.2808838zm-23.158979-1.8017493c-.531945.4034182-1.040109.8365589-1.522018 1.2969486l.691165.7226965c.454991-.4346444.934359-.843125 1.435634-1.2232532zm20.090753-.7302188c-.55788-.3626904-1.137721-.6944476-1.737092-.9928403l-.445793.8951364c.563217.2803874 1.109833.5928713 1.637264.9357364zm-16.699081-1.2844902c-.610629.274748-1.202656.5834952-1.773668.9238304l.512288.8588139c.540121-.3219079 1.098294-.6127142 1.671945-.8708125zm13.066184-.5159124c-.623868-.2230703-1.264101-.4117269-1.91841-.5636832l-.226376.97404c.613699.1425186 1.217265.3199919 1.808321.5313392zm-9.219694-.7012222c-.660204.1270521-1.307205.2912062-1.938748.4902075l.300227.953868c.598409-.188574 1.208278-.3429207 1.82729-.462054zm3.326647-.3157896v1c.633159 0 1.261717.0356159 1.88375.1062625l.112887-.9936079c-.655251-.0744207-1.321479-.1126546-1.996637-.1126546zm-.024032.0000161c-.424413.0005705-.845286.0162491-1.262109.0465269l.072071.9973996c.395227-.0287181.792733-.0434072 1.192045-.0439265z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures that the type designer has decided should be used in normal conditions. In most circumstances you should use these. Most browsers enable them by default.</p>
<pre><code class="language-css">font-variant-ligatures: common-ligatures; /* enable */
font-variant-ligatures: no-common-ligatures; /* disable */

font-feature-settings: &#x27;liga&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;liga&#x27; 0; /* low-level disable */
</code></pre>
<h3>discretionary-ligatures</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;ct&#x27; text with discretionary ligatures off (left) and discretionary ligatures on (right). In the ligatured version, a decorative connection forms between the letters, with highlighted circles marking the join points." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(160 142.52)"><path d="m92.64 38.52c0 6.56-3.28 9.84-9.84 9.84-2.8 0-5.1-.6-6.9-1.8s-3.62-3.8-5.46-7.8c-2.16-4.72-4.46-7.82-6.9-9.3s-5.62-2.22-9.54-2.22c-9.68 0-17.06 4.02-22.14 12.06s-7.62 19.78-7.62 35.22c0 12.88 3.2 23.26 9.6 31.14s14.96 11.82 25.68 11.82c12.16 0 21.8-3.8 28.92-11.4l.6-.24c.72 0 1.42.46 2.1 1.38s1.02 1.94 1.02 3.06c0 1.6-2.34 4.36-7.02 8.28s-9.8 6.88-15.36 8.88-11.46 3-17.7 3c-14.32 0-26.58-5.26-36.78-15.78s-15.3-23.82-15.3-39.9c0-15.92 5.34-29.1 16.02-39.54s23.34-15.66 37.98-15.66c10.8 0 19.94 1.86 27.42 5.58s11.22 8.18 11.22 13.38z"></path><path d="m185.28 31.32c0 4.32-1.04 6.48-3.12 6.48l-35.76-.96v57.6c0 15.04 5.36 22.56 16.08 22.56 6.64 0 12.68-1.56 18.12-4.68.64 0 1.22.42 1.74 1.26s.78 1.74.78 2.7c0 2-2.98 4.7-8.94 8.1s-12.66 5.1-20.1 5.1c-9.12 0-16.4-2.78-21.84-8.34s-8.16-12.9-8.16-22.02v-1.08l.48-58.32c0-2.24-.96-3.36-2.88-3.36h-9.12c-1.76 0-2.64-1.04-2.64-3.12 0-1.6.72-2.8 2.16-3.6 11.12-6.56 20.8-15.8 29.04-27.72.88-1.28 2-1.92 3.36-1.92 2.24 0 3.36.64 3.36 1.92l-.96 22.92h35.28c2.08 0 3.12 2.16 3.12 6.48z"></path></g><path d="m185.16 78.84c0 4.48-1.04 6.72-3.12 6.72l-35.76-.96v57.36c0 15.04 5.36 22.56 16.08 22.56 6.72 0 12.8-1.56 18.24-4.68.56 0 1.06.42 1.5 1.26s.66 1.74.66 2.7c0 2.24-2.92 5-8.76 8.28s-12.6 4.92-20.28 4.92c-9.04 0-16.26-2.78-21.66-8.34s-8.1-12.9-8.1-22.02v-1.08l.24-58.08c0-2.24-.88-3.36-2.64-3.36h-9.36c-1.6 0-2.4-1.12-2.4-3.36 0-1.44.76-2.6 2.28-3.48 5.76-3.36 9.7-6.48 11.82-9.36s3.18-6.4 3.18-10.56c0-14.8-3.12-26.26-9.36-34.38s-15.16-12.18-26.76-12.18c-10.32 0-18.78 3.28-25.38 9.84s-9.9 14.88-9.9 24.96c0 6.64 1.54 11.96 4.62 15.96s8.06 7.08 14.94 9.24c4.24 1.36 7.72 3.4 10.44 6.12s4.08 5.44 4.08 8.16c0 6.72-3.28 10.08-9.84 10.08-2.48 0-4.48-.56-6-1.68s-3.04-3.52-4.56-7.2c-1.92-4.56-4.04-7.58-6.36-9.06s-5.32-2.22-9-2.22c-19.84 0-29.76 15.76-29.76 47.28 0 12.96 3.4 23.32 10.2 31.08s16.12 11.64 27.96 11.64c5.76 0 11.58-1.24 17.46-3.72s10.62-5.64 14.22-9.48l.6-.24c.72 0 1.44.46 2.16 1.38s1.08 1.9 1.08 2.94c0 1.68-2.6 4.62-7.8 8.82s-10.84 7.46-16.92 9.78-12.16 3.48-18.24 3.48c-15.52 0-28.56-5.18-39.12-15.54s-15.84-23.74-15.84-40.14c0-15.92 5.3-29.06 15.9-39.42s23.3-15.54 38.1-15.54c-1.92-2-3.56-4.96-4.92-8.88s-2.04-7.72-2.04-11.4c0-13.84 4.78-25.14 14.34-33.9s21.66-13.14 36.3-13.14c14.32 0 26.08 4.9 35.28 14.7s13.8 22.34 13.8 37.62v20.04h35.28c2.08 0 3.12 2.16 3.12 6.48z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(450 95)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="445.285156" y="325">Discretionary ligatures on</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="160.164062" y="325">Discretionary ligatures off</tspan></text><path d="m584.834697 186.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path><path d="m515.767334 178.718016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-34.986909-.736193v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353l-.007179-.543468zm34.94722-1.316287c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.023101.000015c-.424729.000549-.845912.016228-1.26304.046528l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043928z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures which can be used for typographic purposes, for example to achieve a special effect. These are disabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: discretionary-ligatures; /* enable */
font-variant-ligatures: no-discretionary-ligatures; /* disable */

font-feature-settings: &#x27;dlig&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;dlig&#x27; 0; /* low-level disable */
</code></pre>
<h3>contextual</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Handwritten-style word &#x27;Deftly&#x27; demonstrating contextual ligatures, where certain letter combinations automatically adjust for smoother, more natural connections, with key join areas circled." style="width:100%;height:auto"><defs><path id="a" d="m374.5 235c9.664983 0 17.5-7.835017 17.5-17.5s-7.835017-17.5-17.5-17.5-17.5 7.835017-17.5 17.5 7.835017 17.5 17.5 17.5z"></path><mask id="b" fill="#fff" height="35" width="35" x="0" y="0"><use xlink:href="#a"></use></mask><path id="c" d="m449.1 195.92c13.530976 0 24.5-10.969024 24.5-24.5s-10.969024-24.5-24.5-24.5-24.5 10.969024-24.5 24.5 10.969024 24.5 24.5 24.5z"></path><mask id="d" fill="#fff" height="49" width="49" x="0" y="0"><use xlink:href="#c"></use></mask><path id="e" d="m518.5 227c9.664983 0 17.5-7.835017 17.5-17.5s-7.835017-17.5-17.5-17.5-17.5 7.835017-17.5 17.5 7.835017 17.5 17.5 17.5z"></path><mask id="f" fill="#fff" height="35" width="35" x="0" y="0"><use xlink:href="#e"></use></mask></defs><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5"><path d="m240.157985 201.117708c-6.941739 13.001845-17.769945 22.289595-30.072892 30.01893-14.149209 8.891244-29.516244 14.899046-45.700621 18.931851-.489901.121712-.998693.163119-2.215261.353843 6.264189-5.956356 8.468116-13.226448 10.975554-20.28574 5.980827-16.831379 12.01077-33.651466 17.625116-50.607067 2.727831-8.238769 5.992161-16.271756 8.756515-24.489193 1.159895-3.444323 1.677502-3.524627 5.31587-2.734127 6.990855 1.515753 13.883478 3.338922 20.373097 6.349096 8.620501 4.001437 15.907312 9.482238 18.56084 19.187823 2.250524 8.232495.253136 16.022058-3.618218 23.274584m3.040159-52.738909c-9.887444-6.559896-21.162732-10.578899-33.037488-12.438457-2.202667-.343805-3.988477-1.002555-4.882642-3.307553-.746816-1.92355-2.426838-2.466862-4.39274-2.246024-1.695135.191978-3.304631.727762-4.727738 1.621152-1.988571 1.245979-4.027518 1.263546-6.317083 1.130541-6.886326-.400269-13.833102-1.224648-20.614899.855748-2.162367.663769-4.293249 1.746629-4.666027 4.177103-.371519 2.421691 1.361397 3.939953 3.169876 5.372892 3.618218 2.863367 7.958064 3.653867 12.273982 4.476991 2.609449.496886 3.730303 1.297424 2.317271 4.13946-1.953309 3.926151-3.653481 7.989071-5.260458 12.072067-7.077753 17.999563-13.441433 36.252589-18.825311 54.823069-2.198889 7.586292-5.344836 15.023267-4.723959 23.220628.298475 3.921132 1.441998 7.169711 6.004756 8.740673-5.885114 1.45176-11.183353 2.71656-16.457664 4.076723-3.259293.84069-6.398944 2.0026-9.099069 4.109346-1.686318 1.313736-3.540135 2.678917-2.785763 5.123194.74052 2.401614 2.93563 3.022722 5.211342 3.384093 5.959417.947346 11.898685.703922 17.865658-.011293 27.011324-3.236031 52.258247-11.356852 74.432266-27.43412 14.289001-10.360571 26.284658-22.812831 32.009829-40.030677 7.561357-22.742564.871496-39.669306-17.494139-51.855556"></path><path d="m323.761276 178.030459c1.533979-1.011339 3.297618-1.801254 5.066251-2.301325 2.393956-.677958 5.177336-1.317353 6.832386 1.186737 1.571424 2.377206 1.25689 5.1587-.063655 7.678962-1.070915 2.047557-2.837051 3.561455-4.520809 5.081574-8.78949 7.940193-19.522353 12.185826-30.640896 15.795797 6.008606-10.759005 12.943342-20.590017 23.326723-27.441745m44.138417 40.418729c-8.863131 8.195205-18.072001 15.908998-28.21948 22.447248-9.854164 6.349169-20.198852 11.669584-32.234787 12.315199-9.756808.521219-15.070193-3.103679-16.587947-12.399788-.549187-3.357446-.218427-6.586765.124815-9.88077.948596-9.077172.984793-8.884358 9.665693-11.342422 13.842012-3.92096 27.409429-8.594515 38.944855-17.588342 7.05955-5.503277 12.459058-12.107457 13.556184-21.455812.856233-7.292091-4.885269-17.121858-11.287043-19.542603-10.026409-3.79532-19.005618-1.395722-27.464348 4.229462-11.522944 7.664034-20.472197 17.80106-27.50304 29.586331-5.187322 8.695277-10.070094 17.563463-12.27558 27.633315-1.603876 7.324433-2.837051 14.622743-1.680013 22.137502 1.54022 9.992726 6.591493 17.605758 15.704255 22.131282 9.404829 4.672312 19.249008 3.978182 28.887241.91431 16.710266-5.31295 30.283924-15.774649 43.114932-27.241467 5.475645-4.894981 10.545641-10.244006 15.801611-15.386534 2.562457-7.190086 4.928954-14.442369 6.954706-21.802877-5.680342 4.556623-10.167451 10.313667-15.502054 15.245966"></path><path d="m381.883202 203.673532c2.521643-6.91324 4.976695-13.851405 7.605133-20.724763.732495-1.918059-.536493-2.118714-1.662248-2.532486-4.701538-1.723636-9.408102-3.39742-13.506556-6.408487-3.13729-2.304413-5.994398-4.810727-5.249339-9.105485.619417-3.576888 4.503023-6.069493 9.410614-6.295074 5.608676-.255492 11.070351.701669 16.258124 2.801688 2.135921.864934 3.014161.544634 3.908735-1.689986 4.43392-11.073397 9.130432-22.038365 16.425228-31.663558 7.917983-10.447753 17.67914-17.336067 31.63047-15.855459 9.538769 1.013244 16.773257 8.458654 16.857438 17.066865.026385 2.806673-.761393 5.381533-2.478924 7.550099-2.333179 2.947506-7.19177 3.18181-10.448421.491044-2.08315-1.721144-3.907478-3.750124-5.900166-5.585928-3.310677-3.050948-5.788344-3.221691-9.46464-.639353-4.399997 3.09083-7.043512 7.603691-9.558873 12.134-4.186404 7.541376-7.543568 15.475337-10.854245 23.427992-.961164 2.311891-.655853 3.19552 2.08692 3.527036 6.971896.843747 13.957612 1.165293 20.963431 1.362209 1.790404.051098 2.392231-.193177 1.805481-2.239606-2.030381-7.098938 1.31045-10.591077 8.714556-9.15783 3.68886.714132 7.336258 1.682509 10.957272 2.695752 1.811763.508492 2.692516.317808 3.500396-1.657582 2.785492-6.80855 5.827294-13.516149 8.851506-20.228734.848086-1.884409 1.954996-3.666621 3.608449-5.012628 4.149968-3.383711 8.901763-2.187261 10.876861 2.789225 1.541632 3.882232 1.50017 7.909035.824214 11.955779-.841804 5.033815-2.421129 9.874453-4.148711 14.656516-.693546 1.925537-.540262 2.72317 1.741403 3.052194 6.326094.909801 12.686111 1.272475 19.05618 1.56411 1.045345.047359 2.090689.072285 3.13729.094719 2.679952.05733 5.099824.676742 5.864987 3.618016.745059 2.859017-1.049114 4.712269-3.098342 6.261423-4.657563 3.52205-10.24111 3.939562-15.771888 4.345856-5.534546.407541-11.08794.287896-16.622487-.052345-1.750198-.107182-2.718901.478581-3.476524 1.939247-9.335229 17.98539-15.797017 36.967821-20.060063 56.715483-.173386.803865-.226156 1.650104-.212335 2.47391.065334 3.930838 2.182408 5.637026 6.121297 4.973993 7.265898-1.223869 13.537966-4.713516 19.649211-8.543403 15.583425-9.768518 28.965595-22.103173 41.700706-35.196826.663392-.682974 1.03655-1.941739 2.41736-1.650104 1.162192 1.107963.544031 2.310644.141976 3.46472-2.05174 5.880055-4.332149 11.680346-6.280863 17.59779-.43221 1.31111-.745059 2.973678-2.820671 2.695752-7.616441 7.241017-15.235395 14.478295-23.634588 20.849393-9.248536 7.01419-18.830024 13.483745-29.995862 17.154106-5.935346 1.952956-12.088054 3.104539-17.950527-.073532-7.435516-4.030542-8.950763-11.084613-8.602734-18.663378.456082-9.96668 4.153737-19.21549 7.064871-28.616349 3.376011-10.902654 7.269668-21.633317 11.299019-32.312882.248772-.661787.327927-1.387135.562878-2.425305-6.303478.840008-12.412211 1.346007-18.53602 1.535445-7.850136.243029-15.692734.022433-23.477536-1.06185-2.445-.341487-3.667501.291635-4.563331 2.756821-10.110442 27.802514-19.219515 55.921588-27.367423 84.348499-1.341861 4.678619-2.416103 9.479376-5.619984 13.386534-3.437575 4.191315-7.151564 3.748878-9.332716-1.2301-2.678695-6.118099-1.952482-12.398216-.392004-18.616019 3.079495-12.276078 6.388915-24.493581 10.143109-36.587699.368133-1.183987.603084-2.407856.902113-3.614277-1.023986-.574545-1.027755-1.390874-.675956-2.386669 2.319358-6.57923 3.639859-13.544814 7.676749-19.458519"></path><path d="m512.962073 229.342943c2.234932-6.01776 4.464856-12.038024 6.706049-18.05328.726196-1.942909 1.48119-3.874551 2.222411-5.8112 2.442775-5.970189 4.8555-11.951645 7.333333-17.908063 4.477377-10.758608 8.981047-21.505949 13.49849-32.249534 3.426896-8.152206 6.855044-16.304411 10.359568-24.424068 1.307154-3.028284 3.582152-5.374297 6.034944-7.504987 3.74492-3.254873 8.425131-1.917871 9.79614 2.870548.742473 2.597639 1.106823 5.295428.939047 8.043293-1.088043 17.631398-7.737749 33.090794-18.27511 47.0542-4.374708 5.79743-6.843776 12.598863-9.639633 19.173707-4.767855 11.216794-9.514426 22.461129-12.768537 34.256289-.972853 3.530286-1.780433 7.09312-2.161061 10.721052-.455751 4.333989 1.5776 5.91761 5.663081 4.3753 6.947697-2.622676 12.541914-7.384806 18.228784-11.956651 11.237264-9.032273 21.204937-19.42283 31.523188-29.44784 2.700699-2.623929 3.381821-5.604641 3.649763-8.933375.326788-4.04731.484548-8.10839.717432-12.163211.103921-1.817722-.126458-3.542804-1.35348-5.00249-.132719-.157736-.232884-.348021-.325536-.533298-2.817142-5.554567 4.082977-18.649172 10.253143-19.46289 3.292925-.434401 6.423083 1.507256 7.807864 5.011252 1.436116 3.636695 2.040863 7.442393 1.759148 11.349493-1.063001 14.762102-2.857207 29.446588-4.611347 44.136081-.557168 4.655721-1.051733 9.317701-1.538786 13.979681-.071367.691034-.296738 1.60991.479541 1.982969.835126.401851 1.319674-.456934 1.756644-.972707 8.435148-9.927363 16.867791-19.858482 24.764552-30.226505 4.168117-5.469439 8.396334-10.893811 12.455522-16.442118 2.580502-3.527781 4.842979-7.28716 7.365886-10.858757 1.260827-1.783921 1.63269-3.303697-.175289-4.927378-1.478686-1.32949-1.263331-2.920623-.562176-4.594379 2.435262-5.814956 12.893744-12.134417 19.211653-11.567318 3.602185.321731 5.154743 1.97045 5.370098 5.63093.359342 6.035287-1.913152 11.228061-5.234875 16.032755-6.928916 10.02501-13.632461 20.227785-20.993339 29.928559-7.741505 10.204028-16.073983 19.968648-24.276248 29.817143-14.470091 17.373512-29.74651 34.067256-43.730801 51.851383-.36435.463193-.667349.976462-1.454897 2.140705 3.821296-.829993 6.917648-1.543561 10.030276-2.169498 5.108417-1.026537 10.229354-2.021777 15.485514-1.248119 1.344716.197796 2.872232.322983 3.356781 1.846515.52211 1.641207-.634796 2.815465-1.74788 3.739348-3.825052 3.173502-8.438904 4.977452-12.920037 6.901583-6.125092 2.630188-12.426724 4.853517-18.660746 7.234582-1.669.638456-3.414375.831245-5.198565.978966-8.957258.739857-11.834498-5.660976-9.981445-12.979433 1.397302-5.512003 4.769107-9.917349 8.236069-14.243826 6.713562-8.377543 13.447156-16.740064 20.179498-25.103836.787548-.977714 1.696546-1.889079 1.434864-3.309956-1.923168-10.484447-.518354-20.997688-.270445-31.500914.017529-.717324.002504-1.434647.002504-2.119423-1.229526-.455682-1.653975.456934-2.152296 1.012767-13.271867 14.797154-27.765747 28.241032-44.111428 39.604296-4.640146 3.22608-9.598315 5.876298-15.27642 6.897827-5.368846.965195-10.765237-2.106904-12.700926-7.208292-2.623072-6.914102-1.488703-13.750588.256673-20.599592 1.108075-4.342752 2.164817-8.698023 3.242843-13.048286"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="326.277344" y="344">Contextual ligatures</tspan></text><use mask="url(#b)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#a"></use><use mask="url(#d)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#c"></use><use mask="url(#f)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#e"></use></g></svg></figure></p>
<p>These are alternate ligatures that are affected by their surrounding context. They often harmonize the shapes of grouped glyphs. These are enabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: contextual; /* enable */
font-variant-ligatures: no-contextual; /* disable */

font-feature-settings: &#x27;calt&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;calt&#x27; 0; /* low-level disable */
</code></pre>
<h3>historical-ligatures</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;sb&#x27; text with historical ligatures off (left) and historical ligatures on (right). In the ligatured version, an archaic &#x27;long s&#x27; character appears, with stylistic connections highlighted by circles." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(149 104)"><path d="m73.8 144.6c0 9.76-3.84 17.96-11.52 24.6s-16.96 9.96-27.84 9.96c-3.84 0-9.76-.84-17.76-2.52-6-1.2-10.08-1.8-12.24-1.8-.64-5.6-2.12-14.12-4.44-25.56 0-1.2 1.16-1.8 3.48-1.8 1.92 0 3.08.64 3.48 1.92 1.84 5.92 5.48 11.08 10.92 15.48s11.04 6.6 16.8 6.6c6 0 10.66-1.64 13.98-4.92s4.98-7.88 4.98-13.8c0-3.76-1.38-7.08-4.14-9.96s-8.74-6.44-17.94-10.68c-12.08-5.52-20.06-10.72-23.94-15.6s-5.82-10.72-5.82-17.52c0-8.4 3.64-15.62 10.92-21.66s15.88-9.06 25.8-9.06c4.16 0 10 .72 17.52 2.16 4.16.8 6.88 1.2 8.16 1.2.24 9.44.76 17.48 1.56 24.12 0 1.2-1.16 1.8-3.48 1.8-2 0-3.12-.64-3.36-1.92-.88-5.84-3.08-10.58-6.6-14.22s-7.72-5.46-12.6-5.46c-12.48 0-18.72 5.44-18.72 16.32 0 3.68 1.48 7.08 4.44 10.2s9.4 7.16 19.32 12.12c11.84 5.92 19.64 11.04 23.4 15.36s5.64 9.2 5.64 14.64z"></path><path d="m203.28 123.24c0 14.72-5.2 27.72-15.6 39s-22.44 16.92-36.12 16.92c-7.6 0-14.96-1.6-22.08-4.8-4.88-2.24-9.2-3.36-12.96-3.36-6 0-9.96 2.56-11.88 7.68-.4.96-1.4 1.44-3 1.44-2.08 0-3.12-.64-3.12-1.92.64-6.72.96-14.8.96-24.24v-117c0-6.48-.82-10.72-2.46-12.72s-5.22-3.28-10.74-3.84c-1.28 0-1.92-.96-1.92-2.88 0-2.24.64-3.36 1.92-3.36 14.24-3.68 24.36-7.92 30.36-12.72 1.2-.96 2.2-1.44 3-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.44-1.92 31.44-1.92 42v35.88c7.52-7.52 16.72-11.28 27.6-11.28 16.24 0 29.4 4.92 39.48 14.76s15.12 23.16 15.12 39.96zm-24.12.96c0-14.72-2.92-26.24-8.76-34.56s-14.04-12.48-24.6-12.48c-5.68 0-11.22 2.14-16.62 6.42s-8.1 8.54-8.1 12.78v55.44c0 4.24 3.22 8.54 9.66 12.9s12.42 6.54 17.94 6.54c9.6 0 17.08-4.28 22.44-12.84s8.04-19.96 8.04-34.2z"></path></g><path d="m194.28 123c0 14.8-5.22 27.82-15.66 39.06s-22.58 16.86-36.42 16.86c-7.52 0-14.8-1.56-21.84-4.68-4.96-2.16-9.28-3.24-12.96-3.24-5.92 0-9.92 2.48-12 7.44-.4.96-1.4 1.44-3 1.44-1.92 0-2.88-.64-2.88-1.92.64-6.72.96-14.8.96-24.24v-117c0-14.24-7.52-21.36-22.56-21.36-18.72 0-28.08 12-28.08 36v96.84c0 8.08.84 13.3 2.52 15.66s5.88 3.94 12.6 4.74c1.28 0 1.92 1.12 1.92 3.36s-.64 3.36-1.92 3.36c-3.28 0-7.32-.24-12.12-.72-5.28-.48-9.88-.72-13.8-.72s-8.72.24-14.4.72c-5.12.48-9.36.72-12.72.72-1.28 0-1.92-1.12-1.92-3.36s.64-3.36 1.92-3.36c6.96-.8 11.42-2.4 13.38-4.8s2.94-7.6 2.94-15.6v-57.12c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12 0-2 .72-3.2 2.16-3.6 10.24-2.72 15.36-4.96 15.36-6.72 0-12.16 2.96-24.1 8.88-35.82s13.74-20.9 23.46-27.54 20.38-9.96 31.98-9.96c7.36 0 13.6 1.52 18.72 4.56 2.48-1.44 4.6-2.84 6.36-4.2 1.12-.88 2.08-1.32 2.88-1.32 2.24 0 3.36.64 3.36 1.92-1.28 13.12-1.92 27.04-1.92 41.76v35.88c7.52-7.52 16.64-11.28 27.36-11.28 16.4 0 29.66 4.92 39.78 14.76s15.18 23.16 15.18 39.96zm-24.48.96c0-14.8-2.9-26.34-8.7-34.62s-14.02-12.42-24.66-12.42c-5.52 0-10.98 2.16-16.38 6.48s-8.1 8.56-8.1 12.72v55.44c0 4.32 3.2 8.64 9.6 12.96s12.4 6.48 18 6.48c9.6 0 17.04-4.24 22.32-12.72s7.92-19.92 7.92-34.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.36 104.24)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="470.565625" y="332.12">Historical ligatures on</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="165.444531" y="332.12">Historical ligatures off</tspan></text><path d="m552.834697 139.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.9547468c-.468072.474945-.916901.9689068-1.345221 1.4806208l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m469.167334 203.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m508.167334 290.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures which could be considered a subset of discretionary, but are specifically used to achieve a historical effect. These are disabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: historical-ligatures; /* enable */
font-variant-ligatures: no-historical-ligatures; /* disable */

font-feature-settings: &#x27;hlig&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;hlig&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-position</h2>
<p>The proper markup for subscripts and superscripts uses the <code>sub</code> and <code>sup</code> elements. By default, browsers take a regular numeral character, make it smaller using <code>font-size</code>, and raise or lower it with <code>vertical-align</code>. These are not true subscript and superscript characters and typically appear quite ugly, not to mention they can mess up line height.</p>
<p>Thankfully, there is now a way to enable true subscripts and superscripts with <code>font-variant-position</code>. Note that currently only Firefox supports this.</p>
<h3>sub</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Chemical formula &#x27;C2H3O2&#x27; demonstrating true subscript positioning. The numerals are lowered and resized relative to the main letters, with horizontal lines showing their vertical alignment." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <g stroke="#e6594c">
            <path d="m106 147.6 524.781432.5" stroke-linecap="square"></path>
            <path d="m106 260.6 524.781432.5" stroke-linecap="square"></path>
            <path d="m106 293.6 524.781432.5" stroke-linecap="square"></path>
        </g>
        <g fill="#f5f5f5" fill-rule="nonzero" transform="translate(106 145)">
            <path d="m92 98.5216802c-9.2 8.3848238-20.9824561 13.7059618-35.9929825 13.7059618-29.5368421 0-48.42105259-22.8970187-48.42105259-52.727642 0-28.8631436 20.49824559-52.72764228 50.35789469-52.72764228 11.9438597 0 22.2736843 3.54742548 30.5052632 9.35230348l2.2596491-6.77235768c-8.7157894-5.80487805-20.1754386-9.35230352-32.2807017-9.35230352-34.3789474 0-58.4280702 27.0894309-58.4280702 61.2737127 0 30.798103 21.7894737 57.7262873 55.6842105 57.7262873 14.3649123 0 26.4701755-4.676152 35.9929825-11.932249z"></path>
            <path d="m111.017986 100.401042c5.989208-5.166667 11.654676-7.7500003 18.129496-7.7500003 8.579137 0 13.758993 4.5208333 13.758993 11.4635413 0 5.651042-3.23741 10.817709-11.978417 19.052084-5.827339 5.489583-14.082734 12.270833-24.928058 21.473958l.971223 4.359375c6.636691-.161458 13.920863-.322917 21.690648-.322917 8.417266 0 15.053956.161459 21.852517.322917 0-2.098958.323741-4.036458.485612-6.135417-11.007194.322917-24.442446.484375-35.773381.484375 6.960431-5.8125 13.920863-11.625 19.42446-16.630208 9.71223-9.203125 14.568345-14.854167 14.568345-23.25 0-10.171875-8.093525-16.46875-19.748201-16.46875-8.093525 0-15.539568 3.5520833-21.205036 8.5572917z"></path>
            <path d="m264 116c-.159851-4.514851-.159851-17.0919378-.159851-23.2192362v-67.0777935c0-6.2885431 0-19.02687412.159851-23.7029703-2.237918.48373409-5.434944.64497878-7.992565.64497878.319703 7.73974542.479554 28.54031122.479554 38.85997172v12.2545969h-70.654275v-28.0565771c0-6.2885431 0-19.02687412.159851-23.7029703-2.237918.48373409-5.434944.64497878-7.992565.64497878.319703 7.73974542.479554 28.54031122.479554 38.85997172v35.6350778c0 10.4809052-.159851 31.1202267-.479554 38.8599717h7.992565c-.159851-4.514851-.159851-17.0919378-.159851-23.2192362v-32.5714286h70.654275v16.9306931c0 10.4809052-.159851 31.1202267-.479554 38.8599717z"></path>
            <path d="m290.802239 147.253846c5.776119 1.776923 11.391791 2.746154 17.328358 2.746154 14.440299 0 24.869403-7.269231 24.869403-17.284615 0-8.4-7.220149-14.053847-21.339552-15.669231 12.675373-2.907692 20.05597-8.238462 20.05597-16.153846 0-7.9153849-7.701493-13.892308-20.05597-13.892308-8.022388 0-15.08209 2.5846154-20.697761 5.6538462l1.925373 4.8461538c5.294776-3.0692308 11.712686-5.0076923 18.291044-5.0076923 9.305971 0 14.279851 4.0384615 14.279851 9.0461543 0 6.623076-7.380597 11.953846-24.869403 14.538461l.962687 4.038462c16.044776.484615 25.190298 4.523077 25.190298 12.6 0 6.784615-7.541044 11.792307-19.093283 11.792307-6.417911 0-12.19403-1.292307-17.649254-3.230769z"></path>
            <path d="m406.794835 112.550136c-27.959828 0-47.242468-22.7357729-47.242468-51.4376699 0-29.9918699 20.246772-54.6626016 49.652798-54.6626016 27.959828 0 47.242468 22.5745257 47.242468 51.4376694 0 29.9918699-20.086084 54.6626021-49.652798 54.6626021zm-.321377 6.449864c33.905308 0 57.526542-27.5731707 57.526542-62.402439 0-30.4756098-22.014347-56.597561-54.312769-56.597561-34.065997 0-57.687231 27.5731707-57.687231 62.402439 0 30.3143632 22.175036 56.597561 54.473458 56.597561z"></path>
            <path d="m485.017986 100.401042c5.989208-5.166667 11.654676-7.7500003 18.129496-7.7500003 8.579137 0 13.758993 4.5208333 13.758993 11.4635413 0 5.651042-3.23741 10.817709-11.978417 19.052084-5.827339 5.489583-14.082734 12.270833-24.928058 21.473958l.971223 4.359375c6.636691-.161458 13.920863-.322917 21.690648-.322917 8.417266 0 15.053956.161459 21.852517.322917 0-2.098958.323741-4.036458.485612-6.135417-11.007194.322917-24.442446.484375-35.773381.484375 6.960431-5.8125 13.920863-11.625 19.42446-16.630208 9.71223-9.203125 14.568345-14.854167 14.568345-23.25 0-10.171875-8.093525-16.46875-19.748201-16.46875-8.093525 0-15.539568 3.5520833-21.205036 8.5572917z"></path>
        </g>
        <text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16">
            <tspan x="667.230469" y="269">sub</tspan>
        </text>
        <path d="m643.5 232.5v62" stroke="#525252" stroke-linecap="square"></path>
    </g>
</svg></figure></p>
<p>This enables true subscript characters, which are positioned specifically for use in footnotes and scientific formulas.</p>
<pre><code class="language-css">font-variant-position: sub; /* enable */
font-variant-position: normal; /* disable both variants */

font-feature-settings: &#x27;subs&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;subs&#x27; 0; /* low-level disable */
</code></pre>
<h3>super</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Mathematical expression &#x27;f(x) = z²&#x27; demonstrating true superscript positioning. The &#x27;2&#x27; is raised and resized in relation to the main text, shown against baseline and cap-height guides." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd" transform="translate(106 141)">
        <g stroke="#e6594c" stroke-linecap="square">
            <path d="m0 23.5 524.781432.5"></path>
            <path d="m0 136.6 524.781432.5"></path>
            <path d="m0 .6 524.781432.5"></path>
        </g>
        <text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16">
            <tspan x="561" y="37">sup</tspan>
        </text>
        <path d="m537.5.5v62" stroke="#525252" stroke-linecap="square"></path>
        <g fill="#f5f5f5" fill-rule="nonzero" transform="translate(41 1)">
            <path d="m42.020371 19.7109228c-1.7846489-.814501-3.7315387-1.3032015-6.976355-1.3032015-14.6016733 0-22.2269916 12.0546139-22.2269916 32.2542373v12.2175141h-10.70789381l-2.10913059 6.1902071h12.8170244v39.5847462c0 9.448211-.1622408 20.362523-.6489633 27.367231h7.9497999c-.3244816-4.235405-.3244816-10.751412-.3244816-16.452919v-50.4990582h21.4157876c0-2.4435028.1622408-4.5612052.4867224-6.1902071h-21.90251v-12.8691149c0-15.8013183 5.0294653-24.9237288 15.8995999-24.9237288 2.595853 0 4.8672244.6516008 6.976355 1.4661017z"></path>
            <path d="m103.185158 173 3.082576-4.887006c-23.3626776-12.217514-44.6162244-38.933145-44.6162244-72.1647831 0-33.2316384 20.7668243-59.9472693 44.6162244-72.4905838l-3.082576-5.0499058c-26.4452526 14.0094162-48.5100034 43.1685499-48.5100034 77.86629 0 34.5348397 22.7137141 63.2052727 48.5100034 76.7259887z"></path>
            <path d="m118.111313 62.2278719-7.625318 1.1403014c1.622408 2.4435028 18.495453 25.086629 20.442343 28.3446327l4.867224 6.6789077-29.85231 37.6299433h8.436522c.973445-1.466101 20.117862-26.55273 25.471808-33.231638l24.336123 34.53484 7.463077-1.629002c-1.622408-2.443503-17.197526-23.457627-19.144416-26.552731l-8.274282-11.2401128 27.256457-35.3493409c-2.271371.1629002-5.516187.3258004-8.274281.1629002l-23.038196 30.6252354z"></path>
            <path d="m176.518007 173c26.120771-13.520716 48.672244-42.516949 48.672244-77.2146893 0-34.5348399-22.226992-63.5310734-48.672244-77.3775894l-2.920335 5.0499058c23.687159 12.3804143 44.616224 39.0960452 44.616224 72.4905838 0 33.0687381-21.253547 59.7843691-44.616224 72.0018831z"></path>
            <path d="m308.58203 76.2372881c-9.085486.3258004-19.631139.4887006-28.716624.4887006-11.84358 0-20.442343-.3258004-28.392143-.4887006 0 1.7919021-.162241 4.8870057-.486722 6.5160076 6.976355 0 13.628228-.1629002 22.389232-.1629002h11.356857c7.787559 0 15.412877.1629002 23.200437.1629002.16224-2.1177025.324481-4.7241055.648963-6.5160076zm0 26.3898309c-9.085486.3258-19.631139.4887-28.716624.4887-11.84358 0-20.442343-.1629-28.392143-.4887 0 1.954802-.162241 5.049905-.486722 6.516007 6.976355 0 13.628228-.1629 22.389232-.1629h11.356857c7.787559 0 15.412877.1629 23.200437.1629.16224-1.954802.324481-4.724105.648963-6.516007z"></path>
            <path d="m387.917788 62.5536723c-9.409967.3258004-18.819934.4887006-29.365587.4887006-10.058931 0-18.333212-.1629002-26.769735-.4887006 0 2.606403-.324481 4.3983051-.648963 6.6789077 15.575118-.3258003 30.663514-.1629002 46.563114-.1629002l-51.105857 65.4858762 1.460168 1.954802c9.247726-.488701 18.982175-.651601 29.85231-.651601 10.870134 0 20.117861.1629 29.203346.488701 0-2.443503.324482-4.561206.973445-7.004708-16.386322.4887-35.044016.3258-49.970171.3258l51.105857-65.3229756z"></path>
            <path d="m405.926519 13.5207156c6.00291-5.212806 11.681338-7.81920901 18.170971-7.81920901 8.598763 0 13.790469 4.56120531 13.790469 11.56591341 0 5.7015066-3.244816 10.9143126-12.00582 19.2222222-5.840669 5.5386064-14.114951 12.3804143-24.985086 21.665725l.973445 4.3983051c6.651874-.1629002 13.95271-.3258004 21.74027-.3258004 8.436522 0 15.088395.1629002 21.90251.3258004 0-2.1177024.324481-4.0725047.486722-6.1902071-11.032375.3258003-24.498363.4887005-35.85522.4887005 6.976355-5.8644068 13.95271-11.7288135 19.468898-16.7787194 9.734449-9.2853107 14.601673-14.9868173 14.601673-23.4576271 0-10.26271186-8.112041-16.6158192-19.793379-16.6158192-8.112041 0-15.575119 3.58380414-21.253547 8.63370998z"></path>
        </g>
    </g>
</svg></figure></p>
<p>This enables true superscript characters, which are sized and positioned specifically for use in mathematical expressions and scientific formulas.</p>
<pre><code class="language-css">font-variant-position: super; /* enable */
font-variant-position: normal; /* disable both variants */

font-feature-settings: &#x27;sups&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;sups&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-caps</h2>
<p>A capital is not a capital is not a capital. The most significant use of <code>font-variant-caps</code> is to enable small caps, although there are several other options available.</p>
<h3>small-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;Ab&#x27; with small caps off (left) and small caps on (right). In the right example, the &#x27;b&#x27; is resized to match the x-height and resembles a miniature uppercase letter." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd" transform="translate(105 125)"><path d="m0 6.62 589.754371.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m-.49957592 62.1195763-.00084781 1 3 .002543.00084674-.9999996zm4.99999821.004239-.00084781 1 3 .0025431.00084673-.9999996zm4.9999982.0042391-.00084781 1 3.00000002.002543.0008467-.9999996zm4.99999821.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008468-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008468-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008468-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008468-.9999997zm4.9999982.0042391-.0008478 1 3 .002543.0008468-.9999996zm4.9999982.004239-.0008478 1 2.9999997.0025431.000847-.9999997zm4.9999979.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000846-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000846-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000846-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000846-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000846-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997z" fill="#e6594c" fill-rule="nonzero"></path><path d="m0 155.62 589.754371.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><path d="m158.475238 154.876749c0 2.014657-.57575 3.021985-1.727251 3.021985-4.965845 0-10.579409-.215856-16.840693-.647568-5.397658-.431712-10.003659-.647568-13.818004-.647568-4.390095 0-9.823737.215856-16.300927.647568-6.837033.431712-12.666504.647568-17.4884118.647568-1.1515004 0-1.7272505-1.007328-1.7272505-3.021985s.4318126-3.021986 1.2954379-3.021986c6.4052208-.287808 11.0112224-1.133244 13.8180044-2.536309 2.806782-1.403064 4.210173-3.579613 4.210173-6.529647 0-1.870752-.719688-4.856762-2.159063-8.958028l-12.198707-36.1558956h-44.4767016l-12.3066602 33.4576946c-1.583313 4.461026-2.3749695 7.914724-2.3749695 10.361093 0 6.331779 5.8294706 9.785476 17.4884118 10.361092.8636253 0 1.2954379 1.007329 1.2954379 3.021986s-.5757502 3.021985-1.7272505 3.021985c-4.3181264 0-9.1040498-.215856-14.3577702-.647568-4.9658454-.431712-9.3919249-.647568-13.2782386-.647568-3.0946573 0-6.980971.215856-11.6589412.647568-4.89387659.431712-9.06806541.647568-12.52256651.647568-1.07953159 0-1.61929739-.8994-1.61929739-2.698201 0-2.014657.82764089-3.093937 2.48292266-3.237841 5.97340815-.575617 10.70535494-2.230513 14.19584044-4.964691 3.4904855-2.734177 7.1069163-8.310459 10.8492925-16.728847l50.5220786-124.00932722c.4318126-1.15123251 1.4393754-1.72684877 3.0226884-1.72684877 1.7272506 0 2.8067822.53964024 3.2385948 1.61892072l44.5846546 124.11725527c2.518907 6.979347 5.919432 12.123917 10.201574 15.433711 4.282142 3.309793 10.021651 5.396402 17.218529 6.259827 1.439375.143904 2.159063 1.115256 2.159063 2.914057zm-65.3116615-64.1092607-18.9997561-55.1512325-20.5111002 55.1512325z"></path><path d="m268.371554 110.842105c0 13.239174-4.67797 24.931379-14.033911 35.076616-9.35594 10.145236-20.18724 15.217855-32.493901 15.217855-6.837033 0-13.45816-1.439041-19.863381-4.317122-4.390095-2.014657-8.276409-3.021986-11.658941-3.021986-5.397658 0-8.960112 2.302465-10.687363 6.907395-.359844.863425-1.259453 1.295137-2.698829 1.295137-1.871188 0-2.806782-.575616-2.806782-1.726849.57575-6.04397.863625-13.311126.863625-21.801465v-105.2298472c0-5.8281146-.73768-9.6415723-2.21304-11.4403731-1.475359-1.7988008-4.695962-2.9500333-9.661807-3.4536975-1.151501 0-1.727251-.8634244-1.727251-2.5902732 0-2.0146569.57575-3.0219853 1.727251-3.0219853 12.810441-3.30979351 21.914491-7.12325121 27.312149-11.44037312 1.079532-.86342439 1.979141-1.29513658 2.698829-1.29513658 2.015126 0 3.022688.57561626 3.022688 1.72684877-1.1515 15.68554293-1.72725 28.27714853-1.72725 37.77481683v32.2704863c6.765065-6.763491 15.041473-10.1452365 24.829227-10.1452365 14.60966 0 26.448524 4.42505 35.516589 13.2751499s13.602098 20.8301132 13.602098 35.9400397zm-21.698585.863425c0-13.2391742-2.62686-23.6002668-7.880581-31.0832782-5.25372-7.4830113-12.630519-11.224517-22.130397-11.224517-5.109783 0-10.093621 1.9247169-14.951513 5.7741506s-7.286838 7.6808794-7.286838 11.4943371v49.8627585c0 3.813457 2.896743 7.680879 8.690229 11.602265s11.173152 5.882078 16.138998 5.882078c8.636252 0 15.365333-3.849433 20.18724-11.548301 4.821908-7.698867 7.232862-17.952032 7.232862-30.759493z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(330 4)"><path d="m158.475238 150.343771c0 2.014657-.57575 3.021985-1.727251 3.021985-4.965845 0-10.579409-.215856-16.840693-.647568-5.397658-.431712-10.003659-.647568-13.818004-.647568-4.390095 0-9.823737.215856-16.300927.647568-6.837033.431712-12.666504.647568-17.4884118.647568-1.1515004 0-1.7272505-1.007328-1.7272505-3.021985s.4318126-3.021986 1.2954379-3.021986c6.4052208-.287808 11.0112224-1.133244 13.8180044-2.536309 2.806782-1.403064 4.210173-3.579613 4.210173-6.529647 0-1.870752-.719688-4.856762-2.159063-8.958028l-12.198707-36.1558956h-44.4767016l-12.3066602 33.4576946c-1.583313 4.461026-2.3749695 7.914724-2.3749695 10.361093 0 6.331779 5.8294706 9.785476 17.4884118 10.361092.8636253 0 1.2954379 1.007329 1.2954379 3.021986s-.5757502 3.021985-1.7272505 3.021985c-4.3181264 0-9.1040498-.215856-14.3577702-.647568-4.9658454-.431712-9.3919249-.647568-13.2782386-.647568-3.0946573 0-6.980971.215856-11.6589412.647568-4.89387659.431712-9.06806541.647568-12.52256651.647568-1.07953159 0-1.61929739-.8994-1.61929739-2.698201 0-2.014657.82764089-3.093937 2.48292266-3.237841 5.97340815-.575617 10.70535494-2.230513 14.19584044-4.964691 3.4904855-2.734177 7.1069163-8.310459 10.8492925-16.728847l50.5220786-124.00932723c.4318126-1.15123251 1.4393754-1.72684877 3.0226884-1.72684877 1.7272506 0 2.8067822.53964024 3.2385948 1.61892072l44.5846546 124.11725528c2.518907 6.979347 5.919432 12.123917 10.201574 15.433711 4.282142 3.309793 10.021651 5.396402 17.218529 6.259827 1.439375.143904 2.159063 1.115256 2.159063 2.914057zm-65.3116615-64.1092607-18.9997561-55.1512325-20.5111002 55.1512325z"></path><path d="m259.843254 124.009327c0 8.706196-3.076665 15.703531-9.229995 20.992005-6.15333 5.288475-14.303793 7.932712-24.45139 7.932712-3.814345 0-7.376799-.071952-10.687363-.215856-10.003659-.431712-15.653208-.647568-16.948646-.647568-4.534033 0-8.636253.107928-12.30666.323784-11.011222.647568-16.768724.971352-17.272506.971352-.863625 0-1.295438-.935376-1.295438-2.806129 0-1.726849.431813-2.590273 1.295438-2.590273 5.829471-.863425 9.913699-2.230513 12.252684-4.101266s3.508478-5.900067 3.508478-12.087941v-56.7701537c0-6.1159227-1.187485-10.1092605-3.562455-11.9800133-2.374969-1.8707528-6.441205-3.2738174-12.198707-4.2091939-.863625-.143904-1.295438-.9353764-1.295438-2.374417 0-1.8707528.431813-2.8061293 1.295438-2.8061293 2.878751 0 6.117346.1079281 9.715785.3237842 8.348377.5036642 14.465723.7554963 18.352037.7554963 2.950719 0 7.286838-.143904 13.008355-.4317122 5.721518-.2878081 9.661808-.4317122 11.820871-.4317122 9.355941 0 16.876678 2.122585 22.562211 6.3677549s8.528299 9.8214523 8.528299 16.7288474c0 4.8927382-2.123079 9.4257162-6.369236 13.598934-4.246158 4.1732179-9.463894 6.9073951-15.653208 8.2025317 8.78019 1.6548971 15.797145 4.7308461 21.050866 9.2278481 5.25372 4.497002 7.88058 9.83944 7.88058 16.027315zm-27.851915-47.0566288c0-5.9000666-1.367406-10.1812125-4.10222-12.8434377-2.734813-2.6622252-7.124908-3.9933378-13.170285-3.9933378h-2.590876c-5.325689 0-7.988534 2.5183211-7.988534 7.5549634v28.9247168h9.283972c6.693096 0 11.461027-1.5289806 14.303794-4.586942 2.842766-3.0579614 4.264149-8.0766156 4.264149-15.0559627zm6.909003 47.0566288c0-6.763491-1.763235-11.980013-5.289705-15.649567-3.52647-3.669553-8.5283-5.50433-15.005489-5.50433h-14.465724v32.810126c0 4.389074 1.187485 7.357096 3.562455 8.904064 2.374969 1.546969 6.225298 2.320453 11.550988 2.320453 5.685533 0 10.381495-2.014657 14.087887-6.04397 3.706392-4.029314 5.559588-9.641573 5.559588-16.836776z"></path></g><g fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><text><tspan x="407.625" y="206">Small caps on</tspan></text><text><tspan x="80.503906" y="206">Small caps off</tspan></text></g></g></svg></figure></p>
<p>Small caps are designed to be the same height as lowercase letters and are used to capitalize words within running text. They make for a more cohesive and readable paragraph.</p>
<pre><code class="language-css">font-variant-caps: small-caps;  /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;smcp&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;smcp&#x27; 0; /* low-level disable */
</code></pre>
<h3>all-small-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;Ab&#x27; with all-small-caps off (left) and all-small-caps on (right). In the right example, both &#x27;A&#x27; and &#x27;B&#x27; are set to uniform small caps height, suitable for consistent text styling." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129 131.62 540.774771.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m128.500463 187.119538-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004622-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 1.775002.001641.000924-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129 280.62 540.774771.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="501.847656" y="331">All small caps on</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="198.726562" y="331">All small caps off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 125)"><path d="m158.552206 154.876749c0 2.014657-.57603 3.021985-1.728089 3.021985-4.968258 0-10.584548-.215856-16.848872-.647568-5.40028-.431712-10.008518-.647568-13.824716-.647568-4.392227 0-9.828509.215856-16.308844.647568-6.840354.431712-12.6726559.647568-17.4969056.647568-1.1520596 0-1.7280894-1.007328-1.7280894-3.021985s.4320223-3.021986 1.296067-3.021986c6.4083317-.287808 11.01657-1.133244 13.824716-2.536309 2.808145-1.403064 4.212218-3.579613 4.212218-6.529647 0-1.870752-.720038-4.856762-2.160112-8.958028l-12.2046319-36.1558956h-44.4983031l-12.3126372 33.4576946c-1.584082 4.461026-2.376123 7.914724-2.376123 10.361093 0 6.331779 5.8323019 9.785476 17.4969056 10.361092.8640447 0 1.2960671 1.007329 1.2960671 3.021986s-.5760299 3.021985-1.7280895 3.021985c-4.3202236 0-9.1084714-.215856-14.3647434-.647568-4.9682572-.431712-9.3964864-.647568-13.2846876-.647568-3.0961602 0-6.9843615.215856-11.6646037.647568-4.89625343.431712-9.07246957.647568-12.52864845.647568-1.0800559 0-1.62008385-.8994-1.62008385-2.698201 0-2.014657.82804286-3.093937 2.48412857-3.237841 5.97630931-.575617 10.71055433-2.230513 14.20273503-4.964691 3.4921808-2.734177 7.110368-8.310459 10.8545618-16.728847l50.5466161-124.00932722c.4320224-1.15123251 1.4400746-1.72684877 3.0241565-1.72684877 1.7280895 0 2.8081454.53964024 3.2401677 1.61892072l44.6063083 124.11725527c2.520131 6.979347 5.922307 12.123917 10.206529 15.433711 4.284221 3.309793 10.026519 5.396402 17.226891 6.259827 1.440075.143904 2.160112 1.115256 2.160112 2.914057zm-65.3433819-64.1092607-19.0089838-55.1512325-20.5210621 55.1512325z"></path><path d="m268.501897 110.842105c0 13.239174-4.680243 24.931379-14.040727 35.076616-9.360485 10.145236-20.197045 15.217855-32.509683 15.217855-6.840354 0-13.464697-1.439041-19.873028-4.317122-4.392228-2.014657-8.280429-3.021986-11.664604-3.021986-5.400279 0-8.964464 2.302465-10.692553 6.907395-.360019.863425-1.260066 1.295137-2.70014 1.295137-1.872097 0-2.808145-.575616-2.808145-1.726849.576029-6.04397.864044-13.311126.864044-21.801465v-105.2298472c0-5.8281146-.738038-9.6415723-2.214114-11.4403731-1.476077-1.7988008-4.698243-2.9500333-9.666501-3.4536975-1.152059 0-1.728089-.8634244-1.728089-2.5902732 0-2.0146569.57603-3.0219853 1.728089-3.0219853 12.816664-3.30979351 21.925135-7.12325121 27.325415-11.44037312 1.080056-.86342439 1.980102-1.29513658 2.700139-1.29513658 2.016105 0 3.024157.57561626 3.024157 1.72684877-1.15206 15.68554293-1.72809 28.27714853-1.72809 37.77481683v32.2704863c6.768351-6.763491 15.048779-10.1452365 24.841286-10.1452365 14.616757 0 26.46137 4.42505 35.533839 13.2751499 9.07247 8.8500999 13.608705 20.8301132 13.608705 35.9400397zm-21.709124.863425c0-13.2391742-2.628136-23.6002668-7.884408-31.0832782-5.256272-7.4830113-12.636654-11.224517-22.141146-11.224517-5.112265 0-10.098523 1.9247169-14.958774 5.7741506-4.860252 3.8494337-7.290378 7.6808794-7.290378 11.4943371v49.8627585c0 3.813457 2.89815 7.680879 8.69445 11.602265s11.178579 5.882078 16.146836 5.882078c8.640447 0 15.372796-3.849433 20.197045-11.548301 4.82425-7.698867 7.236375-17.952032 7.236375-30.759493z"></path></g><g transform="translate(460 180)"><path d="m107.789579 99.7255163c0 1.8707527-.432023 2.8061297-1.296067 2.8061297-3.600187 0-6.6243432-.107928-9.0724699-.323785-7.4163838-.647568-11.5926-.971352-12.5286484-.971352-3.3841752 0-6.4083317.107928-9.0724696.323784-8.0644173.647568-13.0326745.971353-14.9047714.971353-.7200372 0-1.0800559-.935377-1.0800559-2.8061297 0-1.7268487.2880149-2.5902731.8640447-2.5902731 3.4561789 0 5.9763094-.5576283 7.5603913-1.6728848 1.584082-1.1152565 2.376123-3.2198534 2.376123-6.3137908 0-2.374417-.6120317-5.1085942-1.836095-8.2025316l-5.0762627-13.383078h-30.4575764l-4.5362348 11.224517c-1.4400745 4.0293138-2.1601118 7.0512992-2.1601118 9.065956 0 3.3817455.8640447 5.7741506 2.5921342 7.1772152 1.7280894 1.4030647 4.3922273 2.104597 7.9924136 2.104597.5760299 0 .8640448.8634244.8640448 2.5902731 0 1.8707527-.4320224 2.8061297-1.2960671 2.8061297-3.168164 0-6.6243429-.215857-10.3685367-.647569-3.7441937-.431712-6.4803354-.647568-8.2084248-.647568-2.376123 0-4.5362348.107928-6.4803354.323784-5.76029812.647568-9.28848072.971353-10.5845478.971353-.72003727 0-1.0800559-.935377-1.0800559-2.8061297 0-1.7268487.57602981-2.5902731 1.72808944-2.5902731 3.5281826-.4317122 6.46233446-1.6189207 8.80245556-3.5616256s5.3462767-7.1592272 9.0184668-15.649567l33.1577161-76.41305793c.2160112-1.00732845 1.0800559-1.51099267 2.5921341-1.51099267 1.4400746 0 2.3401212.50366422 2.7001398 1.51099267l29.485526 76.41305793c2.8081454 7.4830114 5.5982898 12.4117255 8.3704333 14.7861426 2.7721434 2.3744171 6.2463229 3.8494337 10.4225389 4.42505 1.008053 0 1.512079.8634244 1.512079 2.5902731zm-46.2263927-38.206529-12.5286485-33.2418387-13.1766819 33.2418387z"></path><path d="m209.746856 73.1752165c0 8.7061959-3.07816 15.703531-9.234478 20.9920054-6.156319 5.2884743-14.310741 7.9327111-24.463266 7.9327111-3.816198 0-7.380382-.071952-10.692554-.215856-10.008518-.431712-15.66081-.647568-16.956877-.647568-4.536235 0-8.640448.107928-12.312638.323784-11.01657.647568-16.776868.971353-17.280894.971353-.864045 0-1.296067-.935377-1.296067-2.8061297 0-1.7268487.432022-2.5902731 1.296067-2.5902731 5.832302-.8634244 9.918513-2.230513 12.258634-4.1012659 2.340122-1.8707528 3.510182-5.9000666 3.510182-12.0879413v-56.7701533c0-6.1159227-1.188061-10.1092604-3.564184-11.9800133-2.376123-1.8707528-6.444334-3.27381743-12.204632-4.20919385-.864045-.14390406-1.296067-.93537642-1.296067-2.37441706 0-1.87075283.432022-2.80612924 1.296067-2.80612924 2.880149 0 6.120317.10792805 9.720503.32378414 8.352432.50366422 14.472749.75549634 18.36095.75549634 2.952153 0 7.290378-.14390407 13.014674-.4317122 5.724296-.28780812 9.6665-.43171219 11.826612-.43171219 9.360484 0 16.884874 2.12258495 22.573168 6.36775483 5.688295 4.24516993 8.532442 9.82145233 8.532442 16.72884743 0 4.8927382-2.12411 9.4257162-6.37233 13.5989341-4.24822 4.1732178-9.46849 6.907395-15.66081 8.2025316 8.784454 1.6548967 15.804818 4.7308461 21.06109 9.2278481s7.884408 9.8394404 7.884408 16.0273151zm-27.865443-47.0566289c0-5.9000666-1.36807-10.1812125-4.104212-12.8434377s-7.128369-3.99333777-13.176682-3.99333777h-2.592134c-5.328276 0-7.992414 2.51832107-7.992414 7.55496337v28.9247168h9.288481c6.696347 0 11.466593-1.5289806 14.310741-4.586942 2.844147-3.0579614 4.26622-8.0766156 4.26622-15.0559627zm6.912358 47.0566289c0-6.763491-1.764091-11.9800133-5.292274-15.6495669-3.528182-3.6695537-8.532441-5.5043305-15.012777-5.5043305h-14.472749v32.8101266c0 4.389074 1.188062 7.3570953 3.564185 8.904064 2.376123 1.5469686 6.228322 2.320453 11.556598 2.320453 5.688294 0 10.386537-2.0146569 14.094729-6.0439707s5.562288-9.6415723 5.562288-16.8367755z"></path></g></g></g></svg></figure></p>
<p>The <code>small-caps</code> value will only replace lowercase letters with small caps. To replace all letters with small caps (which is probably what you want) you need to use <code>all-small-caps</code>.</p>
<pre><code class="language-css">font-variant-caps: all-small-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;smcp&#x27; 1, &#x27;c2sc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;smcp&#x27; 1, &#x27;c2sc&#x27; 0; /* low-level disable */
</code></pre>
<h3>petite-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of small caps versus petite caps using &#x27;AB&#x27;. The left pair shows traditional small caps with slightly larger size, while the right pair uses petite caps that more closely match the font’s x-height." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129 135.62 541.774355.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m128.500462 195.119539-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999997.004614-.000922 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999997.004614-.000922 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 2.774584.00256.000923-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129 280.62 541.774355.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="509.777344" y="331">Petite caps</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="212.269531" y="331">Small caps</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m160.656574 148.568741c-.719788 0-1.619522-.21563-2.699203-.646889-1.079682-.431259-1.619522-1.078147-1.619522-1.940665 0-1.150024.57583-1.976604 1.72749-2.47974 1.15166-.503135 2.30332-.82658 3.45498-.970333 3.742895-.718765 7.053917-1.868789 9.933067-3.450072 2.879151-1.581283 4.318726-4.31259 4.318726-8.193922v-58.8668595c0-4.4563435-.935724-7.9064158-2.807172-10.3502171-1.871447-2.4438012-5.110491-4.0250844-9.717131-4.7438495-1.295618-.287506-2.483267-.7906416-3.562948-1.5094066-1.079682-.7187651-1.619522-1.5812832-1.619522-2.5875543 0-.8625181.53984-1.5094067 1.619522-1.9406657 1.079681-.4312591 1.979415-.6468886 2.699203-.6468886 2.87915 0 5.326427.0718765 7.341832.2156295 2.015405.1437531 4.030811.3234443 6.046216.5390739 2.015405.2156295 4.246746.3234442 6.694023.3234442 3.023108 0 6.442099-.1796912 10.256973-.5390738 3.814873-.3593825 7.953652-.5390738 12.416334-.5390738 10.796813 0 19.650199 1.7250362 26.56016 5.1751086 6.90996 3.4500723 10.36494 9.2001929 10.36494 17.2503618 0 6.1813796-1.223639 10.8533526-3.670917 14.0159189-2.447277 3.1625663-5.7583 5.5344911-9.933067 7.1157743-.287915.143753-.467862.3953207-.539841.7547033-.071979.3593825.107968.6109503.539841.7547033 3.023107.8625181 6.118194 2.0844187 9.285259 3.6657019s5.830279 3.9532082 7.989641 7.1157742c2.159363 3.162566 3.239044 7.61891 3.239044 13.36903 0 6.756392-2.015405 12.290883-6.046215 16.603474-4.03081 4.31259-9.357238 7.475156-15.979283 9.487699-6.622045 2.012542-13.963878 3.018813-22.025498 3.018813-1.007703 0-2.951129-.107815-5.830279-.323444-2.87915-.21563-5.938247-.431259-9.177291-.646889-3.239044-.215629-5.938247-.323444-8.097609-.323444-3.886853 0-7.881674.107815-11.984462.323444-4.102789.21563-7.161886.431259-9.177291.646889-2.015405.215629-2.015405.323444 0 .323444zm46.426295-6.468886c7.341832 0 12.920185-2.156295 16.735059-6.468885 3.814874-4.312591 5.722311-9.487699 5.722311-15.525326 0-5.750121-1.223639-10.134588-3.670916-13.153401-2.447278-3.018813-5.866269-5.067294-10.256972-6.145441-4.390704-1.0781479-9.537185-1.6172217-15.439443-1.6172217-1.439575 0-2.807171.2515678-4.102788.7547033-1.295618.5031354-2.303321 1.2219004-3.023108 2.1562954-.719788.934394-1.079681 2.120357-1.079681 3.557887v23.719247c0 3.593826 1.511553 6.612639 4.534661 9.05644 3.023108 2.443802 6.550066 3.665702 10.580877 3.665702zm-7.989642-49.3791604c3.742895 0 7.593758-.3593825 11.55259-1.0781476 3.958831-.718765 7.305843-2.3719247 10.041036-4.959479 2.735192-2.5875543 4.102788-6.6126387 4.102788-12.0752532 0-2.8750603-.467861-5.6423059-1.403585-8.3017367-.935724-2.6594307-2.807172-4.8516642-5.614343-6.5767004s-7.017928-2.5875543-12.632271-2.5875543c-4.03081 0-7.233864.5031356-9.609163 1.5094067s-3.562948 2.7313073-3.562948 5.1751085v23.503618c0 2.1562952.683798 3.5938254 2.051394 4.3125904 1.367596.7187651 3.059097 1.0781476 5.074502 1.0781476z"></path></g><g transform="translate(433 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m163.463745 148.568741c-.863745 0-1.907437-.071877-3.131076-.21563-1.223638-.143753-1.835458-.718765-1.835458-1.725036 0-1.150024.539841-1.976604 1.619522-2.479739 1.079681-.503136 2.195352-.970333 3.347012-1.401592 2.159363-.718765 4.246746-1.401592 6.262151-2.048481 2.015405-.646888 3.023108-2.479739 3.023108-5.498552v-58.435601c0-3.3063194-.791766-5.7141824-2.375299-7.223589-1.583532-1.5094067-3.45498-2.551616-5.614342-3.1266281-1.15166-.431259-2.267331-.9343946-3.347012-1.5094066-1.079682-.5750121-1.619522-1.3656537-1.619522-2.3719248 0-1.1500241.683798-1.7609744 2.051394-1.8328509s2.33931-.1078148 2.91514-.1078148c2.87915 0 4.966533.0359383 6.262151.1078148 1.295617.0718765 2.519256.1796912 3.670916.3234442 1.15166.1437531 2.807172.2156296 4.966534.2156296 2.015405 0 3.814874-.0718765 5.398407-.2156296 1.583532-.143753 3.383001-.287506 5.398406-.431259s4.462682-.2156295 7.341833-.2156295c10.94077 0 19.794156 1.6172214 26.560159 4.8516642 6.766003 3.2344429 10.149004 8.4454897 10.149004 15.6331404 0 5.7501206-1.583533 10.3142788-4.750598 13.6924747-3.167065 3.3781958-7.053917 5.6423054-11.660557 6.7923304-.57583.143753-.935724.287506-1.079682.431259-.143957.143753.215937.359382 1.079682.646888 2.735192.431259 5.686321 1.43753 8.853386 3.018813 3.167065 1.581284 5.866268 3.773517 8.09761 6.576701 2.231341 2.803184 3.347011 6.289194 3.347011 10.458032 0 6.756391-1.799468 12.039315-5.398406 15.84877-3.598937 3.809455-8.457503 6.468885-14.575697 7.978292s-13.064144 2.26411-20.837849 2.26411c-1.439575 0-3.886852-.21563-7.341832-.646889s-6.837982-.646888-10.149004-.646888c-3.167065 0-6.514077.107815-10.041036.323444-3.526959.21563-6.082205.431259-7.665737.646889-1.583533.215629-1.223639.323444 1.079681.323444zm36.277291-7.115774c7.197875 0 12.776228-1.473469 16.73506-4.420405 3.958831-2.946937 5.938247-7.367343 5.938247-13.261216 0-7.331404-2.447278-12.219006-7.341833-14.662808-4.894555-2.443801-11.156707-3.665702-18.786454-3.665702-2.30332 0-4.282736.359383-5.938247 1.078148-1.655512.718765-2.483267 2.156295-2.483267 4.312591v19.837916c0 3.593825.971713 6.289194 2.915139 8.086107 1.943427 1.796912 4.930545 2.695369 8.961355 2.695369zm-5.614343-42.4790162c9.069323 0 15.5834-1.6172214 19.542231-4.8516643 3.958832-3.2344428 5.938247-7.0079594 5.938247-11.3205499 0-4.1688374-1.475564-7.7267245-4.426693-10.6736613-2.951129-2.9469369-8.745418-4.4204053-17.382868-4.4204053-4.030811 0-6.694024.6109504-7.989642 1.832851-1.295617 1.2219006-1.943426 2.982875-1.943426 5.2829233v18.7597684c0 2.7313073.827755 4.3125905 2.483267 4.7438495 1.655511.4312591 2.915139.6468886 3.778884.6468886z"></path></g></g></g></svg></figure></p>
<p>Standard small caps will typically appear slightly larger than the x-height of the font. Some typefaces have additional small caps that match the x-height. These are called <code>petite-caps</code>.</p>
<pre><code class="language-css">font-variant-caps: petite-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;pcap&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pcap&#x27; 0; /* low-level disable */
</code></pre>
<h3>all-petite-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;AB&#x27; using small caps (left) and all petite caps (right). In the petite caps version, both letters are scaled down uniformly to better match lowercase rhythm." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m137 135.62 526.7806.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m136.500475 195.119526-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.00095 1 3 .002848.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 2.780836.002639.000949-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m137 280.62 526.7806.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="517.289062" y="331">All petite caps</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="220.269531" y="331">Small caps</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(137 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m160.656574 148.568741c-.719788 0-1.619522-.21563-2.699203-.646889-1.079682-.431259-1.619522-1.078147-1.619522-1.940665 0-1.150024.57583-1.976604 1.72749-2.47974 1.15166-.503135 2.30332-.82658 3.45498-.970333 3.742895-.718765 7.053917-1.868789 9.933067-3.450072 2.879151-1.581283 4.318726-4.31259 4.318726-8.193922v-58.8668595c0-4.4563435-.935724-7.9064158-2.807172-10.3502171-1.871447-2.4438012-5.110491-4.0250844-9.717131-4.7438495-1.295618-.287506-2.483267-.7906416-3.562948-1.5094066-1.079682-.7187651-1.619522-1.5812832-1.619522-2.5875543 0-.8625181.53984-1.5094067 1.619522-1.9406657 1.079681-.4312591 1.979415-.6468886 2.699203-.6468886 2.87915 0 5.326427.0718765 7.341832.2156295 2.015405.1437531 4.030811.3234443 6.046216.5390739 2.015405.2156295 4.246746.3234442 6.694023.3234442 3.023108 0 6.442099-.1796912 10.256973-.5390738 3.814873-.3593825 7.953652-.5390738 12.416334-.5390738 10.796813 0 19.650199 1.7250362 26.56016 5.1751086 6.90996 3.4500723 10.36494 9.2001929 10.36494 17.2503618 0 6.1813796-1.223639 10.8533526-3.670917 14.0159189-2.447277 3.1625663-5.7583 5.5344911-9.933067 7.1157743-.287915.143753-.467862.3953207-.539841.7547033-.071979.3593825.107968.6109503.539841.7547033 3.023107.8625181 6.118194 2.0844187 9.285259 3.6657019s5.830279 3.9532082 7.989641 7.1157742c2.159363 3.162566 3.239044 7.61891 3.239044 13.36903 0 6.756392-2.015405 12.290883-6.046215 16.603474-4.03081 4.31259-9.357238 7.475156-15.979283 9.487699-6.622045 2.012542-13.963878 3.018813-22.025498 3.018813-1.007703 0-2.951129-.107815-5.830279-.323444-2.87915-.21563-5.938247-.431259-9.177291-.646889-3.239044-.215629-5.938247-.323444-8.097609-.323444-3.886853 0-7.881674.107815-11.984462.323444-4.102789.21563-7.161886.431259-9.177291.646889-2.015405.215629-2.015405.323444 0 .323444zm46.426295-6.468886c7.341832 0 12.920185-2.156295 16.735059-6.468885 3.814874-4.312591 5.722311-9.487699 5.722311-15.525326 0-5.750121-1.223639-10.134588-3.670916-13.153401-2.447278-3.018813-5.866269-5.067294-10.256972-6.145441-4.390704-1.0781479-9.537185-1.6172217-15.439443-1.6172217-1.439575 0-2.807171.2515678-4.102788.7547033-1.295618.5031354-2.303321 1.2219004-3.023108 2.1562954-.719788.934394-1.079681 2.120357-1.079681 3.557887v23.719247c0 3.593826 1.511553 6.612639 4.534661 9.05644 3.023108 2.443802 6.550066 3.665702 10.580877 3.665702zm-7.989642-49.3791604c3.742895 0 7.593758-.3593825 11.55259-1.0781476 3.958831-.718765 7.305843-2.3719247 10.041036-4.959479 2.735192-2.5875543 4.102788-6.6126387 4.102788-12.0752532 0-2.8750603-.467861-5.6423059-1.403585-8.3017367-.935724-2.6594307-2.807172-4.8516642-5.614343-6.5767004s-7.017928-2.5875543-12.632271-2.5875543c-4.03081 0-7.233864.5031356-9.609163 1.5094067s-3.562948 2.7313073-3.562948 5.1751085v23.503618c0 2.1562952.683798 3.5938254 2.051394 4.3125904 1.367596.7187651 3.059097 1.0781476 5.074502 1.0781476z"></path></g><g transform="translate(478 192)"><path d="m4.31054461 91c-.7184241 0-1.61645423-.1084071-2.69409038-.3252212-1.07763615-.2168142-1.61645423-.7588496-1.61645423-1.6261062 0-1.1563422.53881808-1.9874632 1.61645423-2.4933629s2.19119351-.9756637 3.34067207-1.409292c3.44843569-1.0117994 6.0347625-2.0235988 7.7589803-3.0353982s3.1251448-2.2765487 4.202781-3.7942478 2.1193511-3.649705 3.1251448-6.3960177l19.1819236-49.8672567c.7184241-2.3126843 1.2572421-4.4446902 1.6164542-6.3960177.359212-1.9513274.6825029-4.0110619.9698725-6.17920349 1.0057938-.28908555 2.3348784-1.30088496 3.9872538-3.03539823 1.6523754-1.73451328 2.7659328-2.96312685 3.3406721-3.68584071 1.2931634-1.5899705 2.2630359-2.49336283 2.9096176-2.71017699s1.1853998.32522124 1.6164542 1.62610619l23.4924682 65.47787613c1.580533 4.4808259 3.340672 8.3112094 5.2804171 11.4911504s4.9930475 5.3480826 9.1599073 6.5044248c1.1494786.2890855 2.2630359.7227139 3.3406721 1.300885 1.0776361.578171 1.6164542 1.4454277 1.6164542 2.6017699 0 .8672566-.5388181 1.409292-1.6164542 1.6261062-1.0776362.2168141-1.9756663.3252212-2.6940904.3252212-2.8736964 0-5.1008111-.1084071-6.6813442-.3252212-1.580533-.2168142-3.0892236-.3974927-4.5260718-.5420354-1.4368482-.1445428-3.4484357-.2168142-6.0347625-.2168142-2.2989571 0-4.0231749.0722714-5.1726535.2168142-1.1494786.1445427-2.3707995.3252212-3.6639629.5420354-1.2931634.2168141-3.4484357.3252212-6.4658169.3252212-.7184241 0-1.6164543-.1084071-2.6940904-.3252212-1.0776362-.2168142-1.6164542-.7588496-1.6164542-1.6261062 0-1.1563422.538818-2.0235989 1.6164542-2.6017699 1.0776361-.5781711 2.1911935-1.0117995 3.3406721-1.300885 2.0115875-.5781711 3.4125144-1.4454277 4.202781-2.6017699.7902665-1.1563422.6825029-3.3244838-.3232909-6.5044248l-3.8794901-12.1415929h-28.8806489l-3.0173813 8.238938c-1.0057937 3.0353983-1.0417149 5.3842183-.1077636 7.0464602.9339514 1.6622419 2.4067208 2.9269912 4.4183082 3.7942478 2.0115875.8672566 3.9513326 1.5899705 5.8192353 2.1681416 1.1494785.4336283 2.2630359.9033923 3.340672 1.409292 1.0776362.5058997 1.6164543 1.3370207 1.6164543 2.4933629 0 .8672566-.5388181 1.409292-1.6164543 1.6261062-1.0776361.2168141-1.9756662.3252212-2.6940903.3252212-2.8736964 0-5.1726536-.1084071-6.8968714-.3252212-1.7242179-.2168142-3.3047509-.3974927-4.7415991-.5420354-1.4368482-.1445428-3.3765933-.2168142-5.8192352-.2168142-2.2989571 0-4.202781.0722714-5.7114716.2168142-1.5086906.1445427-3.0892237.3252212-4.7415991.5420354-1.65237543.2168141-3.98725376.3252212-7.00463499.3252212zm30.17381229-35.5575221h23.2769409l-9.6987254-30.3539823c-.5747393-1.5899705-1.0057937-2.3849558-1.2931634-2.3849558-.2873696 0-.7184241.7949853-1.2931633 2.3849558z"></path><path d="m111.212051 91c-.862109 0-1.903824-.0722714-3.125145-.2168142-1.221321-.1445427-1.831981-.7227138-1.831981-1.7345132 0-1.1563422.538818-1.9874632 1.616454-2.4933629s2.191193-.9756637 3.340672-1.409292c2.155272-.7227139 4.238702-1.409292 6.25029-2.0597345 2.011587-.6504425 3.017381-2.4933628 3.017381-5.5287611v-58.7566371c0-3.3244838-.790267-5.7455753-2.3708-7.2632744s-3.448435-2.5656342-5.603708-3.14380529c-1.149478-.43362832-2.263036-.93952802-3.340672-1.51769912-1.077636-.57817109-1.616454-1.37315634-1.616454-2.38495575 0-1.15634218.682503-1.77064897 2.047509-1.84292035 1.365006-.07227139 2.334878-.10840708 2.909617-.10840708 2.873697 0 4.957127.03613569 6.25029.10840708 1.293163.07227138 2.514484.18067846 3.663963.32522124 1.149479.14454277 2.801854.21681416 4.957126.21681416 2.011588 0 3.807648-.07227139 5.388181-.21681416 1.580533-.14454278 3.376593-.28908555 5.388181-.43362832 2.011587-.14454277 4.454229-.21681416 7.327926-.21681416 10.920046 0 19.756662 1.62610619 26.509849 4.87831858 6.753187 3.25221237 10.12978 8.49188787 10.12978 15.71902657 0 5.7817109-1.580533 10.3709439-4.741599 13.7676991s-7.040556 5.6733038-11.638471 6.829646c-.574739.1445428-.933951.2890856-1.077636.4336283-.143685.1445428.215527.361357 1.077636.6504425 2.730012.4336283 5.675551 1.4454277 8.836617 3.0353982s5.855156 3.7942478 8.082271 6.6128319 3.340672 6.3237463 3.340672 10.5154867c0 6.7935104-1.79606 12.1054573-5.388181 15.9358407-3.59212 3.8303835-8.441483 6.5044248-14.548088 8.0221239s-13.039397 2.2765487-20.798378 2.2765487c-1.436848 0-3.87949-.2168142-7.327925-.6504425-3.448436-.4336283-6.825029-.6504425-10.12978-.6504425-3.161066 0-6.501738.1084071-10.022016.3252213-3.520279.2168141-6.070684.4336283-7.651217.6504425-1.580533.2168141-1.221321.3252212 1.077636.3252212zm36.208575-7.1548673c7.184241 0 12.752028-1.4815634 16.70336-4.4446902 3.951333-2.9631269 5.926999-7.4078171 5.926999-13.3340708 0-7.3716814-2.442642-12.2861357-7.327926-14.7433629-4.885284-2.4572271-11.135573-3.6858407-18.750869-3.6858407-2.298957 0-4.274623.361357-5.926999 1.0840708-1.652375.7227139-2.478563 2.1681416-2.478563 4.3362832v19.9469027c0 3.6135693.969873 6.3237463 2.909618 8.130531 1.939745 1.8067846 4.921205 2.7101769 8.94438 2.7101769zm-5.603708-42.7123893c9.052143 0 15.553882-1.6261062 19.505214-4.8783186 3.951333-3.2522124 5.926999-7.0464602 5.926999-11.3827434 0-4.1917404-1.472769-7.769174-4.418308-10.7323009-2.945539-2.9631268-8.728853-4.44469023-17.349942-4.44469023-4.023175 0-6.681344.61430683-7.974508 1.84292033-1.293163 1.2286136-1.939745 2.9992626-1.939745 5.3119469v18.8628319c0 2.7463127.826188 4.3362832 2.478563 4.7699115 1.652376.4336283 2.909618.6504425 3.771727.6504425z"></path></g></g></g></svg></figure></p>
<p>Similarly to <code>all-small-caps</code>, this converts all letters, both lower and uppercase, to petite caps.</p>
<pre><code class="language-css">font-variant-caps: all-petite-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;pcap&#x27; 1, &#x27;c2pc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pcap&#x27; 1, &#x27;c2pc&#x27; 0; /* low-level disable */
</code></pre>
<h3>unicase</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of text with Unicase off and Unicase on. The left shows a standard uppercase &#x27;A&#x27; and lowercase &#x27;a&#x27; at different heights; the right shows &#x27;A&#x27; and &#x27;a&#x27; adjusted to a more unified height, blending uppercase and lowercase characteristics." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129.218452 133.5 539.973982.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m129.718915 186.999537-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129.218452 273.5 539.973982.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="497.382514" y="324">Unicase on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(407.218452 132)"><path d="m46.4349112 98.8930163h45.7869823l13.1745565 36.6270427h-1.511835c-7.7751475 0-12.7426032-.215453-16.6301771-.215453-1.5118343 0-3.0236687 1.508173-3.0236687 3.878158s1.5118344 3.662704 3.0236687 3.662704c4.1035503 0 9.0710059-1.077266 29.1568051-1.077266h1.079881c20.517752 0 25.053255 1.077266 29.156805 1.077266 1.727811 0 3.239645-1.292719 3.239645-3.662704s-1.511834-3.878158-3.239645-3.878158c-3.671598 0-6.047337.215453-16.630178.215453h-.647929l-48.5946741-133.15007386c-.4319526-1.50817236-1.295858-2.36998514-3.6715976-2.36998514s-3.0236686.64635958-3.6715976 2.36998514l-49.0266273 133.15007386c-14.47041416 0-17.4940828-.215453-21.38165676-.215453-1.72781065 0-3.02366864 1.508173-3.02366864 3.878158s1.29585799 3.662704 3.02366864 3.662704c4.10355029 0 6.26331361-1.077266 25.48520706-1.077266h1.0798817c19.2218935 0 21.5976331 1.077266 25.7011834 1.077266 1.5118343 0 3.239645-1.292719 3.239645-3.662704s-1.7278107-3.878158-3.239645-3.878158c-3.6715976 0-6.9112426.215453-22.4615384.215453zm42.5473373-7.9717682h-39.7396449l20.0857988-54.294205z"></path><path d="m218.568047 117.421991c-14.470414 15.51263-23.109467 15.51263-29.588757 15.51263-8.207101 0-16.630178-5.601783-16.630178-21.545319 0-26.2852901 24.18935-35.1188711 46.218935-35.1188711zm-40.171597-99.754829c2.375739-4.3090639 9.502958-8.18722144 20.517751-8.18722144 12.95858 0 19.653846 7.54086184 19.653846 22.62258544v37.2734027c-28.508875 0-69.760355 10.5572065-69.760355 45.8915303 0 19.175334 14.470415 29.732541 30.02071 29.732541 12.310651 0 25.053255-4.955423 40.387574-18.528975 1.943787 10.77266 9.071006 18.098069 20.085799 18.098069 4.967456 0 13.822485-.64636 21.381657-8.402675 1.079882-1.077266 2.159763-3.016345 2.159763-4.73997 0-2.369985-2.159763-4.093611-4.751479-4.093611-.863905 0-1.511834.430906-2.159763 1.292719-2.807693 2.369985-4.103551 8.618128-9.502959 8.618128-3.455621 0-5.399408-2.154532-5.399408-10.1263v-82.9494801c0-29.7325409-15.33432-42.65973254-42.115385-42.65973254-18.789941 0-39.739645 12.92719164-39.739645 27.79346214 0 7.3254086 5.615385 13.1426448 12.95858 13.1426448 7.127219 0 12.95858-5.8172362 12.95858-13.1426448 0-4.7399703-2.591716-9.4799406-6.695266-11.6344725z"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="196.261421" y="324">Unicase off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(129.218452 132)"><path d="m90.0621302 90.9212481h-47.0828403l23.9733728-63.5586924zm34.3402368 44.5988109-48.810651-133.15007386c-.647929-1.50817236-1.295858-2.36998514-3.6715977-2.36998514-2.5917159 0-3.2396449.64635958-3.8875739 2.36998514l-50.7544379 133.15007386h-1.295858c-9.71893489 0-10.58284022-.215453-12.74260353-.215453-1.51183432 0-3.23964497 1.508173-3.23964497 3.878158s1.72781065 3.662704 3.23964497 3.662704c2.15976331 0 3.02366864-1.077266 18.35798813-1.077266h1.0798817c15.1183432 0 15.9822485 1.077266 18.1420118 1.077266 1.5118343 0 3.239645-1.292719 3.239645-3.662704s-1.7278107-3.878158-3.239645-3.878158c-2.1597633 0-3.0236686.215453-13.3905325.215453h-1.5118343l14.0384615-36.8424958h52.9142012l13.3905325 36.8424958c-9.9349112 0-12.0946745-.215453-14.2544378-.215453-1.5118344 0-3.239645 1.508173-3.239645 3.878158s1.7278106 3.662704 3.239645 3.662704c2.1597633 0 4.3195266-1.077266 22.0295858-1.077266h2.591716c17.710059 0 19.869822 1.077266 22.029586 1.077266 1.72781 0 3.239645-1.292719 3.239645-3.662704s-1.511835-3.878158-3.239645-3.878158c-2.159764 0-4.319527.215453-14.254438.215453z"></path><path d="m190.491124 125.178306c-9.934911 8.833581-16.414201 10.341753-20.949704 10.341753-6.263313 0-11.662722-5.170876-11.662722-13.142644 0-12.711739 9.071006-19.821694 32.612426-19.821694zm-27.860946-59.2496284c1.72781-2.3699852 6.047337-5.1708767 13.822485-5.1708767 8.855029 0 14.038461 4.0936107 14.038461 14.435364v21.1144131c-24.837278 0-48.810651 8.402675-48.810651 28.870728 0 12.927192 9.502959 19.821694 20.949705 19.821694 8.423076 0 17.926035-3.447251 28.292899-12.927192 1.295858 7.325409 6.263314 12.496286 13.606509 12.496286 4.535503 0 8.855029-.430907 14.68639-4.955424 1.295858-1.077266 2.37574-3.878157 1.079882-5.38633-1.727811-1.508172-3.455621-1.723625-4.967456-.430906-2.375739 1.939079-2.591716 4.524517-5.399408 4.524517s-4.10355-1.723626-4.10355-7.756315v-47.1842497c0-20.4680535-11.014793-29.0861812-29.372781-29.0861812-12.95858 0-27.644971 8.6181277-27.644971 18.9598811 0 4.9554235 3.671598 9.0490342 8.85503 9.0490342 4.967456 0 8.855029-4.0936107 8.855029-9.0490342 0-3.2317979-1.511834-5.8172363-3.887573-7.3254086z"></path></g></g></svg></figure></p>
<p>This feature maps upper and lowercase letters to a mixed set of lowercase and small capital forms, creating a single case alphabet. Sometimes the small capitals used are actual small cap glyphs and sometimes they are specially designed unicase forms. The implementation of this feature varies greatly from font to font.</p>
<pre><code class="language-css">font-variant-caps: unicase; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;unic&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;unic&#x27; 0; /* low-level disable */
</code></pre>
<h3>titling-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of text with Titling Caps off and Titling Caps on. The left shows regular capital &#x27;A&#x27; and lowercase &#x27;a&#x27;; the right shows a lighter, more refined capital &#x27;A&#x27; for use in titling, matching better with the lowercase &#x27;a&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129.513957 123.62 540.972086.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m129.718915 180.999537-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129.513957 273.62 540.972086.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="493.648438" y="324">Titling caps on</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="201.527344" y="324">Titling caps off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 122)"><path d="m158.560889 150.646238c0-1.729081-1.2958-2.809757-2.159667-3.025892-17.27733-1.945217-23.540363-10.590626-27.427762-21.613521l-44.9210599-124.27774335c-.2159666-.86454083-1.2957998-1.72908165-3.0235328-1.72908165-1.5117665 0-2.5915996.64840562-3.0235329 1.72908165l-50.5361923 124.27774335c-5.6151325 12.751977-9.9344652 20.316709-25.05212955 21.613521-.86386654.216135-2.37563297 1.296811-2.37563297 3.025892-.21596664 1.729082.43193326 3.025893 1.51176643 3.025893 10.15043179 0 14.68573109-1.296811 24.18826299-1.296811 11.8781649 0 14.9016977 1.296811 27.6437291 1.296811.8638666 0 1.7277331-1.296811 1.7277331-3.025893 0-1.729081-.4319333-3.025892-1.2957998-3.025892-13.6058979-.648406-17.4932973-4.53884-17.4932973-10.37449 0-3.025893 1.0798331-6.700192 2.3756329-10.37449l12.3100982-33.5009571h44.4891265l12.5260643 36.0945791c1.079834 3.458164 1.9437 6.484056 1.9437 9.077679 0 5.40338-4.103366 8.429273-18.141197 9.077679-.8638666 0-1.2957998 1.296811-1.2957998 3.025892 0 1.729082.8638665 3.025893 1.727733 3.025893 14.2537978 0 20.5168298-1.296811 33.9067618-1.296811 11.878165 0 16.413464 1.296811 30.667262 1.296811.863866 0 1.727733-1.296811 1.727733-3.025893zm-65.4378902-64.1921557h-39.521894l20.5168302-55.3306127z"></path><path d="m256.609741 144.162182c0-2.593622-2.159667-4.538839-3.2395-3.674298-2.5916 2.377487-5.399166 4.322704-8.422699 4.322704-3.239499 0-7.558832-1.729082-7.342865-12.103572l1.511766-48.8465561c.6479-17.9392221-11.662198-26.8007656-26.131962-26.8007656-16.629431 0-43.193327 15.1294644-43.193327 26.5846304 0 4.7549745 3.455466 7.5647322 7.774799 7.5647322 6.910932 0 12.742031-4.5388394 12.957998-14.697194.215966-6.7001914 7.558832-10.8067603 15.333631-10.8067603 8.206732 0 14.253797 6.2679209 14.037831 17.5069516l-.6479 16.8585458c-14.037831 3.674299-52.479892 14.264924-52.479892 35.878444 0 11.239031 8.422699 20.965115 22.028597 20.965115 12.310098 0 23.108429-4.538839 30.235328-11.887436 2.159667 6.700191 8.638666 11.022896 16.629431 11.022896 8.422699 0 15.117664-4.106569 20.084897-9.94222.6479-.648405.6479-1.080676.863867-1.945217zm-37.578195-36.742985-.863866 28.962118c-2.807566 6.051786-11.878165 9.942219-18.789097 9.942219-7.558833 0-11.878165-5.619515-11.878165-15.345599 0-13.616518 15.333631-19.884439 31.531128-23.558738z"></path></g><path d="m582.578511 275.325702c1.2958 0 1.727733-2.377488-.215967-2.809758-5.183199-1.296811-12.742031-1.945217-15.549598-3.458163-5.831099-3.458164-11.446231-17.290817-58.526957-151.078509-.431934-1.080676-5.615133-1.512947-6.263033 0-30.019362 82.563648-50.536192 137.678126-57.015191 146.539669-3.2395 4.53884-5.831099 6.700192-16.845397 7.997003-1.727734.216135-1.2958 2.809758-.215967 2.809758 5.831099-.648406 10.798332-.864541 22.244563-.864541 11.662198 0 13.821865.216135 19.86893.864541 1.079834 0 1.511767-2.593623-.431933-2.809758-12.310098-1.945217-14.037831-3.890434-14.037831-7.780868 0-4.322704 7.342866-26.152359 17.493297-53.817666 5.399166-.216135 15.117665-.43227 33.474829-.43227h17.27733c3.671433 10.37449 7.342866 20.74898 10.798332 30.258929 8.854632 25.287819 7.126899 27.665306 4.319333 29.394388-2.807567 1.512946-10.150432 1.080676-15.333631 2.377487-1.727733.43227-1.511767 2.809758-.215967 2.809758 5.831099-.648406 22.028597-.864541 33.690795-.864541 11.446232 0 19.652964.216135 25.484063.864541zm-60.686624-69.595537c-4.319333 0-9.286566 0-15.333631 0-16.197498 0-25.70003 0-31.531129-.216135 6.910932-19.452169 15.117664-41.065689 22.892463-61.598534.215967-.648405 1.079833-.86454 1.2958 0 6.910932 18.371493 14.901698 40.201149 22.676497 61.814669z"></path><path d="m670.908864 266.680293c.431933-.648405-.6479-1.729081-1.511766-1.080676-2.5916 2.161352-4.103367 2.809758-7.774799 2.809758-4.5353 0-7.126899-3.890434-7.126899-9.726084 0-16.426276 1.943699-33.717092 1.943699-50.359503 0-18.155358-9.718498-27.016901-26.995829-27.016901-16.845397 0-36.498361 15.77787-36.930294 26.800765-.215967 4.322705 2.591599 7.132462 6.910932 7.132462 6.047066 0 9.502532-3.025893 10.150432-12.968112.6479-9.726084 6.047066-16.210141 14.901698-16.210141 11.014298 0 16.413464 6.051786 16.413464 22.261927v11.23903c-.215967 3.242028-.431933 4.106569-2.375633 4.754975-30.667262 10.590625-49.672326 16.642411-49.672326 35.446174 0 9.293814 9.502532 17.506951 20.300864 17.506951 12.094131 0 22.028596-6.700191 28.507595-12.319706.6479-.648406 1.511767-.432271 1.9437.216135 2.375633 6.051786 6.263032 11.887436 12.957998 11.887436 7.558832 0 15.981531-5.40338 18.357164-10.37449zm-30.667262-37.175255c0 5.187245-.431933 21.18125-1.2958 27.881441-.215966 2.377488-10.150432 11.022896-20.300863 11.022896-9.070599 0-14.037832-3.890434-14.037832-14.048788 0-12.103572 11.446232-19.668304 33.906762-26.15236 1.079833-.216136 1.727733.43227 1.727733 1.296811z"></path></g></g></svg></figure></p>
<p>Standard uppercase letters are designed for use alongside lowercase letters and when they are used in strings of all uppercase letters they can appear too strong. Some fonts include titling capitals specifically for this situation.</p>
<pre><code class="language-css">font-variant-caps: titling-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;titl&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;titl&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-numeric</h2>
<p>The proper display of numerals varies greatly depending on context. Here are some general rules:</p>
<ul>
<li>In running/body text, use <em>proportional old-style</em> numerals</li>
<li>For headings, use <em>proportional lining</em> numerals</li>
<li>Within numeric tables, use <em>tabular lining</em> numerals</li>
</ul>
<p>You can combine values to achieve, for example, tabular lining numerals like this:</p>
<pre><code class="language-css">font-variant-numeric: lining-nums tabular-nums;
</code></pre>
<h3>lining-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sample showing uppercase &#x27;A&#x27;, lowercase &#x27;a&#x27;, and lining numerals &#x27;7&#x27;, &#x27;8&#x27;, and &#x27;9&#x27; aligned along the same cap height and baseline." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m110.500432 146.5 578.758951.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m110.000864 195.999568-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000863 1 3 .002591.000862-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000863 1 3 .002591.000862-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m110.500432 294.06 578.758951.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(110.500432 140)"><path d="m0 154.941495h11.4468138c1.5118433-3.878924 9.2870376-23.920036 16.1983214-39.651231l6.0473733-14.43822h70.8406595l24.40547 55.382426 10.798881-1.292975c-1.943798-3.878924-9.718992-20.903094-17.278209-37.711768l-52.0506062-117.229727-3.2396643.64648746c-4.1035748 11.20578274-9.7189929 23.70454034-19.6539633 46.76259314zm69.112838-135.7623669 31.532732 73.0530833h-63.0654643z"></path><path d="m181.565185 157.311949c15.766366 0 29.372956-9.481816 34.556419-22.411565-.86391 17.670657 5.831396 21.549582 12.958657 21.549582 4.103575 0 7.559217-1.292975 10.150948-3.016941l.647933-7.111362c-2.375754 1.292974-5.39944 2.585949-8.207149 2.585949-4.967486 0-7.559217-2.801445-7.34324-12.929749l1.295866-42.6681725c.647933-24.9975152-12.742679-37.280777-33.692508-37.280777-11.446814 0-21.81374 3.4479331-31.964688 9.2663203l2.375754 8.6198328c7.775194-5.1718997 18.14212-9.4818161 28.509046-9.4818161 17.278209 0 25.917314 10.1283036 25.485359 30.8159024l-.215978 5.1719001c-4.751508-.430992-9.503015-.8619837-15.334411-.8619837-35.636307 0-48.594964 14.4382197-48.594964 31.0313987 0 14.869211 10.150948 26.721481 29.372956 26.721481zm1.943799-7.973345c-15.334411 0-21.81374-9.050824-21.81374-19.394624 0-11.85227 8.639105-23.489044 38.875971-23.489044 4.751508 0 10.150949.215495 15.334411.861983l-.431955 9.481816c-.647933 18.748136-14.686478 32.539869-31.964687 32.539869z"></path></g><g transform="translate(380.580444 142.334538)"><path d="m1.29586571 3.66342896c-.21597762 3.01694149-.64793285 7.11136214-1.29586571 9.69731194 11.6627914-.2154958 27.4291576-.2154958 42.7635685-.2154958 11.8787691 0 25.2693815 0 35.6363072.2154958l-47.5150762 99.3435731c-5.8313957 12.283262-15.1184333 30.600407-19.4379857 38.358257l11.2308362 1.50847c1.9437986-5.171899 7.7751943-17.239665 12.9586571-28.014456l44.9233447-94.1716742c3.8875972-8.1888412 7.5592167-16.5931782 10.3669258-21.76507796l-3.2396643-4.95640388c-13.3906124.43099164-28.0770905.64648746-43.627479.64648746-15.5503886 0-29.8049115-.21549582-42.76356859-.64648746z"></path><path d="m101.761455 116.798735c0 21.980574 19.437985 38.789248 46.435188 38.789248 28.293068 0 47.947031-18.101649 47.947031-41.375198 0-17.886153-14.4705-31.2468939-36.716195-39.8667267 19.869941-7.3268579 33.044576-18.5326406 33.044576-36.8497854 0-20.2566072-17.27821-37.4962729-42.115636-37.4962729-25.701337 0-43.195524 17.6706573-43.195524 38.3582562 0 18.7481364 14.470501 29.7384233 31.964688 36.6342895-22.893628 7.5423538-37.364128 20.472103-37.364128 41.8061893zm84.663226-2.154958c0 18.101649-15.118433 32.539869-37.580105 32.539869-21.381785 0-37.364128-13.360741-37.364128-31.031398 0-19.3946243 14.686478-30.600407 37.580105-37.2807775 23.109606 7.5423538 37.364128 19.1791281 37.364128 35.7723065zm-69.544793-76.7165125c0-15.9466907 12.74268-29.30743166 32.828598-29.30743166 19.222008 0 32.828598 13.14524506 32.828598 29.52292746 0 15.731195-12.526702 26.505986-32.180665 32.3243732-19.653963-6.4648746-33.476531-15.5156991-33.476531-32.539869z"></path><path d="m225.336649 148.261125 2.159776 8.404337c49.89083-9.697312 81.423563-50.857014 81.423563-100.2055569 0-34.6948272-19.006031-56.24440928-47.083121-56.24440928-28.293068 0-47.731054 22.62706118-47.731054 50.64151798 0 25.213011 18.358097 44.6076349 43.627479 44.6076349 17.494187 0 33.476531-9.4818161 41.251725-25.4285068-5.183463 39.0047431-31.964688 70.0361421-73.648368 78.2249831zm-1.511843-97.8351029c0-23.0580528 15.118433-41.37519761 37.580105-41.37519761 22.67765 0 36.500218 18.53264061 36.500218 37.92726451 0 20.9030946-16.198321 39.8667269-38.012061 39.8667269-21.813739 0-36.068262-15.7311949-36.068262-36.4187938z"></path></g></g></g></svg></figure></p>
<p>Lining numerals approximate capital letters and are uniform in height. They should be used in headings or numeric tables. Usually numbers are lining figures by default.</p>
<pre><code class="language-css">font-variant-numeric: lining-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;lnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;lnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>oldstyle-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sample showing uppercase &#x27;A&#x27;, lowercase &#x27;a&#x27;, and old-style numerals &#x27;7&#x27;, &#x27;8&#x27;, and &#x27;9&#x27;, where the numerals vary in height to better match the rhythm of lowercase text." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m120 125.5 557.767694.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m120.000952 181-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004622-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000951-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147607.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147607.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 1.827403.001641.000952-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m120 279.06 557.767694.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(120 124)"><path d="m0 155.554842h11.4546511c1.5128784-3.894279 9.2933962-24.014725 16.2094119-39.808193l6.0515138-14.495375h70.8891612l24.422181 55.601662 10.806274-1.298094c-1.945129-3.894279-9.725647-20.985841-17.290039-37.861053l-52.0862435-117.693789-3.2418824.64904663c-4.1063844 11.25014157-9.7256472 23.79837647-19.6674198 46.94770627zm69.1601575-136.299792 31.5543215 73.3422692h-63.1086434z"></path><path d="m181.689497 157.93468c15.777161 0 29.393067-9.519351 34.580079-22.500283-.864502 17.740608 5.835388 21.634888 12.967529 21.634888 4.106385 0 7.564393-1.298094 10.157899-3.028885l.648376-7.139513c-2.37738 1.298094-5.403137 2.596187-8.212769 2.596187-4.970886 0-7.564392-2.812536-7.348266-12.980933l1.296753-42.8370774c.648376-25.0964697-12.751405-37.4283557-33.715577-37.4283557-11.454651 0-21.828675 3.4615821-31.986573 9.3030017l2.37738 8.6539551c7.780518-5.192373 18.154542-9.5193506 28.528565-9.5193506 17.29004 0 25.935059 10.1683972 25.502808 30.9378894l-.216125 5.1923735c-4.754761-.432698-9.509522-.865396-15.34491-.865396-35.660706 0-48.628236 14.495375-48.628236 31.154238 0 14.928073 10.157898 26.827261 29.393067 26.827261zm1.94513-8.004908c-15.34491 0-21.828675-9.086653-21.828675-19.471399 0-11.899189 8.64502-23.582028 38.902588-23.582028 4.754761 0 10.157899.216349 15.34491.865396l-.432251 9.51935c-.648376 18.822352-14.696533 32.668681-31.986572 32.668681z"></path></g><g transform="translate(389.184301 134.565037)"><path d="m81.9115616 40.6735888c-12.5352786.4326978-26.1511846.6490467-40.6315926.6490467s-27.664063-.2163489-40.19934154-.6490467c0 2.8125354-.43225098 6.4904663-1.08062746 9.3030017 11.0224001-.2163489 25.5028081-.2163489 39.9832161-.2163489 11.2385256 0 22.6931766 0 32.2026983.2163489l-43.008973 89.7847835c-5.1870118 10.817444-14.2642824 28.558052-18.3706668 35.481216l9.2933962 4.759675c1.5128784-4.326977 7.3482667-16.442514 11.886902-25.745516l42.7928475-88.9193882c3.4580079-7.3558618 7.1321413-15.3607703 9.9417727-20.3367944z"></path><path d="m96.6441159 110.554276c0 20.985841 18.1545411 36.779309 42.5767221 36.779309 25.935059 0 44.305726-17.30791 44.305726-39.808193 0-16.226166-13.399781-29.6397964-33.0672-37.2120071 17.506164-6.923164 29.176941-17.3079101 29.176941-34.8321691 0-19.25505-15.993286-35.4812158-38.254212-35.4812158-23.341553 0-39.550965 16.6588635-39.550965 36.3466113 0 17.7406079 12.751404 28.3417028 28.312439 34.8321691-20.315796 6.9231641-33.4994511 19.6877478-33.4994511 39.3754956zm77.1568011-2.163489c0 17.091561-13.399781 30.505192-33.931703 30.505192-19.019043 0-33.715576-11.899188-33.715576-28.99075 0-17.9569564 12.967529-28.7744002 33.931702-35.0485177 20.964173 6.4904663 33.715577 18.1733057 33.715577 33.5340757zm-62.676393-72.2605246c0-15.5771191 11.670776-27.90900508 29.825318-27.90900508 17.073914 0 29.393067 12.11553708 29.393067 27.69265618 0 15.1444214-11.238526 25.0964697-29.176942 30.9378894-17.72229-6.4904663-30.041443-14.9280725-30.041443-30.7215405z"></path><path d="m209.281518 172.430055 3.241883 8.004908c47.115357-10.817444 76.292298-44.567868 76.292298-89.5684348 0-30.5051916-15.993286-52.572777-44.521851-52.572777-26.583436 0-45.386353 21.4185388-45.386353 46.9477062 0 23.1493296 17.073914 41.9716826 41.063843 41.9716826 13.615906 0 26.36731-5.625071 36.741334-13.62998-7.996643 29.639796-32.634949 51.058335-67.431154 58.846895zm33.067201-53.654522c-20.315797 0-33.715577-15.144421-33.715577-34.1831222 0-20.3367944 14.264282-37.6447046 35.228455-37.6447046 24.422181 0 35.660706 19.9040967 35.660706 44.3515198 0 4.3269775-.432251 8.4376062-.864502 12.548235-10.157898 9.086653-23.773804 14.928072-36.309082 14.928072z"></path></g></g></g></svg></figure></p>
<p>Old-style numerals have varying heights and alignments and are therefore more similar to lowercase letters. They should be used in running text.</p>
<pre><code class="language-css">font-variant-numeric: oldstyle-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;onum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;onum&#x27; 0; /* low-level disable */
</code></pre>
<h3>proportional-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Proportional numerals &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, and &#x27;5&#x27; displayed inside separate brown background boxes, each number having varying width for natural text flow." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#e6594c" fill-opacity="0.25"><path d="m152 143h52v155h-52z"></path><path d="m212 143h102v155h-102z"></path><path d="m322 143h98v155h-98z"></path><path d="m428 143h117v155h-117z"></path><path d="m553 143h95v155h-95z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(156 143)"><path d="m39.0577526.21648045-11.2210118 3.89664804-27.8367408 8.65921791 2.15788688 8.6592178 28.69989552-9.0921787v93.0865925c0 12.339385 0 37.018156-.4315774 46.326815h10.3578571c-.2157887-5.412011-.4315774-20.349162-.4315774-27.709497v-96.3337988c0-2.3812849.2157887-24.67877094.4315774-26.41061452z"></path><path d="m75.4882853 142.877095c14.2420535-14.28771 27.4051637-28.142458 37.5472317-39.399441 23.08939-26.1941344 35.173556-43.9455311 35.173556-64.2946931 0-23.1634078-16.39994-39.1829609-41.647217-39.1829609-14.242053 0-28.9156838 6.49441341-41.4314277 16.452514l4.5315624 8.0097765c11.6525892-9.9581006 24.5999105-15.37011173 36.2524993-15.37011173 20.284137 0 32.368304 13.20530723 32.368304 31.17318433 0 24.8952514-22.226235 49.7905028-77.8997168 105.2094969l1.7263095 6.927375c13.5946873-.649442 28.4841068-.865922 44.6682583-.865922 16.831518 0 31.28936.21648 45.099836.649441 0-3.463687.431577-6.710894 1.078943-9.9581-24.59991.865921-53.0840169.649441-77.4681387.649441z"></path><path d="m171.687062 148.722067c11.652589 4.329609 22.873601 6.277933 34.741978 6.277933 30.857783 0 52.436652-16.885475 52.436652-42.213687 0-19.6997208-14.457842-33.9874303-43.373527-38.9664806 21.794658-5.6284916 40.136696-17.9678771 40.136696-40.2653631 0-18.400838-16.184151-33.5544693-41.215639-33.5544693-13.16311 0-27.620952 4.97905028-39.705119 13.6382682l4.099985 8.2262569c10.573646-8.0097765 23.952545-12.77234633 34.957768-12.77234633 20.068348 0 31.936726 11.90642463 31.936726 25.76117323 0 19.4832402-21.147292 32.9050279-55.457693 38.1005586l1.726309 6.7108939c35.820923.2164804 56.968214 12.5558659 56.968214 33.7709495 0 20.132682-17.263095 32.472067-43.589315 32.472067-11.652589 0-23.305178-2.597765-34.957767-6.927374z"></path><path d="m350.275034 151.752793h10.142068c-.215789-5.412011-.431577-17.318435-.431577-24.895251v-20.998603c8.19997 0 16.184151.21648 22.873601.43296.215788-3.680167.431577-5.628491 1.294732-9.3086588-7.121027.2164805-15.536786.4329609-24.168333.4329609v-66.0265363c0-2.1648045.215788-28.1424581.431577-30.09078212l-6.689449-.86592179c-1.294733 1.94832403-14.026265 18.40083801-15.968363 20.78212291l-61.499776 78.7988822 2.805252 6.494414c14.457843-.649441 34.526191-.865922 51.14192-.865922h20.715714v5.844972c0 12.772347-.215789 30.740224-.647366 40.265363zm-61.283988-54.3365919 61.715565-79.2318436.215789 79.2318436c-3.452619.2164805-7.552604.2164805-10.142069.2164805-9.710491 0-42.078794 0-51.789285-.2164805z"></path><path d="m487 109.322626c0-27.925978-21.147291-43.2960897-56.968214-43.2960897-3.23683 0-7.984181.4329609-10.789434.6494414l2.373675-53.9036313c7.552605 0 21.363081-.2164805 28.484107-.2164805 12.731533 0 22.010447.4329609 31.936726.4329609.431578-2.5977653.863155-6.71089384 1.72631-9.7416201-11.436801.4329609-20.284137.4329609-34.310402.4329609-14.242053 0-23.305178 0-35.605133-.21648045l-1.72631 1.51536313c.215789 7.36033522 0 17.31843572-.431577 25.97765362l-1.078944 21.2150838c-.215788 9.0921788-.863154 17.1019553-1.294732 22.9469274l1.294732 1.0824022c6.905238-.8659218 12.515744-1.2988827 17.047307-1.2988827 30.426205 0 49.415609 10.6075419 49.415609 34.8533524 0 22.297486-18.557827 36.152234-43.589315 36.152234-11.221011 0-21.578869-1.948324-31.289359-5.628491l1.294732 9.74162c9.063125 3.247206 18.989404 4.97905 30.426205 4.97905 30.426205 0 53.084017-17.751397 53.084017-45.677374z"></path></g></g></svg></figure></p>
<p>Proportional numerals have variable spacing and blend in with horizontal text. They should be used in most situations, other than numeric tables where vertical alignment is important. Usually numbers are proportional figures by default.</p>
<pre><code class="language-css">font-variant-numeric: proportional-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;pnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>tabular-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Tabular numerals &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, and &#x27;5&#x27; displayed inside separate brown background boxes, all aligned with equal width for consistent stacking in tables." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#e6594c" fill-opacity="0.25"><path d="m118 143h104v155h-104z"></path><path d="m230 143h104v155h-104z"></path><path d="m342 143h104v155h-104z"></path><path d="m454 143h117v155h-117z"></path><path d="m579 143h104v155h-104z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(122 143)"><path d="m96.9102299 142.444134c-7.1225781.432961-17.0510204.649441-24.8211056.649441h-16.8351847v-19.050279-96.3337988c0-2.3812849.2158357-24.67877094.4316714-26.41061452l-1.7266857-1.08240223-11.2234564 3.89664804c-7.985921 2.38128492-31.5120124 11.25698321-42.0879618 14.28770951l1.94252132 8.8756983 43.16714028-14.9371508v93.0865925c0 9.525139 0 26.194134-.2158357 37.667597h-20.7202273c-10.144278 0-15.10849914-.21648-24.8211057-.649441.4316714 2.814246.6475071 6.710894.86334281 9.74162 11.65512789-.21648 20.72022729-.432961 33.02286229-.432961h27.1952984c12.5184707 0 25.6844485 0 35.6128907.432961.2158357-2.381285.2158357-7.793296.2158357-9.74162z"></path><path d="m125.141501 142.877095c17.482692-15.803073 33.022862-30.523743 44.246319-41.997207 25.468612-26.1941338 36.476233-41.9972064 36.476233-61.6969271 0-24.0293296-18.130199-39.1829609-44.462154-39.1829609-17.698528 0-32.807027 8.22625698-46.836347 20.9986034l4.316714 8.0097765c13.597649-12.7723464 26.547791-19.91620113 42.087961-19.91620113 21.367735 0 34.965384 12.33938543 34.965384 31.17318433 0 24.2458101-21.799406 47.4092179-85.902609 105.2094969l1.726685 6.927375c14.892664-.649442 31.080341-.865922 48.347198-.865922 18.56187 0 34.317876.21648 49.210539.649441 0-3.463687.647508-6.710894 1.079179-9.9581-26.979463.865921-58.275639.649441-85.255102.649441z"></path><path d="m223.994446 148.072626c12.734306 4.76257 24.173598 6.927374 39.929605 6.927374 33.454533 0 56.980625-17.751397 56.980625-42.213687 0-20.9986035-18.561871-35.286313-51.153061-38.5335197 30.001162-6.0614525 47.915525-20.7821229 47.915525-40.698324 0-18.6173185-17.914363-33.5544693-45.109661-33.5544693-17.914364 0-33.454534 6.49441341-45.973005 14.9371508l4.100879 8.0097766c11.870963-8.226257 25.252777-13.85474863 41.224619-13.85474863 22.446913 0 35.828726 11.25698323 35.828726 25.32821233 0 17.3184357-17.266856 31.1731843-58.923146 38.3170391l1.510849 7.1438547c37.123741.6494414 60.433997 11.9064246 60.433997 33.5544691 0 18.833799-18.346035 32.472067-47.268019 32.472067-16.835184 0-28.274477-2.814246-40.792947-7.793296z"></path><path d="m409.001615 151.752793h10.144278c-.215836-5.412011-.431672-17.318435-.431672-24.895251v-14.28771c9.0651 0 17.698528.216481 25.684449.432961.215835-3.680167.431671-5.412011 1.295014-9.308659-8.633428.216481-17.266856.432961-26.979463.432961v-72.7374302c0-2.1648045.215836-28.1424581.431672-30.09078212l-6.906743-.86592179c-1.295014 1.94832403-14.02932 19.26675981-15.756006 21.43156421l-62.160682 85.0768159 2.590028 6.277933c15.540171-.649442 36.476234-.649442 54.390597-.649442h18.346035v6.494414c0 10.391061 0 25.111732-.647507 32.688547zm-7.122579-47.409218c-11.00762 0-44.462154 0-55.253939-.21648l63.024025-86.3756984v86.3756984c-2.590029.21648-5.395893.21648-7.770086.21648z"></path><path d="m462.816456 148.505587c10.791785 4.113128 22.662748 6.494413 36.907905 6.494413 33.238698 0 58.275639-17.751397 58.275639-45.677374 0-27.925978-22.878584-43.2960897-62.160682-43.2960897-5.180057 0-12.734306.8659218-17.482692 1.5153631l2.590029-54.769553c9.280935 0 25.900284-.2164805 34.749548-.2164805 15.54017 0 26.979462.4329609 39.066261.4329609 0-2.5977653.863343-6.71089384 1.51085-9.7416201-13.597649.4329609-24.389434.4329609-41.008783.4329609-16.835185 0-27.842805 0-42.303797-.21648045l-1.726686 1.51536313c0 7.36033522 0 17.31843572-.431671 25.97765362l-.863343 21.2150838c-.431672 9.5251397-1.295014 17.7513967-1.51085 23.8128492l1.295014 1.0824022c9.496771-1.5153631 17.266856-2.1648045 23.310256-2.1648045 33.886205 0 55.253939 10.6075419 55.253939 34.8533524 0 22.297486-21.367734 36.152234-48.994704 36.152234-13.597649 0-26.11612-2.597765-37.771248-7.143855z"></path></g></g></svg></figure></p>
<p>Tabular numerals have the same width and should be used in numeric tables to allow vertical alignment of numbers.</p>
<pre><code class="language-css">font-variant-numeric: tabular-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;tnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;tnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>diagonal-fractions</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of diagonal fractions with feature off and on. Left side shows full-size &#x27;1/2&#x27; characters; right side shows properly formatted diagonal fraction where numerator and denominator are adjusted for better alignment." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m106.500424 98.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m105.000849 148.119576-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m106.500424 262.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="177.952859" y="369">Diagonal fractions off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="503.920859" y="369">Diagonal fractions on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(132.664859 87)"><path d="m37.68 177.12c-.24-5.76-.48-16.8-.48-24.72v-60.48c0-2.64.24-28.08.48-30l-2.16-1.2-10.08 2.88c-6.24 1.68-17.28 4.8-25.44 6.72l1.92 9.84 24.72-6.72v62.64c0 12.96 0 31.44-.72 41.04z"></path><path d="m135.36 0c-3.84.48-7.92.72-10.8.72-3.12 12.96-6 23.76-12.24 45.12l-37.68 132.48c-6.24 21.84-11.52 40.32-16.8 57.12l10.56-.96 9.36-34.08 47.76-167.52c3.36-12 8.88-30.24 9.84-32.88z"></path><path d="m236.16 166.8c-23.52.96-48.24.72-71.52.72 12-8.64 30.24-22.08 43.2-34.32 13.68-12.48 22.08-25.2 22.08-39.6 0-21.12-16.8-34.08-38.64-34.08-13.44 0-27.12 5.28-38.16 13.92l3.6 9.36c10.56-8.88 22.56-13.68 33.84-13.68 17.04 0 28.8 9.36 28.8 25.44 0 17.52-12.96 32.4-73.44 75.6l2.16 7.68c13.92-.72 29.04-.96 45.12-.96 15.6 0 28.56.24 41.52.72 0-3.84.48-6.96 1.44-10.8z"></path></g><path d="m503.904859 267.36c6.96-9.6 12-15.84 17.28-23.28l84.96-115.92c5.52-7.92 14.64-20.64 20.64-28.08-1.44-.72-6.24-3.12-7.68-4.08-4.56 7.2-11.04 16.32-26.64 37.68l-66.96 91.44c-8.16 11.28-12.96 17.76-28.56 37.92zm9.84-159.84v53.52c0 7.44-.24 22.08-.48 27.6h9.6c-.24-3.36-.24-12.24-.24-16.56v-58.56c0-2.16.24-14.16.24-16.08l-1.92-.72-8.16 2.64c-6.24 1.92-13.2 4.32-21.12 6.48l1.92 7.68zm85.68 84.96c8.88-7.68 17.28-11.52 26.88-11.52 12.72 0 20.4 6.72 20.4 17.04 0 8.4-4.8 16.08-17.76 28.32-8.64 8.16-20.88 18.24-36.96 31.92l1.44 6.48c9.84-.24 20.64-.48 32.16-.48 12.48 0 22.32.24 32.4.48 0-3.12.48-6 .72-9.12-16.32.48-36.24.72-53.04.72 10.32-8.64 20.64-17.28 28.8-24.72 14.4-13.68 21.6-22.08 21.6-34.56 0-15.12-12-24.48-29.28-24.48-12 0-23.04 5.28-31.44 12.72z"></path></g></g></svg></figure></p>
<p>By default, fractions will display as lowercase letters with a slash. Proper fractions will be formatted to match the height of a lining figure and can be either diagonal or stacked.</p>
<pre><code class="language-css">font-variant-numeric: diagonal-fractions; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;frac&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;frac&#x27; 0; /* low-level disable */
</code></pre>
<h3>stacked-fractions</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of stacked fractions with feature off and on. Left side shows large &#x27;1/2&#x27; separated by a slash; right side shows a neatly stacked fraction with &#x27;1&#x27; above &#x27;2&#x27; separated by a horizontal line." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m107.000849 192-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m106 124.5 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m105.835565 258.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="212.069142" y="358">Stacked fractions off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="524.037142" y="358">Stacked fractions on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(135.789142 107)"><path d="m80.1131105 152.895038.8637533-8.410305h-33.6863754v-130.4675574l-9.5012853.8625954v14.879771l-36.06169667 4.9599236.2159383 6.9007634 35.84575837-2.5877863v105.4522903h-37.7892031v8.410305z"></path><path d="m189.485861 0-101.922879 188.26145 8.6375321 2.372138 101.2750639-186.96755747z"></path><path d="m291.51671 152.895038v-8.625954h-74.282777c44.699229-37.091603 69.100257-61.2442748 69.100257-88.8473283 0-21.7805343-16.411311-38.601145-75.362468-37.9541984l-.863753 9.0572519c52.688946 0 66.940874 12.5076335 66.940874 30.6221374 0 24.7996183-24.832905 48.0896944-71.043702 87.5534354l.863754 8.194656z"></path></g><path d="m625.822561 168.062977.647815-7.332061h-25.912596v-81.730916l-8.205656.6469466v13.1545801l-27.856041 4.0973283.215938 6.038168 27.640103-2.372138v60.166031h-28.935733v7.332061zm-79.033419 29.543893h91.557841v-7.116412h-91.557841zm77.305913 107.39313v-7.54771h-51.177378c31.095115-22.427481 47.938303-37.522901 47.938303-54.774809 0-14.017176-12.308483-25.015267-55.280206-24.58397l-.647815 7.332062c37.357327.431297 47.722366 7.763358 47.722366 19.192748 0 14.879771-17.706941 29.328244-50.745502 53.265267l.863753 7.116412z"></path></g></g></svg></figure></p>
<p>Stacked fractions are not as common of a feature in most web fonts as diagonal fractions, but should prove useful with heavily scientific or mathematical content.</p>
<pre><code class="language-css">font-variant-numeric: stacked-fractions; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;afrc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;afrc&#x27; 0; /* low-level disable */
</code></pre>
<h3>ordinal</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of ordinal formatting with feature off and on. Left side shows &#x27;1st&#x27; at normal size; right side shows &#x27;st&#x27; as smaller, raised text next to the &#x27;1&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m106 113.450058 588.754788.450058" stroke="#e6594c" stroke-linecap="square"></path><path d="m106 179.450058 588.754788.450058" stroke="#e6594c" stroke-dasharray="2 3" stroke-linecap="square"></path><path d="m106 296.569686 588.754788.450058" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 154.396051)"><path d="m30.456 142.146341h12.528v-120.9756093l-42.984 1.2961673v9.2891986h30.456z"></path><path d="m113.4 144.522648c19.224 0 42.12-6.912892 42.12-32.836237 0-38.0209058-58.968-29.3797908-58.968-60.2717769 0-11.0174216 8.424-19.8745644 23.976-19.8745644 13.176 0 22.032 3.2404181 25.704 4.3205575l2.376-10.1533101c-2.376-.6480837-12.96-4.5365854-25.704-4.5365854-22.248 0-37.8 11.0174216-37.8 31.1080139 0 39.749129 59.4 30.2439025 59.4 61.1358884 0 13.1777-13.608 20.954704-31.968 20.954704-11.448 0-22.896-3.672474-28.728-5.400697l-2.592 10.585366c5.4 1.728223 16.632 4.968641 32.184 4.968641z"></path><path d="m230.04 144.522648c7.128 0 16.2-2.808362 19.008-3.888502l-3.024-10.585366c-3.24 1.08014-10.368 3.456446-16.632 3.456446-19.872 0-25.056-3.672473-25.056-23.33101v-74.7456446h36.936v-11.2334494h-37.152v-24.195122h-11.448v24.195122h-17.28v11.2334494h17.28v74.9616726c0 33.052265 15.768 34.132404 37.368 34.132404z"></path></g><path d="m504.456 297.019744h12.528v-120.975609l-42.984 1.296167v9.289199h30.456z"></path><path d="m576.816 208.664344c12.744 0 30.672-4.968641 30.672-22.898955 0-25.275261-43.416-19.010453-43.416-38.020906 0-6.696864 6.696-11.017421 16.416-11.017421 8.856 0 16.848 1.94425 20.088 2.808362l2.16-8.857143c-2.376-.864111-12.096-3.02439-20.952-3.02439-14.904 0-28.512 7.344948-28.512 21.818815 0 27.219512 43.416 19.010453 43.416 37.804878 0 7.560976-9.72 11.665505-21.816 11.665505-5.832 0-18.36-2.160278-22.464-3.240418l-1.728 9.505227c2.16 1.080139 15.768 3.456446 26.136 3.456446z"></path><path d="m658.032 208.664344c4.968 0 11.664-1.728223 13.608-2.376307l-1.944-8.857143c-1.08.216028-2.376.648084-3.672.864112-2.376.648083-4.968.864111-8.208.864111-12.096 0-15.12-1.728223-15.12-13.393728v-47.094077h24.192v-9.289198h-24.192v-15.986063h-10.8v15.986063h-11.448v9.289198h11.448v47.310105c0 22.682927 11.664 22.682927 26.136 22.682927z"></path></g><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="213.672" y="343.396051">Ordinals off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="532.64" y="343.396051">Ordinals on</tspan></text></g></svg></figure></p>
<p>Ordinals like st, nd, rd, and th will appear as standard lowercase letters by default. However, these should ideally appear as smaller raised numbers following the numeral. The <code>ordinal</code> value enables that.</p>
<pre><code class="language-css">font-variant-numeric: ordinal; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;ordn&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;ordn&#x27; 0; /* low-level disable */
</code></pre>
<h3>slashed-zero</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of a standard zero and a slashed zero. Left side shows &#x27;0&#x27; and &#x27;1&#x27; in normal form; right side shows &#x27;0&#x27; with a diagonal slash across it to distinguish it from the letter &#x27;O&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(451 125)"><path d="m49.2 157.2c31.92 0 52.32-31.44 52.32-78.96 0-47.04-18-75.12-49.2-75.12-31.92 0-52.32 31.2-52.32 78.96 0 46.8 18 75.12 49.2 75.12zm-38.64-77.04c0-42.48 14.4-67.68 40.8-67.68 20.64 0 33.12 16.08 37.68 43.68l-77.76 40.32c-.48-5.04-.72-10.56-.72-16.32zm39.84 67.68c-20.4 0-33.36-15.6-37.92-42.72l77.52-40.32c.48 4.8.72 9.84.72 15.36 0 42.48-13.68 67.68-40.32 67.68z"></path><path d="m215.4 154.56.96-9.36h-37.44v-145.2l-10.56.96v16.56l-40.08 5.52.24 7.68 39.84-2.88v117.36h-42v9.36z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(132 125)"><path d="m49.2 157.2c31.92 0 52.32-31.44 52.32-78.96 0-47.04-18-75.12-49.2-75.12-31.92 0-52.32 31.2-52.32 78.96 0 46.8 18 75.12 49.2 75.12zm2.16-144.72c25.92 0 39.36 25.44 39.36 67.68 0 42.48-13.68 67.68-40.32 67.68-25.92 0-39.84-25.44-39.84-67.68 0-42.48 14.4-67.68 40.8-67.68z"></path><path d="m215.4 154.56.96-9.36h-37.44v-145.2l-10.56.96v16.56l-40.08 5.52.24 7.68 39.84-2.88v117.36h-42v9.36z"></path></g><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="510.179688" y="331">Slashed zero</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="186.71875" y="331">Standard zero</tspan></text><path d="m462.167334 243.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m547.167334 201.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>This enables an alternate zero character with a slash through it.</p>
<pre><code class="language-css">font-variant-numeric: slashed-zero; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;zero&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;zero&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-alternates</h2>
<p>Fonts can provide a variety of alternates for any character. The <code>font-variant-alternates</code> property provides many ways of controlling this character substitution.</p>
<h3>historical-forms</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard form and historical form characters. On the left, regular &#x27;s&#x27; and &#x27;b&#x27; characters; on the right, &#x27;long s&#x27; and historical &#x27;b&#x27; with ornate flourishes, highlighting historical typographic forms." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(149 104)"><path d="m73.8 144.6c0 9.76-3.84 17.96-11.52 24.6s-16.96 9.96-27.84 9.96c-3.84 0-9.76-.84-17.76-2.52-6-1.2-10.08-1.8-12.24-1.8-.64-5.6-2.12-14.12-4.44-25.56 0-1.2 1.16-1.8 3.48-1.8 1.92 0 3.08.64 3.48 1.92 1.84 5.92 5.48 11.08 10.92 15.48s11.04 6.6 16.8 6.6c6 0 10.66-1.64 13.98-4.92s4.98-7.88 4.98-13.8c0-3.76-1.38-7.08-4.14-9.96s-8.74-6.44-17.94-10.68c-12.08-5.52-20.06-10.72-23.94-15.6s-5.82-10.72-5.82-17.52c0-8.4 3.64-15.62 10.92-21.66s15.88-9.06 25.8-9.06c4.16 0 10 .72 17.52 2.16 4.16.8 6.88 1.2 8.16 1.2.24 9.44.76 17.48 1.56 24.12 0 1.2-1.16 1.8-3.48 1.8-2 0-3.12-.64-3.36-1.92-.88-5.84-3.08-10.58-6.6-14.22s-7.72-5.46-12.6-5.46c-12.48 0-18.72 5.44-18.72 16.32 0 3.68 1.48 7.08 4.44 10.2s9.4 7.16 19.32 12.12c11.84 5.92 19.64 11.04 23.4 15.36s5.64 9.2 5.64 14.64z"></path><path d="m203.28 123.24c0 14.72-5.2 27.72-15.6 39s-22.44 16.92-36.12 16.92c-7.6 0-14.96-1.6-22.08-4.8-4.88-2.24-9.2-3.36-12.96-3.36-6 0-9.96 2.56-11.88 7.68-.4.96-1.4 1.44-3 1.44-2.08 0-3.12-.64-3.12-1.92.64-6.72.96-14.8.96-24.24v-117c0-6.48-.82-10.72-2.46-12.72s-5.22-3.28-10.74-3.84c-1.28 0-1.92-.96-1.92-2.88 0-2.24.64-3.36 1.92-3.36 14.24-3.68 24.36-7.92 30.36-12.72 1.2-.96 2.2-1.44 3-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.44-1.92 31.44-1.92 42v35.88c7.52-7.52 16.72-11.28 27.6-11.28 16.24 0 29.4 4.92 39.48 14.76s15.12 23.16 15.12 39.96zm-24.12.96c0-14.72-2.92-26.24-8.76-34.56s-14.04-12.48-24.6-12.48c-5.68 0-11.22 2.14-16.62 6.42s-8.1 8.54-8.1 12.78v55.44c0 4.24 3.22 8.54 9.66 12.9s12.42 6.54 17.94 6.54c9.6 0 17.08-4.28 22.44-12.84s8.04-19.96 8.04-34.2z"></path></g><path d="m194.28 123c0 14.8-5.22 27.82-15.66 39.06s-22.58 16.86-36.42 16.86c-7.52 0-14.8-1.56-21.84-4.68-4.96-2.16-9.28-3.24-12.96-3.24-5.92 0-9.92 2.48-12 7.44-.4.96-1.4 1.44-3 1.44-1.92 0-2.88-.64-2.88-1.92.64-6.72.96-14.8.96-24.24v-117c0-14.24-7.52-21.36-22.56-21.36-18.72 0-28.08 12-28.08 36v96.84c0 8.08.84 13.3 2.52 15.66s5.88 3.94 12.6 4.74c1.28 0 1.92 1.12 1.92 3.36s-.64 3.36-1.92 3.36c-3.28 0-7.32-.24-12.12-.72-5.28-.48-9.88-.72-13.8-.72s-8.72.24-14.4.72c-5.12.48-9.36.72-12.72.72-1.28 0-1.92-1.12-1.92-3.36s.64-3.36 1.92-3.36c6.96-.8 11.42-2.4 13.38-4.8s2.94-7.6 2.94-15.6v-57.12c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12 0-2 .72-3.2 2.16-3.6 10.24-2.72 15.36-4.96 15.36-6.72 0-12.16 2.96-24.1 8.88-35.82s13.74-20.9 23.46-27.54 20.38-9.96 31.98-9.96c7.36 0 13.6 1.52 18.72 4.56 2.48-1.44 4.6-2.84 6.36-4.2 1.12-.88 2.08-1.32 2.88-1.32 2.24 0 3.36.64 3.36 1.92-1.28 13.12-1.92 27.04-1.92 41.76v35.88c7.52-7.52 16.64-11.28 27.36-11.28 16.4 0 29.66 4.92 39.78 14.76s15.18 23.16 15.18 39.96zm-24.48.96c0-14.8-2.9-26.34-8.7-34.62s-14.02-12.42-24.66-12.42c-5.52 0-10.98 2.16-16.38 6.48s-8.1 8.56-8.1 12.72v55.44c0 4.32 3.2 8.64 9.6 12.96s12.4 6.48 18 6.48c9.6 0 17.04-4.24 22.32-12.72s7.92-19.92 7.92-34.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.36 104.24)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="497.249219" y="332.12">Historical form</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="194.546094" y="332.12">Standard form</tspan></text><path d="m552.834697 139.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.9547468c-.468072.474945-.916901.9689068-1.345221 1.4806208l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m469.167334 203.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m508.167334 290.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Historical alternates can be used for a “period” effect. Note the difference between this and historical ligatures. Historical ligatures are historical character combinations, whereas historical forms are substitutions for individual characters.</p>
<pre><code class="language-css">font-variant-alternates: historical-forms; /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: &#x27;hist&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;hist&#x27; 0; /* low-level disable */
</code></pre>
<h3>stylistic(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard character and stylistic alternate for the letter &#x27;G&#x27;. Left side shows a traditional &#x27;G&#x27;; right side shows an alternate &#x27;G&#x27; with a straight vertical bar instead of a horizontal crossbar." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m146.64 159.36v-18.72c0-15.36.48-48.72 1.68-58.08-14.16.72-21.12.96-37.92.96-10.8 0-18-.24-32.64-.72.48 5.76.48 13.44 0 21.6 13.68-.48 20.64-.72 32.64-.72 7.44 0 5.52 0 12.72.24.48 4.32.48 10.8.48 14.4v30c-10.08 5.28-20.64 7.68-34.08 7.68-35.52 0-65.28-24.48-65.28-67.2 0-38.88 25.92-67.44 64.8-67.44 16.32 0 36.96 5.76 48.96 15.36l6.72-21.6c-13.2-8.64-35.28-15.12-53.28-15.12-52.32 0-91.44 40.32-91.44 90.72 0 48.24 37.68 86.4 86.88 86.4 29.04 0 46.32-8.88 59.76-17.76z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(171 105)"></path><path d="m146.64 140.88c0-15.6 1.44-53.52 1.44-53.52h-25.2s.72 27.6.72 31.2v29.76c-10.08 5.28-20.64 7.68-34.08 7.68-35.52 0-65.28-24.48-65.28-67.2 0-38.88 25.92-67.44 64.8-67.44 16.32 0 36.96 5.76 48.96 15.36l6.72-21.6c-13.2-8.64-35.28-15.12-53.28-15.12-52.32 0-91.44 40.32-91.44 90.72 0 48.24 37.68 86.4 86.88 86.4 29.04 0 46.32-8.88 59.76-17.76z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(475 105)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="483.335938" y="330">Stylistic alternate</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="172.316406" y="330">Standard character</tspan></text><path d="m608.834697 219.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use this to select stylistic features on an individual basis. In order to use this and several of the following <code>font-variant-alternates</code> functions, you must define a <code>font-feature-value</code> using the <code>@font-feature-values</code> rule. For example, if you wanted to select stylistic feature number 1 in the font you are using, you would first define the feature value, and then use it within the <code>font-variant-alternates: stylistic()</code> function.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @stylistic { inscriptional-g: 1 }
}

font-variant-alternates: stylistic(inscriptional-g); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: salt 1; /* low-level enable */
font-feature-settings: salt 0; /* low-level disable */
</code></pre>
<h3>styleset(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard and alternate stylesets for the letter &#x27;w&#x27;. Left side shows a simple cursive &#x27;w&#x27;; right side shows an alternate &#x27;w&#x27; with an extended decorative leading stroke." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="482.558594" y="309">Alternate styleset</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="178.679688" y="309">Standard styleset</tspan></text><g fill-rule="nonzero"><path d="m171.24 18.96c0 12-3.8 25.58-11.4 40.74s-16.82 27.48-27.66 36.96-21.46 14.22-31.86 14.22c-9.76 0-16.64-5.6-20.64-16.8-13.6 11.2-24.88 16.8-33.84 16.8-7.28 0-13.02-2.4-17.22-7.2s-6.3-11.2-6.3-19.2c0-9.6 3.62-21.1 10.86-34.5s15.3-24.06 24.18-31.98c-3.2 1.28-6.24 1.92-9.12 1.92-2.48 0-5.88-.64-10.2-1.92-3.84-1.28-6.76-1.92-8.76-1.92-5.2 0-9.26.92-12.18 2.76s-4.38 4.28-4.38 7.32c0 1.44.8 3.2 2.4 5.28 2.24 2.88 3.36 5.68 3.36 8.4 0 5.44-2.8 8.16-8.4 8.16-2.8 0-5.18-1.16-7.14-3.48s-2.94-5.48-2.94-9.48c0-6.88 3.84-14.44 11.52-22.68s14.72-12.36 21.12-12.36c3.44 0 7.76.72 12.96 2.16 4.16 1.12 7.36 1.68 9.6 1.68 2.8 0 6.08-.48 9.84-1.44 1.52-.48 2.56-.72 3.12-.72 1.04 0 1.98.44 2.82 1.32s1.26 1.8 1.26 2.76c0 1.84-2.36 5.8-7.08 11.88-8.8 11.2-14.82 21.14-18.06 29.82s-4.86 17.74-4.86 27.18c0 11.04 4.64 16.56 13.92 16.56 7.44 0 14.4-2.24 20.88-6.72-.48-3.36-.72-6.96-.72-10.8 0-17.36 3.96-33.98 11.88-49.86s16.4-23.82 25.44-23.82c7.84 0 11.76 5.68 11.76 17.04 0 19.76-10.36 40.88-31.08 63.36 2.4 7.2 7.88 10.8 16.44 10.8 11.68 0 21.8-5.78 30.36-17.34s12.84-24.58 12.84-39.06c0-4.96-1.24-9.8-3.72-14.52-1.68-3.12-2.52-5.8-2.52-8.04 0-3.6 1.06-6.54 3.18-8.82s4.98-3.42 8.58-3.42c3.52 0 6.36 1.74 8.52 5.22s3.24 8.06 3.24 13.74zm-54.96 1.68c0-4.32-1.68-6.48-5.04-6.48-5.68 0-10.56 3.98-14.64 11.94s-6.12 17.98-6.12 30.06c0 5.44.56 10.4 1.68 14.88 7.44-8.64 13.32-17.44 17.64-26.4s6.48-16.96 6.48-24z" fill="#f5f5f5" transform="translate(148 149.92)"></path><path d="m221.04 20.88c0 11.44-3.5 24.44-10.5 39s-15.74 26.76-26.22 36.6c-11.6 10.88-22.96 16.32-34.08 16.32-4.96 0-9.18-1.46-12.66-4.38s-6.22-7.06-8.22-12.42c-6.4 5.28-12.52 9.4-18.36 12.36s-11 4.44-15.48 4.44c-7.52 0-13.4-2.56-17.64-7.68-3.92-4.72-5.88-10.96-5.88-18.72 0-9.92 3.88-21.88 11.64-35.88 7.12-12.88 14.92-23.08 23.4-30.6-4.56 2-9.12 3.46-13.68 4.38s-10.08 1.38-16.56 1.38c-3.76 0-8.34-.86-13.74-2.58s-10.66-3.42-15.78-5.1c-6.48-1.76-12.8-2.64-18.96-2.64-5.04 0-8.86.78-11.46 2.34s-3.9 3.98-3.9 7.26c0 1.28.92 3.2 2.76 5.76s2.76 5.12 2.76 7.68c0 2.72-.72 4.8-2.16 6.24s-3.44 2.16-6 2.16c-2.48 0-4.68-.92-6.6-2.76-2.48-2.4-3.72-5.8-3.72-10.2 0-8.32 3.8-16.04 11.4-23.16s15.4-10.68 23.4-10.68c5.44 0 11.76.92 18.96 2.76 15.92 4.08 25.04 6.12 27.36 6.12 6.72 0 13.28-.52 19.68-1.56 5.68-1.2 11.36-2.44 17.04-3.72 1.04 0 1.98.42 2.82 1.26s1.26 1.78 1.26 2.82c0 1.84-2.56 6.04-7.68 12.6-6.72 8.56-11.56 15.96-14.52 22.2-5.2 10.8-7.8 22.16-7.8 34.08 0 5.36 1.22 9.46 3.66 12.3s5.94 4.26 10.5 4.26c3.68 0 7.32-.6 10.92-1.8s6.92-2.84 9.96-4.92c-.32-1.36-.56-3.04-.72-5.04s-.24-3.92-.24-5.76c0-17.2 3.94-33.74 11.82-49.62s16.42-23.82 25.62-23.82c3.68 0 6.6 1.42 8.76 4.26s3.24 7.02 3.24 12.54c0 10.08-3.04 20.92-9.12 32.52-5.36 10.32-12.8 20.6-22.32 30.84 1.2 3.52 3.24 6.2 6.12 8.04s6.36 2.76 10.44 2.76c12 0 22.36-6.04 31.08-18.12 8.24-11.44 12.36-24.2 12.36-38.28 0-4.32-.64-7.96-1.92-10.92-3.04-7.04-4.56-10.92-4.56-11.64 0-3.44 1-6.3 3-8.58s4.92-3.42 8.76-3.42c3.6 0 6.46 1.62 8.58 4.86s3.18 7.86 3.18 13.86zm-54.72 1.92c0-2.08-.42-3.72-1.26-4.92s-2.18-1.8-4.02-1.8c-5.36 0-10.08 3.64-14.16 10.92-4.48 8-6.72 18.36-6.72 31.08 0 2.4.16 5 .48 7.8s.72 5.16 1.2 7.08c7.52-8.48 13.48-17.16 17.88-26.04s6.6-16.92 6.6-24.12z" fill="#f5f5f5" transform="translate(430 147)"></path><path d="m478.834697 179.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill="#e6594c"></path></g></g></svg></figure></p>
<p>Use this to select an entire set of alternative glyphs. The glyphs in a set are often designed to work together. Select a particular set by defining a <code>font-feature-values</code> rule using the set’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @styleset { special-styleset: 1 }
}

font-variant-alternates: styleset(special-styleset); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: ss01; /* low-level enable */
</code></pre>
<h3>character-variant(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard character and character variant for the letter &#x27;k&#x27;. Left side shows a regular cursive &#x27;k&#x27;; right side shows an alternate &#x27;k&#x27; with an exaggerated extended lower stroke." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m108.725106 91.8c0 6.16-2.66 12.34-7.98 18.54-5.3199996 6.2-12.2599996 11.02-20.8199996 14.46s-18 5.16-28.32 5.16c4.08 8.48 9.76 17 17.04 25.56s12.96 12.84 17.04 12.84c3.84 0 5.76-1.92 5.76-5.76 0-1.92-1.12-3.88-3.36-5.88l-1.2-1.56c0-1.12.38-2.08 1.14-2.88s1.66-1.2 2.7-1.2c1.92 0 3.96 1.42 6.12 4.26s3.2399996 5.58 3.2399996 8.22c0 10.4-6.7999996 15.6-20.3999996 15.6-8.4 0-17.04-4.36-25.92-13.08s-16-19.64-21.36-32.76l-13.44 38.88c-.32 1.12-1.6 2.08-3.84 2.88s-4.48 1.2-6.72000002 1.2c-2.08 0-4.02-.34-5.82-1.02s-2.66-1.7-2.58-3.06l44.40000002-135.24c1.44-4.32 2.16-7.92 2.16-10.8 0-3.12-3.52-5.08-10.56-5.88-1.44-.16-2.16-1.16-2.16-3 0-1.92.56-2.88 1.68-2.88 5.12-.96 11.2-2.76 18.24-5.4s12.4-5.12 16.08-7.44c1.6-1.04 2.96-1.56 4.08-1.56 1.6 0 2.4.88 2.4 2.64 0 1.92-.4 4-1.2 6.24l-29.28 85.32c8.16-9.76 15.34-16.52 21.54-20.28s12.86-5.64 19.98-5.64c6.4 0 11.56 2.2 15.4799996 6.6 3.92 4.4 5.88 10.04 5.88 16.92zm-20.8799996 3.12c0-7.68-3.44-11.52-10.32-11.52-4.4 0-9.5 1.94-15.3 5.82s-11.1 8.76-15.9 14.64-7.2 10.34-7.2 13.38c0 3.52 2.64 5.28 7.92 5.28 27.2 0 40.8-9.2 40.8-27.6z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(184 81)"></path><path d="m171.191111 211.68c0 6.24-2.48 11.2-7.44 14.88-5.36 4-12.96 6-22.8 6-13.76 0-28.68-6.08-44.7599999-18.24-13.52-10.24-26.64-23.72-39.36-40.44-11.2-14.72-19.32-28.2-24.36-40.44l-13.44 38.88c-.32 1.2-1.64 2.18-3.96 2.94s-4.52 1.14-6.59999999 1.14c-2.24 0-4.28-.36-6.12-1.08-1.84-.72-2.6-1.72-2.28-3l44.39999999-135.36c.72-2.24 1.26-4.26 1.62-6.06s.54-3.38.54-4.74c0-3.12-3.52-5.04-10.56-5.76-1.44 0-2.16-1.04-2.16-3.12 0-1.68.56-2.64 1.68-2.88 5.44-.96 11.56-2.72 18.36-5.28s12.12-5.04 15.96-7.44c.64-.48 1.28-.88 1.92-1.2s1.36-.48 2.16-.48c1.6 0 2.4.96 2.4 2.88 0 .88-.1 1.82-.3 2.82s-.5 2.06-.9 3.18l-29.28 85.44c7.44-8.8 13.92-15.04 19.44-18.72 6.88-4.64 14.24-6.96 22.08-6.96 6.64 0 11.92 2.24 15.8399999 6.72 3.68 4.24 5.52 9.76 5.52 16.56 0 8.88-4.84 17.16-14.5199999 24.84-11.2 8.88-25.4 13.32-42.6 13.32 5.04 10.32 12.4 22 22.08 35.04 11.76 15.84 23.44 28.48 35.0399999 37.92 14.48 11.84 27.68 17.76 39.6 17.76 4.8 0 8.56-.86 11.28-2.58s4.08-4.22 4.08-7.5c0-1.84-1-3.72-3-5.64l-1.56-1.8c0-1.12.36-2.08 1.08-2.88s1.56-1.2 2.52-1.2c1.92 0 3.8 1.4 5.64 4.2s2.76 5.56 2.76 8.28zm-83.2799999-116.64c0-3.6-.9-6.42-2.7-8.46s-4.34-3.06-7.62-3.06c-7.2 0-15.52 4.56-24.96 13.68-8.96 8.64-13.44 15.36-13.44 20.16 0 1.68.62 2.98 1.86 3.9s3.26 1.38 6.06 1.38c15.68 0 26.84-3.04 33.48-9.12 4.88-4.48 7.32-10.64 7.32-18.48z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(454 81)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="473.679688" y="355">Character variant</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="165.316406" y="355">Standard character</tspan></text><path d="m558.834697 313.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use this to select specific character variants. Select a particular variant by defining a <code>font-feature-values</code> rule using the variant’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @character-variant { special-variant: 1 }
}

font-variant-alternates: character-variant(special-variant); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: cv01; /* low-level enable */
</code></pre>
<h3>swash(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of swash flourish off and on for the letter &#x27;M&#x27;. Left side shows a plain &#x27;M&#x27;; right side shows an ornate &#x27;M&#x27; with decorative swashes and curled endings." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="446.273438" y="325">Swash flourish on</tspan></text><path d="m194.784 1.92c0 2.304-.704 3.456-2.112 3.456-8 .896-13.616 2.368-16.848 4.416s-5.424 6.016-6.576 11.904l-12.48 90.336c-.32 2.56-.48 4.448-.48 5.664 0 3.264 1.296 5.648 3.888 7.152s7.216 2.64 13.872 3.408c.768.064 1.152.608 1.152 1.632 0 .896-.24 1.728-.72 2.496s-1.008 1.152-1.584 1.152c-4.288 0-9.408-.192-15.36-.576-5.696-.384-10.496-.576-14.4-.576s-8.736.192-14.496.576c-6.016.384-11.168.576-15.456.576-.768 0-1.152-.576-1.152-1.728 0-.832.24-1.616.72-2.352s1.008-1.136 1.584-1.2c8-.96 13.488-2.48 16.464-4.56s4.848-5.968 5.616-11.664l13.44-92.064-64.032 115.104c-.64 1.024-1.664 1.536-3.072 1.536-1.536 0-2.304-.512-2.304-1.536l-15.552-111.456-27.84 88.416c-.96 2.752-1.44 4.96-1.44 6.624 0 2.752 1.376 4.848 4.128 6.288s7.424 2.544 14.016 3.312c.64.128.96.672.96 1.632 0 .896-.24 1.728-.72 2.496s-1.008 1.152-1.584 1.152c-3.328 0-7.744-.192-13.248-.576-5.312-.384-9.472-.576-12.48-.576-3.2 0-7.616.192-13.248.576-5.44.384-9.6.576-12.48.576-.64 0-.96-.576-.96-1.728 0-2.24.768-3.456 2.304-3.648 8-.896 13.744-2.368 17.232-4.416s6.192-5.952 8.112-11.712l31.488-90.336c.768-2.56 1.152-4.64 1.152-6.24 0-3.008-1.424-5.264-4.272-6.768s-7.632-2.608-14.352-3.312c-.64 0-.96-.512-.96-1.536 0-.96.224-1.84.672-2.64s.992-1.2 1.632-1.2c1.536 0 4.48.192 8.832.576 4.8.384 8.128.576 9.984.576 2.176 0 5.344-.192 9.504-.576 4.224-.384 7.52-.576 9.888-.576l13.92 104.544 58.944-104.544c2.56 0 5.92.192 10.08.576 3.776.384 6.752.576 8.928.576 2.56 0 5.888-.192 9.984-.576 4.288-.384 7.872-.576 10.752-.576.64 0 .96.64.96 1.92z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(132 131)"></path><path d="m310.848 17.28c0 3.648-.816 6.288-2.448 7.92s-4.08 2.448-7.344 2.448c-3.328 0-6.528-3.2-9.6-9.6s-7.36-9.6-12.864-9.6c-8 0-14.016 4.032-18.048 12.096-4.544 9.024-8.576 26.496-12.096 52.416l-8.064 57.984c-.32 2.176-.48 3.536-.48 4.08v1.392c0 3.2 1.184 5.584 3.552 7.152s7.168 2.736 14.4 3.504c.64.192.96.768.96 1.728s-.208 1.808-.624 2.544-.976 1.104-1.68 1.104c-4.288 0-9.344-.16-15.168-.48s-10.624-.48-14.4-.48c-3.904 0-8.832.16-14.784.48s-11.072.48-15.36.48c-.64 0-.96-.576-.96-1.728 0-.832.208-1.616.624-2.352s.976-1.168 1.68-1.296c8.256-.96 13.808-2.512 16.656-4.656s4.656-5.968 5.424-11.472l6.72-47.232c1.408-9.408 2.304-15.424 2.688-18.048.896-5.888 1.68-10.512 2.352-13.872s1.488-6.608 2.448-9.744c-2.304 3.008-5.488 7.552-9.552 13.632s-8.048 12.192-11.952 18.336c-4.096 6.464-7.616 12.128-10.56 16.992l-37.632 62.976c-.64 1.024-1.664 1.536-3.072 1.536-1.28 0-2.048-.512-2.304-1.536l-9.792-101.184c-4.032 16.448-10.976 32.576-20.832 48.384-10.624 16.96-22.656 30.464-36.096 40.512-15.104 11.264-30.496 16.896-46.176 16.896-13.376 0-24.416-3.744-33.12-11.232-8.896-7.68-13.344-17.632-13.344-29.856 0-9.024 3.6-17.264 10.8-24.72s15.12-11.184 23.76-11.184c7.936 0 14.624 2.528 20.064 7.584s8.16 11.232 8.16 18.528c0 5.696-1.408 10.88-4.224 15.552-3.392 5.632-7.872 8.448-13.44 8.448-2.816 0-5.024-.976-6.624-2.928s-2.4-4.176-2.4-6.672c0-3.776 2.08-7.648 6.24-11.616s6.24-7.264 6.24-9.888c0-3.392-1.424-6.384-4.272-8.976s-6.096-3.888-9.744-3.888c-5.568 0-10.464 2.56-14.688 7.68-4.544 5.504-6.816 12.288-6.816 20.352 0 8.576 3.328 15.808 9.984 21.696s14.464 8.832 23.424 8.832c17.024 0 33.504-6.496 49.44-19.488 14.4-11.712 26.176-26.736 35.328-45.072s13.728-35.6 13.728-51.792c-3.712 0-7.872-.448-12.48-1.344-10.56-2.048-17.344-3.072-20.352-3.072-10.112 0-17.952 1.408-23.52 4.224s-8.352 7.104-8.352 12.864c0 2.368 1.248 4.352 3.744 5.952 5.44 3.456 8.16 6.528 8.16 9.216 0 3.008-.896 5.424-2.688 7.248s-4.48 2.736-8.064 2.736c-3.84 0-7.104-1.6-9.792-4.8s-4.032-7.36-4.032-12.48c0-9.152 3.936-17.056 11.808-23.712 8.512-7.232 19.424-10.848 32.736-10.848 4.544 0 10.4.64 17.568 1.92s12.64 1.92 16.416 1.92c2.112 0 4.128-.096 6.048-.288 5.824-.576 9.12-.864 9.888-.864 1.024 0 1.792.288 2.304.864s.768 1.568.768 2.976l9.024 100.992 25.536-41.28c12.352-20.352 22.72-35.968 31.104-46.848 9.536-12.352 18.528-21.28 26.976-26.784 8.704-5.696 18.016-8.544 27.936-8.544 6.08 0 11.792 1.808 17.136 5.424s8.016 7.568 8.016 11.856z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(358 112)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="161.152344" y="325">Swash flourish off</tspan></text><path d="m404.834697 251.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path><path d="m663.167334 149.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m444.167334 190.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Swashes can be used to provide typographic interest to headings or more artistic settings of text. They are typically exaggerated alternative character designs, or have some sort of typographic flourish. Select a particular swash by defining a <code>font-feature-values</code> rule using the set’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @swash { flourish: 1 }
}

font-variant-alternates: swash(flourish); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: swsh 1; /* low-level enable */
font-feature-settings: swsh 0; /* low-level disable */
</code></pre>
<h3>ornaments(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two ornamental glyphs shown side-by-side. The left ornament resembles a curving floral motif; the right ornament is a stylized leaf or vine flourish, demonstrating decorative glyph options." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(118 128)"><path d="m289.536 75.936c0 11.712-3.376 22.608-10.128 32.688s-15.952 18.032-27.6 23.856-24.32 8.736-38.016 8.736c-16.64 0-32.08-3.904-46.32-11.712s-24.528-18.4-30.864-31.776c2.048 4.352 3.072 8.928 3.072 13.728 0 8.192-2.912 15.2-8.736 21.024s-12.832 8.736-21.024 8.736c-8.768 0-16.24-3.104-22.416-9.312s-9.264-13.664-9.264-22.368c0-9.728 2.816-17.984 8.448-24.768s13.76-11.776 24.384-14.976c-5.696-4.032-12.8-7.408-21.312-10.128s-16.288-4.08-23.328-4.08c-14.144 0-26.384 4.608-36.72 13.824s-15.504 20.672-15.504 34.368c2.368-1.28 5.248-1.92 8.64-1.92 5.376 0 9.984 1.92 13.824 5.76s5.76 8.448 5.76 13.824-1.92 10.016-5.76 13.92-8.448 5.856-13.824 5.856c-6.592 0-12.048-2.784-16.368-8.352s-6.48-13.024-6.48-22.368c0-10.624 3.056-20.656 9.168-30.096s14.336-16.976 24.672-22.608 21.2-8.448 32.592-8.448c6.464 0 14.672 1.328 24.624 3.984s17.52 5.712 22.704 9.168c-2.688-4.224-5.056-9.28-7.104-15.168s-3.072-10.848-3.072-14.88c0-8.192 3.072-15.36 9.216-21.504s13.312-9.216 21.504-9.216 15.2 2.912 21.024 8.736 8.736 12.832 8.736 21.024c0 5.696-1.536 11.008-4.608 15.936 2.56-.768 4.16-1.152 4.8-1.152 7.104 0 13.456 2.176 19.056 6.528s12.464 13.696 20.592 28.032c8 14.208 14.848 23.536 20.544 27.984s12.064 6.672 19.104 6.672c7.104 0 13.584-1.824 19.44-5.472s10.656-8.784 14.4-15.408 5.616-12.848 5.616-18.672c0-5.888-1.568-10.688-4.704-14.4s-7.136-5.568-12-5.568c-3.072 0-5.6.976-7.584 2.928s-2.976 4.432-2.976 7.44c0 1.92.256 3.712.768 5.376-4.096 0-7.376-1.248-9.84-3.744s-3.696-5.728-3.696-9.696c0-4.352 1.712-8.08 5.136-11.184s7.504-4.656 12.24-4.656c8.768 0 15.824 3.104 21.168 9.312s8.016 14.272 8.016 24.192zm-45.984 45.888c-5.696 0-10.944-1.12-15.744-3.36s-9.328-5.68-13.584-10.32-9.648-12.752-16.176-24.336c-7.36-12.992-13.408-21.456-18.144-25.392s-9.952-5.904-15.648-5.904c-.768 0-2.048.128-3.84.384-1.984.256-3.392.384-4.224.384-2.048 0-3.072-1.024-3.072-3.072 0-.448.096-.896.288-1.344 2.88-5.952 4.32-11.744 4.32-17.376 0-6.784-2.128-12.384-6.384-16.8s-9.936-6.624-17.04-6.624c-6.848 0-12.656 2.336-17.424 7.008s-7.152 10.464-7.152 17.376c0 4.352 1.424 10.288 4.272 17.808s5.712 13.264 8.592 17.232c7.872 0 15.824 2.112 23.856 6.336s19.088 12.928 33.168 26.112c11.712 11.008 20.496 18.176 26.352 21.504s11.472 4.992 16.848 4.992c9.472 0 16.384-1.536 20.736-4.608z"></path><path d="m564.672 88.032c-3.264.192-8.64 1.152-16.128 2.88-11.392 2.56-20.448 3.84-27.168 3.84s-13.376-.896-19.968-2.688c4.736 4.736 7.104 11.136 7.104 19.2 0 6.72-2.336 12.4-7.008 17.04s-10.336 6.96-16.992 6.96c-6.464 0-12.016-2.4-16.656-7.2s-6.96-10.784-6.96-17.952c0-2.176.192-4.416.576-6.72 4.288 5.76 8.96 8.64 14.016 8.64 7.04 0 10.56-3.776 10.56-11.328 0-5.632-2.88-11.44-8.64-17.424s-13.216-10.656-22.368-14.016-19.168-5.04-30.048-5.04c-15.488 0-27.968 3.408-37.44 10.224s-14.816 16.08-16.032 27.792c1.216-.384 3.072-1.024 5.568-1.92 12.096-4.224 23.84-6.336 35.232-6.336 10.816 0 19.152 2.368 25.008 7.104s8.784 11.456 8.784 20.16c0 8.256-3.776 15.408-11.328 21.456s-16.96 9.072-28.224 9.072c-13.376 0-24.112-3.472-32.208-10.416s-12.816-16.72-14.16-29.328c-2.56.512-5.888.768-9.984.768-24.32 0-36.48-9.28-36.48-27.84 0-6.208 1.456-12.096 4.368-17.664s7.088-10.496 12.528-14.784 9.28-6.432 11.52-6.432c1.984 0 3.76 2 5.328 6s2.352 8.112 2.352 12.336-.768 6.4-2.304 6.528c-16.64 1.6-24.96 7.168-24.96 16.704 0 12.672 9.216 19.008 27.648 19.008 3.456 0 6.656-.448 9.6-1.344 0-12.928 3.424-24.736 10.272-35.424s16.368-19.184 28.56-25.488 25.008-9.456 38.448-9.456c10.24 0 23.104.8 38.592 2.4 9.024.96 15.232 1.44 18.624 1.44 12.032 0 18.048-4.032 18.048-12.096 0-3.392-1.168-6.064-3.504-8.016s-5.392-2.928-9.168-2.928c-2.432 0-5.184.512-8.256 1.536 6.72-11.52 14.528-17.28 23.424-17.28 6.72 0 12.304 2.192 16.752 6.576s6.672 9.872 6.672 16.464c0 6.72-2.208 12.592-6.624 17.616s-10.336 8.208-17.76 9.552c6.528 2.112 12.656 5.056 18.384 8.832s12.688 9.856 20.88 18.24c5.184 5.312 9.024 8.896 11.52 10.752zm-32.544-64.992c0-5.056-1.6-9.136-4.8-12.24s-7.36-4.656-12.48-4.656c-4.16 0-7.936 1.6-11.328 4.8 4.032 0 7.536 1.584 10.512 4.752s4.464 6.832 4.464 10.992c0 8.96-3.392 15.36-10.176 19.2 15.872-2.432 23.808-10.048 23.808-22.848zm19.2 60.96c-10.944-11.2-19.712-18.688-26.304-22.464 2.56 2.56 3.84 5.824 3.84 9.792 0 3.456-1.008 6.8-3.024 10.032s-4.656 5.648-7.92 7.248h3.456c7.36 0 17.344-1.536 29.952-4.608zm-48.96 27.264c0-8.192-2.88-14.464-8.64-18.816.256 2.56.384 4.352.384 5.376 0 6.272-1.744 11.264-5.232 14.976s-7.952 5.568-13.392 5.568c-2.624 0-5.184-.832-7.68-2.496.96 3.904 2.992 7.088 6.096 9.552s6.64 3.696 10.608 3.696c5.056 0 9.296-1.696 12.72-5.088s5.136-7.648 5.136-12.768zm-63.168 9.984c0-6.656-2.32-11.84-6.96-15.552s-11.28-5.568-19.92-5.568c-9.344 0-20.096 2.048-32.256 6.144-3.968 1.344-6.88 2.24-8.736 2.688.384 24.448 12.128 36.672 35.232 36.672 9.344 0 17.12-2.448 23.328-7.344s9.312-10.576 9.312-17.04z"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="360.40625" y="328">Ornaments</tspan></text></g></svg></figure></p>
<p>This replaces default glyphs with ornaments, if they are provided in the font.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @ornaments { fleurons: 1 }
}

font-variant-alternates: ornaments(fleurons); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: ornm 1; /* low-level enable */
font-feature-settings: ornm 0; /* low-level disable */
</code></pre>
<h3>annotation(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Examples of annotation characters: the number &#x27;1&#x27; inside a circle, the number &#x27;2&#x27; inside a filled circle, and the letter &#x27;B&#x27; inside a square, demonstrating typographic annotations." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="356.761719" y="331">Annotations</tspan></text><g fill="#f5f5f5"><g transform="translate(135 125)"><path d="m96.2851658 149.786822c-5.8728125 1.392886-11.8359644 2.013304-17.871995 2.004236-15.6613395-.100957-30.2052049-4.051924-42.9202692-13.450657-17.1629455-12.686493-26.19991038-30.10559-28.3642574-51.2578961-1.33231464-13.0188608.17005041-25.7145232 5.2996515-37.7882388 9.6670625-22.7545451 26.7024701-36.6016497 50.7570123-41.56041528 15.608958-3.21746717 30.931715-1.80853593 45.533276 4.58208278 19.415354 8.497139 32.254161 23.2435451 38.168727 43.6631153 6.729138 23.229792 4.157884 45.4571341-9.291282 65.7949491-9.871274 14.928253-24.035563 23.915157-41.3108632 28.012824m-17.793043-149.78681688c-44.5038637.01528638-78.55797763 34.32704078-78.49202717 79.08429358.06690142 44.7381513 33.97070287 78.8367323 78.46545677 78.9155663 44.5334706.078563 78.5435536-34.126987 78.5344456-78.98586-.009112-44.8718622-33.947075-79.029276-78.5078752-79.01399988"></path><path d="m84.9950732 73.4206697c0 9.9612311.0464499 19.9224623-.0418809 29.8821703-.0167524 1.807187.5718657 2.232138 2.2646186 2.19863 4.9465242-.096719 9.8968558.03427 14.8426181-.071587 1.577771-.034271 2.139738.534616 2.247105 2.002908.097469 1.323595.252048 2.664705.586334 3.944891.370837 1.421836-.259662 1.605373-1.430807 1.593188-3.6154701-.03884-7.2317022-.012947-10.8471728-.012947-11.7997751 0-23.5995501-.040362-35.3985638.042077-1.7970746.011994-2.2372056-.557654-2.2166459-2.257461.0647252-5.273817.0038074-5.273817 5.2891868-5.273817 4.9480471 0 9.8960942-.035031 14.8433799.021324 1.2960259.015231 1.7650928-.362503 1.7628084-1.717322-.0380736-17.447386-.0357892-34.8947718-.0030459-52.3421576.0022845-1.41879-.3731214-1.603088-1.6204131-1.0418168-5.665354 2.5497096-11.3748735 5.0011777-17.0318514 7.5676417-1.3280077.6023956-1.9090111.6671284-2.1427831-1.0600943-.7340593-5.4147059-.7987844-5.4078519 4.2345476-7.6773067 5.6036748-2.5276243 11.2187717-5.0308787 16.8117859-7.5821114 2.3240135-1.0600944 4.7454955-.4622682 7.1235736-.5239547.948033-.02437.7081692.8994047.7119766 1.4736225.0243671 3.806287.014468 7.6133355.0152294 11.4196225z"></path></g><path d="m103.982569 114.119306c-16.9549887-.038983-33.9099778-.045096-50.8657264-.018353-1.333675.002292-1.8683602-.468369-1.6860812-1.779495.0174684-.124542 0-.253668.0022785-.381266.0394938-2.668096-.66304-5.669321.3326593-7.908016.9615219-2.161524 3.6524163-3.558989 5.6187515-5.2513807 8.7007864-7.4877833 17.4342311-14.9365994 26.1099541-22.4526529 2.6453247-2.2906504 5.0377371-4.8555981 6.5741976-8.0677043 3.2840607-6.8704232-.2544312-14.0739762-7.8091381-15.9703719-4.8865974-1.2263156-9.6623083-.6853614-14.3658672.9481978-3.9653287 1.3775993-7.712682 3.2136343-11.2056042 5.5424877-1.1802568.7869813-1.5683593.5294933-1.7384864-.8053187-.3440517-2.7124113-.7830404-5.4125976-1.1787378-8.1188964-.1048105-.7159237-.107089-1.361554.6326601-1.8291585 10.972439-6.9422447 22.7036145-10.4347607 35.3818815-6.0024515 15.7967577 5.5210941 19.6853777 23.353479 8.1980001 35.8435598-5.53065 6.0131484-12.1549743 10.7403846-18.404867 15.9084831-3.8058346 3.1479252-7.6671123 6.2263205-11.6916817 9.4888555.9584839.478301 1.6579798.309444 2.3286147.310208 10.502311.012989 21.0046219.049664 31.5054136-.033619 1.623803-.012225 2.212412.478301 2.398489 2.053028.275697 2.33191.75266 4.641662 1.194687 6.951413.221013 1.152202-.093418 1.575491-1.331397 1.572451m-25.5623571-114.11924338c-44.4996312.05354693-78.28884951 34.06871228-78.41984839 78.94269148-.12874876 44.7402689 33.95819199 79.0709909 78.49655749 79.0572419 44.611277-.015285 78.537205-34.172566 78.503053-79.0389045-.034203-44.8793276-34.004941-79.01445029-78.5797621-78.96102888" transform="translate(327 125)"></path><g transform="translate(519 130)"><path d="m132.611253 131.327999c.002299 1.828575-.361673 2.477399-2.394549 2.473613-37.7273586-.067714-75.4554838-.049458-113.1828428-.05098-2.4504853-.00076-2.4589141-.007606-2.4596804-2.542813-.0015325-19.200032-.0015325-38.4008232-.0015325-57.6016149 0-19.2639246 0-38.5278493.0015325-57.7925346 0-2.6165956.0068963-2.6219201 2.5799825-2.6219201 37.664526-.0007606 75.3275195.0144521 112.9912797-.0433715 1.915639-.0030274 2.476538.4533555 2.473485 2.4043927-.057482 38.5917429-.054417 77.1834858-.007675 115.7752284m14.388747-128.50603104c0-2.80143073-.003065-2.80675519-2.769248-2.80675519-47.2373564-.00608511-94.4754794-.01140958-141.71360247-.01521277-2.51178574 0-2.51714953.00608511-2.51714953 2.51999457.00383128 47.27214683.00842881 94.54353293.01532511 141.81567943 0 2.662234.00536379 2.664326 2.69645333 2.664326h141.71360256c2.570021 0 2.574619-.002852 2.574619-2.553272 0-23.635313 0-47.2713867 0-70.90746 0-23.5721798 0-47.1451203 0-70.71730004"></path><path d="m85.4049476 89.4742556c-.8535663 2.7932875-2.8207817 4.4974212-5.5489522 5.3399742-5.0071768 1.545822-10.183369 1.0214146-15.3086251 1.0754537-1.1244538.0114167-.9284269-.8410307-.9322857-1.498633-.0185222-2.7247873-.0084893-5.4495745-.0077176-8.1743618 0-2.7247873.0077176-5.4495745-.0047635-8.1751229-.0029541-.822764.0379492-1.5077664 1.1870994-1.4796051 4.1049897.1027503 8.2285017-.2793288 12.3064799.4734127 6.7675607 1.2489877 10.1694774 6.3522555 8.3087648 12.4388822m-20.3759992-40.3161959c1.6044883.0380557 3.211292.0106556 4.8165521.0091333 2.309105.0167445 4.6205253-.0829614 6.9087927.3904514 4.1906551.8676697 6.51288 3.472201 6.7374621 7.6217932.2029728 3.7758854-1.9209099 6.7609735-5.7874259 7.9856056-4.2508523 1.3456491-8.648339.8707141-13.0018354.9026809-.8335005.0060889-1.0943552-.4718905-1.0928117-1.2208265.0077176-4.8140445.0208375-9.6280891-.0116607-14.4413725-.0076333-1.0541425.514848-1.2695377 1.4309268-1.2474654m29.1061447 23.724677c-1.5659004-.9491088-3.2938703-1.639439-4.9608712-2.455353.3225955-.63553.9438621-.7101191 1.4223531-.9734645 9.508079-5.2395071 11.351813-18.8596379 3.4582551-26.2622303-4.2076338-3.9448526-9.5520696-5.3978188-15.158132-5.8171925-9.5621025-.7154469-19.1519883-.1461338-28.726439-.3562012-1.7001865-.0372946-2.1694164.4528627-2.1655576 2.1273129.0540231 22.2557275.0571102 44.511455-.0046663 66.7671829-.0053666 1.752845.6020083 2.102196 2.2126707 2.086727 7.392686-.074343 14.7876873-.022587 22.1811451-.05227 4.9593278-.019789 9.8970462-.298357 14.6811845-1.75589 7.5053629-2.286385 13.0404235-6.4763167 14.5106255-14.6088173 1.494899-8.2649343-1.070431-14.8303016-7.4505679-18.699804"></path></g></g></g></svg></figure></p>
<p>Annotations are notational forms of glyphs (for example, glyphs placed in open or solid circles, squares, parentheses, diamonds, rounded boxes. etc.).</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @ornaments { circles: 1 }
}

font-variant-alternates: annotation(circles); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: nalt 1; /* low-level enable */
font-feature-settings: nalt 0; /* low-level disable */
</code></pre>
<h2>Further Resources</h2>
<p>There is a huge amount to learn about typography on the web including font variants and much more. Check out the following excellent resources for more information:</p>
<ul>
<li><a href="https://www.w3.org/TR/css-fonts-4/" target="_blank" rel="noreferrer">CSS Fonts Module Level 4 Spec</a></li>
<li><a href="http://book.webtypography.net/" target="_blank" rel="noreferrer">Web Typography, by Richard Rutter</a></li>
<li><a href="https://helpx.adobe.com/typekit/using/open-type-syntax.html" target="_blank" rel="noreferrer">Guide to OpenType Syntax in CSS, from Adobe</a></li>
<li><a href="https://www.microsoft.com/typography/otspec/features_ae.htm" target="_blank" rel="noreferrer">OpenType Layout Tag Registry, from Microsoft</a></li>
</ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Component Reusability in React & Vue]]></title>
            <link>https://www.jonathanharrell.com/blog/component-reusability-in-react-vue</link>
            <guid>https://www.jonathanharrell.com/blog/component-reusability-in-react-vue</guid>
            <pubDate>Mon, 06 Aug 2018 19:55:00 GMT</pubDate>
            <description><![CDATA[Learn how to use render props in React and scoped slots in Vue to create components that are flexible and reusable.]]></description>
            <content:encoded><![CDATA[<p>One of the issues all front-end developers face is how to make UI components reusable. How do we craft components in such a way that satisfies the narrow use case that is clear to us now, while also making them reusable enough to work in a variety of circumstances? Render props and scoped slots provide a solution.</p>
<p>Let’s say we are building an autocomplete component:</p>

<p>Take a look at the initial React component code:</p>
<pre><code class="language-jsx">class Autocomplete extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      results: props.options
    }
  }

  searchList(event) {
    const results = this.props.options
      .filter(option =&gt;
        option.toLowerCase().includes(
          event.target.value.toLowerCase()
        )
      )
    this.setState({ results })
  }

  render() {
    return (
      &lt;div className=&quot;autocomplete&quot;&gt;
        &lt;input
          type=&quot;text&quot;
          placeholder=&quot;Type to search list&quot;
          onChange={searchList}
        /&gt;
        &lt;div className=&quot;autocomplete-dropdown&quot;&gt;
          &lt;ul className=&quot;autocomplete-search-results&quot;&gt;
            {this.state.results.map(option =&gt; (
              &lt;li class=&quot;autocomplete-search-result&quot;&gt;
                {option}
              &lt;/li&gt;
            ))}
          &lt;/ul&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<p>In this component, we have some logic that controls the core search behavior, but we also specify how the input and search results will be rendered. In this instance, we render a div that serves as a dropdown container and an unordered list containing a list item for each result within it.</p>
<p>Think about how you would reuse this component. Sure, you could use this very same component if you want to reproduce exactly the same behavioral and visual result. But what if you want to reuse the same behavior, but visualize the component slightly differently? What if you want to reuse the core search behavior but add a few modifications for a slightly different use case?</p>
<p>Imagine that instead of a dropdown containing the search results, you want a tag-like list of search results that always display:</p>

<p>At their core, the functionality of these two components is very similar: type into an input to filter a list.</p>
<p>This is a perfect use case for some relatively new tools that modern JavaScript frameworks now provide. These are <em>render props</em> in React and <em>scoped slots</em> in Vue. They work very similarly and provide a way to separate the <strong>behavior</strong> of a component from its <strong>presentation</strong>.</p>
<h2>Render props in React</h2>
<p>First, let’s look at how we would restructure our autocomplete component using render props in React. We will now have two components — one for our Autocomplete component and one for a core SearchSelect component.</p>
<p>Let’s look at the SearchSelect component first:</p>
<pre><code class="language-jsx">class SearchSelect extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      results: props.options
    }
  }

  searchList(event) {
    const results = this.props
      .filterMethod(
        this.props.options,
        event.target.value
      )
    this.setState({ results })
  }

  render() {
    return this.props.render({
      results: this.state.results,
      searchList: (event) =&gt; this.searchList(event)
    })
  }
}
</code></pre>
<p>This is a <em>renderless</em> component (one that doesn’t render any markup of its own). Rather, it returns the result of a special prop called a <em>render prop</em>. This render prop accepts an object, into which you can pass any data that you would like the parent component to have access to.</p>
<p>Our <code>SearchSelect</code> component is handling the lowest level functionality — filtering a list of options based on a query string. It is then using the special render prop to render an element.</p>
<p>In the parent, we pass a function to the render prop of the <code>SearchSelect</code> component. This function returns a React element, which we can hydrate with state and behavior from the <code>SearchSelect</code> component itself. Basically, this means we are able to access data from the child component in the parent.</p>
<pre><code class="language-jsx">import SearchSelect from &#x27;./search-select&#x27;

class Autocomplete extends React.Component {
  constructor(props) {
    super(props)
  }

  filterMethod (options, query) {
    return options.filter(option =&gt;
      option.toLowerCase().includes(
        query.toLowerCase()
      )
    )
  }

  render() {
    return (
      &lt;SearchSelect
        options={this.props.options}
        filterMethod={this.filterMethod}
        render={({results, searchList}) =&gt; (
          &lt;div&gt;
            &lt;input
              type=&quot;text&quot;
              placeholder=&quot;Type to search list&quot;
              onChange={searchList}
            /&gt;
            &lt;ul&gt;
              {results.map(option =&gt; (
                &lt;li&gt;{option}&lt;/li&gt;
              ))}
            &lt;/ul&gt;
          &lt;/div&gt;
        )}
      /&gt;
    )
  }
}
</code></pre>
<p>The key to making this work is the arguments we pass to the render prop function. See how we are destructuring a single object and using those destructured properties inside our markup? This object should be passed as an argument when you call <code>this.props.render()</code> in the child component.</p>
<p>All this means that we can write whatever markup we want, as long as we properly hydrate it with the data and behavior exposed by the <code>SearchSelect</code> component.</p>
<p>Also, note how we are passing the method for filtering our list in as a prop. This will allow us to change the way our list of options is filtered, while still using the <code>SearchSelect</code> component.</p>
<h2>Implementing the Tag List Variant</h2>
<p>Let’s look at how we would implement our tag-like list component. We use the same SearchSelect core component and just change the markup rendered by the render prop:</p>
<pre><code class="language-jsx">import SearchSelect from &#x27;./search-select&#x27;

class TagListSearch extends React.Component {
  constructor(props) {
    super(props)
  }

  filterMethod(options, query) {
    return options.filter(option =&gt;
      option.toLowerCase().includes(
        query.toLowerCase()
      )
    )
  }

  render() {
    return (
      &lt;SearchSelect
        options={this.props.options}
        filterMethod={this.filterMethod}
        render={({ results, searchList }) =&gt; (
          &lt;div className=&quot;tag-list-search&quot;&gt;
            &lt;input
              type=&quot;text&quot;
              placeholder=&quot;Type to search list&quot;
              onChange={searchList}
            /&gt;
            &lt;ul className=&quot;tag-list&quot;&gt;
              {results.map(result =&gt; (
                &lt;li className=&quot;tag&quot; key={result}&gt;
                  {result}
                &lt;/li&gt;
              ))}
            &lt;/ul&gt;
          &lt;/div&gt;
        )}
      /&gt;
    )
  }
}
</code></pre>
<h2>Scoped slots in Vue</h2>
<p>Now let’s look at how we would implement this in Vue using scoped slots. First, here’s our search select component (for this example I am using globally registered components but you should probably use single file components in a real project):</p>
<pre><code class="language-javascript">Vue.component(&#x27;search-select&#x27;, {
  props: [
    &#x27;options&#x27;,
    &#x27;filterMethod&#x27;
  ],

  data() {
    return {
      query: &#x27;&#x27;
    }
  },

  computed: {
    results() {
      return this.filterMethod(
        this.options,
        this.query
      )
    }
  },

  methods: {
    setQuery(event) {
      this.query = event.target.value
    }
  },

  render() {
    return this.$scopedSlots.default({
      results: this.results,
      searchList: (event) =&gt; {
        this.setQuery(event)
      }
    })
  }
})
</code></pre>
<p>As you can see, this looks very similar to the render prop in our React component. Here, we are returning a default <em>scoped slot</em>, which passes along an object with whatever we want. Here, we give it the results and our search method.</p>
<p>In our <code>autocomplete</code> component, we use the <code>slot-scope</code> attribute to get access to the data from the child component. We can destructure the properties that come through for easier access, in much the same way as in our React render prop argument:</p>
<pre><code class="language-javascript">Vue.component(&#x27;autocomplete&#x27;, {
  data() {
    return {
      dropdownVisible: false
    }
  },

  methods: {
    filterMethod(options, query) {
      return options.filter(option =&gt;
        option.toLowerCase().includes(
          query.toLowerCase()
        )
      )
    },

    showDropdown() {
      this.dropdownVisible = true
    },

    hideDropdown() {
      this.dropdownVisible = false
    }
  },

  template: html`
    &lt;search-select
      :options=&quot;options&quot;
      :filterMethod=&quot;filterMethod&quot;
    &gt;
      &lt;div slot-scope=&quot;{ results, searchList }&quot;&gt;
        &lt;div class=&quot;autocomplete&quot;&gt;
          &lt;input
            type=&quot;text&quot;
            placeholder=&quot;Type to search list&quot;
            @input=&quot;searchList&quot;
            @focus=&quot;showDropdown&quot;
            @blur=&quot;hideDropdown&quot;
          /&gt;
          &lt;div
            v-if=&quot;dropdownVisible&quot;
            class=&quot;autocomplete-dropdown&quot;
          &gt;
            &lt;ul class=&quot;autocomplete-search-results-list&quot;&gt;
              &lt;li
                class=&quot;autocomplete-search-result&quot;
                v-for=&quot;result in results&quot;
                :key=&quot;result&quot;
              &gt;
                {{ result }}
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/search-select&gt;
  `
})
</code></pre>
<h2>Other uses for render props &amp; scoped slots</h2>
<p>Creating reusable interface components isn’t the only use for render props and scoped slots. Here are some other ideas for how you can use them to encapsulate reusable behavior in a component that can then be exposed to its parent.</p>
<h3>Data provider components</h3>
<p>You can use render props/scoped slots to create a component that handles asynchronously fetching data and exposing that data to its parent. This allows you to hide the logic for hitting an endpoint, getting the result and handling possible errors, as well as displaying a loading state to users while the data fetch is in progress.</p>
<p>Here’s what the base component could look like:</p>
<pre><code class="language-jsx">class FetchData extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      loading: false,
      results: [],
      error: false
    }
  }

  componentDidMount() {
    this.fetchData(this.props.url)
  }

  fetchData(url) {
    this.setState({ loading: true })

    fetch(url)
      .then(data =&gt; data.json())
      .then(json =&gt; {
        this.setState({
          loading: false,
          results: json
        })
      })
      .catch(error =&gt; {
        this.setState({
          loading: false,
          error: true
        })
      })
  }

  render() {
    return this.props.render({
      loading: this.state.loading,
      results: this.state.results,
      error: this.state.error
    })
  }
}
</code></pre>
<p>It accepts a URL as a prop and handles the actual fetching logic. Then, we use it in a parent component:</p>
<pre><code class="language-jsx">class App extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    return (
      &lt;div className=&quot;wrapper&quot;&gt;
        &lt;FetchData
          url=&quot;https://...&quot;
          render={({ loading, results, error }) =&gt; (
            &lt;div&gt;
              {loading &amp;&amp; (
                &lt;p&gt;Loading...&lt;/p&gt;
              )}
              {results.length &gt; 0 &amp;&amp; (
                &lt;div className=&quot;results&quot;&gt;
                  {results.map(result =&gt; (
                    &lt;p key={result.id}&gt;
                      {result.title}
                    &lt;/p&gt;
                  ))}
                &lt;/div&gt;
              )}
              {error &amp;&amp; (
                &lt;p&gt;There was a problem loading.&lt;/p&gt;
              )}
            &lt;/div&gt;
          )}
        /&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<h2>Observers (resize, intersection, etc.)</h2>
<p>You can also use render props/scoped slots to create a component that acts as a wrapper around resize or intersection observers. This component can simply expose the current size or intersection point of an element to a parent component. You can then perform whatever logic you need based on that data in the parent, preserving a nice separation of concerns.</p>
<p>Here is a base component that observes its own size and exposes its height and width to its parent:</p>
<pre><code class="language-jsx">class ObserveDimensions extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      width: null,
      height: null
    }
    this.elementToObserve = React.createRef()
  }

  componentDidMount(nextProps) {
    const erd = elementResizeDetectorMaker({
      strategy: &#x27;scroll&#x27;
    })

    erd.listenTo(
      this.elementToObserve.current,
        element =&gt; {
        this.setState({
          width: element.offsetWidth,
          height: element.offsetHeight
        })
      }
    )
  }

  render() {
    return (
      &lt;div
        className=&quot;observed-element&quot;
        ref={this.elementToObserve}
      &gt;
        {this.props.render({
          width: this.state.width,
          height: this.state.height
        })}
      &lt;/div&gt;
    )
  }
}
</code></pre>
<p>We are using the <a href="https://github.com/wnr/element-resize-detector" target="_blank" rel="noreferrer">Element Resize Detector</a> library to listen to changes in our element size, and a React ref to get a reference to the actual DOM node.</p>
<p>We can then use this component quite easily in our app:</p>
<pre><code class="language-jsx">class App extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    return (
      &lt;div className=&quot;wrapper&quot;&gt;
        &lt;ObserveDimensions
          render={({ width, height }) =&gt; (
            &lt;div&gt;
              Width: {width}px
              Height: {height}px
            &lt;/div&gt;
          )}
        /&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<h2>Conclusion</h2>
<p>The key to successfully creating reusable components using both render props and scoped slots is being able to correctly separate <strong>behavior</strong> from <strong>presentation</strong>. Each time you create a new UI component, think “What is the core behavior of this component? Can I use this anywhere else?”</p>
<p>Having a core set of renderless components that use render props or scoped slots can help you cut down on code duplication in your app and think more carefully about your core interface behaviors.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Component Variants with Scoped CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/component-variants-with-scoped-css-variables</link>
            <guid>https://www.jonathanharrell.com/blog/component-variants-with-scoped-css-variables</guid>
            <pubDate>Thu, 12 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Scoped CSS variables provide an incredibly easy and clean way to create variants of common interface components like buttons.]]></description>
            <content:encoded><![CDATA[<p>Generating variants of common interface components like buttons, inputs, cards, etc., has typically involved multiple class names, pre-processor mixins, or repeated code. Now, component variants can be created in a clean and straightforward manner using CSS variables.</p>
<p>Let’s take buttons as an example. I want to create a set of different buttons, including common variants like “primary” and “secondary”.</p>
<h2>Base Styling</h2>
<p>I’m going to start by giving these buttons some base styling. I can give the <code>button</code> a base class and then add additional classes for each variant.</p>
<pre><code class="language-html">&lt;button class=&quot;button is-primary&quot;&gt;Primary&lt;/button&gt;
&lt;button class=&quot;button is-secondary&quot;&gt;Secondary&lt;/button&gt;
</code></pre>
<pre><code class="language-css">.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  height: 2.5rem;
  padding: 0 1rem;
  border-radius: 4px;
}
</code></pre>
<h2>Defining Variables</h2>
<p>Next, I’m going to define some variables on the <code>:root</code>. These will be the properties that need to change with each variant.</p>
<pre><code class="language-css">:root {
  --button-background-color: gray;
  --button-border-color: gray;
  --button-text-color: black;
}
</code></pre>
<p>I will use these to add color to my base styling:</p>
<pre><code class="language-css">.button {
  /* ... */
  background-color: var(--button-background-color);
  border: 1px solid var(--button-border-color);
  color: var(--button-text-color);
}
</code></pre>
<h2>Overriding Variables for Component Variants</h2>
<p>Finally, I will override these variable values within each variant selector.</p>
<pre><code class="language-css">.button.is-primary {
  --button-background-color: orange;
  --button-border-color: orange;
  --button-text-color: white;
}

.button.is-secondary {
  --button-background-color: black;
  --button-border-color: black;
  --button-text-color: white;
}
</code></pre>
<h2>Alternate Selector Scheme</h2>
<p>If I wanted to simplify my classes further, I could use only one class to define both the base styling and the variants.</p>
<pre><code class="language-html">&lt;button class=&quot;button-primary&quot;&gt;Primary&lt;/button&gt;
&lt;button class=&quot;button-secondary&quot;&gt;Secondary&lt;/button&gt;
</code></pre>
<p>Here I’m nesting variant selectors with PostCSS:</p>
<pre><code class="language-css">[class^=&#x27;button&#x27;] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  height: 2.5rem;
  padding: 0 1rem;
  background-color: var(--button-background-color);
  border: 1px solid var(--button-border-color);
  border-radius: 4px;
  color: var(--button-text-color);

  &amp;[class*=&#x27;primary&#x27;] {
    --button-background-color: orange;
    --button-border-color: orange;
    --button-text-color: white;
  }

  &amp;[class*=&#x27;secondary&#x27;] {
    --button-background-color: black;
    --button-border-color: black;
    --button-text-color: white;
  }
}
</code></pre>
<h2>Browser Support for CSS Variables</h2>
<p>For browsers that do not support custom properties, you can use the <a href="https://github.com/postcss/postcss-custom-properties" target="_blank" rel="noreferrer">PostCSS custom properties</a> plugin. This will compile the CSS variables as static values.</p>
<p>Keep in mind, however, that this will not allow you to override the variable values, as the variables will no longer exist in the browser, having already been evaluated during the CSS build.</p>
<p>The technique for component variants described in this article is future-looking and, as more and more browsers fully support custom properties, will be able to be used in production sites.</p>
<aside><p>You can learn more about CSS variables in <a href="https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties" target="_blank" rel="noreferrer">my article here</a>.</p></aside>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Contextual Callouts with CSS Grid]]></title>
            <link>https://www.jonathanharrell.com/blog/contextual-callouts-with-css-grid</link>
            <guid>https://www.jonathanharrell.com/blog/contextual-callouts-with-css-grid</guid>
            <pubDate>Thu, 10 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Using the power of CSS grid, it is now easier than ever before to create callouts — small paragraphs that sit next to the primary text and offer additional information.]]></description>
            <content:encoded><![CDATA[<p>At long last, contextual callouts are possible with CSS grid. <dfn>Contextual callouts</dfn> are small paragraphs that sit beside primary text and offer secondary information to a reader. They have long been a feature of books, magazines and other printed materials. I enjoy coming across these small asides while reading, as they add texture and interest to the content.</p>
<p>I&#x27;ve been searching for a while now for a way to bring these to the web with pure CSS. The solutions in the past have typically been fairly messy, requiring complex floats and clearing, or manual absolute positioning. That is changing now, thanks to CSS grid.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="CSS grid layout showing white horizontal content blocks arranged in a 13-column structure. Two content groupings are present—one near the top and one near the bottom—each spanning columns 3 to 9. A nested grid figure with a centered dark gray block spans across the middle columns." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path>
        <path d="m400-139.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 269.5 530.5)"></path>
        <path d="m400-46.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 176.5 623.5)"></path>
        <path d="m400 43.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 86.5 713.5)"></path>
        <path d="m400 56.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 73.5 726.5)"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 165 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 211 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 533 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 579 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 625 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path>
        <g fill="#f5f5f5">
            <path d="m314 131h173v3h-173z"></path>
            <path d="m314 141h173v3h-173z"></path>
            <path d="m314 151h173v3h-173z"></path>
            <path d="m314 161h173v3h-173z"></path>
            <path d="m314 171h173v3h-173z"></path>
            <path d="m314 181h173v3h-173z"></path>
            <path d="m314 191h173v3h-173z"></path>
            <path d="m314 201h173v3h-173z"></path>
            <path d="m314 211h115v3h-115z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 131h81v3h-81z"></path>
            <path d="m222 141h81v3h-81z"></path>
            <path d="m241 151h62v3h-62z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 327h81v3h-81z"></path>
            <path d="m222 337h81v3h-81z"></path>
            <path d="m241 347h62v3h-62z"></path>
        </g>
        <path d="m314 314h113v3h-113z" fill="#f5f5f5"></path>
        <g fill="#f5f5f5">
            <path d="m314 327h173v3h-173z"></path>
            <path d="m314 337h173v3h-173z"></path>
            <path d="m314 347h173v3h-173z"></path>
            <path d="m314 357h173v3h-173z"></path>
            <path d="m314 367h173v3h-173z"></path>
            <path d="m314 377h115v3h-115z"></path>
        </g>
        <path d="m314 224h173v81h-173z" fill="#525252"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 257 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 303 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 349 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 395 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 441 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 487 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g fill="#e6594c" fill-opacity="0.5">
            <path d="m626 95h9v317h-9z" opacity=".25"></path>
            <path d="m258 95h9v317h-9z" opacity=".25"></path>
            <path d="m304 95h9v317h-9z" opacity=".25"></path>
            <path d="m350 95h9v317h-9z" opacity=".25"></path>
            <path d="m396 95h9v317h-9z" opacity=".25"></path>
            <path d="m442 95h9v317h-9z" opacity=".25"></path>
            <path d="m488 95h9v317h-9z" opacity=".25"></path>
            <path d="m534 95h9v317h-9z" opacity=".25"></path>
            <path d="m580 95h9v317h-9z" opacity=".25"></path>
            <path d="m166 95h9v317h-9z" opacity=".25"></path>
            <path d="m212 95h9v317h-9z" opacity=".25"></path>
        </g>
    </g>
</svg></figure></p>
<h2>The Grid Markup</h2>
<p>Say I’m building a blog post template. First, I’ll need a <code>header</code> to contain the title. Then I’ll need the primary blog content, consisting of headings, paragraphs, images, and callouts. First let’s write some semantic markup:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post&quot;&gt;
  &lt;header&gt;
    &lt;h1&gt;Article Heading&lt;/h1&gt;
  &lt;/header&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
  &lt;figure&gt;
    &lt;img src=&quot;image.jpg&quot; alt=&quot;Alt text&quot;/&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Section Heading&lt;/h2&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
  &lt;aside&gt;
    &lt;p&gt;Callout text&lt;/p&gt;
  &lt;/aside&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
&lt;/article&gt;
</code></pre>
<p>The <code>article</code> element contains the header and all post content as direct children. This will be important as we apply CSS grid styles to the post. Callouts are written using <code>aside</code> elements, perfect for content that is connected tangentially to the rest of the document, and appear in the document directly before the paragraph they are connected to. Note that each <code>aside</code> contains a child paragraph of its own.</p>
<h2>Fallback Styling</h2>
<p>Next, we’ll apply some basic styles for browsers that don’t yet support CSS grid. We’ll set a max-width of 70 characters using the <code>ch</code> unit:</p>
<pre><code class="language-css">.blog-post {
  max-width: 70ch;
}
</code></pre>
<h2>Using CSS Grid</h2>
<p>Now, let’s progressively enhance for browsers that <em>do</em> support CSS grid using a <code>@supports</code> query:</p>
<pre><code class="language-css">@supports(display: grid) {
  .blog-post {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-column-gap: 2rem;
  }
}
</code></pre>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Expanded CSS grid layout with 13 columns and two vertical groupings of white horizontal content lines. The upper group spans columns 3 to 9, and the lower group begins at column 3 and spans to column 9 as well. A dark gray rectangular block centered between columns 6 and 9 indicates a figure or figcaption." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <g stroke="#e6594c">
            <path d="m130.5 95.5h539v316h-539z"></path>
            <path d="m400-139.5v540" transform="matrix(0 -1 1 0 269.5 530.5)"></path>
            <path d="m400-46.5v540" transform="matrix(0 -1 1 0 176.5 623.5)"></path>
            <path d="m400 43.5v540" transform="matrix(0 -1 1 0 86.5 713.5)"></path>
            <path d="m400 56.5v540" transform="matrix(0 -1 1 0 73.5 726.5)"></path>
            <g transform="matrix(0 -1 1 0 165 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 211 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 533 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 579 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 625 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
        </g>
        <path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path>
        <g fill="#f5f5f5">
            <path d="m314 131h173v3h-173z"></path>
            <path d="m314 141h173v3h-173z"></path>
            <path d="m314 151h173v3h-173z"></path>
            <path d="m314 161h173v3h-173z"></path>
            <path d="m314 171h173v3h-173z"></path>
            <path d="m314 181h173v3h-173z"></path>
            <path d="m314 191h173v3h-173z"></path>
            <path d="m314 201h173v3h-173z"></path>
            <path d="m314 211h115v3h-115z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 131h81v3h-81z"></path>
            <path d="m222 141h81v3h-81z"></path>
            <path d="m241 151h62v3h-62z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 327h81v3h-81z"></path>
            <path d="m222 337h81v3h-81z"></path>
            <path d="m241 347h62v3h-62z"></path>
        </g>
        <path d="m314 314h113v3h-113z" fill="#f5f5f5"></path>
        <g fill="#f5f5f5">
            <path d="m314 327h173v3h-173z"></path>
            <path d="m314 337h173v3h-173z"></path>
            <path d="m314 347h173v3h-173z"></path>
            <path d="m314 357h173v3h-173z"></path>
            <path d="m314 367h173v3h-173z"></path>
            <path d="m314 377h115v3h-115z"></path>
        </g>
        <path d="m314 224h173v81h-173z" fill="#525252"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 257 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 303 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 349 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 395 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 441 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 487 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g fill="#e6594c">
            <path d="m626 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m258 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m304 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m350 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m396 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m442 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m488 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m534 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m580 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m166 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m212 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <g fill-rule="nonzero">
                <path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z" transform="translate(128.320312 81.291016)"></path>
                <path d="m.07324219 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273438-1.66015625c.83496094-.87890625 1.13769531-1.43066407 1.13769531-2.09960938 0-1.09863281-.92773437-1.89453125-2.21679687-1.89453125-1.31835938 0-2.25585938.85449219-2.25585938 1.73339844 0 .32714844.22460938.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042969-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195312 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199219.62988282-.54199219.87890626z" transform="translate(167.736816 81.208008)"></path>
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z" transform="translate(213.626953 81.208008)"></path>
                <path d="m3.23730469 6.14746094c0 .41503906.22949219.66894531.61523437.66894531.38574219 0 .62011719-.25390625.62011719-.66894531v-.625h.32714844c.35644531 0 .56640625-.20019532.56640625-.52734375 0-.33203125-.21484375-.546875-.56640625-.546875h-.32714844v-3.515625c0-.58105469-.39550781-.93261719-1.0546875-.93261719-.5078125 0-.8203125.20507813-1.23046875.80078125-.86914062 1.28417969-1.39160156 2.17285156-1.94824219 3.22753906-.18066406.36621094-.23925781.55664063-.23925781.77148438 0 .45410156.30273438.72265625.80078125.72265625h2.43652344zm-2.03125-1.69921875v-.03417969c.4296875-.77636719 1.37695312-2.39257812 1.96289062-3.28125h.06835938v3.31542969z" transform="translate(259.397461 81.242188)"></path>
                <path d="m0 5.31738281c0 .74707031.9375 1.49414063 2.26074219 1.49414063 1.51367187 0 2.53417969-.95214844 2.53417969-2.37304688 0-1.2890625-.87402344-2.16796875-2.14355469-2.16796875-.57128907 0-1.11328125.21484375-1.34277344.52734375h-.06835937l.13671874-1.72363281h2.52441407c.39550781 0 .62011719-.19042969.62011719-.53222656 0-.34179688-.22949219-.54199219-.62011719-.54199219h-2.76367188c-.53710937 0-.81542968.22460938-.84960937.68847656l-.18066406 2.50976563c-.02929688.44921875.24414062.73730468.64453125.73730468.18066406 0 .32226562-.05859375.61035156-.30273437.28808594-.22460938.62011719-.34667969.94726562-.34667969.703125 0 1.20605469.48828125 1.20605469 1.20117188 0 .73730469-.52246094 1.25-1.25976562 1.25-.49804688 0-.88867188-.22949219-1.19628907-.68847657-.16113281-.22949218-.31738281-.31738281-.52246093-.31738281-.32714844 0-.53710938.25878907-.53710938.5859375z" transform="translate(305.67334 81.330078)"></path>
                <path d="m0 3.56445312c0 1.03027344.20019531 1.84570313.60058594 2.40722657.43945312.625 1.12304687.95703125 1.97265625.95703125 1.4453125 0 2.41699219-.93261719 2.41699219-2.32421875 0-1.27441407-.859375-2.15820313-2.08496094-2.15820313-.73242188 0-1.39160156.39550782-1.62109375.9765625h-.04394531c.00976562-1.54785156.5078125-2.37792968 1.45996093-2.37792968.37597657 0 .67871094.12695312 1.015625.41503906.22949219.18066406.36621094.23925781.546875.23925781.30273438 0 .51269531-.20019531.51269531-.49316406 0-.25878906-.20507812-.56152344-.546875-.79101563-.40039062-.26367187-.94238281-.41503906-1.5234375-.41503906-1.73339843 0-2.70507812 1.27929688-2.70507812 3.56445312zm1.39648438 1.08398438c0-.71289062.48828124-1.21582031 1.171875-1.21582031.69824218 0 1.16699218.48828125 1.16699218 1.22070312 0 .7421875-.46386718 1.23535157-1.14746094 1.23535157-.69335937 0-1.19140624-.51269532-1.19140624-1.24023438z" transform="translate(351.521973 81.212891)"></path>
                <path d="m.96679688 6.15234375c0 .3515625.26367187.59082031.61035156.59082031.2734375 0 .44921875-.14648437.59082031-.41992187l2.29980469-4.765625c.18554687-.36621094.26855468-.64453125.26855468-.8984375 0-.40039063-.28808593-.65917969-.67871093-.65917969h-3.41796875c-.41015625 0-.63964844.21972656-.63964844.54199219 0 .31738281.22949219.53222656.63964844.53222656h2.734375v.0390625l-2.29003906 4.63867187c-.07324219.14160157-.1171875.26855469-.1171875.40039063z" transform="translate(397.583008 81.334961)"></path>
                <path d="m2.56835938 6.93359375c1.54296874 0 2.59277343-.79589844 2.59277343-1.96289063 0-.8203125-.56152343-1.484375-1.39648437-1.65527343v-.07324219c.71289062-.21972656 1.1328125-.77636719 1.1328125-1.47949219 0-1.03515625-.95214844-1.76269531-2.31445313-1.76269531s-2.31445312.72753906-2.31445312 1.76269531c0 .70800781.41503906 1.25976563 1.12792969 1.47949219v.07324219c-.83984375.17089843-1.39648438.83496093-1.39648438 1.66015625 0 1.171875 1.03027344 1.95800781 2.56835938 1.95800781zm.01464843-4.06738281c-.61523437 0-1.0546875-.40527344-1.0546875-.96191406 0-.55175782.43945313-.94726563 1.0546875-.94726563.61523438 0 1.0546875.39550781 1.0546875.94726563 0 .56152343-.43945312.96191406-1.0546875.96191406zm0 3.11523437c-.7421875 0-1.26953125-.45898437-1.26953125-1.09375 0-.63964843.52734375-1.10351562 1.26953125-1.10351562.73730469 0 1.26953125.46386719 1.26953125 1.10351562 0 .63476563-.53222656 1.09375-1.26953125 1.09375z" transform="translate(443.419434 81.208008)"></path>
                <path d="m.20996094 5.75195312c0 .29296876.21972656.5859375.57617187.80566407.39550781.24414062.91796875.38085937 1.48925781.38085937 1.74316407 0 2.70507813-1.23535156 2.70507813-3.52050781 0-2.17773437-.92773437-3.41796875-2.55371094-3.41796875-1.45507812 0-2.42675781.92773438-2.42675781 2.30957031 0 1.29882813.85449219 2.20214844 2.08496094 2.20214844.75195312 0 1.3671875-.38085937 1.61132812-1.00097656h.04394532c0 1.50878906-.5078125 2.37792969-1.46972657 2.37792969-.43457031 0-.7421875-.14648438-1.06445312-.4296875-.20019531-.16113282-.32714844-.21484376-.48828125-.21484376-.28808594 0-.5078125.20019532-.5078125.5078125zm3.34472656-3.46191406c0 .72265625-.46875 1.21582032-1.15234375 1.21582032s-1.14746094-.49316407-1.14746094-1.22070313c0-.73242187.46875-1.24023437 1.14257813-1.24023437.68359375 0 1.15722656.51269531 1.15722656 1.24511718z" transform="translate(489.536621 81.198242)"></path>
                <g transform="translate(533.412598 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                </g>
                <g transform="translate(580.269531 81.291016)">
                    <path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path>
                    <path d="m5.7421875 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902344.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path>
                </g>
                <g transform="translate(625.534668 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.32617188 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273437-1.66015625c.83496094-.87890625 1.13769532-1.43066407 1.13769532-2.09960938 0-1.09863281-.92773438-1.89453125-2.21679688-1.89453125-1.31835937 0-2.25585937.85449219-2.25585937 1.73339844 0 .32714844.22460937.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042968-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195313 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199218.62988282-.54199218.87890626z"></path>
                </g>
                <g transform="translate(665.478516 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.19921875 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972657 0 2.50488281-.81542969 2.50488281-1.98242187 0-.84472657-.61035156-1.53808594-1.42089843-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726562-1.76757812-2.29492188-1.76757812-1.27441406 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460938.53710937.53710938.53710937.22949219 0 .40039062-.10253906.546875-.34667969.25878906-.43945312.63476562-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945313.92773437-1.04003906.92773437h-.45410157c-.29785156 0-.5078125.21972657-.5078125.51269531 0 .30273438.21484376.52246094.5078125.52246094h.47851563c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179688-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                </g>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>Now it’s time to start placing content on the grid:</p>
<pre><code class="language-css">.blog-post header {
  grid-column-start: 3;
  grid-column-end: span 2;
}

.blog-post h2,
.blog-post p,
.blog-post figure {
  grid-column-start: 5;
  grid-column-end: span 4;
}
</code></pre>
<p>The post header and content now sit next to each other in a row. The callouts are up next:</p>
<pre><code class="language-css">.blog-post aside {
  position: relative;
  grid-column-start: 3;
  grid-column-end: 5;
}

.blog-post aside p {
  position: absolute;
}
</code></pre>
<p>The asides are now pulled to the left of the paragraph immediately following them, looking exactly like callouts. The paragraphs within each callout have absolute positioning applied so that they don’t force the proceeding paragraph down if they are taller than the adjacent content.</p>
<div class="warning"><p>Since setting up asides requires using absolute positioning, you need to be careful that one aside does not overlap the proceeding one.</p></div>
<h2>Bonus: Full-Width Figures</h2>
<p>I can easily style figures within the post so that they stretch across the full width of the grid container. The rest of the content remains at a narrower width.</p>
<pre><code class="language-css">.blog-post figure {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-column-gap: 2rem;
  grid-column-start: 1;
  grid-column-end: -1;
}

.blog-post figure img {
  grid-column-start: 1;
  grid-column-end: -1;
}

.blog-post figure figcaption {
  grid-column-start: 5;
  grid-column-end: span 4;
}
</code></pre>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Grid layout with 13 columns and white content blocks aligned between columns 3 to 9. The top section contains staggered horizontal bars, suggesting header and paragraph placement. A gray area spans the lower portion, representing a full-width figure." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m131 194h539v162h-539z" fill="#525252"></path><path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path><path d="m400-139.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 269.5 530.5)"></path><path d="m400-76.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 206.5 593.5)"></path><path d="m400 95.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 34.5 765.5)"></path><path d="m314 366h173v3h-173z" fill="#f5f5f5"></path><g stroke="#e6594c" transform="matrix(0 -1 1 0 165 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 211 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 533 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 579 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 625 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#f5f5f5"><path d="m314 131h173v3h-173z"></path><path d="m314 141h173v3h-173z"></path><path d="m314 151h173v3h-173z"></path><path d="m314 161h173v3h-173z"></path><path d="m314 171h173v3h-173z"></path><path d="m314 181h115v3h-115z"></path></g><g fill="#f5f5f5"><path d="m222 131h81v3h-81z"></path><path d="m222 141h81v3h-81z"></path><path d="m241 151h62v3h-62z"></path></g><g stroke="#e6594c"><g transform="matrix(0 -1 1 0 257 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 303 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 349 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 395 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 441 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 487 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g></g><g fill="#e6594c"><path d="m626 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m258 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m304 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m350 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m396 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m442 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m488 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m534 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m580 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m166 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m212 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><g fill-rule="nonzero"><path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z" transform="translate(128.320312 81.291016)"></path><path d="m.07324219 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273438-1.66015625c.83496094-.87890625 1.13769531-1.43066407 1.13769531-2.09960938 0-1.09863281-.92773437-1.89453125-2.21679687-1.89453125-1.31835938 0-2.25585938.85449219-2.25585938 1.73339844 0 .32714844.22460938.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042969-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195312 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199219.62988282-.54199219.87890626z" transform="translate(167.736816 81.208008)"></path><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z" transform="translate(213.626953 81.208008)"></path><path d="m3.23730469 6.14746094c0 .41503906.22949219.66894531.61523437.66894531.38574219 0 .62011719-.25390625.62011719-.66894531v-.625h.32714844c.35644531 0 .56640625-.20019532.56640625-.52734375 0-.33203125-.21484375-.546875-.56640625-.546875h-.32714844v-3.515625c0-.58105469-.39550781-.93261719-1.0546875-.93261719-.5078125 0-.8203125.20507813-1.23046875.80078125-.86914062 1.28417969-1.39160156 2.17285156-1.94824219 3.22753906-.18066406.36621094-.23925781.55664063-.23925781.77148438 0 .45410156.30273438.72265625.80078125.72265625h2.43652344zm-2.03125-1.69921875v-.03417969c.4296875-.77636719 1.37695312-2.39257812 1.96289062-3.28125h.06835938v3.31542969z" transform="translate(259.397461 81.242188)"></path><path d="m0 5.31738281c0 .74707031.9375 1.49414063 2.26074219 1.49414063 1.51367187 0 2.53417969-.95214844 2.53417969-2.37304688 0-1.2890625-.87402344-2.16796875-2.14355469-2.16796875-.57128907 0-1.11328125.21484375-1.34277344.52734375h-.06835937l.13671874-1.72363281h2.52441407c.39550781 0 .62011719-.19042969.62011719-.53222656 0-.34179688-.22949219-.54199219-.62011719-.54199219h-2.76367188c-.53710937 0-.81542968.22460938-.84960937.68847656l-.18066406 2.50976563c-.02929688.44921875.24414062.73730468.64453125.73730468.18066406 0 .32226562-.05859375.61035156-.30273437.28808594-.22460938.62011719-.34667969.94726562-.34667969.703125 0 1.20605469.48828125 1.20605469 1.20117188 0 .73730469-.52246094 1.25-1.25976562 1.25-.49804688 0-.88867188-.22949219-1.19628907-.68847657-.16113281-.22949218-.31738281-.31738281-.52246093-.31738281-.32714844 0-.53710938.25878907-.53710938.5859375z" transform="translate(305.67334 81.330078)"></path><path d="m0 3.56445312c0 1.03027344.20019531 1.84570313.60058594 2.40722657.43945312.625 1.12304687.95703125 1.97265625.95703125 1.4453125 0 2.41699219-.93261719 2.41699219-2.32421875 0-1.27441407-.859375-2.15820313-2.08496094-2.15820313-.73242188 0-1.39160156.39550782-1.62109375.9765625h-.04394531c.00976562-1.54785156.5078125-2.37792968 1.45996093-2.37792968.37597657 0 .67871094.12695312 1.015625.41503906.22949219.18066406.36621094.23925781.546875.23925781.30273438 0 .51269531-.20019531.51269531-.49316406 0-.25878906-.20507812-.56152344-.546875-.79101563-.40039062-.26367187-.94238281-.41503906-1.5234375-.41503906-1.73339843 0-2.70507812 1.27929688-2.70507812 3.56445312zm1.39648438 1.08398438c0-.71289062.48828124-1.21582031 1.171875-1.21582031.69824218 0 1.16699218.48828125 1.16699218 1.22070312 0 .7421875-.46386718 1.23535157-1.14746094 1.23535157-.69335937 0-1.19140624-.51269532-1.19140624-1.24023438z" transform="translate(351.521973 81.212891)"></path><path d="m.96679688 6.15234375c0 .3515625.26367187.59082031.61035156.59082031.2734375 0 .44921875-.14648437.59082031-.41992187l2.29980469-4.765625c.18554687-.36621094.26855468-.64453125.26855468-.8984375 0-.40039063-.28808593-.65917969-.67871093-.65917969h-3.41796875c-.41015625 0-.63964844.21972656-.63964844.54199219 0 .31738281.22949219.53222656.63964844.53222656h2.734375v.0390625l-2.29003906 4.63867187c-.07324219.14160157-.1171875.26855469-.1171875.40039063z" transform="translate(397.583008 81.334961)"></path><path d="m2.56835938 6.93359375c1.54296874 0 2.59277343-.79589844 2.59277343-1.96289063 0-.8203125-.56152343-1.484375-1.39648437-1.65527343v-.07324219c.71289062-.21972656 1.1328125-.77636719 1.1328125-1.47949219 0-1.03515625-.95214844-1.76269531-2.31445313-1.76269531s-2.31445312.72753906-2.31445312 1.76269531c0 .70800781.41503906 1.25976563 1.12792969 1.47949219v.07324219c-.83984375.17089843-1.39648438.83496093-1.39648438 1.66015625 0 1.171875 1.03027344 1.95800781 2.56835938 1.95800781zm.01464843-4.06738281c-.61523437 0-1.0546875-.40527344-1.0546875-.96191406 0-.55175782.43945313-.94726563 1.0546875-.94726563.61523438 0 1.0546875.39550781 1.0546875.94726563 0 .56152343-.43945312.96191406-1.0546875.96191406zm0 3.11523437c-.7421875 0-1.26953125-.45898437-1.26953125-1.09375 0-.63964843.52734375-1.10351562 1.26953125-1.10351562.73730469 0 1.26953125.46386719 1.26953125 1.10351562 0 .63476563-.53222656 1.09375-1.26953125 1.09375z" transform="translate(443.419434 81.208008)"></path><path d="m.20996094 5.75195312c0 .29296876.21972656.5859375.57617187.80566407.39550781.24414062.91796875.38085937 1.48925781.38085937 1.74316407 0 2.70507813-1.23535156 2.70507813-3.52050781 0-2.17773437-.92773437-3.41796875-2.55371094-3.41796875-1.45507812 0-2.42675781.92773438-2.42675781 2.30957031 0 1.29882813.85449219 2.20214844 2.08496094 2.20214844.75195312 0 1.3671875-.38085937 1.61132812-1.00097656h.04394532c0 1.50878906-.5078125 2.37792969-1.46972657 2.37792969-.43457031 0-.7421875-.14648438-1.06445312-.4296875-.20019531-.16113282-.32714844-.21484376-.48828125-.21484376-.28808594 0-.5078125.20019532-.5078125.5078125zm3.34472656-3.46191406c0 .72265625-.46875 1.21582032-1.15234375 1.21582032s-1.14746094-.49316407-1.14746094-1.22070313c0-.73242187.46875-1.24023437 1.14257813-1.24023437.68359375 0 1.15722656.51269531 1.15722656 1.24511718z" transform="translate(489.536621 81.198242)"></path><g transform="translate(533.412598 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path></g><g transform="translate(580.269531 81.291016)"><path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path><path d="m5.7421875 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902344.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path></g><g transform="translate(625.534668 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.32617188 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273437-1.66015625c.83496094-.87890625 1.13769532-1.43066407 1.13769532-2.09960938 0-1.09863281-.92773438-1.89453125-2.21679688-1.89453125-1.31835937 0-2.25585937.85449219-2.25585937 1.73339844 0 .32714844.22460937.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042968-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195313 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199218.62988282-.54199218.87890626z"></path></g><g transform="translate(665.478516 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.19921875 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972657 0 2.50488281-.81542969 2.50488281-1.98242187 0-.84472657-.61035156-1.53808594-1.42089843-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726562-1.76757812-2.29492188-1.76757812-1.27441406 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460938.53710937.53710938.53710937.22949219 0 .40039062-.10253906.546875-.34667969.25878906-.43945312.63476562-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945313.92773437-1.04003906.92773437h-.45410157c-.29785156 0-.5078125.21972657-.5078125.51269531 0 .30273438.21484376.52246094.5078125.52246094h.47851563c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179688-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path></g></g></g></g></svg></figure></p>
<p>The <code>figure</code> now spans all 12 columns of the parent grid. I set up a nested grid within the <code>figure</code> with the same number of columns and spacing as the parent. This allows me to have the <code>img</code> element span the full width, while the <code>figcaption</code> is aligned with the narrower post content.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Controlling Element Visibility with the Intersection Observer API]]></title>
            <link>https://www.jonathanharrell.com/blog/controlling-element-visibility-with-the-intersection-observer-api</link>
            <guid>https://www.jonathanharrell.com/blog/controlling-element-visibility-with-the-intersection-observer-api</guid>
            <pubDate>Wed, 18 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use the new IntersectionObserver API to control the visibility of elements relative to the viewport.]]></description>
            <content:encoded><![CDATA[<p>Controlling the display of elements based on their visibility within the viewport has typically been a rather messy affair, involving calculations using window height and <code>getBoundingClientRect()</code>. There is now a new API that makes this much simpler called Intersection Observer. It is now <a href="https://caniuse.com/#feat=intersectionobserver" target="_blank" rel="noreferrer">supported</a> in Chrome, Firefox, Opera and Edge.</p>
<p>I decided to experiment and push IntersectionObserver to its limits.</p>

<h2>The HTML and CSS</h2>
<p>I have a simple grid of cards that is styled using CSS grid:</p>
<pre><code class="language-html">&lt;section class=&quot;card-grid&quot;&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  ...
&lt;/section&gt;
</code></pre>
<pre><code class="language-css">.card-grid {
  display: grid;
  grid-template-columns: repeat(
      auto-fill,
      minmax(100px, 1fr)
  );
  grid-gap: 45px;
}
</code></pre>
<h2>Creating the Observers</h2>
<p>I loop over each card and create an observer. The observer accepts a callback and an options object. Note that in options I am setting the <code>rootMargin</code> to a negative value. This insets the intersection point in from the viewport on all sides by 100px. So a card can be up to 100px in the viewport before the observer will read it as intersected.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram showing a large container with 100px of margin on all sides, marked in dark red. This illustrates the rootMargin option in the Intersection Observer API, visually indicating how the observer’s area of interest is inset from the edges of the viewport." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m700 65v377h-600v-377zm-29.761273 30h-540v317h540z" fill="#e6594c" fill-opacity="0.5" opacity=".25"></path><path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path><path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m665 96.0166667v-1l4-.0006667v-27.033l-4 .0003333v-1h9v1l-4-.0003333v27.033l4 .0006667v1z"></path><path d="m669.983333 100h-1v-9h1l-.000333 3.999h27.033l.000667-3.999h1v9h-1l-.000667-4.001h-27.033z"></path><g transform="translate(633.023926 77.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m9.91210938 3.62304688c0 2.01171874.94238282 3.31054687 2.52441402 3.31054687 1.5820313 0 2.5488282-1.31347656 2.5488282-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.5292969-3.31054688-1.5869141 0-2.54394532 1.30859375-2.54394532 3.31054688zm1.31835942-.30761719c0-1.40625.4589843-2.24121094 1.2158203-2.24121094.7568359 0 1.2158203.83984375 1.2158203 2.24121094v.29785156c0 1.40625-.4589844 2.24609375-1.2158203 2.24609375-.756836 0-1.2158203-.83984375-1.2158203-2.24609375z"></path><path d="m17.2900391 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.928711-2.3046875-.727539 0-1.2988281.34667969-1.508789.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888671-1.32324219.6884766 0 1.0791016.5078125 1.0791016 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m21.5380859 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033203-1.38671875h.0634766l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634766l-.9277343-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859376.24902344-.5859376.5859375 0 .16113281.0683594.33203125.1708985.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></g></svg></figure></p>
<p>I have also set the <code>threshold</code> option as an array with two numeric values. These are essentially the percentages of intersection at which the observer will respond. So, when a card is 50% in the viewport and when it is 100% in, the observer will fire the callback.</p>
<pre><code class="language-javascript">const options = {
  rootMargin: &#x27;-100px&#x27;,
  threshold: [0.5, 1]
}
</code></pre>
<pre><code class="language-javascript">const observer = new IntersectionObserver(callback, options);

const targets = document.querySelectorAll(&#x27;.card&#x27;);
targets.forEach(target =&gt; observer.observe(target));
</code></pre>
<h2>Setup the Callback</h2>
<p>The callback function gives me an array of entries—each entry is essentially an intersection change. I can check the <code>intersectionRatio</code> on each entry and apply some styling appropriately.</p>
<p><figure><svg height="565" viewBox="0 0 800 565" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Visual showing multiple boxes at different positions within and outside the margin-adjusted viewport. Labels on the boxes indicate intersection ratios: 0%, 50%, and 100%, demonstrating how the threshold values of 0.5 and 1 control when the Intersection Observer triggers based on how much of an element is visible." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m100.5 565v-214m599 0v214" stroke="#979797" stroke-dasharray="2"></path><path d="m700 65v285h-600v-285zm-29.761273 30h-540v225h540z" fill="#e6594c" fill-opacity="0.5" opacity=".25"></path><path d="m130.5 95.5h539v225h-539z" stroke="#e6594c"></path><path d="m101 66h598v284h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m665 96.0166667v-1l4-.0006667v-27.033l-4 .0003333v-1h9v1l-4-.0003333v27.033l4 .0006667v1z"></path><path d="m669.983333 100h-1v-9h1l-.000333 3.999h27.033l.000667-3.999h1v9h-1l-.000667-4.001h-27.033z"></path><g transform="translate(633.023926 77.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m9.91210938 3.62304688c0 2.01171874.94238282 3.31054687 2.52441402 3.31054687 1.5820313 0 2.5488282-1.31347656 2.5488282-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.5292969-3.31054688-1.5869141 0-2.54394532 1.30859375-2.54394532 3.31054688zm1.31835942-.30761719c0-1.40625.4589843-2.24121094 1.2158203-2.24121094.7568359 0 1.2158203.83984375 1.2158203 2.24121094v.29785156c0 1.40625-.4589844 2.24609375-1.2158203 2.24609375-.756836 0-1.2158203-.83984375-1.2158203-2.24609375z"></path><path d="m17.2900391 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.928711-2.3046875-.727539 0-1.2988281.34667969-1.508789.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888671-1.32324219.6884766 0 1.0791016.5078125 1.0791016 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m21.5380859 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033203-1.38671875h.0634766l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634766l-.9277343-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859376.24902344-.5859376.5859375 0 .16113281.0683594.33203125.1708985.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g stroke="#f5f5f5" stroke-width="2"><path d="m176 381h118v118h-118z"></path><path d="m341 261h118v118h-118z"></path><path d="m506 141h118v118h-118z"></path></g><path d="m507.5 200.5h115" stroke="#e6594c" stroke-dasharray="2" stroke-linecap="square"></path><path d="m177.5 440.5h116" stroke="#f5f5f5" stroke-dasharray="2" stroke-linecap="square"></path><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="14" x="558.5" y="134.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(561.733887 137.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="14" x="393.5" y="254.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(396.733887 257.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="14" x="228.5" y="374.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(231.733887 377.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="18" x="556.5" y="195.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(559.618164 198.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="18" x="391.5" y="315.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(394.618164 318.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="18" x="226.5" y="435.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(229.618164 438.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="20" x="555.5" y="254.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(558.261719 257.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="20" x="390.5" y="374.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(393.261719 377.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="20" x="225.5" y="494.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(228.261719 497.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g></g></svg></figure></p>
<pre><code class="language-javascript">const callback = entries =&gt; {
  entries.forEach(entry =&gt; {
    const ratio = entry.intersectionRatio;

    // look at the ratio and do stuff to each element
  });
}
</code></pre>
<p>I use a switch statement to apply different styling for different ratios:</p>
<pre><code class="language-javascript">switch (true) {
  case (ratio === 1):
    entry.target.style.opacity = 1;
    entry.target.style.transform = &#x27;scale(1.25)&#x27;;
    return;

  case (ratio &lt; 1 &amp;&amp; ratio &gt;= 0.5):
    entry.target.style.opacity = 0.5;
    entry.target.style.transform = &#x27;scale(1.1)&#x27;;
    return;

  case (ratio &lt; 0.5):
    entry.target.style.opacity = 0.15;
    entry.target.style.transform = &#x27;scale(1.0)&#x27;;
    return;

  default:
    return;
}
</code></pre>
<h2>Conclusion</h2>
<p>The Intersection Observer API provides a more straightforward and powerful method for checking element visibility relative to the viewport. Hopefully browser support continues to improve and we’ll be able to use it soon in production sites without needing a polyfill.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implicit State Sharing in React & Vue]]></title>
            <link>https://www.jonathanharrell.com/blog/implicit-state-sharing-in-react-vue</link>
            <guid>https://www.jonathanharrell.com/blog/implicit-state-sharing-in-react-vue</guid>
            <pubDate>Mon, 05 Nov 2018 22:14:59 GMT</pubDate>
            <description><![CDATA[Learn to use React’s Context API and provide/inject in Vue to share state between related components without resorting to a global data store.]]></description>
            <content:encoded><![CDATA[<p>Imagine you are creating an accordion component that you want to distribute publicly through an npm package. You would like the users of this accordion to be able to use the component in a very flexible way, by composing multiple components together. React Context and provide/inject in Vue provide a solution.</p>

<p>Imagine this is your ideal API:</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem&gt;
    &lt;AccordionHeader&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  &lt;/AccordionItem&gt;
&lt;/Accordion&gt;
</code></pre>
<p><code>AccordionItem</code> will contain each section of the accordion that can be expanded or collapsed, <code>AccordionHeader</code> will be the place where the user can click to expand or collapse, and <code>AccordionPanel</code> will contain the content to be shown or hidden.</p>
<p>Each <code>AccordionItem</code> will need to maintain some state — whether it is expanded or not. But <code>AccordionHeader</code> will also need access to this value, so that it can show the appropriate toggle button. And <code>AccordionPanel</code> may also need to access this, since it is the thing being expanded and collapsed.</p>
<p>One possibility is exposing the expanded value to your user through render props and making sure your documentation lets them know that they need to pass that down to the header and panel components.</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem render={({ expanded }) =&gt; (
    &lt;AccordionHeader expanded={expanded}&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel expanded={expanded}&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  )} /&gt;
&lt;/Accordion&gt;
</code></pre>
<p>While this may seem like a decent solution at first, it’s not ideal that the consumer of our component has to worry about the component internals. The fact that <code>AccordionHeader</code> and <code>AccordionPanel</code> need access to the expanded state should not be something our user has to be concerned about.</p>
<p>It should also be noted that while this is a trivial example, your component may be far more complex, with multiple levels of nested components, in which case prop drilling may become quite tedious.</p>
<p>What we really need is a way to <em>implicitly</em> pass down props.</p>
<h2>Using React Context</h2>
<p>There is a better solution for cases like this: React Context. We can use the Context API to create some state and provide it where needed behind the scenes, removing this concern from our public-facing API.</p>
<p>First, we will create a context and define the <em>shape</em> of that context. We will start with an <code>expanded</code> value and a <code>toggleExpansion</code> method. We are defining this context as specifically relevant to our accordion item:</p>
<pre><code class="language-jsx">const AccordionItemContext = React.createContext({
  expanded: false,
  toggleExpansion: () =&gt; {}
})
</code></pre>
<p>Now, inside our <code>AccordionItem</code> component, we will define the <code>expanded</code> and <code>toggleExpansion</code> values and feed them in as the value of the <code>Provider</code> component.</p>
<pre><code class="language-jsx">class AccordionItem extends React.Component {
  constructor(props) {
    super(props)

    this.toggleExpansion = () =&gt; {
      this.setState({
        expanded: !this.state.expanded
      });
    }

    this.state = {
      expanded: false,
      toggleExpansion: this.toggleExpansion
    }
  }

  render() {
    return (
      &lt;AccordionItemContext.Provider value={this.state}&gt;
        &lt;div className=&quot;accordion-item&quot;&gt;
          {this.props.children}
        &lt;/div&gt;
      &lt;/AccordionItemContext.Provider&gt;
    )
  }
}
</code></pre>
<p>The <code>Provider</code> is one half of the React Context equation. The other half is the <code>Consumer</code>. The <code>Provider</code> allows the <code>Consumer</code> to subscribe to context changes, as we will see soon.</p>
<p>Next, we need to set up <code>AccordionHeader</code> and <code>AccordionPanel</code> as consumers of this context:</p>
<pre><code class="language-jsx">const AccordionHeader = props =&gt; {
  return (
    &lt;AccordionItemContext.Consumer&gt;
      {({ expanded, toggleExpansion }) =&gt; (
        &lt;h2 className=&quot;accordion-header&quot;&gt;
          &lt;button onClick={toggleExpansion}&gt;
            {expanded ? &#x27;→ &#x27; : &#x27;↓ &#x27;}
            {props.children}
          &lt;/button&gt;
        &lt;/h2&gt;
      )}
    &lt;/AccordionItemContext.Consumer&gt;
  )
}
</code></pre>
<p>The <code>Consumer</code> component requires a function as its child. This function will receive the context value, which we are destructuring into <code>expanded</code> and <code>toggleExpansion</code>. Our component is then able to use these values in its template.</p>
<p>We will similarly use <code>Consumer</code> to give <code>AccordionPanel</code> access to the context value:</p>
<pre><code class="language-jsx">const AccordionPanel = props =&gt; {
  return (
    &lt;AccordionItemContext.Consumer&gt;
      {({ expanded }) =&gt;
        &lt;div className={
          &#x27;accordion-panel &#x27; +
          (expanded ? &#x27;expanded&#x27; : &#x27;&#x27;)
        }&gt;
          {props.children}
        &lt;/div&gt;
      }
    &lt;/AccordionItemContext.Consumer&gt;
  )
}
</code></pre>
<p>Now, we really can achieve our ideal API for the accordion component. Users of our component won’t have to worry about passing state up or down the component tree. Those component internals are hidden from them:</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem&gt;
    &lt;AccordionHeader&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  &lt;/AccordionItem&gt;
&lt;/Accordion&gt;
</code></pre>
<h2>Provide/Inject in Vue</h2>
<p>Vue provides a similar tool to React’s Context API, called provide/inject. To use this, we will use the <code>provide</code> method on our <code>accordion-item</code> Vue component:</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-item&#x27;, {
  data() {
    return {
      sharedState: {
        expanded: false
      }
    }
  },

  provide() {
    return {
      accordionItemState: this.sharedState
    }
  },

  render(createElement) {
    return createElement(
      &#x27;div&#x27;,
      { class: &#x27;accordion-item&#x27; },
      this.$slots.default
    )
  }
})
</code></pre>
<p>We return an object from <code>provide()</code> that contains the state we want to provide to other components. Note that we are passing an object to <code>accordionItemState</code>, rather than simply passing the <code>expanded</code> value. In order to be reactive, provide must pass an object.</p>
<p>Note that we are using a render function here to create this component, but this is not necessary to use provide/inject.</p>
<p>Now, we will inject this state into our child components. We will simply use the <code>inject</code> property, which accepts an array of strings corresponding to the properties of the object we defined in <code>provide</code>.</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-header&#x27;, {
  inject: [&#x27;accordionItemState&#x27;],

  template: html`
    &lt;h2 class=&quot;accordion-header&quot;&gt;
      &lt;button @click=&quot;accordionItemState.expanded = !accordionItemState.expanded&quot;&gt;
        {{ accordionItemState.expanded ? &#x27;→&#x27; : &#x27;→&#x27; }}
        &lt;slot&gt;&lt;/slot&gt;
      &lt;/button&gt;
    &lt;/h2&gt;
  `
})
</code></pre>
<p>Once we include the property name in <code>inject</code>, we have access to those values in our template.</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-panel&#x27;, {
  inject: [&#x27;accordionItemState&#x27;],

  template: html`
    &lt;div
      class=&quot;accordion-panel&quot;
      :class=&quot;{ expanded: accordionItemState.expanded }&quot;
    &gt;
      &lt;slot&gt;&lt;/slot&gt;
    &lt;/div&gt;
  `
})
</code></pre>
<h2>Use with Caution</h2>
<p>It’s worth noting that you should only implicitly pass down props when it really makes sense. Doing this too much can obfuscate the real behavior of your components and cause confusion for other developers who may be working on your project.</p>
<p>A component library that is packaged up and distributed for use in other applications is a perfect use case for this, since the internal props of the components really don’t need to be exposed to the end user.</p>
<p>React Context and Vue’s provide/inject feature both make it possible to do this through implicit state sharing.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Input Types Cheat Sheet]]></title>
            <link>https://www.jonathanharrell.com/blog/input-types-cheat-sheet</link>
            <guid>https://www.jonathanharrell.com/blog/input-types-cheat-sheet</guid>
            <pubDate>Fri, 20 Jun 2025 19:59:00 GMT</pubDate>
            <description><![CDATA[Reference all the different text and temporal input types in HTML—like text, email, search, date, time and more, so you can choose the right ones to use in your forms.]]></description>
            <content:encoded><![CDATA[<p>The humble input field. Or maybe not so humble… This handy cheat sheet will help you quickly reference all the different text and temporal input types available in HTML. The next time you need to collect information from your users, make sure you are using the right input for the job.</p>
<h2>Text Inputs</h2>
<table><thead><tr><th>Name</th><th>Code</th><th>Example</th></tr></thead><tbody><tr><td>Text input</td><td><code>&lt;input type=&quot;text&quot; /&gt;</code></td><td><input type="text" placeholder="Enter text"/></td></tr><tr><td>Search input</td><td><code>&lt;input type=&quot;search&quot; /&gt;</code></td><td><input type="search" placeholder="Enter search term"/></td></tr><tr><td>Number input</td><td><code>&lt;input type=&quot;number&quot; /&gt;</code></td><td><input type="search" placeholder="1234"/></td></tr><tr><td>Email input</td><td><code>&lt;input type=&quot;email&quot; /&gt;</code></td><td><input type="email" placeholder="name@email.com" autoComplete="off"/></td></tr><tr><td>Password input</td><td><code>&lt;input type=&quot;password&quot; /&gt;</code></td><td><input type="password" placeholder="••••••••••" autoComplete="off"/></td></tr><tr><td>Telephone input</td><td><code>&lt;input type=&quot;tel&quot; /&gt;</code></td><td><input type="url" placeholder="999-999-9999"/></td></tr><tr><td>URL input</td><td><code>&lt;input type=&quot;url&quot; /&gt;</code></td><td><input type="url" placeholder="https://yoursite.com"/></td></tr></tbody></table>
<h2>Temporal Inputs</h2>
<table><thead><tr><th>Name</th><th>Code</th><th>Example</th></tr></thead><tbody><tr><td>Date input</td><td><code>&lt;input type=&quot;date&quot; /&gt;</code></td><td><input type="date"/></td></tr><tr><td>Time input</td><td><code>&lt;input type=&quot;time&quot; /&gt;</code></td><td><input type="time"/></td></tr><tr><td>Month input (Chrome/Edge only)</td><td><code>&lt;input type=&quot;month&quot; /&gt;</code></td><td><input type="month"/></td></tr><tr><td>Week input (Chrome/Edge only)</td><td><code>&lt;input type=&quot;week&quot; /&gt;</code></td><td><input type="week"/></td></tr><tr><td>Datetime input</td><td><code>&lt;input type=&quot;datetime-local&quot; /&gt;</code></td><td><input type="datetime-local"/></td></tr></tbody></table>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Dynamic SVGs in Light & Dark Mode]]></title>
            <link>https://www.jonathanharrell.com/blog/light-dark-mode-svgs</link>
            <guid>https://www.jonathanharrell.com/blog/light-dark-mode-svgs</guid>
            <pubDate>Sun, 25 May 2025 12:55:00 GMT</pubDate>
            <description><![CDATA[Learn how to make your SVG illustrations respond to light and dark mode using CSS variables—plus, a script to automate replacing hex values.]]></description>
            <content:encoded><![CDATA[<p>When supporting light and dark mode, you likely want your images to respond accordingly, showing both a light and dark version. The easiest way to do this is by providing two image sources and using the <code>picture</code> element to switch between them.</p>
<pre><code class="language-html">&lt;picture&gt;
  &lt;source
    media=&quot;(prefers-color-scheme: dark)&quot;
    srcset=&quot;./dark-mode-image.png&quot;
  &gt;
  &lt;source
    media=&quot;(prefers-color-scheme: light)&quot;
    srcset=&quot;./light-mode-image.png&quot;
  &gt;
  &lt;img src=&quot;./default-image.png&quot; alt=&quot;Image&quot;&gt;
&lt;/picture&gt;
</code></pre>
<p>However, this requires exporting and maintaining two versions of the image. When the image needs an update, you need to update and export two files. Additionally, if you ever decide to change your color scheme, you will need to update all of your image source files and export them again.</p>
<p>For SVGs in particular, there is a better way to respond to theme changes using CSS variables. The SVG must be loaded inline within your page’s HTML.</p>
<p>Here is an SVG I’ve exported from a graphics program (I’m using Sketch):</p>

<p>I want to replace the hex codes in this SVG with CSS variables that can respond to theme changes. However, I may need to re-export this image in the future, so I don’t want to do this manually. I need a repeatable way to easily replace the hex codes.</p>
<p>I’ve written a script to be run via the command line that will go through at all the SVGs in a particular directory, look for certain hex codes, and replace those with references to CSS variables.</p>
<pre><code class="language-javascript">const fs = require(&quot;fs&quot;);
const path = require(&quot;path&quot;);

const hexToCssVariables = {
  &quot;#fafafa&quot;: &quot;#27272a&quot;,
  &quot;#262626&quot;: &quot;#f5f5f5&quot;,
  &quot;#d4d4d4&quot;: &quot;#525252&quot;,
  &quot;#e6594c&quot;: &quot;#e6594c&quot;
};

const inputDir = path.join(
  __dirname,
  &quot;../content/illustrations&quot;
);
const outputDir = path.join(
  __dirname,
  &quot;../public/assets/illustrations&quot;
);

// Ensure output directory exists
if (!fs.existsSync(outputDir)) {
  fs.mkdirSync(outputDir, { recursive: true });
}

// Read all images from the input directory
fs.readdirSync(inputDir).forEach((file) =&gt; {
  const inputFile = path.join(inputDir, file);
  const outputFile = path.join(outputDir, file);

  if (inputFile.endsWith(&quot;.svg&quot;)) {
    fs.readFile(
      inputFile,
      &quot;utf-8&quot;,
      function (err, data) {
        if (err) throw err;

        let svgContent = data;

        // replace each hex code with a CSS variable reference
        Object.keys(hexToCssVariables).forEach((hex) =&gt; {
          const cssVar = hexToCssVariables[hex];
          const regex = new RegExp(hex, &quot;gi&quot;);
          svgContent = svgContent.replace(regex, cssVar);
        });

        // generate the new SVG file
        fs.writeFile(
          outputFile,
          svgContent,
          &quot;utf-8&quot;,
          function (err) {
            if (err) throw err;
          }
        );
      }
    );
  }
});
</code></pre>
<p>I have the CSS variables defined in my styles and have set them up to change based on the presence of a <code>dark</code> class on my root element.</p>
<pre><code class="language-css">:root {
  --accent: #ff6354;

  --illustration-accent: var(--accent);
  --illustration-background: #fafafa;
  --illustration-black: #262626;
  --illustration-gray: #d4d4d4;
}

.dark {
  --accent: #e6594c;

  --illustration-background: #27272a;
  --illustration-black: #f5f5f5;
  --illustration-gray: #525252;
}
</code></pre>
<p>Now, the SVG will respond perfectly to changes in my theme, and I only have to maintain a single file for each image. I export all my SVGs to a <code>content</code> directory, then run my script to generate the final files in the <code>public</code> directory. If I decide to drastically update my theme in the future, I don’t have to manually update all the source files; just a quick change of a few variables, and I’m good to go!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Live Theming with CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/live-theming-with-css-variables</link>
            <guid>https://www.jonathanharrell.com/blog/live-theming-with-css-variables</guid>
            <pubDate>Sat, 19 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[CSS variables are opening up exciting new possibilities, like creating a very performant live theme editor that dynamically updates CSS values.]]></description>
            <content:encoded><![CDATA[<p>CSS variables, now enjoying fairly good <a href="https://caniuse.com/#search=css%20variables" target="_blank" rel="noreferrer">browser support</a>, are opening up exciting possibilities for more dynamic styling. Having true CSS variables means that we can get and set their values using JavaScript, allowing us to build exciting features like live theming.</p>
<p>The process is fairly simple—set up initial variable values in CSS, mark up some inputs, add event listeners and set the values in JavaScript. Let’s get started!</p>
<h2>Set Up Initial Values</h2>
<p>First we’ll set up the variables and their initial values in the <code>:root</code> pseudo-class. In HTML, <code>:root</code> represents the <code>html</code> element.</p>
<pre><code class="language-css">:root {
  --background-color: #FFFFFF;
  --text-color: #101727;
}
</code></pre>
<p>Now we can write some styles using these variables. Think about using these values as a base and generating other values in your styles from them. This will let you create fewer variables while still giving the user the power to affect the entire document.</p>
<pre><code class="language-css">body {
  background-color: var(--background-color);
  color: var(--text-color);
}
</code></pre>
<p>You may also want to add some transitions for the properties that will be changing to smooth out the theme editing experience.</p>
<h2>Create Some Inputs</h2>
<p>Now it’s time to create the form that the user will be interacting with to customize their theme. I’m using color inputs for the color options and range inputs for the font size and line height.</p>
<pre><code class="language-html">&lt;input type=&quot;color&quot; id=&quot;background-color&quot; value=&quot;#FFFFFF&quot;&gt;
&lt;input type=&quot;color&quot; id=&quot;text-color&quot; value=&quot;#OOOOO&quot;&gt;
</code></pre>
<p>Set your initial input values to match the starting values of your CSS variables. You could also set these through JavaScript on page load to remain DRY.</p>
<h2>Set up Event Listeners</h2>
<p>I’m setting up listeners for the “change” event for color inputs, and the “input” event for range inputs. I’ve extracted the logic to a separate function called <code>handleInputChange</code> so that I can reuse it for all the inputs.</p>
<pre><code class="language-javascript">const handleInputChange = (event, property) =&gt; {
  document.documentElement.style.setProperty(
    `--${property}`,
    event.target.value
  );
};

document.getElementById(&#x27;background-color&#x27;)
  .addEventListener(&#x27;change&#x27;, event =&gt; {
    handleInputChange(&#x27;background-color&#x27;);
  });
</code></pre>
<p>That’s all it takes to set up basic interactive theming with CSS variables. We can go a step further and keep these values in localStorage so the theme settings will persist on refresh.</p>
<h2>Store Values in localStorage</h2>
<p>I’ll edit my <code>handleInputChange</code> function to store values in <code>localStorage</code>:</p>
<pre><code class="language-javascript">const handleInputChange = (event, property) =&gt; {
  document.documentElement.style.setProperty(
    `--${property}`,
    event.target.value
  );

  localStorage.setItem(property, newValue);
};
</code></pre>
<p>Next, I’ll need to add some functionality to grab the values from <code>localStorage</code> and set them on page load. I will need to set both the CSS variable and the input value so that everything is consistent. Once again, I’ve extracted the logic to a separate function.</p>
<pre><code class="language-javascript">const setValueFromLocalStorage = property =&gt; {
  const value = localStorage.getItem(property);
  document.documentElement.style.setProperty(
    `--${property}`,
    value
  );

  const input = document.getElementById(property);
  input.value = value;
}

document.addEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; {
  setValueFromLocalStorage(&#x27;background-color&#x27;);
});
</code></pre>
<p>Now, refresh your page to see a persistent theme!</p>
<h2>Bonus: Pre-Defined Themes</h2>
<p>If you want to offer some pre-defined themes, in addition to the free-form inputs, simply create a method that sets all the variables to pre-defined values and hook it up to an event listener.</p>
<p>I’ve created a <code>setTheme</code> function that accepts an options object, loops through the object keys, and sets the values. I’ve reworked the function that actually sets the values a bit so it’s more generic.</p>
<p>Now, I just need to call this function with the values I want to set on the appropriate trigger:</p>
<pre><code class="language-javascript">setTheme({
  &#x27;background-color&#x27;: &#x27;#FFFFFF&#x27;,
  &#x27;text-color&#x27;: &#x27;#101727&#x27;
});
</code></pre>
<p>CSS variables make live theming easy. Hopefully this gets you started playing around with the fun things that CSS variables make possible. You can learn more about CSS variables in <a href="https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties/" target="_blank" rel="noreferrer">my article here</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Semantic Image Overlays With Object-Fit]]></title>
            <link>https://www.jonathanharrell.com/blog/semantic-image-overlays-with-object-fit</link>
            <guid>https://www.jonathanharrell.com/blog/semantic-image-overlays-with-object-fit</guid>
            <pubDate>Sun, 27 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use CSS grid and the object-fit property to create an image grid with overlays that is semantic and great for SEO.]]></description>
            <content:encoded><![CDATA[<p>Think of how many times you have coded a grid of images with an overlay that appears on hover and displays some sort of text. With the <code>object-fit</code> property getting wider support, there is now a clean, semantic way to do this.</p>

<h2>Without object-fit</h2>
<p>Here’s how I used to accomplish this:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post-teaser&quot;&gt;
  &lt;div
    class=&quot;image&quot;
    style=&quot;background-image: url(...)&quot;
  &gt;&lt;/div&gt;
  &lt;div class=&quot;overlay&quot;&gt;
    &lt;h2&gt;
      &lt;a href=&quot;...&quot;&gt;
        Article Title
      &lt;/a&gt;
    &lt;/h2&gt;
  &lt;/div&gt;
&lt;/article&gt;
</code></pre>
<p>The markup involved an <code>article</code> containing a <code>div</code> with a background image applied, and an overlay <code>div</code> that contained the text that needed to sit on top of the image. I would then absolutely position both the image and the overlay. The size of the <code>div</code> would be determined by a percentage padding trick on the article:</p>
<pre><code class="language-css">.blog-post-teaser {
  position: relative;
  padding: 30% 0;
}

.blog-post-teaser .image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.blog-post-teaser .overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
</code></pre>
<p>The key downside with this approach is that it’s not as semantic as it could be. The image for each article seems like a pretty important piece of content, and the browser doesn’t know that it’s an image. And we can’t feed in <code>alt</code> tags to help with SEO.</p>
<p>How do we improve semantics while retaining control of the image sizing? Enter <code>object-fit</code>.</p>
<h2>With object-fit</h2>
<p>Here’s what my markup looks like now:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post-teaser&quot;&gt;
  &lt;figure&gt;
    &lt;img src=&quot;...&quot; alt=&quot;...&quot;&gt;
    &lt;figcaption&gt;
      &lt;h2&gt;
        &lt;a href=&quot;...&quot;&gt;
          Article Title
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/article&gt;
</code></pre>
<p>Now the browser knows we’re serving up an image. It even knows that the article title is both a heading for the article and a caption for the image. Search engines can now access alt text. Let’s look at the styling:</p>
<pre><code class="language-css">.blog-post-teaser figure {
  position: relative;
  padding: 30% 0;
}

.blog-post-teaser figcaption {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.blog-post-teaser img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
</code></pre>
<p>It’s almost identical, only that now we’re using the <code>img</code> element and applying the <code>object-fit</code> property. This works the exact same way as setting <code>background-size: cover</code>. The image will fill the specified space.</p>
<p>Now the browser knows we’re serving up an image. Search engines can properly access alternative text.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[System-Based Theming with Styled Components]]></title>
            <link>https://www.jonathanharrell.com/blog/system-based-theming-with-styled-components</link>
            <guid>https://www.jonathanharrell.com/blog/system-based-theming-with-styled-components</guid>
            <pubDate>Thu, 09 Apr 2020 20:18:26 GMT</pubDate>
            <description><![CDATA[Learn how to support system-based theming in Styled Components, while allowing a user to select their preferred theme and persist that choice.]]></description>
            <content:encoded><![CDATA[<p>Most operating systems these days support a system-wide light/dark mode toggle, and we may want our web sites and applications to take on a corresponding mode, essentially inheriting their color scheme from the system on which they are being viewed. Let’s take a look at how to implement this, and how it would integrate with a CSS-in-JS theming system such as Styled Components.</p>
<p>Detecting a user’s system theme involves either using the <code>prefers-color-scheme</code> media query in CSS, or checking the media feature in JavaScript. <a href="https://caniuse.com/#search=prefers-color-scheme" target="_blank" rel="noreferrer">Browser support for these features</a> is fairly good.</p>
<h2>Basic System Theming</h2>
<p>Let’s look at a basic implementation where we swap the <code>theme</code> object passed to Styled Component’s <code>ThemeProvider</code> component based on the detected system theme.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
const { ThemeProvider } from &quot;styled-components&quot;;

// set up theme colors
const themes = {
  light: {
    colors: {
      text: &quot;black&quot;,
      background: &quot;white&quot;
    }
  },
  dark: {
    colors: {
      text: &quot;white&quot;,
      background: &quot;black&quot;
    }
  }
};

// set up styled components to use theme colors
const Wrap = styled.div`
  background-color: ${({ theme }) =&gt; theme.colors.background};
`;

const Heading = styled.h1`
  color: ${({ theme }) =&gt; theme.colors.text};
`;

const P = styled.p`
  color: ${({ theme }) =&gt; theme.colors.text};
`;

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(
  &quot;(prefers-color-scheme: dark)&quot;
);

const App = () =&gt; {
  // perform an initial detection of system theme
  const [theme, setTheme] = useState(
    darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );


  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setTheme(event.matches ? &quot;dark&quot; : &quot;light&quot;);
    });
  });

  // pass the correct theme object to the provider
  return (
    &lt;ThemeProvider theme={themes[theme]}&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;P&gt;Change your system theme to see this page respond&lt;/P&gt;
      &lt;/Wrap&gt;
    &lt;/ThemeProvider&gt;
  );
};

export default App;
</code></pre>
<p>This approach is straightforward and feels very natural to Styled Components. However, if our app is server-side rendered but a user has JavaScript disabled, the app will not respond to system theme changes.</p>
<h2>Supporting Disabled JavaScript with CSS Variables</h2>
<p>We can enable our app to respond to the system theme even without JavaScript enabled (in cases where the app is server-side rendered) by taking a slightly different approach. Instead of storing our light and dark theme as separate styled component themes, we will use CSS variables, and override them with a media query.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { createGlobalStyle, ThemeProvider, css } from &quot;styled-components&quot;;

// set up color values that will be used across both light and dark themes
const theme = {
  colors: {
    black: &quot;black&quot;,
    white: &quot;white&quot;
  }
};

// set up light theme CSS variables
const lightValues = css`
  --text: ${({ theme }) =&gt; theme.colors.black};
  --background: ${({ theme }) =&gt; theme.colors.white};
`;

// set up dark theme CSS variables
const darkValues = css`
  --text: ${({ theme }) =&gt; theme.colors.white};
  --background: ${({ theme }) =&gt; theme.colors.black};
`;

const GlobalStyle = createGlobalStyle`
  :root {
    /* define light theme values as the defaults within the root selector */
    ${lightValues}

    /* override with dark theme values within media query */
    @media (prefers-color-scheme: dark) {
      ${darkValues}
    }
  }
`;

// set up styled components to use CSS variables
const Wrap = styled.div`
  background-color: var(--background);
`;

const Heading = styled.h1`
  color: var(--text);
`;

const P = styled.p`
  color: var(--text);
`;

const App = () =&gt; (
  &lt;ThemeProvider theme={theme}&gt;
    &lt;&gt;
      &lt;GlobalStyle /&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;P&gt;Change your system theme to see this page respond&lt;/P&gt;
      &lt;/Wrap&gt;
    &lt;/&gt;
  &lt;/ThemeProvider&gt;
);

export default App;
</code></pre>
<p>Now, when server-side rendered, our theme will change even without JavaScript enabled, since a CSS media query is now controlling the theme values.</p>
<h2>Custom Theme Overrides</h2>
<p>There are some cases where you may want to allow a user to manually change the theme, overriding what the app inherited from the system by default. Let’s look at how we might achieve this using our initial simpler example. We will need to add a theme toggle method that will update our theme state.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { ThemeProvider } from &quot;styled-components&quot;;

// ...set up themes and styled components

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(&quot;(prefers-color-scheme: dark)&quot;);

const App = () =&gt; {
  // perform an initial detection of system theme
  const [activeTheme, setActiveTheme] = useState(
    darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );

  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setActiveTheme(
        event.matches ? &quot;dark&quot; : &quot;light&quot;
      );
    });
  });

  // set up a theme toggle method that will update our state when a user clicks the button
  const toggleTheme = () =&gt; {
    setActiveTheme(
      activeTheme === &quot;dark&quot; ? &quot;light&quot; : &quot;dark&quot;
    )
  }

  // pass the correct theme object to the provider
  return (
    &lt;ThemeProvider theme={themes[activeTheme]}&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;Button onClick={toggleTheme}&gt;
          Change theme to {activeTheme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;}
        &lt;/Button&gt;
      &lt;/Wrap&gt;
    &lt;/ThemeProvider&gt;
  );
};

export default App;
</code></pre>
<h2>Persistent Custom Theme Overrides</h2>
<p>What if we want the user’s custom theme override to be persisted between sessions? We’ll need to bring in some logic to interact with <code>localStorage</code> in order to set and retrieve the user’s preference.</p>
<p>Let’s look at a full example that uses CSS variables, supports custom overrides, and persists those overrides between sessions:</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { createGlobalStyle, ThemeProvider, css } from &quot;styled-components&quot;;

// set up color values that will be used across both light and dark themes
const theme = {
  colors: {
    black: &quot;black&quot;,
    white: &quot;white&quot;
  }
};

// set up light theme CSS variables
const lightValues = css`
  --text: ${({ theme }) =&gt; theme.colors.black};
  --background: ${({ theme }) =&gt; theme.colors.white};
`;

// set up dark theme CSS variables
const darkValues = css`
  --text: ${({ theme }) =&gt; theme.colors.white};
  --background: ${({ theme }) =&gt; theme.colors.black};
`;

const GlobalStyle = createGlobalStyle`
  :root {
    /* define light theme values as the defaults within the root selector */
    ${lightValues}

    /* override with dark theme values if theme data attribute is set to dark */
    [data-theme=&quot;dark&quot;] {
      ${darkValues}
    }

    /* support no JavaScript scenario by using media query */
    &amp;.no-js {
      @media (prefers-color-scheme: dark) {
        ${darkValues}
      }
    }
  }
`;

// set up styled components to use CSS variables
const Wrap = styled.div`background-color: var(--background);`;

const Heading = styled.h1`
  color: var(--text);
`;

const P = styled.p`
  color: var(--text);
`;

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(
  &quot;(prefers-color-scheme: dark)&quot;
);

// find saved theme
const savedTheme = localStorage.getItem(&quot;theme&quot;);

const App = () =&gt; {
  // set active theme to saved theme, if there is one
  // otherwise, set to system theme
  const [activeTheme, setActiveTheme] = useState(
    savedTheme
      ? savedTheme
      : darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );

  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setActiveTheme(
        event.matches ? &quot;dark&quot; : &quot;light&quot;
      );
    });
  }, []);

  // every time the active theme changes, set the theme data attribute
  useEffect(() =&gt; {
    document.body.setAttribute(
      &quot;data-theme&quot;,
      activeTheme
    );
  }, [activeTheme]);

  // set up a theme toggle method that will update our state when a user clicks the button
  // and save the new theme in localStorage
  const toggleTheme = () =&gt; {
    const newTheme = activeTheme === &quot;light&quot;
      ? &quot;dark&quot;
      : &quot;light&quot;;

    setActiveTheme(newTheme);
    localStorage.setItem(&quot;theme&quot;, newTheme);
  };

  return (
    &lt;ThemeProvider theme={theme}&gt;
      &lt;&gt;
        &lt;GlobalStyle /&gt;
        &lt;Wrap&gt;
          &lt;Heading&gt;System Theming&lt;/Heading&gt;
          &lt;Button onClick={toggleTheme}&gt;
            Change theme to {activeTheme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;}
          &lt;/Button&gt;
          &lt;P&gt;Refresh to see the persisted preference&lt;/P&gt;
        &lt;/Wrap&gt;
      &lt;/&gt;
    &lt;/ThemeProvider&gt;
  );
};
</code></pre>
<p>Now, instead of using a media query to override CSS variable values, we use a data attribute set on the document body. This allows theme overrides to work.</p>
<p>Note that we support responding to system theme changes without JavaScript by using a <code>no-js</code> class and falling back to a media query. Of course, this won’t support custom overrides of the theme.</p>
<h2>Preventing the Default Theme Flash</h2>
<p>There is one remaining problem with this implementation when used with server-side rendering. Since we are no longer using a media query, but rather a data attribute to set the theme, we get an initial default themed flash of content, before our app has a chance to actually detect and set the theme. We will need to relocate our theme-setting code to the <code>head</code> of the document, before the HTML has actually rendered.</p>
<p>We can store the theme and the theme toggle method on the window so that our React app will then have access to it. This code looks a bit messier, but it supports all of our use cases and prevents the annoying default themed flash.</p>
<p>In <code>head</code>:</p>
<pre><code class="language-javascript">(function () {
  // set up method to set theme value on window, set data attribute,
  // and dispatch a custom event indicating the theme change
  function setTheme(newTheme) {
    window.__theme = newTheme;
    preferredTheme = newTheme;

    document.body.setAttribute(
      &quot;data-theme&quot;,
      newTheme
    );

    window.dispatchEvent(
      new CustomEvent(&quot;themeChange&quot;, {
        detail: newTheme
      })
    );
  }

  // grab the saved theme
  var preferredTheme = localStorage.getItem(&quot;theme&quot;);

  // set up method to set the active theme to the user’s preferred theme
  // and save that theme for persistence
  window.__setPreferredTheme = function (newTheme) {
    setTheme(newTheme);
    localStorage.setItem(&quot;theme&quot;, newTheme);
  };

  // set up detection of system dark mode
  var darkModeQuery = window.matchMedia(
    &quot;(prefers-color-scheme: dark)&quot;
  );

  // set up a listener to respond to future changes of system theme
  darkModeQuery.addListener(function (event) {
    window.__setPreferredTheme(
      event.matches ? &quot;dark&quot; : &quot;light&quot;
    );
  });

  // set active theme to saved theme, if there is one, or the system theme
  setTheme(
    preferredTheme ||
    (darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;)
  );
})();
</code></pre>
<p>In our app:</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;

// ...set up CSS variables and styled components

const App = () =&gt; {
  const [activeTheme, setActiveTheme] = useState();

  useEffect(() =&gt; {
    // set initial theme based on value set on window
    setActiveTheme(window.__theme);

    // set up listener for custom theme change event
    window.addEventListener(&quot;themeChange&quot;, (event) =&gt; {
      setActiveTheme(event.detail);
    });
  }, []);

  // allow user to manually change their theme
  const toggleTheme = (theme) =&gt; {
    window.__setPreferredTheme(theme);
  };

  // ...render content
});

export default App;
</code></pre>
<h2>Conclusion</h2>
<p>Thanks to improving browser support for the detection of system themes, it has never been easier to implement a theme for your application or website that responds to your users’ operating system themes. With a bit of extra code, you can also enable user-chosen theme overrides. This will go a long way in creating a more customizable and comfortable experience for your users.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Typographic Details - Using Correct Spaces and Punctuation]]></title>
            <link>https://www.jonathanharrell.com/blog/typographic-details-cheat-sheet</link>
            <guid>https://www.jonathanharrell.com/blog/typographic-details-cheat-sheet</guid>
            <pubDate>Sun, 20 Apr 2025 11:57:00 GMT</pubDate>
            <description><![CDATA[Learn how to use the correct spaces, punctuation, and special characters to create precise, elegant web typography.]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>One of the principles of durable typography is always legibility; another is something more than legibility: some earned or unearned interest that gives its living energy to the page. It takes various forms and goes by various names, including serenity, liveliness, laughter, grace and joy.
<cite>Robert Bringhurst</cite></p>
</blockquote>
<p>Welcome to this quick cheat sheet that will you help you know which spaces, punctuation and characters to use to make your web typography great! Much of this content has been adapted from Richard Rutter&#x27;s excellent handbook <a href="https://book.webtypography.net/" target="_blank" rel="noreferrer">Web Typography</a>.</p>
<h2>Use the right spaces</h2>
<h3>Non-breaking space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The text “Page 2” using a non-breaking space between the word and the number. The space is emphasized with a tall red rectangle and spacing marker." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(115.5 132.013889)"><path d="m112.64 41.1461111c0-18.26-11.88-33.21999999-31.02-38.27999999-8.58-2.2-13.86-2.86-29.26-2.86-17.16 0-33-.22-50.6 1.98-1.32 0-1.76 1.98-1.76 3.74.22 1.54.88 3.3 1.76 3.08l11-.22c8.8-.22 10.56 3.73999999 10.56 17.81999999v101.4199999c0 8.36-3.08 9.02-13.42 9.02-3.3 0-6.38.66-6.6 4.84 0 1.1.22 1.98.66 2.86.44.66.88 1.32 3.96 1.32 15.62-.44 44-.44 61.16.22 3.08.66 3.96-8.14.22-9.24-2.86-.66-4.84 0-7.7 0-13.2.22-16.94-1.76-16.94-13.64v-33.6599999c.22-1.98.88-5.06 2.2-4.84 4.18.66 5.72 1.1 11 1.1 34.54 0 54.78-17.16 54.78-44.66zm-23.32-.66c0 22.88-10.34 38.28-33 38.28-3.74 0-5.06-.22-8.58-.88-1.54-.44-3.08-1.76-3.08-3.74v-62.04c0-1.76.44-4.83999999 2.2-5.05999999 9.68-1.32 18.7-1.1 27.5 3.73999999 9.24 4.84 14.96 15.62 14.96 29.7z"></path><path d="m208.78 134.866111c.66-1.76.88-5.06-1.54-5.5-1.1 0-1.32.22-1.98.66-2.2 1.98-3.96 2.86-5.28 3.3-1.32.66-2.42.66-3.96.66-3.08 0-4.84-1.54-4.84-10.78v-40.0399999c0-13.86-.22-15.62-3.74-20.46-5.06-7.26-15.18-12.54-24.64-12.54-7.04 0-12.54 2.42-20.68 9.02-8.58 6.6-13.86 13.2-13.86 18.7 0 4.18 1.32 4.62 5.06 3.3 1.54-.44 11.66-4.84 13.2-6.6-.88-1.98-.66-3.3-.66-5.28 0-5.06 7.92-9.9 12.54-9.9 9.24 0 14.74 7.04 14.96 19.8l.22 14.08c0 2.2-1.76 3.52-2.42 3.96-7.48 3.5199999-12.98 5.9399999-20.9 8.1399999-15.18 3.96-23.32 11.22-23.32 22.44 0 11.66 8.8 19.8 21.34 19.8 8.36 0 12.98-2.2 22.44-10.34.66-.44 2.86-3.08 3.3-1.1 1.32 7.7 5.06 11.44 11.44 11.44 5.5 0 14.3-4.84 23.32-12.76zm-35.42-9.46c-1.76 5.06-12.98 11.66-17.38 11.66-6.82 0-12.1-5.28-12.1-12.1 0-5.94 3.08-9.9 11.88-13.42 5.28-2.2 10.56-4.4 15.62-6.82 1.98-1.1 1.98 3.52 1.98 4.4z"></path><path d="m311.74 160.386111c0-9.46-3.3-16.72-11.22-20.24-10.12-4.62-21.56-4.84-34.76-5.06-27.28-.22-27.28-3.96-27.28-6.16 0-1.98 1.76-3.74 4.18-5.72 1.98-1.76 4.62-3.52 6.16-5.72 3.08.88 5.94 1.32 9.02 1.32 21.34 0 37.18-13.64 37.18-33.4399999 0-4.18-.22-6.6-1.98-11-.22-.66 1.54-1.98 2.2-1.76 4.62.66 12.32 1.54 13.64 1.54 1.76 0 1.98-1.54 2.2-2.86.22-3.74-.22-7.04-.66-10.78-.22-3.3-1.1-3.52-4.18-3.08-5.72.88-18.7 2.42-20.02 2.42h-1.76c-5.72-6.16-13.86-9.24-23.32-9.24-20.68 0-36.96 15.84-36.96 36.74 0 12.32 6.38 21.7799999 17.38 27.2799999 1.1.66-2.2 2.42-2.64 2.86-2.2 1.1-3.3 1.98-6.82 3.96-4.84 2.64-9.24 5.5-9.24 9.46 0 6.16 3.52 12.1 15.4 16.28 1.1.44.22 2.64-1.1 3.74-1.76 1.1-3.52 1.98-5.28 3.3-7.92 5.28-13.42 10.78-13.42 21.56 0 15.18 20.68 24.2 35.42 24.2 31.46 0 57.86-17.16 57.86-39.6zm-33-73.6999999c0 15.6199999-7.7 24.4199999-18.48 24.4199999-11 0-19.8-10.56-19.8-28.5999999 0-14.08 7.7-24.64 18.04-24.64 11.44 0 20.24 11.88 20.24 28.82zm20.02 79.6399999c0 11.22-18.7 22.44-32.78 22.44-16.06 0-31.68-7.48-31.46-18.92 0-5.72 7.48-12.98 11.44-16.94 1.32-1.32 2.42-2.42 2.86-3.3 9.68.44 15.84 0 25.52.66 18.7 1.54 24.42 6.16 24.42 16.06z"></path><path d="m407.66 84.2661111c.22-1.54.22-2.2-.22-3.52-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.9399999 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.1599999 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.7c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m563.42 111.986111c.22-1.32-1.1-1.98-2.42-2.2s-2.86 0-3.74.88c-2.42 6.38-4.62 10.78-6.38 13.86-2.42 4.4-3.96 4.84-9.46 5.06-12.1.44-24.2.22-36.08.22-.88 0-1.76-.44-1.98-.88-.44-.66-.44-1.1 0-1.54 17.82-12.54 47.74-33.8799999 47.74-56.7599999 0-14.52-13.64-25.74-30.36-25.74-14.74 0-25.52 5.94-38.94 21.12-1.76 3.74 3.96 4.84 4.84 3.96 9.68-8.8 16.94-12.1 25.52-12.1 12.54 0 21.56 8.8 21.56 21.34 0 9.24-5.06 17.6-18.7 29.6999999-11.22 9.9-21.78 18.04-40.26 30.8-.88 1.1-1.32 5.28.44 6.16h72.82 1.98c2.2 0 5.28-.44 5.94-3.08z"></path></g><g fill="#e6594c"><path d="m524 133h64v145h-64z" fill-opacity="0.25"></path><path d="m524 316h-1v-9h1v4h64v-4h1v9h-1v-4h-64z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a non-breaking space to keep words together on the same line. This prevents awkward line breaks between closely related elements, such as labels and numbers.</p>
<pre><code class="language-html">Page&amp;nbsp;2.
</code></pre>
<h3>Thin space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The word “you” followed by a closing single and double quotation mark, with a thin space placed between them, highlighted in red." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(133.862966 132.32)"><path d="m102.857034 62.48c-.44-2.42-2.42-1.98-4.18-1.98-6.82-.44-23.76-.22-31.68.22-.66 0-1.32-.22-1.76 0-2.86.22-1.98 5.72-.66 6.38 11.22.22 13.42 2.42 13.42 7.92 0 2.2-.88 5.72-1.98 9.02-1.1 3.52-2.42 6.82-3.3 9.02l-13.2 33.66c-.22.66-2.86 4.4-3.52 2.86-6.6-16.5-12.98-33.22-20.24-49.28-1.98-4.4-2.42-6.16-2.42-7.7 0-3.3 1.54-5.28 11.44-5.5 1.1-.22 1.76-3.3 1.32-5.28-.66-2.2-2.42-1.76-4.18-1.76-10.56.22-28.16 1.1-37.40000002.44-1.98-.22-3.74-.44-4.4 1.98-.44 1.76.44 4.4 1.32 4.62 10.34000002.88 11.44000002 1.54 19.58000002 20.9l27.94 66.44-3.08 10.12c-5.5 17.82-11 24.42-19.8 26.84-7.04 1.76-11 4.4-11 9.46 0 5.28 4.84 9.9 10.34 9.9 3.74 0 7.7-1.54 10.12-4.62 3.08-3.74 5.5-7.7 7.92-13.42 2.64-5.94 5.28-13.2 9.24-23.54l27.28-73.48c9.02-23.98 12.76-27.5 21.56-28.6.88 0 1.76-2.86 1.32-4.62z"></path><path d="m210.657034 107.36c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z"></path><path d="m329.017034 145.86c2.64-.44 2.42-7.48-.22-7.04-1.32.44-3.08.88-4.62 1.32-4.4 1.1-9.46 1.98-9.46-4.84v-6.82-69.96c0-2.86-1.98-3.74-4.4-3.52-7.92.88-22.44 3.96-31.46 5.94-1.76.44-2.2 4.62-.44 5.72 4.4.66 6.16.88 7.26 1.1 1.32.44 1.98.22 4.84.88 3.74.66 5.72 3.52 6.6 7.04.88 4.18.66 8.58.66 12.98v38.06c0 1.76-.88 3.96-.88 4.18-8.58 6.82-17.82 11-24.64 11-14.74 0-19.36-5.94-19.36-29.7v-52.8c0-1.76-.88-4.62-3.52-4.18-7.7 1.54-20.68 5.06-27.5 6.6-2.64.66-1.1 5.28 0 5.5 2.86.88 5.94 1.54 8.8 2.42 4.4 1.32 4.84 3.74 4.84 8.14v46.64c0 18.7 7.7 30.36 24.86 30.36 13.64 0 24.86-8.36 35.42-16.06.88-.88 1.54 2.64 1.54 3.3l.44 8.58c.22 4.18 2.86 3.74 6.16 3.08 7.48-1.54 18.48-5.06 25.08-7.92z"></path><path d="m378.737034 19.36c0-11.22-7.04-19.36-16.72-19.36-7.04 0-12.76 5.28-12.76 12.32 0 6.38 4.4 11.22 10.56 11.22 1.76 0 3.3-.44 4.84-.88 2.2-.44 2.42 1.76 2.42 3.52 0 7.04-5.5 14.52-16.5 20.9-1.98 1.32-1.32 3.96 0 5.5 1.1 1.32 3.52.44 4.84-.22 13.86-6.6 23.32-19.8 23.32-33z"></path><path d="m520.452268 19.36c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22 1.32 0 2.64-.44 4.18-.66.22-.22.66-.22 1.1-.22 1.32-.22 2.2.44 2.2 3.52 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.54 3.96-.22 5.5 1.1 1.54 3.52.66 5.06 0 14.3-6.6 23.98-20.02 23.98-33.22zm-49.5 0c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22.88 0 1.98-.22 3.08-.44.66-.22 1.76-.66 2.64-.66.66 0 1.76.88 1.76 3.74 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.32 3.52-.22 5.06 1.32 1.76 4.18.66 4.84.44 14.3-6.6 24.2-20.02 24.2-33.22z"></path></g><g fill="#e6594c"><path d="m513 132h61v154h-61z" fill-opacity="0.25"></path><path d="m514 324h-1v-9h1v4h61v-4h1v9h-1v-4h-61z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a thin space to separate characters when a regular space is too big. This maintains typographic rhythm by creating subtle breathing room but avoiding excessive spacing.</p>
<pre><code class="language-html">Looking up he said, “She mouthed ‘I love you’&amp;thinsp;” and then returned to his book.
</code></pre>
<h3>Hair space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The initials “D. H. L.” spaced with thin hair spaces between each letter and period. Each space is marked with a dark vertical bar and a red spacing indicator." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(116 140)"><path d="m155.976399 68.86c0-22-9.24-40.7-26.62-53.24-15.62-11.22-32.5600004-15.62-61.3800004-15.62-21.78 0-42.9.88-64.68000004 1.76l-1.54.44c-1.76.22-2.86 6.82 0 6.82h1.98c18.70000004 0 18.92000004 4.18 18.92000004 22.66v83.82c0 9.68 1.1 20.46-11.88 21.56-2.86000004.22-5.28000004 0-8.14000004.44-2.86.88-2.64 4.4-1.76 6.38.66 1.98 3.3 1.98 4.84 1.98l52.80000004-.22c16.5 0 27.28 0 43.3400004-4.62 31.9-9.24 54.12-39.16 54.12-72.16zm-23.76 3.52c0 46.86-29.7 66-71.0600004 66-14.74 0-17.16-5.5-17.16-15.84v-109.78c0-3.08 2.42-4.84 4.84-5.06 9.68-.44 15.62-.44 25.3.44 17.38 1.76 25.74 4.84 35.4200004 12.32 14.08 10.78 22.66 30.14 22.66 51.92z"></path><path d="m187.896399 136.18c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m376.617727 139.48c-.66-1.76-3.3-1.76-4.84-1.76-12.98 0-16.72-4.18-16.72-14.52 0-21.34-.88-65.56 0-99 .22-10.56 3.74-14.08 14.52-14.96.88 0 2.64 0 3.08-1.1 1.1-2.2.44-6.38-2.86-6.16-13.2.44-39.16-1.1-55.22-.66-3.08 0-3.52 1.1-3.96 1.98-.66 1.98-.66 5.28 1.54 5.72h4.4c13.42 0 16.94 4.84 16.94 15.18 0 13.2.22 26.62 0 40.04 0 1.98-4.84 3.52-6.6 3.52-24.42.44-49.94.44-67.98 0-2.86 0-3.96-2.2-3.96-3.3v-40.26c0-10.56 3.74-15.18 16.72-15.18 1.76-.22 2.42-.22 2.64-1.32.44-1.76.88-3.74-.22-4.84-.66-.44-1.32-.88-2.2-.88-12.54.66-38.72.66-53.02 0-2.2-.22-2.2 6.16-.44 7.04 11.22.66 14.96 3.3 14.96 15.18v99c0 10.78-3.3 13.86-13.42 14.52-1.98 0-3.3-.22-5.5.22-1.98 1.32-1.76 4.18-1.1 6.16.66 1.54 2.2 1.54 3.52 1.54 13.86 0 41.8-.44 55.88 0 4.4-.66 3.08-8.36 0-7.92h-1.1-1.1c-12.1 0-15.62-2.86-15.62-14.52v-39.6c0-3.52 2.86-5.5 3.96-5.5 20.46.66 48.84.88 70.4 0 2.42 0 3.96 1.76 4.18 3.96v41.14c0 11.22-5.28 14.74-16.94 14.74h-5.28c-2.42 0-3.52 3.08-2.64 5.72.22 1.32 1.1 1.98 2.86 1.98 29.7 0 47.08-.44 62.48 0 2.64 0 3.74-3.74 2.64-6.16z"></path><path d="m421.497727 136.18c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m567.099055 112.42c.22-.44.44-1.98-.88-2.64-1.1-.88-2.86-.66-4.62 0l-7.7 10.12c-10.78 14.3-14.3 14.74-30.8 14.74h-20.68c-9.02 0-12.54-2.64-12.54-11.88v-100.76c0-11.44.88-11.66 17.38-12.1 2.42 0 4.84-.22 7.04-.44 3.08-.22 3.74-2.64 2.86-5.94-.44-1.76-1.76-1.98-3.08-1.98-25.52.44-40.92.66-62.92.22-.88-.22-2.64-.22-3.3 1.1-1.1 1.54-1.1 5.94 1.1 6.16h2.64c12.98 0 16.94 3.3 16.94 15.18v90.42c0 9.02-.22 13.2-.44 15.62-1.54 7.7-12.76 7.26-18.48 7.26-.66.22-1.1.22-1.76.44-1.76.66-2.2 4.18-1.54 5.72.22 1.1 1.54 2.2 3.08 1.98 6.6-.22 56.76-.44 96.8.22 3.52 0 5.28-1.98 6.82-4.18 2.86-4.62 8.8-16.72 14.08-29.26z"></path></g><g fill="#e6594c"><path d="m304.356399 141.98h23v92.046749 51.953251h-23z" fill-opacity="0.25"></path><path d="m538.356399 141.98h23v144h-23z" fill-opacity="0.25"></path><path d="m305.356399 323.98h-1v-9h1l-.000399 3.999h22l.000399-3.999h1v9h-1l-.000399-4.001h-22z" fill-rule="nonzero"></path><path d="m539.356399 323.98h-1v-9h1l-.000399 3.999h22l.000399-3.999h1v9h-1l-.000399-4.001h-22z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a hair space to prevent adjacent characters touching. This adds just enough separation to avoid visual collisions between initials without disrupting flow.</p>
<pre><code class="language-html">D.&amp;hairsp;H.&amp;hairsp;Lawrence.
</code></pre>
<h3>Narrow no-break space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The expression “1⁄2 em” with a narrow no-break space between the number and the unit, highlighted by a vertical block and measurement bar beneath it." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(116 136.06)"><path d="m61.7785054 141.02c-2.42-.44-4.62 0-7.04-.22-2.64-.22-4.62-.22-6.16-.66-1.76-.22-2.86-.44-3.74-1.1-1.54-1.32-1.76-3.96-1.76-9.02v-77.44c0-2.86-8.58-1.54-9.46-.88-5.72 7.92-15.84 16.72-23.75999997 22.22-3.3 2.2-5.5 3.52-9.46 6.16-1.32 1.1.88 6.82 3.08 5.72 4.4-2.2 7.91999997-3.52 12.53999997-5.94 3.08-1.54 5.94-3.08 8.8-5.28.66-.44 1.1 0 1.32 1.32.22 1.1.22 2.64.44 3.74v51.04c0 5.28-1.76 7.7-4.62 9.02-1.32.66-3.08.88-4.84.88-1.98.44-4.18.22-6.38.22-.87999997-.22-2.63999997-.22-3.95999997.44-2.42 1.32-1.98 9.02.66 8.58 13.63999997-.44 36.29999997-.22 54.11999997 0 2.86 0 2.64-8.14.22-8.8z"></path><path d="m172.438505 6.38c2.42-3.52.66-5.94-.88-5.94l-11-.44c-1.76 0-3.08 2.42-3.74 3.52-25.3 48.62-49.28 95.7-74.5799996 144.32-3.74 7.26 8.8 5.5 11.22 5.72 2.64.22 3.74-1.98 4.84-4.18z"></path><path d="m255.398505 115.94c.22-1.32-1.1-1.98-2.42-2.2s-2.86 0-3.74.88c-2.42 6.38-4.62 10.78-6.38 13.86-2.42 4.4-3.96 4.84-9.46 5.06-12.1.44-24.2.22-36.08.22-.88 0-1.76-.44-1.98-.88-.44-.66-.44-1.1 0-1.54 17.82-12.54 47.74-33.88 47.74-56.76 0-14.52-13.64-25.74-30.36-25.74-14.74 0-25.52 5.94-38.94 21.12-1.76 3.74 3.96 4.84 4.84 3.96 9.68-8.8 16.94-12.1 25.52-12.1 12.54 0 21.56 8.8 21.56 21.34 0 9.24-5.06 17.6-18.7 29.7-11.22 9.9-21.78 18.04-40.26 30.8-.88 1.1-1.32 5.28.44 6.16h72.82 1.98c2.2 0 5.28-.44 5.94-3.08z"></path><path d="m385.89374 88.22c.22-1.54.22-2.2-.22-3.52-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.94 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.16 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.7c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m567.61374 146.3c.22-1.54.22-3.74-.88-4.18-.88-.66-3.08-.66-4.18-.44-12.76 0-14.74-1.32-14.74-8.36 0-11.66.88-23.1.88-34.76 0-17.82-.44-24.2-3.3-30.8-3.52-8.14-11-13.2-20.24-13.2-12.98 0-24.86 8.8-35.2 16.06-1.1.88-2.2.88-2.42 0-3.08-9.9-11-16.06-21.12-16.06-12.54 0-24.86 8.14-34.54 14.96-1.1.88-2.64 1.54-2.86-.22v-12.98c0-2.42-.44-4.62-3.3-3.96-10.12 2.64-22.66 6.6-28.82 9.46-1.1.44-1.76 5.72 0 5.94l5.06.66c6.16.88 8.14 1.76 9.02 3.52.66.88.66 4.84.66 16.5v31.46c0 18.92-1.98 21.78-11.66 22.22-1.54 0-4.18 0-4.84 1.54-.44 1.1-.66 3.3-.22 4.4.44 1.32 1.32 1.54 1.98 1.54 12.76-.44 35.64-.44 46.64 0 .88.22 1.98-1.54 2.2-3.08 0-1.76-.66-3.74-1.54-3.96-.22-.22-1.1-.22-1.98 0-11.22 0-13.2-1.98-13.2-13.2v-50.82c7.48-5.06 18.26-12.76 27.72-12.76 9.02 0 14.74 6.6 14.74 18.26v35.86c0 20.02-1.76 22.44-13.2 22.44-.88 0-2.2-.22-2.86.22-2.64 1.1-2.2 6.82.44 6.82 12.1-.22 34.76 0 45.76.22 1.1 0 2.2-1.98 2.2-3.74-.22-2.64-.66-3.3-3.08-3.3-9.68 0-12.1-2.42-12.1-13.2v-50.82c11.22-7.7 20.46-12.76 26.84-12.76 11.66 0 15.62 6.6 15.62 34.54 0 13.2-.44 21.78-1.1 30.8-.88 9.24-3.08 11.44-12.54 11.44h-2.2c-2.64 0-2.2 4.18-1.54 5.72s1.54 1.32 2.86 1.32c14.96-.22 33.66-.66 48.84 0 1.1.22 2.2-1.54 2.2-3.3z"></path></g><g fill="#e6594c"><path d="m372.518505 136h45v150h-45z" fill-opacity="0.25"></path><path d="m373.518505 324h-1v-9h1l-.000505 4h44l.000505-4h1v9h-1l-.000505-4h-44z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a narrow no-break space to prevent initials or numbers and their units from wrapping across two lines.</p>
<pre><code class="language-html">A hair space is 1/24&amp;#8239;em wide.
</code></pre>
<h2>Use the right punctuation marks</h2>
<h3>Hyphen</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The word “op–ed” shown with a hyphen between “op” and “ed” to illustrate compound word formation." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(143.5 115.212983)"><path d="m99.66 116.467017c.22-27.9399999-21.78-49.2799999-50.16-49.2799999-28.16 0-49.5 20.9-49.5 49.0599999 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.7999999 11.88-34.0999999 27.28-34.0999999 18.04 0 33.66 21.12 33.66 46.6399999z"></path><path d="m209.66 112.287017c0-23.0999999-15.62-43.7799999-34.32-43.7799999-8.58 0-16.94 3.96-31.24 14.08-1.76 1.32-2.2-3.08-2.2-3.96v-13.64c0-3.52-2.42-3.96-5.94-1.76l-24.2 15.18c-.44.44-.88.66-1.32 1.54-.66.88-1.1 4.18.88 4.62 2.64.66 5.06 1.76 7.7 2.42 5.06 1.32 5.72 1.98 5.72 7.48v5.28 91.0799999c0 21.34-1.76 24.64-14.08 24.64h-1.98c-2.42 0-2.64 4.4-1.54 6.38.66 1.32 2.2 1.1 3.52 1.1 9.24.44 34.1-.66 49.5 0 .88 0 2.42-.44 2.86-1.32.66-1.1.66-3.52.22-5.06-.44-1.1-2.2-1.76-3.96-1.76h-3.08c-12.32 0-14.3-2.64-14.3-23.98v-26.18c0-4.18 1.1-3.96 2.64-3.52 6.38 1.98 11.22 3.08 16.5 3.08 26.18 0 48.62-24.2 48.62-51.92zm-17.16 8.58c0 19.8-10.78 34.1-25.3 34.1-8.14 0-17.38-4.4-25.3-11.88v-47.9599999c0-1.98.88-3.52 1.32-3.96 7.48-5.94 14.74-9.46 21.12-9.46 15.84 0 28.16 16.72 28.16 39.1599999z"></path><path d="m302.94 106.347017c0-1.54-1.54-3.52-3.08-3.52-23.1-.66-53.68.44-70.18 0-1.54 0-4.18 1.1-4.18 3.74v8.8c.22.88.66 2.64 2.2 2.64 26.84.44 36.74-.88 71.06 0 1.32-.22 3.3-1.1 3.74-3.08z"></path><path d="m400.4 101.067017c.22-1.5399999.22-2.1999999-.22-3.5199999-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.9399999 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.16 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.6999999c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m515.24 148.147017c-.88-2.86-4.18-1.32-6.16-.88-1.32.44-3.52 1.32-4.84 1.32-4.62 0-5.94-.22-5.94-12.54v-131.77999986c0-3.08-1.1-5.06-3.74-3.96-8.8 3.3-20.02 7.04-27.72 9.46-1.32.22-1.98.87999996-2.2 1.97999996s0 1.98.22 3.08c.22 1.54 1.1 1.32 2.42 1.54 3.52.44 9.02 0 11.88 1.76 1.54.88 1.32 2.2 1.76 3.52.22 11.22.66 27.94 0 44.22 0 3.08-1.32 5.72-2.42 5.5-5.94-1.98-12.76-3.52-18.26-3.52-28.16 0-49.5 22.66-49.5 51.9199999 0 24.86 16.06 45.32 36.74 45.32 8.58 0 17.6-4.4 31.02-13.64 1.54-1.1 2.42 1.76 2.42 3.3s-1.54 11.44 3.96 9.46c7.7-1.98 22.44-7.48 29.7-11 1.1-.44 1.32-3.08.66-5.06zm-34.54-9.68c-.22 2.42-1.32 4.62-2.2 5.06-8.8 5.94-16.94 9.02-22.88 9.02-15.4 0-27.28-16.94-27.28-39.6 0-21.5599999 10.78-36.2999999 27.06-36.2999999 9.9 0 17.16 5.06 25.3 16.72z"></path></g><path d="m371 340h-1v-9h1v4h74v-4h1v9h-1v-4h-74z" fill="#e6594c"></path></g></svg></figure></p>
<p>Use a hyphen for one of the following:</p>
<ul>
<li>joining words to indicate they have a combined meaning</li>
<li>indicating missing words shared by a series of compounds</li>
<li>indicating stuttering speech</li>
<li>splitting words when breaking them across lines</li>
</ul>
<p><em>Example:</em> She wore a well-tailored jacket.</p>
<h3>Figure dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The numbers 55 and 12 separated by a figure dash, illustrating the precise punctuation used for numeric identifiers." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><path d="m371.690859 321.8h-1v-9h1l-.000859 4h54l.000859-4h1v9h-1l-.000859-4h-54z" fill="#e6594c"></path><g fill="#f5f5f5" transform="translate(160 142)"><path d="m80.74 95.92c0-25.3-18.48-45.1-43.56-45.1-6.16 0-9.9.66-14.74 2.42-1.76.88-3.52.22-3.3-1.76l1.54-27.5c.66-2.42 3.08-3.52 4.62-3.96l37.84.66c5.5-.44 6.38-1.54 7.48-4.18l1.76-12.32c.44-2.42-.22-3.3-1.54-4.18h-2.42c-.88 0-2.2.44-2.86 1.32-2.2 2.64-5.72 1.98-11.66 1.98l-31.46-.44c-3.3 0-9.46.66-9.9 5.28l-4.62 62.04c-.22 3.08 0 3.74 1.98 5.06 1.54 1.1 3.3-.22 4.4-.88 6.16-4.18 12.32-5.94 18.92-5.94 17.38 0 28.16 13.2 28.16 32.56s-10.78 35.2-25.52 35.2c-3.52 0-5.5-.66-8.36-3.08-5.06-4.4-11.44-12.1-18.7-12.1-4.84 0-8.8 3.96-8.8 8.8 0 9.24 13.86 14.96 31.02 14.96 29.26 0 49.72-21.56 49.72-48.84z"></path><path d="m188.32 95.92c0-25.3-18.48-45.1-43.56-45.1-6.16 0-9.9.66-14.74 2.42-1.76.88-3.52.22-3.3-1.76l1.54-27.5c.66-2.42 3.08-3.52 4.62-3.96l37.84.66c5.5-.44 6.38-1.54 7.48-4.18l1.76-12.32c.44-2.42-.22-3.3-1.54-4.18h-2.42c-.88 0-2.2.44-2.86 1.32-2.2 2.64-5.72 1.98-11.66 1.98l-31.46-.44c-3.3 0-9.46.66-9.9 5.28l-4.62 62.04c-.22 3.08 0 3.74 1.98 5.06 1.54 1.1 3.3-.22 4.4-.88 6.16-4.18 12.32-5.94 18.92-5.94 17.38 0 28.16 13.2 28.16 32.56s-10.78 35.2-25.52 35.2c-3.52 0-5.5-.66-8.36-3.08-5.06-4.4-11.44-12.1-18.7-12.1-4.84 0-8.8 3.96-8.8 8.8 0 9.24 13.86 14.96 31.02 14.96 29.26 0 49.72-21.56 49.72-48.84z"></path><path d="m212.190859 69.5792969h53.925782v19.8730469h-53.925782z"></path><path d="m361.241719 136.84c-.44-2.64-1.54-4.4-3.74-4.4-1.98.22-5.72 0-8.8 0-6.82-.22-7.48-3.08-7.48-8.14v-2.64l-.22-117.26c-.22-1.98-2.2-4.4-4.62-4.4h-2.64c-1.98.44-4.18 2.42-4.84 3.52-1.98 2.42-3.96 4.62-10.34 10.34-8.58 8.14-14.74 12.98-22.22 18.26-.66.44-.88 1.54-.88 2.64l1.1 1.98c1.1 1.1 2.64 1.32 3.52.88 6.38-3.08 13.42-7.04 19.36-11.44 1.54-1.1 3.96.88 4.4 3.3l-.22 93.06c0 5.28-.22 9.46-6.6 9.68-1.98.88-4.84.22-8.14.22-2.64 0-4.18 1.54-5.28 3.74-.22 1.1 0 2.64.22 3.96.66 1.32 2.64 1.54 3.96 1.32 13.86-.44 36.08-.66 49.28.22 4.84.44 4.18-3.96 4.18-4.84z"></path><path d="m481.581719 111.98c0-2.64-.44-3.3-1.76-3.3l-1.1-.44c-1.98.44-3.52 2.42-3.74 3.52-2.42 12.32-7.48 14.08-23.32 13.2-6.6-.44-21.34-.44-29.7 0-7.04-.66-6.38-3.08-5.06-4.4 16.06-16.72 33-31.46 47.3-49.94 7.04-9.02 13.42-18.26 13.42-30.58 0-22.88-13.2-40.04-36.96-40.04-23.54 0-41.36 16.5-45.1 42.24-.22 1.1 0 2.86 2.42 2.86 1.54 0 3.74-.66 4.4-2.64 5.5-16.72 18.26-26.84 31.9-26.84 15.18 0 22.88 11.66 22.88 27.5 0 27.28-18.7 43.78-35.86 61.38-13.2 13.64-21.12 22.44-26.62 28.82-.44.88-2.64 2.64-2.42 4.4l.22 1.76c.88 1.54 4.18 2.2 5.94 2.2 29.04-1.76 55.44 0 72.38 0 3.08 0 6.82-1.76 7.48-4.18.88-5.72 3.52-18.7 3.3-25.52z"></path></g></g></svg></figure></p>
<p>A figure dash has the same width as a numerical digit and is used within numbers to maintain alignment.</p>
<p><em>Example:</em> (800‒555‒1212)</p>
<h3>En dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The numbers 4 and 5 separated by an en dash, demonstrating correct punctuation for numeric ranges." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(233.717354 176.426063)"><path d="m94.8226464 97.9339375c0-1.76 0-7.04-.22-8.36-.66-2.86-2.64-1.98-4.62-2.42l-18.04.44c-1.98-.88-2.64-1.54-3.08-3.74v-81.62000004c0-1.32-1.1-1.76-2.2-2.2-1.76-.22-3.74.66-4.62 1.76l-61.37999999 92.84000004c-1.32 1.98-.44 5.7199995.66 5.9399995 11.87999999.44 35.41999999.66 47.29999999 0 1.98-.22 1.98 2.64 2.2 4.18-.66 9.68-.22 22 .22 31.24 0 1.1 1.32 3.96 3.08 3.74h11.22c3.08 0 3.52-2.2 3.52-4.18.22-7.04.44-20.9 0-32.12 0-1.1 2.2-2.86 3.08-2.86l19.14.22c.66.22 3.74-1.0999995 3.74-2.8599995zm-43.78-12.54c-1.76 2.42-1.1 1.98-4.18 2.2-8.36.22-21.56.22-28.82 0-1.32 0-1.98-1.76-1.1-3.3l32.56-49.94c1.1-1.76 1.76 2.2 1.54 2.86-.66 14.3-.22 35.86 0 48.18z"></path><path d="m232.562646 51.9539375v-8.14c0-1.1-1.32-2.86-3.08-2.86-23.98-.44-78.1-1.1-111.98 0-1.1.22-2.42 1.32-2.64 2.42l-.22 7.7c0 1.32 1.32 2.86 2.2 2.86 38.28-.44 65.56-.44 112.2 0 1.98 0 3.3-.44 3.52-1.98z"></path><path d="m323.642646 7.29393746c.22-1.76.44-3.3-3.74-3.74l-25.08-2.86c-1.54-.22-1.98 0-3.08 1.32-8.58 9.24000004-23.98 28.60000004-31.24 38.72000004-.44.66-1.98 3.08 0 4.4 18.7 11.66 44.66 29.7 44.66 53.46 0 15.8399995-11 29.0399995-23.1 29.0399995-2.86 0-6.82-1.1-16.28-4.4-2.2-.88-4.18-1.32-5.72-1.32-4.4 0-7.92 3.96-7.92 8.58 0 5.72 4.84 9.02 11.66 9.02 11.22 0 23.76-3.96 34.32-10.78 14.3-9.24 22.22-22.44 22.22-37.1799995 0-13.42-7.26-27.94-20.02-40.04-7.26-6.82-9.68-9.24-20.68-16.06-3.74-2.2-2.42-3.08-.22-5.94l8.58-10.56c1.32-1.76 1.98-1.76 3.96-1.54l20.68 2.64c1.76 0 2.42-.22 3.74-1.54 1.1-1.1 6.6-8.36 7.26-11.22000004z"></path></g><path d="m349 340h-1v-9h1v4h116v-4h1v9h-1v-4h-116z" fill="#e6594c"></path></g></svg></figure></p>
<p>An en dash indicates range with spacing that visually balances the digits it connects.</p>
<p><em>Example:</em> 4–5 minutes.</p>
<h3>Em dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The phrase “I—no” with an em dash between words, highlighting punctuation for interruptions or emphasis." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(165.44 133.7712)"><path d="m58.3 2.4288c-.22-2.2-1.54-2.42-3.52-2.42-26.84 1.32-32.56 0-50.6 0-1.54 0-2.42-.22-3.08 1.54-1.32 4.18.66 5.28 2.42 5.5 11.88 1.32 13.64 3.96 13.86 15.4l.22 7.7v83.6l-.22 7.7c-.44 11.88-1.54 13.64-15.4 14.96-1.1 0-1.98 2.42-1.98 4.18 0 2.2 1.32 3.3 2.64 3.3 13.86-.44 40.7-.44 54.56 0 1.76 0 3.08-5.94.22-7.7-.88-.22-1.98-.22-3.3-.22-11.88-.22-15.18-3.08-15.18-14.52v-91.3c0-20.24 1.76-22.44 15.18-22.66 1.1 0 2.2-.44 3.08-.44 1.32 0 1.32-2.86 1.1-4.62z"></path><path d="m236.28 88.2288c-.22-1.32-2.2-1.98-3.74-2.42-34.32-.66-104.06-.66-141.02 0-3.74 0-4.84 2.86-4.84 4.18-.22 3.08.44 3.96.44 6.16-.22 2.2 1.98 3.08 3.52 2.86 36.08-.66 95.48-.66 142.12 0 1.54.22 2.64-1.54 3.08-2.42.22-3.74 1.54-5.06.44-8.36z"></path><path d="m366.74 141.6888c.44-1.54.22-3.52-.44-4.62-.88-1.1-2.42-1.32-3.52-.66-10.34 0-11-1.54-11-7.92 0-13.42 1.76-26.62 1.76-39.82 0-16.06-2.42-39.6-24.42-39.6-4.62 0-9.46 1.54-15.4 4.4-7.04 3.52-11.66 6.6-18.26 11.22-1.32.88-2.42-2.2-2.42-2.64v-12.1c0-2.64-1.54-4.62-5.06-3.74-8.14 1.76-18.92 8.36-25.96 9.46-1.54.66-1.54 5.72 0 5.94l4.4.88c6.82 1.32 7.92 1.98 8.58 3.52.66 1.32.88 5.06.88 17.82v30.14c0 19.8-2.42 22.88-12.54 22.88h-1.32c-2.2 0-2.42 3.74-1.76 5.72.44 1.1 2.2 1.1 3.08 1.1 11.66.66 30.8-.22 42.02.22 2.42-.22 3.08-1.1 3.08-3.74-.22-1.54-.88-3.74-1.98-3.74-11 0-13.42-1.32-13.42-12.76v-49.72c9.68-7.48 20.9-12.98 27.06-12.98 10.56 0 16.06 7.48 16.06 24.42 0 12.98 0 25.96-1.32 38.72-.88 9.02-3.74 11.44-13.42 12.32h-1.54c-1.32 0-1.76 2.2-1.76 3.74.22 2.86.66 3.52 3.52 3.52 11.44-.44 30.8.22 41.8 0 2.42 0 2.86.22 3.3-1.98z"></path><path d="m475.2 97.9088c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z"></path></g><path d="m254 340h-1v-9h1v4h146v-4h1v9h-1v-4h-146z" fill="#e6594c"></path></g></svg></figure></p>
<p>Use an em dash to set off phrases. Separate em dashes from phrases with hair spaces. You can also use to indicate attribution after a quote, followed by a full space.</p>
<p><em>Example:</em> this and that — that and this.</p>
<h3>Minus symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two horizontal dashes side by side: a shorter hyphen labeled with a red “X,” and a longer minus sign labeled with a green checkmark." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m77.44 3.73671287c0-1.54-1.54-3.52-3.08-3.52-23.1-.66-53.68.44-70.18 0-1.54 0-4.18 1.1-4.18 3.74v8.80000003c.22.88.66 2.64 2.2 2.64 26.84.44 36.74-.88 71.06 0 1.32-.22 3.3-1.1 3.74-3.08z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(184.68 179.823287)"></path><g transform="translate(195 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".121094" y="53">hyphen</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(17)"></path></g><path d="m122.98 9.26067903v-4.84c0-3.08-.44-4.62-4.4-4.4-7.26.66-75.68.88-114.18 0-3.52 0-4.4.66-4.4 4.18v5.72c0 4.61999997 3.08 4.61999997 7.48 4.61999997 34.54-.66 80.08-.66 109.56.22 2.86 0 4.4-.22 5.06-1.1.44-.44.66-.88.66-1.76.22-.66.22-1.54.22-2.63999997z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(486.62 168.139321)"></path><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="492.132812" y="355">minus symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(530 296)"></path></g></svg></figure></p>
<p>The minus symbol is longer and sits at the mathematical midpoint—unlike the shorter hyphen.</p>
<h3>Multiplication symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The lowercase letter “x” on the left labeled as incorrect, contrasted with a typographic multiplication symbol on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m110.88 89.6441365c0-1.54-.66-3.3-1.76-3.96-9.46-.66-13.64-2.86-19.8-10.78-8.8-11.22-3.74-4.84-26.62-34.1l10.34-11.88 8.36-9.24c9.24-10.34 12.32-12.32 25.52-13.2 1.54 0 2.64.44 3.3-1.32.44-1.1.22-2.86-.22-3.96-.66-1.1-1.32-1.32-2.64-1.1-9.02.44-25.08.22-41.8 0-1.1-.22-2.42-.22-2.64 1.32-.22 1.1-.22 2.86.22 3.96.66 1.54 1.32.88 2.64 1.1 8.14.22 9.68 1.98 9.68 5.06 0 2.86-2.64 7.26-5.94 11.22-3.08 3.96-6.82 7.92-8.58 9.68-2.2 2.64-3.08 2.42-4.84 0-.22-.22-4.62-5.28-8.58-10.56-4.18-5.5-7.92-11.22-7.92-12.98 0-2.64 5.72-2.64 7.48-2.64h1.98c1.1 0 1.54-3.96.22-5.72-.44-.66-1.76-.44-2.42-.44-10.34.22-31.02.66-42.68 0-3.3-.22-2.64 5.94-1.1 6.38 12.54.66 15.18 2.64 25.74 16.72l18.26 24.42-19.58 22.22c-11.88 13.64-15.18 15.84-25.74 16.06-1.32 0-1.76 1.54-1.76 3.3.22 1.54.88 3.08 1.76 3.08 10.56-.22 30.58-.22 42.02.22 2.2.44 2.2-6.16 0-6.38h-1.76c-9.46-.88-11.88-2.64-11.88-6.38 0-4.18 16.28-20.9 19.8-24.86 1.32-1.54 3.52.22 5.06 2.2l12.54 16.72c1.54 2.2 5.72 6.16 5.72 8.8 0 1.98-1.1 3.52-7.7 3.52h-1.98c-2.64 0-2.64 6.38 0 6.38 12.98-.44 34.1-.44 45.32-.22 1.1.22 1.98-1.1 1.98-2.64z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(164.12 147.155863)"></path><g transform="translate(193 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".53125" y="53">x letter</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(16)"></path></g><path d="m109.302904 5.96613481-5.72-5.06c-.88-.66-5.2799999 0-7.0399999 2.2-10.34 11.65999999-26.4 28.81999999-36.74 38.27999999-3.74 3.3-5.06 3.52-8.14.44-12.76-13.64-29.04-30.36-39.82-40.69999999-2.42000001-2.42-5.50000001-.22-5.72000001 0l-4.62 4.62c-2.64 2.64-.88 5.49999999 1.32 7.69999999l38.72000001 39.16c1.98 2.2 2.64 3.74-.22 6.6-10.12 10.12-31.24 31.68-39.82000001 39.82-2.42 2.2000002-1.54 5.0600002 0 6.3800002l3.74 3.52c3.08 2.86 5.72000001 1.98 7.92000001-.22 13.2-12.7600002 23.54-22.4400002 36.74-36.9600002 2.86-3.08 5.94-4.84 9.9-.66l37.84 38.5000002c1.54 1.54 3.2999999 2.2 6.3799999-.44l4.84-3.96c2.42-1.98 1.98-3.96-.88-6.8200002l-40.0399999-39.82c-2.42-2.42-1.32-4.4.44-5.72 8.8-7.92 29.7-29.92 40.6999999-40.7 2.64-2.63999999 1.76-4.61999999.22-6.15999999z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(503.587096 120.173865)"></path><g transform="translate(478 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".007813" y="59">multiplication symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(66)"></path></g></g></svg></figure></p>
<p>A proper multiplication sign avoids confusion with the letter “x” and aligns better with numerals.</p>
<h3>Obelus</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="A slash symbol on the left marked incorrect and labeled “slash,” contrasted with a division sign (obelus) on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m90.8913316 6.38c2.42-3.52.66-5.94-.88-5.94l-11-.44c-1.76 0-3.08 2.42-3.74 3.52-25.3 48.62-49.28 95.7-74.57999997 144.32-3.74000001 7.26 8.79999999 5.5 11.21999997 5.72 2.64.22 3.74-1.98 4.84-4.18z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(175.418668 90.06)"></path><g transform="translate(200 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".480469" y="53">slash</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(9)"></path></g><path d="m69.96 9.02c0-5.06-4.18-9.02-9.24-9.02-4.84 0-9.46 3.52-9.46 8.58-.22 5.5 4.18 9.9 9.46 9.9 5.06 0 9.24-4.18 9.24-9.46zm52.58 49.5-.44-6.38c-.22-1.98-1.32-2.86-3.08-3.3-.88-.22-1.98-.22-3.08-.22h-3.96-105.16c-2.86 0-6.82 0-6.82 3.96v5.5c0 2.42 4.62 4.84 7.04 4.84h108.68c3.08 0 7.04-.22 6.82-4.4zm-52.58 43.12c0-5.28-3.96-9.24-9.24-9.24-5.06 0-9.46 3.96-9.46 9.24s4.4 9.46 9.46 9.46c5.28 0 9.24-4.4 9.24-9.46z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(497.39 119.76)"></path><g transform="translate(532 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".910156" y="59">obelus</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(12)"></path></g></g></svg></figure></p>
<p>The obelus is the correct symbol for division, with visual weight that centers between operands.</p>
<h3>Quotation marks &amp; apostrophes</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Four straight vertical quote marks on the left labeled “straight marks” and marked with a red X. On the right, matching typographic curly quotes marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(133.339336 150.72)"><path d="m65.34 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.92 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path><path d="m174.201328 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.92 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.589336 157.32)"><path d="m79.2 40.92c0-6.16-4.4-11.22-10.56-11.22-.88 0-1.76.22-2.64.44s-1.54.44-2.42.44c-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.5-14.96 16.5-21.12 1.98-1.1 1.54-3.52.66-5.06-1.1-1.32-3.08-1.1-4.4-.66-14.74 6.38-24.64 19.8-24.64 33.66 0 10.78 7.04 19.14 16.94 19.14 7.04 0 12.76-5.28 12.76-12.32zm-49.5 0c0-6.16-4.4-11.22-10.56-11.22-1.1 0-1.98.22-2.86.44l-1.1.22c-.44 0-.88.22-1.1.22-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.72-14.74 16.5-21.12 1.76-.88 1.1-3.3.22-4.84-.44-.88-2.2-1.54-3.96-.88-14.74 6.38-24.64 19.8-24.64 33.66 0 10.78 7.04 19.14 16.94 19.14 7.04 0 12.76-5.28 12.76-12.32z"></path><path d="m204.561328 19.36c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22 1.32 0 2.64-.44 4.18-.66.22-.22.66-.22 1.1-.22 1.32-.22 2.2.44 2.2 3.52 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.54 3.96-.22 5.5 1.1 1.54 3.52.66 5.06 0 14.3-6.6 23.98-20.02 23.98-33.22zm-49.5 0c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22.88 0 1.98-.22 3.08-.44.66-.22 1.76-.66 2.64-.66.66 0 1.76.88 1.76 3.74 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.32 3.52-.22 5.06 1.32 1.76 4.18.66 4.84.44 14.3-6.6 24.2-20.02 24.2-33.22z"></path></g><g transform="translate(496 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".929688" y="59">quotation marks</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(48)"></path></g></g></svg></figure></p>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="On the left: two straight vertical marks labeled “straight marks” and marked incorrect. On the right: typographic apostrophes with curled shapes marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(179.979336 150.72)"><path d="m24.42 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path><path d="m80.4813281 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(505.659336 156.985695)"><path d="m29.48 41.2543047c0-6.16-4.62-11.44-10.78-11.44-1.54 0-3.08 1.1-4.62 1.1-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.5-14.96 16.28-21.12000002 3.96-2.86.44-7.26-1.98-6.38-15.62 5.94-26.18 19.14000002-26.18 33.44000002 0 11 7.26 20.02 16.94 20.02 7.04 0 12.54-5.28 12.54-12.32z"></path><path d="m105.121328 19.6943047c0-11.22000002-7.0399999-19.36000002-16.7199999-19.36000002-7.04 0-12.76 5.28-12.76 12.32000002 0 6.38 4.4 11.22 10.56 11.22 1.76 0 3.3-.44 4.84-.88 2.2-.44 2.42 1.76 2.42 3.52 0 7.04-5.5 14.52-16.5 20.9-1.98 1.32-1.32 3.96 0 5.5 1.1 1.32 3.52.44 4.84-.22 13.86-6.6 23.3199999-19.8 23.3199999-33z"></path></g><g transform="translate(510 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".761719" y="59">apostrophes</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(34)"></path></g></g></svg></figure></p>
<p>Use proper quotation marks and apostrophes (not straight marks).</p>
<h3>Ellipsis</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of ellipses shown side by side: three individual dots on the left marked incorrect, and a single ellipsis character on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(167 188)"><path d="m26.18 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m71.06 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m115.94 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path></g><g transform="translate(181 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".214844" y="53">three dots</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(28)"></path></g><path d="m178.42 12.32c0-7.26-5.28-12.32-12.98-12.32s-13.2 4.18-13.2 11.66c0 7.04 5.72 12.98 13.42 12.98s12.76-5.06 12.76-12.32zm-75.68.22c0-7.26-5.28-12.32-12.98-12.32s-13.2 4.84-13.2 12.32c0 7.04 5.5 12.1 13.42 12.1 7.7 0 12.76-4.84 12.76-12.1zm-76.34-.22c0-7.26-5.28-12.32-12.98-12.32s-13.42 4.4-13.42 11.66 5.72 12.98 13.42 12.98 12.98-5.28 12.98-12.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(470 189)"></path><g transform="translate(493 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".863281" y="59">ellipsis character</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(51)"></path></g></g></svg></figure></p>
<p>The proper ellipsis character (instead of three individual dots) ensures consistent spacing and baseline alignment across typefaces.</p>
<h3>Primes</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="On the left, three straight vertical tick marks labeled “straight marks” and marked incorrect; on the right, slanted tick marks representing prime and double prime symbols are marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(153.579336 150.72)"><path d="m24.42 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path><path d="m127.561328 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.9199999 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(476.896484 148.652344)"><path d="m43.5058594 0-28.6816406 63.2714844h-14.8242188l19.6582031-63.2714844z"></path><path d="m132.128906 0-28.68164 63.2714844h-14.8242191l19.6582031-63.2714844zm37.597656 0-28.68164 63.2714844h-14.824219l19.658203-63.2714844z"></path></g><g transform="translate(532 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".375" y="59">primes</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(12)"></path></g></g></svg></figure></p>
<p>Prime marks indicate units like inches and minutes; straight apostrophes are typographic imposters.</p>
<h3>Degree symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="A lowercase letter “o” on the left marked incorrect, contrasted with a correctly raised and smaller degree symbol on the right." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m99.66 49.28c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(170.17 144.4)"></path><g transform="translate(193 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="0" y="53">o letter</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(16)"></path></g><path d="m66 29.92c0-17.16-14.52-29.92-33.22-29.92s-32.78 12.76-32.78 29.92 14.3 29.92 33.22 29.92c18.26 0 32.78-12.98 32.78-29.92zm-13.64 3.3c0 12.1-7.48 20.68-17.38 20.68-11.66 0-21.56-12.1-21.56-28.16 0-11.66 7.48-20.02 17.38-20.02 11.44 0 21.56 12.1 21.56 27.5z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(525.22 101.72)"></path><g transform="translate(502 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".046875" y="59">degree symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(42)"></path></g></g></svg></figure></p>
<p>The proper degree symbol is smaller and raised—distinct from a lowercase o.</p>
<h3>Parentheses</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of parentheses compared side by side. On the left, the italicized version is marked incorrect; on the right, the roman version is marked correct, showing the preferred typographic form." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g transform="translate(202 326)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".226563" y="53">italic</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(7)"></path></g><g transform="translate(534 320)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".183594" y="59">roman</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(10)"></path></g><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(179 68.458291)"><path d="m67.32 7.38170935c2.86-4.84-.88-6.38-3.08-5.5-34.32 33.22000005-64.24 78.54000005-64.24 127.81999965 0 27.5 8.8 55.88 20.02 80.74 2.86 3.74 7.48 2.2 5.72-2.64-12.32-35.42-15.4-70.62-6.16-106.92 9.02-35.6399996 24.2-65.3399996 47.74-93.49999965z"></path><path d="m117.881328 83.0617094c0-28.38-9.68-55.88-20.0199999-80.96000005-2.86-4.84-7.04-.22-5.72 2.86 11.8799999 37.18000005 16.0599999 68.86000005 6.38 106.91999965-9.02 35.64-24.2 65.56-48.18 93.28-3.52 2.86-1.98 8.36 3.3 5.72 34.54-33.22 64.2399999-78.54 64.2399999-127.8199996z"></path></g><g transform="translate(496.38 67.985601)"><path d="m50.16 198.474399c-6.38-7.48-8.36-10.12-14.3-20.46-14.74-25.74-20.24-45.98-20.24-74.8 0-19.5800003 2.42-34.1000003 8.36-49.7200003 6.16-16.06 16.72-34.76 26.18-45.31999996 2.64-4.18-3.52-10.56-7.92-7.26-25.3 27.49999996-42.24 64.67999996-42.24 102.30000026 0 36.3 16.06 73.48 40.26 100.32 1.32 1.54 2.86 2.64 4.62 1.76 3.3-1.54 6.6-3.96 5.28-6.82z"></path><path d="m122.281328 102.774399c0-36.7400003-15.4-73.2600003-40.2599999-100.54000026-1.76-1.76-4.84-2.42-7.48-.22-2.42 1.98-2.42 5.5-.66 7.26 5.28 6.15999996 7.48 9.23999996 12.76 18.69999996 14.7399999 25.96 20.4599999 46.2 20.4599999 74.8000003 0 19.8-2.42 34.32-8.3599999 49.94-6.16 16.06-16.72 34.54-26.4 45.32-3.52 5.5 3.52 10.56 7.92 7.26 25.9599999-27.28 42.0199999-64.9 42.0199999-102.52z"></path></g></g></g></svg></figure></p>
<p>Parentheses and brackets are not designed to be italicized; they retain proper shape and spacing when set in roman.</p>
<h2>Use the right characters</h2>
<p>To learn what characters to use, read my article about <a href="https://www.jonathanharrell.com/blog/better-typography-with-font-variants" target="_blank" rel="noreferrer">better typography with font variants</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking the Benefits of CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties</link>
            <guid>https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties</guid>
            <pubDate>Tue, 24 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Overview of the benefits of CSS variables and helpful tips and tricks for working with them.]]></description>
            <content:encoded><![CDATA[<p>More and more developers are starting to use CSS variables, or as they are more correctly known, custom properties. Native CSS custom properties provide several clear benefits over preprocessor variables. They provide the power to achieve things like live theming which were previously much more difficult.</p>
<p>I want to take a quick look at the benefits of CSS custom properties and go over some lesser known features that may come in handy.</p>
<h2>Benefits of CSS Custom Properties</h2>
<h3>They’re Native</h3>
<p>This one is obvious, but important. You can use CSS custom properties without the need for a preprocessor. The tooling around CSS has grown in complexity over the last several years. We may now be looking at a simplification as more features are adopted into CSS proper.</p>
<h3>They’re Live</h3>
<p>Preprocessor variables are not actually live in the browser. They are evaluated when the CSS is compiled. Redefining a variable within a media query will do nothing. With CSS custom properties, the property actually lives in the browser so it can be redefined in media queries, or with JavaScript.</p>
<p>This also means that all variable expressions and calc statements using CSS custom properties will be recalculated when the variable is redefined.</p>
<p>Here we are redefining a grid gutter within a media query and using that custom property inside <code>calc()</code> statements:</p>
<pre><code class="language-css">:root {
  --grid-gutter: 1rem;
}

@media (min-width: 600px) {
  :root {
    --grid-gutter: 1.25rem;
  }
}

.grid {
  display: grid;
  grid-gap: var(--grid-gutter);
  margin-left: calc(-1 * var(--grid-gutter));
  margin-right: calc(-1 * var(--grid-gutter));
}
</code></pre>
<h3>They Cascade</h3>
<p>Since preprocessor variables don’t run in the browser, they have no knowledge of the DOM. Therefore they cannot be scoped to DOM elements. CSS custom properties, on the other hand, do have this knowledge. CSS custom properties can be scoped to particular elements, or classes on elements.</p>
<p>A clear use case for this is theme switching:</p>
<pre><code class="language-css">:root {
  --body-background-color: white;
  --body-text-color: black;
}

body {
  background-color: var(--body-background-color);
  color: var(--body-text-color);
}

.dark {
  --body-background-color: black;
  --body-text-color: white;
}
</code></pre>
<h3>They Work Anywhere</h3>
<p>Preprocessor variables do not work in plain CSS or with other preprocessors so their shareability is limited. Because custom properties are native, they can be used with any preprocessor. They can also be accessed and defined through JavaScript.</p>
<p>Here’s an example of overriding default Bootstrap Sass typography variables to use custom properties.</p>
<pre><code class="language-css">$font-size-h1: calc(var(--font-size-base) * 2.6) !default;
$font-size-h2: calc(var(--font-size-base) * 2.15) !default;
$font-size-h3: calc(var(--font-size-base) * 1.7) !default;
$font-size-h4: calc(var(--font-size-base) * 1.25) !default;
$font-size-h5: var(--font-size-base) !default;
$font-size-h6: calc(var(--font-size-base) * 0.85) !default;
</code></pre>
<h3>Using Fallback Values</h3>
<p>If you aren’t sure if a particular custom property exists, you can provide a default value for a particular property. This can be especially useful if you are creating a component that will be packaged up and imported as part of a library.</p>
<p>Simply pass in the default value as the second argument of the <code>var()</code> function:</p>
<pre><code class="language-css">/* single fallback */
.button {
  background-color: var(--button-background-color, gray);
}
</code></pre>
<p>You can provide multiple fallbacks by nesting multiple <code>var()</code> functions inside of each other:</p>
<pre><code class="language-css">/* multiple fallbacks */
.button-primary {
  background-color: var(
    --primary-button-background-color,
    var(
      --button-background-color,
      gray
    )
  );
}
</code></pre>
<h2>Converting Unitless Values</h2>
<p>There may be times when you need to define a custom property as a unitless value and then tack on a unit. This can often be the case when dealing with responsive typography. To accommodate this, simply write a <code>calc()</code> expression where you multiply the custom property value by the unit you wish to add onto it.</p>
<p>Here’s an example of a complex responsive font size calculation using custom properties:</p>
<pre><code class="language-css">:root {
  /* unitless base font size variables in px */
  --unitless-min-font-size: 15;
  --unitless-max-font-size: 18;

  /* unitless viewport widths in px */
  --unitless-lower-font-range: 460;
  --unitless-upper-font-range: 1200;

  --font-size-difference: calc(
    var(--unitless-max-font-size) -
    var(--unitless-min-font-size)
  );
  --font-range-difference: calc(
    var(--unitless-upper-font-range) -
    var(--unitless-lower-font-range)
  );
  --viewport-difference: calc(
    100vw -
    (var(--unitless-lower-font-range) * 1px)
  );
}

html {
  font-size: calc(
    (var(--unitless-min-font-size) * 1px) +
    var(--font-size-difference) *
    var(--viewport-difference) /
    var(--font-range-difference)
  );
}
</code></pre>
<h2>Redefining Custom Properties in Media Queries</h2>
<p>Remember that you can redefine custom properties within media queries. Margins, padding, and grid gutters are particularly good use cases for this. Imagine a condensed view of a grid on mobile, a slightly more spaced out view on tablet, and a view with even more space on desktop. This is possible very simply with custom properties. Instead of redefining the spacing properties on the element, just redefine the custom properties within the media queries.</p>
<pre><code class="language-css">:root {
  --card-padding: 1rem;
}

@media (min-width: 600px) {
  :root {
    --card-padding: 1.25rem;
  }
}

@media (min-width: 1000px) {
  :root {
    --card-padding: 1.5rem;
  }
}

.card {
  padding: var(--card-padding);
}
</code></pre>
<p>Learn how to use custom properties to enable live theming in my article <a href="https://www.jonathanharrell.com/blog/live-theming-with-css-variables" target="_blank" rel="noreferrer">Live Theming with CSS Variables</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s the Deal with Margin Collapse?]]></title>
            <link>https://www.jonathanharrell.com/blog/whats-the-deal-with-margin-collapse</link>
            <guid>https://www.jonathanharrell.com/blog/whats-the-deal-with-margin-collapse</guid>
            <pubDate>Sun, 11 Mar 2018 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn about margin collapse, a fundamental concept of CSS layout. See visual examples of when margin collapse happens, and when it doesn’t.]]></description>
            <content:encoded><![CDATA[<p>The concept of <em>margin collapse</em> is foundational to an understanding of the box model in CSS, but it is actually quite complex and potentially confusing. <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">The spec</a> describing how it works is thorough but difficult to understand. This article is an attempt to give some visual examples to the concepts from the specs.</p>
<p>The basic idea is that if two margins are adjoining, they will collapse into one margin, which will have the greater of the two margin values (it will be the more negative of the margins if both margins are negative).</p>
<h2>What makes margins adjoining?</h2>
<p>The key is understanding when two margins are adjoining. Here are the basic situations:</p>
<h3>Sibling Elements</h3>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of stacked rectangular blocks representing sibling elements. Each top and bottom pair is separated by a 30px space, which collapses into a single 30px margin between them." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 79h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m90 216h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 462)"></path><path d="m90 261h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 552)"></path><path d="m91 292h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m235 218.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z"></path><path d="m226 288.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z"></path><g transform="translate(240.46875 227.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><g transform="translate(240.46875 274.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 102h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 239h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 508)"></path><path d="m431 270h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m566 266.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 250.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The bottom margin of an element collapses with the top margin of its proceeding sibling.</p>
<h3>Child Elements</h3>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram of a parent element with a top margin of 30px and a child element with a top margin of 30px. Arrows indicate that both margins collapse into one." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 130h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m91 162h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c"><path d="m90 99h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 228)"></path><path d="m90 131h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 292)"></path><path d="m165 101.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 110.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><path d="m156 158.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 144.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 130h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m431 130h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 99h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 228)"></path><path d="m566 126.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 110.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The top margin of an element collapses with the top margin of its first child element.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram of a parent element with a bottom margin of 30px and a child element with a bottom margin of 30px. Both margins collapse into a single 30px space." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 100h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m91 208h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c"><path d="m90 347h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 724)"></path><path d="m156 374.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 360.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><path d="m90 379h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 788)"></path><path d="m165 381.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 390.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 100h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m431 240h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 379h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 788)"></path><path d="m566 406.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 390.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The bottom margin of an element collapses with the bottom margin of its last child element.</p>
<h3>An Element’s Own Top and Bottom Margins</h3>
<p><figure><svg height="400" viewBox="0 0 800 400" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Dashed rectangles representing an element with zero height. The element has top and bottom margins of 30px each, but they collapse into 0px due to the element not occupying vertical space." style="width:100%;height:auto"><defs><path id="a" d="m90 185h280v30h-280z"></path><mask id="b" fill="#fff" height="30" width="280" x="0" y="0"><use xlink:href="#a"></use></mask><path id="c" d="m0 0h280v30h-280z"></path><mask id="d" fill="#fff" height="30" width="280" x="0" y="0"><use xlink:href="#c"></use></mask></defs><g fill="none" fill-rule="evenodd"><use mask="url(#b)" stroke="#f5f5f5" stroke-dasharray="4 3" stroke-width="4" xlink:href="#a"></use><g fill="#e6594c"><path d="m90 155h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 340)"></path><path d="m90 215h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 460)"></path><g fill-rule="nonzero" transform="translate(225.319082 157.480136)"><path d="m.68091839 24.0198644v-1h4v-20.09099997l-3.56421223 6.33613062-.24513062.43578777-.87157554-.49026124.24513062-.43578777 4.5-8 .43578777-.77473381.43578777.77473381 4.50000004 8 .2451306.43578777-.87157556.49026124-.24513062-.43578777-3.56421223-6.33613062v20.09099997h4v1z"></path><g transform="translate(15.149668 9.727872)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g fill-rule="nonzero" transform="translate(225.319082 218.5)"><path d="m9.68091839 0v1l-4-.001v20.092l3.56421223-6.3361306.24513062-.4357878.87157556.4902613-.2451306.4357877-4.50000004 8-.43578777.7747338-.43578777-.7747338-4.5-8-.24513062-.4357877.87157554-.4902613.24513062.4357878 3.56421223 6.3361306v-20.091h-4v-1l4 .001v-.001z"></path><g transform="translate(15.149668 8.708008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m226 210.5v-1h4v-19h-4v-1h9v1h-4v19h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(240.366211 196.208008)"><path d="m0 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835938-.30761719c0-1.40625.45898437-2.24121094 1.21582031-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582031-.83984375-1.21582031-2.24609375z"></path><path d="m7.37792969 7.92480469v-1.92382813h.06347656c.22949219.546875.76171875.859375 1.46972656.859375 1.21582029 0 1.94824219-.86914062 1.94824219-2.30957031v-.71777344c0-1.44042969-.7226562-2.3046875-1.92871094-2.3046875-.72753906 0-1.29882812.34667969-1.50878906.90332031h-.06347656v-.24902343c-.02929688-.40039063-.25390625-.62011719-.63476563-.62011719-.40527343 0-.62988281.25390625-.62988281.71289062v5.64941407c0 .45410156.22949219.70800781.63964844.70800781.41503906 0 .64453125-.25390625.64453125-.70800781zm0-3.35449219v-.68847656c0-.83007813.41503906-1.32324219 1.08886719-1.32324219.68847656 0 1.07910156.5078125 1.07910156 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.06933594 1.40136718-.65917969 0-1.09863281-.49804687-1.09863281-1.25976562z"></path><path d="m11.6259766 6.25c0 .33691406.258789.59082031.571289.59082031.2832032 0 .4589844-.12695312.6738282-.45410156l.9033203-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.2099609-.32226563-.390625-.44921875-.6689453-.44921875-.3222656 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841796 1.62109375c-.0976563.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g transform="translate(430 185)"><use mask="url(#d)" stroke="#f5f5f5" stroke-dasharray="4 3" stroke-width="4" xlink:href="#c"></use><g fill="#e6594c" fill-rule="nonzero"><path d="m136 25.5v-1h4v-19h-4v-1h9v1h-4v19h4v1z"></path><g transform="translate(150.366211 11.208008)"><path d="m0 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835938-.30761719c0-1.40625.45898437-2.24121094 1.21582031-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582031-.83984375-1.21582031-2.24609375z"></path><path d="m7.37792969 7.92480469v-1.92382813h.06347656c.22949219.546875.76171875.859375 1.46972656.859375 1.21582029 0 1.94824219-.86914062 1.94824219-2.30957031v-.71777344c0-1.44042969-.7226562-2.3046875-1.92871094-2.3046875-.72753906 0-1.29882812.34667969-1.50878906.90332031h-.06347656v-.24902343c-.02929688-.40039063-.25390625-.62011719-.63476563-.62011719-.40527343 0-.62988281.25390625-.62988281.71289062v5.64941407c0 .45410156.22949219.70800781.63964844.70800781.41503906 0 .64453125-.25390625.64453125-.70800781zm0-3.35449219v-.68847656c0-.83007813.41503906-1.32324219 1.08886719-1.32324219.68847656 0 1.07910156.5078125 1.07910156 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.06933594 1.40136718-.65917969 0-1.09863281-.49804687-1.09863281-1.25976562z"></path><path d="m11.6259766 6.25c0 .33691406.258789.59082031.571289.59082031.2832032 0 .4589844-.12695312.6738282-.45410156l.9033203-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.2099609-.32226563-.390625-.44921875-.6689453-.44921875-.3222656 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841796 1.62109375c-.0976563.10742188-.15625.26855469-.15625.42480469z"></path></g></g></g></g></svg></figure></p>
<p>The top and bottom margins of an element collapse if the element has no height, padding, or border and all of its children elements’ margins collapse (height is represented here only for clarity).</p>
<h2>When does margin collapse not occur?</h2>
<p>There are several exceptions to these rules. This is where things can get hard to follow. Following are some visual examples of situations where margins would not collapse. For a more complete understanding, refer to <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">the spec</a>.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Left side shows a parent with padding above a child element. Both have 30px top margins, which do not collapse due to the padding. Right side has the same margins but no padding, so margins collapse." style="width:100%;height:auto">
    <defs>
        <path id="a2" d="m0 0h276v30h-276z"></path>
        <mask id="b2" fill="#fff">
            <use fill="#fff" fill-rule="evenodd" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a2"></use>
        </mask>
    </defs>
    <g fill="none" fill-rule="evenodd">
        <path d="m370 130v280h-280v-280" stroke="#f5f5f5" stroke-width="2"></path>
        <path d="m431 131h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path>
        <path d="m89 130h282" stroke="#f5f5f5" stroke-width="4"></path>
        <path d="m90 163h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path>
        <g transform="translate(430 162)">
            <path d="m1 31h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path>
            <g fill="#e6594c">
                <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z" fill-rule="nonzero"></path>
                <g fill-rule="nonzero" transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c">
            <path d="m89 98h282v30h-282z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 226)"></path>
            <path d="m90 132h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 294)"></path>
            <path d="m155 125.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(169.46875 109.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <path d="m155 159.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(170.46875 145.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <path d="m430 100h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 230)"></path>
            <path d="m566 127.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(578.46875 111.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <g transform="translate(432 132)">
                <use fill-opacity="0.1" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a2"></use>
                <path d="m31.8087452-2.20709356.7114183.70276883-32.31371111 32.71141833-.71141829-.7027689zm-7.9027356 0 .7114183.70276883-32.31371107 32.71141833-.71141829-.7027689zm-7.9027355 0 .7114182.70276883-32.313711 32.71141833-.7114183-.7027689zm-7.90273561 0 .71141829.70276883-32.31371108 32.71141833-.7114183-.7027689zm31.61094221 0 .7114183.70276883-32.31371105 32.71141833-.71141828-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027355 0 .7114183.70276883-32.3137111 32.71141833-.7114182-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114182.70276883-32.313711 32.71141833-.7114183-.7027689zm7.9027355 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027353 0 .711419.70276883-32.3137115 32.71141833-.7114183-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.7114183-.7027689zm7.902735 0 .711419.70276883-32.3137114 32.71141833-.7114183-.7027689zm7.902736 0 .711418.70276883-32.3137109 32.71141833-.7114182-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711419-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313712 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689z" fill-rule="nonzero" mask="url(#b2)"></path>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>If the parent element has a top border or padding, the parent’s top margin does not collapse with the first child’s top margin.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Left side shows a parent with bottom padding and a child with bottom margin; margins do not collapse. Right side shows same margins but no padding; the 30px margins collapse." style="width:100%;height:auto">
    <defs>
        <path id="a3" d="m0 0h276v30h-276z"></path>
        <mask id="b3" fill="#fff">
            <use fill="#fff" fill-rule="evenodd" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a3"></use>
        </mask>
    </defs>
    <g fill="none" fill-rule="evenodd">
        <g stroke="#f5f5f5">
            <path d="m90 378v-280h280v280" stroke-width="2"></path>
            <path d="m431 99h278v278h-278z" stroke-width="2"></path>
            <path d="m89 378h282" stroke-width="4"></path>
            <path d="m90 207h138v138h-138z" fill="#525252" stroke-width="2"></path>
            <path d="m431 177h138v138h-138z" fill="#525252" stroke-width="2"></path>
        </g>
        <g fill="#e6594c" transform="translate(89 380)">
            <path d="m0 0h282v30h-282z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 11.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(89 346)">
            <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(432 346)">
            <use fill-opacity="0.1" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a3"></use>
            <g fill-rule="nonzero" mask="url(#b3)">
                <g transform="translate(-24 -2)">
                    <path d="m55.8087452-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m47.9060096-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m40.0032741-.20709356.7114182.70276883-32.31371103 32.71141833-.71141829-.7027689z"></path>
                    <path d="m32.1005385-.20709356.7114183.70276883-32.3137111 32.71141833-.71141828-.7027689z"></path>
                    <path d="m63.7114807-.20709356.7114183.70276883-32.313711 32.71141833-.7114183-.7027689z"></path>
                    <path d="m71.6142163-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m79.5169519-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m87.4196874-.20709356.7114183.70276883-32.3137111 32.71141833-.7114182-.7027689z"></path>
                    <path d="m95.322423-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m103.225159-.20709356.711418.70276883-32.3137112 32.71141833-.7114183-.7027689z"></path>
                    <path d="m111.127894-.20709356.711418.70276883-32.3137107 32.71141833-.7114183-.7027689z"></path>
                    <path d="m119.03063-.20709356.711418.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m126.933365-.20709356.711419.70276883-32.3137115 32.71141833-.7114183-.7027689z"></path>
                    <path d="m134.836101-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m142.738836-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m150.641572-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m158.544307-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m166.447043-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m174.349779-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m182.252514-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m190.15525-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m198.057985-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m205.960721-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m213.863456-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m221.766192-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m229.668928-.20709356.711418.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m237.571663-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m245.474399-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m253.377134-.20709356.711419.70276883-32.313712 32.71141833-.711418-.7027689z"></path>
                    <path d="m261.27987-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m269.182605-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m277.085341-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m284.988076-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m292.890812-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m300.793548-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m308.696283-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m316.599019-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m324.501754-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(430 378)">
            <path d="m0 0h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m136 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(148.46875 11.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(430 316)">
            <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>If the parent element has a bottom border or padding, the parent’s bottom margin does not collapse with the last child’s bottom margin.</p>
<h2>Further Resources</h2>
<p>There are some additional, more complex scenarios that prevent collapse that aren’t covered here. For updated and complete information, see the <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">CSS Box Model Spec</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Advanced CSS-Only HTML Form Styling]]></title>
            <link>https://www.jonathanharrell.com/blog/advanced-css-only-form-styling</link>
            <guid>https://www.jonathanharrell.com/blog/advanced-css-only-form-styling</guid>
            <pubDate>Tue, 31 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn about selectors both new and old that you can use to style form inputs based on requirement, validity and more.]]></description>
            <content:encoded><![CDATA[<p>HTML form inputs have always been notoriously difficult to style with CSS, but there are several little-used selectors that give us significant power to style inputs and surrounding elements. Some of these are relatively new, while others have been available for quite some time.</p>
<h2>:placeholder-shown</h2>

<p>The first selector is relatively new and doesn’t have complete <a href="https://caniuse.com/#feat=css-placeholder-shown" target="_blank" rel="noreferrer">browser support</a> yet. However, this seems like something that could easily work as a progressive enhancement. The selector allows us to detect whether a placeholder is currently visible to the user. This could come in handy if we want to dynamically hide and show the input’s associated label.</p>
<p>Here I am hiding the label until the user types in the input, thus hiding the placeholder. I use a nice transition effect to display the label. Note that for this to work, the label must come <em>after</em> the input.</p>
<pre><code class="language-html">&lt;div class=&quot;form-group&quot;&gt;
  &lt;input type=&quot;text&quot; id=&quot;dynamic-label-input&quot; placeholder=&quot;Enter some text&quot;&gt;
  &lt;label for=&quot;dynamic-label-input&quot;&gt;Enter some text&lt;/label&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.form-group {
  position: relative;
  padding-top: 1.5rem;
}

label {
  position: absolute;
  top: 0;
  opacity: 1;
  transform: translateY(0);
  transition: all 0.2s ease-out;
}

input:placeholder-shown + label {
  opacity: 0;
  transform: translateY(1rem);
}
</code></pre>
<h2>:required</h2>

<p>Use this selector to indicate that an input has the <code>required</code> attribute. Here I am using an empty <code>.help-text</code> span and placing some content dynamically using the <code>::before</code> pseudo-element. Realistically, this would be done with JavaScript, but I am including here to demonstrate a pure CSS approach.</p>
<pre><code class="language-html">&lt;label for=&quot;required-input&quot;&gt;Required input&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;required-input&quot; required&gt;
&lt;span class=&quot;help-text&quot;&gt;&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input:required + .help-text::before {
  content: &#x27;*Required&#x27;;
}
</code></pre>
<h2>:optional</h2>

<p>This selector does the opposite of <code>:required</code>. I am again using an empty <code>.help-text</code> <code>span</code> to display some optional text if the required attribute is NOT present.</p>
<pre><code class="language-css">input:optional + .help-text::before {
  content: &#x27;*Optional&#x27;;
}
</code></pre>
<h2>:disabled</h2>

<p>This one should be familiar to most of you, but still important to remember. It’s pretty essential to display whether or not an input is disabled to a user.</p>
<pre><code class="language-css">&amp;:disabled {
  border-color: var(--gray-lighter);
  background-color: var(--gray-lightest);
  color: var(--gray-light);
}
</code></pre>
<h2>:read-only</h2>

<p>An input with the <code>readonly</code> attribute should convey a slightly different meaning than a disabled input. Thankfully we have this selector to help with that.</p>
<pre><code class="language-html">&lt;input type=&quot;text&quot; value=&quot;Read-only value&quot; readonly&gt;
</code></pre>
<pre><code class="language-css">input:read-only {
  border-color: var(--gray-lighter);
  color: var(--gray);
  cursor: not-allowed;
}
</code></pre>
<h2>:valid</h2>

<p>While much form validation will happen with JavaScript, we are able to take advantage of HTML form validation and style inputs accordingly. This selector gives us the chance to style any input which is currently passing the native browser validation rules.</p>
<p>Here I am encoding an svg to display a checkbox in the input using the <code>background-image</code> property.</p>
<pre><code class="language-css">input:valid {
  border-color: var(--color-primary);
  background-image: url(&quot;data:image/svg+xml,...&quot;);
}
</code></pre>
<h2>:invalid</h2>

<p>This selector checks if an input is currently NOT passing the native browser validation rules (for example, if an email input does not contain a real email).</p>
<p>Again, I am encoding an svg to display an ‘x’ in the input.</p>
<pre><code class="language-css">input:invalid {
  border-color: var(--color-error);
  background-image: url(&quot;data:image/svg+xml,...&quot;);
}
</code></pre>
<p>I can also customize some validation messages for each input type using the <code>.help-text</code> span and the <code>::before</code> pseudo-element.</p>
<pre><code class="language-html">&lt;label for=&quot;invalid-email&quot;&gt;Invalid input&lt;/label&gt;
&lt;input type=&quot;email&quot; id=&quot;invalid-email&quot; value=&quot;notanemail&quot;&gt;
&lt;span class=&quot;help-text&quot;&gt;&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input[type=&#x27;email&#x27;]:invalid + .help-text::before {
  content: &#x27;You must enter a valid email.&#x27;
}
</code></pre>
<h2>:in-range/:out-of-range</h2>

<p>These selectors detect whether the value of a number input is within the min/max values specified or not.</p>
<pre><code class="language-html">&lt;label for=&quot;out-of-range-input&quot;&gt;Out-of-range input&lt;/label&gt;
&lt;input
  type=&quot;number&quot;
  id=&quot;out-of-range-input&quot;
  min=&quot;1&quot;
  max=&quot;10&quot;
  value=&quot;12&quot;
&gt;
&lt;span class=&quot;help-text&quot;&gt;(value must be between 1 and 10)&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input:out-of-range + .help-text::before {
  content: &#x27;Out of range&#x27;;
}
</code></pre>
<h2>:checked</h2>

<p>Most of you will be familiar with this selector. It gives us the ability to apply custom styles to checkboxes and radio buttons when checked. My technique for styling checkboxes involves creating a wrapper element and placing the <code>label</code> after the <code>input</code>.</p>
<p>I visually hide the input so that it disappears from view but is still clickable. Then I style <code>label::before</code> to look like the checkbox input and <code>label::after</code> to look like a checkmark. I use the <code>:checked</code> selector to style these two pseudo-elements appropriately:</p>
<pre><code class="language-html">&lt;div class=&quot;checkbox&quot;&gt;
  &lt;input type=&quot;checkbox&quot;/&gt;
  &lt;label&gt;Option&lt;/label&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">&amp;:checked + label::before {
  background-color: var(--color-primary);
}

&amp;:checked + label::after {
  display: block;
  position: absolute;
  top: 0.2rem;
  left: 0.375rem;
  width: 0.25rem;
  height: 0.5rem;
  border: solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
  content: &#x27;&#x27;;
}
</code></pre>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Better Typography with Font Variants]]></title>
            <link>https://www.jonathanharrell.com/blog/better-typography-with-font-variants</link>
            <guid>https://www.jonathanharrell.com/blog/better-typography-with-font-variants</guid>
            <pubDate>Sun, 07 Jan 2018 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use font variants, including ligatures, caps, numerals and alternate glyphs, to create more precise, beautiful typography on the web.]]></description>
            <content:encoded><![CDATA[<p>Typography on the web has always lagged behind its expression in print. This makes sense, as type on the printed page developed over centuries to a point of complexity that has been hard to replicate within the confines of a browser.</p>
<p>However, this is quickly changing thanks to the increasing availability of OpenType features in web fonts and the ability to control those features with CSS.</p>
<p>This article is an overview of how to control OpenType features using CSS, but remember that whatever web font you are using will also need to support these features.</p>
<h2>The font-variant- Properties</h2>
<p>You can control most OpenType features using various properties beginning with <code>font-variant-</code>. There is also a low-level property <code>font-feature-settings</code> which can be used to support legacy browsers. Whenever possible, however, you should use the more modern <code>font-variant</code> properties. One solution is to use an <code>@supports</code> rule to check if a font-variant property is supported and otherwise use <code>font-feature-settings</code>.</p>
<pre><code class="language-css">body {
  font-feature-settings: &quot;liga&quot; 1;
}

@supports (font-variant-ligatures: common-ligatures) {
  body {
    font-feature-settings: normal;
    font-variant-ligatures: common-ligatures;
  }
}
</code></pre>
<h2>font-variant-ligatures</h2>
<p>Ligatures are single glyphs made from two or more characters. They typically prevent ugly or awkward letter collisions and, therefore, aid legibility.</p>
<h3>common-ligatures</h3>
<p><figure><svg height="366" viewBox="0 0 800 366" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;ffi&#x27; text with common ligatures off (left) and common ligatures on (right). The ligatured version connects the letters more smoothly, and red dotted circles highlight the connected areas." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(134 76)"><path d="m93.84 11.28c0 3.28-1.24 5.86-3.72 7.74s-5.88 2.82-10.2 2.82c-3.84 0-7.72-1.48-11.64-4.44-3.28-2.48-6.2-3.72-8.76-3.72-5.44 0-10.08 3.02-13.92 9.06s-5.76 14.22-5.76 24.54v27.96h26.88c1.92 0 2.88 2.16 2.88 6.48s-.96 6.48-2.88 6.48l-27.12-.96v60.24c0 7.84.96 12.96 2.88 15.36s6.32 4.04 13.2 4.92c1.28.16 1.92 1.24 1.92 3.24 0 2.24-.64 3.36-1.92 3.36-3.28 0-7.44-.24-12.48-.72-5.68-.48-10.48-.72-14.4-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-57.36c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12s.72-3.28 2.16-3.6c10.24-2.32 15.36-4.56 15.36-6.72 0-19.36 5.9-36.42 17.7-51.18s25.42-22.14 40.86-22.14c5.36 0 9.58 1 12.66 3s4.62 4.76 4.62 8.28z"></path><path d="m174.24 11.28c0 3.28-1.24 5.86-3.72 7.74s-5.88 2.82-10.2 2.82c-3.84 0-7.72-1.48-11.64-4.44-3.28-2.48-6.2-3.72-8.76-3.72-5.44 0-10.08 3.02-13.92 9.06s-5.76 14.22-5.76 24.54v27.96h26.88c1.92 0 2.88 2.16 2.88 6.48s-.96 6.48-2.88 6.48l-27.12-.96v60.24c0 7.84.96 12.96 2.88 15.36s6.32 4.04 13.2 4.92c1.28.16 1.92 1.24 1.92 3.24 0 2.24-.64 3.36-1.92 3.36-3.28 0-7.44-.24-12.48-.72-5.68-.48-10.48-.72-14.4-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-57.36c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12s.72-3.28 2.16-3.6c10.24-2.32 15.36-4.56 15.36-6.72 0-19.36 5.9-36.42 17.7-51.18s25.42-22.14 40.86-22.14c5.36 0 9.58 1 12.66 3s4.62 4.76 4.62 8.28z"></path><path d="m198.12 25.92c0 3.36-1.22 6.28-3.66 8.76s-5.38 3.72-8.82 3.72-6.38-1.24-8.82-3.72-3.66-5.4-3.66-8.76c0-3.52 1.2-6.48 3.6-8.88s5.36-3.6 8.88-3.6c3.44 0 6.38 1.2 8.82 3.6s3.66 5.36 3.66 8.88zm16.8 145.08c0 2.24-.64 3.36-1.92 3.36-3.28 0-7.48-.24-12.6-.72-5.76-.48-10.6-.72-14.52-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-44.4c0-6.4-.82-10.6-2.46-12.6s-5.22-3.32-10.74-3.96c-1.28 0-1.92-1.04-1.92-3.12 0-1.92.64-2.88 1.92-2.88 8.4-2.16 15.28-4.46 20.64-6.9s8.72-4.46 10.08-6.06c.8-.96 1.68-1.44 2.64-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.92-1.92 31.84-1.92 41.76v37.68c0 7.84.98 12.96 2.94 15.36s6.42 4.04 13.38 4.92c1.28.16 1.92 1.24 1.92 3.24z"></path></g><path d="m197.28 171.12c0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-47.76c0-4.72-.98-7.98-2.94-9.78s-5.46-2.7-10.5-2.7h-37.2v60.24c0 7.76 1 12.88 3 15.36s6.44 4.16 13.32 5.04c1.28.16 1.92 1.2 1.92 3.12 0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-60.24h-45.84v60.24c0 7.76.96 12.88 2.88 15.36s6.32 4.16 13.2 5.04c1.28.16 1.92 1.2 1.92 3.12 0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-57.12c0-2.4-.96-3.6-2.88-3.6h-12.24c-1.76 0-2.64-1.04-2.64-3.12 0-2.16.72-3.36 2.16-3.6 10.32-2.24 15.48-4.4 15.48-6.48.08-17.36 6.46-33.02 19.14-46.98s27.78-20.94 45.3-20.94c4.4 0 8.72.82 12.96 2.46s7.56 3.74 9.96 6.3l3.24 3.24c11.84-11.84 25.52-17.76 41.04-17.76 6.96 0 13.22 1.7 18.78 5.1s8.34 7.14 8.34 11.22c0 6.24-4 9.36-12 9.36-2.88 0-6.8-1.84-11.76-5.52s-10.96-5.52-18-5.52c-18.4 0-27.6 11.92-27.6 35.76v24.96h36.72c7.04 0 12.86-.48 17.46-1.44s8.74-2.84 12.42-5.64c1.6-1.2 2.76-1.8 3.48-1.8 2.24 0 3.36.64 3.36 1.92 0 3.04-.32 9.64-.96 19.8s-.96 17.48-.96 21.96v37.44c0 7.76 1 12.88 3 15.36s6.44 4.16 13.32 5.04c1.28.16 1.92 1.2 1.92 3.12zm-100.08-139.68c-6.88-7.36-16.72-11.04-29.52-11.04-18.56 0-27.84 11.92-27.84 35.76v19.2h45.84v-1.68c0-16.16 3.84-30.24 11.52-42.24z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(451 76)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="160.046875" y="297">Common ligatures off</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="469.667969" y="297">Common ligatures on</tspan></text><path d="m614.234697 112.966543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.5615382-.922931-.3849641c-.246281.5903705-.516624 1.1701318-.810258 1.7379603l.888173.45951c.305396-.590563.587475-1.1951375.845016-1.8125062zm-44.532059-.9126517-.931972.3625315c.242614.6239585.510056 1.2355171.801112 1.8334624l.898847-.4382621c-.279826-.5749154-.536067-1.1612644-.767987-1.7577318zm45.76287-2.8914793-.97363-.2281349c-.146459.6237542-.3183 1.2401719-.514981 1.8480249l.951226.3084932c.204496-.6319437.384012-1.2751262.537385-1.9283832zm-46.861861-.8229393-.979108.2033412c.136207.6565946.298692 1.3035657.486305 1.9397645l.959143-.2829239c-.180601-.6124244-.336218-1.2328865-.46634-1.8601818zm47.454653-3.1407804-.99775-.0670456c-.04281.6408108-.111476 1.2772743-.205648 1.9083244l.989021.1477696c.097738-.6549075.169555-1.3182827.214377-1.9890484zm-47.926526-.7224656-.999222.0394396c.026299.6720717.079671 1.3371911.159054 1.9942982l.992665-.1208987c-.07645-.6330477-.12739-1.2710053-.152497-1.9128391zm47.98013-1.2190201c-.007631-.6727971-.04238-1.3390799-.103207-1.9978066l-.995773.0918395c.058624.6348503.091736 1.2741208.099038 1.9168098zm-48.820056-2.6876153c-.079399.6567798-.132811 1.3215654-.159178 1.9932983l.999225.0393589c.025184-.6416779.076189-1.2794792.152692-1.912371zm48.441635-1.3509399c-.117605-.6607347-.261694-1.3123055-.431132-1.9535755l-.966707.2558876c.163065.6171974.30099 1.2418748.4133 1.8728534zm-47.636728-2.5717139c-.186299.6365608-.347453 1.2838592-.482316 1.9407471l.979508.2014036c.128803-.6274123.283096-1.2480338.462373-1.8606627zm46.599791-1.3372391c-.224879-.6305914-.474864-1.2492626-.748752-1.85481l-.911108.4121669c.263442.5824572.503003 1.1757603.717985 1.7786069zm-45.147112-2.4320018c-.289862.5986803-.556076 1.2109443-.797428 1.8355786l.932936.3600433c.230647-.5968999.485631-1.1837262.764218-1.7591648zm43.483734-1.2392887c-.325312-.5841843-.673829-1.1536754-1.044305-1.7072273l-.830835.5565188c.355823.5316767.689834 1.0776441 1.0011 1.6365635zm-41.461825-2.1923753c-.38351.5443357-.745406 1.104995-1.084439 1.6807297l.861555.5076641c.324709-.5514254.671849-1.0893917 1.040452-1.6125621zm39.225035-1.1471089c-.41549-.5222254-.851856-1.0270994-1.307837-1.5133595l-.730049.6833952c.437837.4668778.85656.9513562 1.255023 1.4521586zm-36.633572-1.9547463c-.468072.474945-.916901.9689066-1.345221 1.4806208l.76679.6418975c.410782-.4907633.841394-.9647082 1.290665-1.4205765zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m601.167334 173.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m535.167334 173.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m559.167334 119.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.3336957-.267854-1.9824311l-.981784.1899977c.119336.6151633.203766 1.2387854.252555 1.8687724zm-34.483861-2.6482938c-.151202.6436458-.266871 1.3009878-.344825 1.9698428l.993317.115421c.073081-.6269337.181703-1.2465778.325051-1.8567581zm33.70785-1.3196086c-.20454-.6394284-.444848-1.2628628-.718571-1.8679496l-.910695.4130807c.258926.5724718.484941 1.1597527.676749 1.7593548zm-32.341151-2.4626681c-.296496.594511-.560155 1.2082667-.788602 1.8388918l.940321.3402895c.214348-.5916694.462453-1.1699726.742917-1.7323841zm30.705438-1.159937c-.342872-.5741376-.717695-1.1269877-1.122015-1.6560953l-.794188.6076718c.381979.4999114.735182 1.0211703 1.057686 1.5612093zm-28.526149-2.1878034c-.424449.5130808-.82019 1.050779-1.184762 1.6106335l.837872.5458672c.3432-.5270498.716309-1.0342173 1.117307-1.5189599zm26.084823-1.0030196c-.463157-.4799571-.953497-.9335094-1.468539-1.3581776l-.635889.7717808c.485486.4003155.947931.8280353 1.384922 1.2808838zm-23.158979-1.8017493c-.531945.4034182-1.040109.8365589-1.522018 1.2969486l.691165.7226965c.454991-.4346444.934359-.843125 1.435634-1.2232532zm20.090753-.7302188c-.55788-.3626904-1.137721-.6944476-1.737092-.9928403l-.445793.8951364c.563217.2803874 1.109833.5928713 1.637264.9357364zm-16.699081-1.2844902c-.610629.274748-1.202656.5834952-1.773668.9238304l.512288.8588139c.540121-.3219079 1.098294-.6127142 1.671945-.8708125zm13.066184-.5159124c-.623868-.2230703-1.264101-.4117269-1.91841-.5636832l-.226376.97404c.613699.1425186 1.217265.3199919 1.808321.5313392zm-9.219694-.7012222c-.660204.1270521-1.307205.2912062-1.938748.4902075l.300227.953868c.598409-.188574 1.208278-.3429207 1.82729-.462054zm3.326647-.3157896v1c.633159 0 1.261717.0356159 1.88375.1062625l.112887-.9936079c-.655251-.0744207-1.321479-.1126546-1.996637-.1126546zm-.024032.0000161c-.424413.0005705-.845286.0162491-1.262109.0465269l.072071.9973996c.395227-.0287181.792733-.0434072 1.192045-.0439265z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures that the type designer has decided should be used in normal conditions. In most circumstances you should use these. Most browsers enable them by default.</p>
<pre><code class="language-css">font-variant-ligatures: common-ligatures; /* enable */
font-variant-ligatures: no-common-ligatures; /* disable */

font-feature-settings: &#x27;liga&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;liga&#x27; 0; /* low-level disable */
</code></pre>
<h3>discretionary-ligatures</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;ct&#x27; text with discretionary ligatures off (left) and discretionary ligatures on (right). In the ligatured version, a decorative connection forms between the letters, with highlighted circles marking the join points." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(160 142.52)"><path d="m92.64 38.52c0 6.56-3.28 9.84-9.84 9.84-2.8 0-5.1-.6-6.9-1.8s-3.62-3.8-5.46-7.8c-2.16-4.72-4.46-7.82-6.9-9.3s-5.62-2.22-9.54-2.22c-9.68 0-17.06 4.02-22.14 12.06s-7.62 19.78-7.62 35.22c0 12.88 3.2 23.26 9.6 31.14s14.96 11.82 25.68 11.82c12.16 0 21.8-3.8 28.92-11.4l.6-.24c.72 0 1.42.46 2.1 1.38s1.02 1.94 1.02 3.06c0 1.6-2.34 4.36-7.02 8.28s-9.8 6.88-15.36 8.88-11.46 3-17.7 3c-14.32 0-26.58-5.26-36.78-15.78s-15.3-23.82-15.3-39.9c0-15.92 5.34-29.1 16.02-39.54s23.34-15.66 37.98-15.66c10.8 0 19.94 1.86 27.42 5.58s11.22 8.18 11.22 13.38z"></path><path d="m185.28 31.32c0 4.32-1.04 6.48-3.12 6.48l-35.76-.96v57.6c0 15.04 5.36 22.56 16.08 22.56 6.64 0 12.68-1.56 18.12-4.68.64 0 1.22.42 1.74 1.26s.78 1.74.78 2.7c0 2-2.98 4.7-8.94 8.1s-12.66 5.1-20.1 5.1c-9.12 0-16.4-2.78-21.84-8.34s-8.16-12.9-8.16-22.02v-1.08l.48-58.32c0-2.24-.96-3.36-2.88-3.36h-9.12c-1.76 0-2.64-1.04-2.64-3.12 0-1.6.72-2.8 2.16-3.6 11.12-6.56 20.8-15.8 29.04-27.72.88-1.28 2-1.92 3.36-1.92 2.24 0 3.36.64 3.36 1.92l-.96 22.92h35.28c2.08 0 3.12 2.16 3.12 6.48z"></path></g><path d="m185.16 78.84c0 4.48-1.04 6.72-3.12 6.72l-35.76-.96v57.36c0 15.04 5.36 22.56 16.08 22.56 6.72 0 12.8-1.56 18.24-4.68.56 0 1.06.42 1.5 1.26s.66 1.74.66 2.7c0 2.24-2.92 5-8.76 8.28s-12.6 4.92-20.28 4.92c-9.04 0-16.26-2.78-21.66-8.34s-8.1-12.9-8.1-22.02v-1.08l.24-58.08c0-2.24-.88-3.36-2.64-3.36h-9.36c-1.6 0-2.4-1.12-2.4-3.36 0-1.44.76-2.6 2.28-3.48 5.76-3.36 9.7-6.48 11.82-9.36s3.18-6.4 3.18-10.56c0-14.8-3.12-26.26-9.36-34.38s-15.16-12.18-26.76-12.18c-10.32 0-18.78 3.28-25.38 9.84s-9.9 14.88-9.9 24.96c0 6.64 1.54 11.96 4.62 15.96s8.06 7.08 14.94 9.24c4.24 1.36 7.72 3.4 10.44 6.12s4.08 5.44 4.08 8.16c0 6.72-3.28 10.08-9.84 10.08-2.48 0-4.48-.56-6-1.68s-3.04-3.52-4.56-7.2c-1.92-4.56-4.04-7.58-6.36-9.06s-5.32-2.22-9-2.22c-19.84 0-29.76 15.76-29.76 47.28 0 12.96 3.4 23.32 10.2 31.08s16.12 11.64 27.96 11.64c5.76 0 11.58-1.24 17.46-3.72s10.62-5.64 14.22-9.48l.6-.24c.72 0 1.44.46 2.16 1.38s1.08 1.9 1.08 2.94c0 1.68-2.6 4.62-7.8 8.82s-10.84 7.46-16.92 9.78-12.16 3.48-18.24 3.48c-15.52 0-28.56-5.18-39.12-15.54s-15.84-23.74-15.84-40.14c0-15.92 5.3-29.06 15.9-39.42s23.3-15.54 38.1-15.54c-1.92-2-3.56-4.96-4.92-8.88s-2.04-7.72-2.04-11.4c0-13.84 4.78-25.14 14.34-33.9s21.66-13.14 36.3-13.14c14.32 0 26.08 4.9 35.28 14.7s13.8 22.34 13.8 37.62v20.04h35.28c2.08 0 3.12 2.16 3.12 6.48z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(450 95)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="445.285156" y="325">Discretionary ligatures on</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="160.164062" y="325">Discretionary ligatures off</tspan></text><path d="m584.834697 186.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path><path d="m515.767334 178.718016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-34.986909-.736193v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353l-.007179-.543468zm34.94722-1.316287c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.023101.000015c-.424729.000549-.845912.016228-1.26304.046528l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043928z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures which can be used for typographic purposes, for example to achieve a special effect. These are disabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: discretionary-ligatures; /* enable */
font-variant-ligatures: no-discretionary-ligatures; /* disable */

font-feature-settings: &#x27;dlig&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;dlig&#x27; 0; /* low-level disable */
</code></pre>
<h3>contextual</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Handwritten-style word &#x27;Deftly&#x27; demonstrating contextual ligatures, where certain letter combinations automatically adjust for smoother, more natural connections, with key join areas circled." style="width:100%;height:auto"><defs><path id="a" d="m374.5 235c9.664983 0 17.5-7.835017 17.5-17.5s-7.835017-17.5-17.5-17.5-17.5 7.835017-17.5 17.5 7.835017 17.5 17.5 17.5z"></path><mask id="b" fill="#fff" height="35" width="35" x="0" y="0"><use xlink:href="#a"></use></mask><path id="c" d="m449.1 195.92c13.530976 0 24.5-10.969024 24.5-24.5s-10.969024-24.5-24.5-24.5-24.5 10.969024-24.5 24.5 10.969024 24.5 24.5 24.5z"></path><mask id="d" fill="#fff" height="49" width="49" x="0" y="0"><use xlink:href="#c"></use></mask><path id="e" d="m518.5 227c9.664983 0 17.5-7.835017 17.5-17.5s-7.835017-17.5-17.5-17.5-17.5 7.835017-17.5 17.5 7.835017 17.5 17.5 17.5z"></path><mask id="f" fill="#fff" height="35" width="35" x="0" y="0"><use xlink:href="#e"></use></mask></defs><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5"><path d="m240.157985 201.117708c-6.941739 13.001845-17.769945 22.289595-30.072892 30.01893-14.149209 8.891244-29.516244 14.899046-45.700621 18.931851-.489901.121712-.998693.163119-2.215261.353843 6.264189-5.956356 8.468116-13.226448 10.975554-20.28574 5.980827-16.831379 12.01077-33.651466 17.625116-50.607067 2.727831-8.238769 5.992161-16.271756 8.756515-24.489193 1.159895-3.444323 1.677502-3.524627 5.31587-2.734127 6.990855 1.515753 13.883478 3.338922 20.373097 6.349096 8.620501 4.001437 15.907312 9.482238 18.56084 19.187823 2.250524 8.232495.253136 16.022058-3.618218 23.274584m3.040159-52.738909c-9.887444-6.559896-21.162732-10.578899-33.037488-12.438457-2.202667-.343805-3.988477-1.002555-4.882642-3.307553-.746816-1.92355-2.426838-2.466862-4.39274-2.246024-1.695135.191978-3.304631.727762-4.727738 1.621152-1.988571 1.245979-4.027518 1.263546-6.317083 1.130541-6.886326-.400269-13.833102-1.224648-20.614899.855748-2.162367.663769-4.293249 1.746629-4.666027 4.177103-.371519 2.421691 1.361397 3.939953 3.169876 5.372892 3.618218 2.863367 7.958064 3.653867 12.273982 4.476991 2.609449.496886 3.730303 1.297424 2.317271 4.13946-1.953309 3.926151-3.653481 7.989071-5.260458 12.072067-7.077753 17.999563-13.441433 36.252589-18.825311 54.823069-2.198889 7.586292-5.344836 15.023267-4.723959 23.220628.298475 3.921132 1.441998 7.169711 6.004756 8.740673-5.885114 1.45176-11.183353 2.71656-16.457664 4.076723-3.259293.84069-6.398944 2.0026-9.099069 4.109346-1.686318 1.313736-3.540135 2.678917-2.785763 5.123194.74052 2.401614 2.93563 3.022722 5.211342 3.384093 5.959417.947346 11.898685.703922 17.865658-.011293 27.011324-3.236031 52.258247-11.356852 74.432266-27.43412 14.289001-10.360571 26.284658-22.812831 32.009829-40.030677 7.561357-22.742564.871496-39.669306-17.494139-51.855556"></path><path d="m323.761276 178.030459c1.533979-1.011339 3.297618-1.801254 5.066251-2.301325 2.393956-.677958 5.177336-1.317353 6.832386 1.186737 1.571424 2.377206 1.25689 5.1587-.063655 7.678962-1.070915 2.047557-2.837051 3.561455-4.520809 5.081574-8.78949 7.940193-19.522353 12.185826-30.640896 15.795797 6.008606-10.759005 12.943342-20.590017 23.326723-27.441745m44.138417 40.418729c-8.863131 8.195205-18.072001 15.908998-28.21948 22.447248-9.854164 6.349169-20.198852 11.669584-32.234787 12.315199-9.756808.521219-15.070193-3.103679-16.587947-12.399788-.549187-3.357446-.218427-6.586765.124815-9.88077.948596-9.077172.984793-8.884358 9.665693-11.342422 13.842012-3.92096 27.409429-8.594515 38.944855-17.588342 7.05955-5.503277 12.459058-12.107457 13.556184-21.455812.856233-7.292091-4.885269-17.121858-11.287043-19.542603-10.026409-3.79532-19.005618-1.395722-27.464348 4.229462-11.522944 7.664034-20.472197 17.80106-27.50304 29.586331-5.187322 8.695277-10.070094 17.563463-12.27558 27.633315-1.603876 7.324433-2.837051 14.622743-1.680013 22.137502 1.54022 9.992726 6.591493 17.605758 15.704255 22.131282 9.404829 4.672312 19.249008 3.978182 28.887241.91431 16.710266-5.31295 30.283924-15.774649 43.114932-27.241467 5.475645-4.894981 10.545641-10.244006 15.801611-15.386534 2.562457-7.190086 4.928954-14.442369 6.954706-21.802877-5.680342 4.556623-10.167451 10.313667-15.502054 15.245966"></path><path d="m381.883202 203.673532c2.521643-6.91324 4.976695-13.851405 7.605133-20.724763.732495-1.918059-.536493-2.118714-1.662248-2.532486-4.701538-1.723636-9.408102-3.39742-13.506556-6.408487-3.13729-2.304413-5.994398-4.810727-5.249339-9.105485.619417-3.576888 4.503023-6.069493 9.410614-6.295074 5.608676-.255492 11.070351.701669 16.258124 2.801688 2.135921.864934 3.014161.544634 3.908735-1.689986 4.43392-11.073397 9.130432-22.038365 16.425228-31.663558 7.917983-10.447753 17.67914-17.336067 31.63047-15.855459 9.538769 1.013244 16.773257 8.458654 16.857438 17.066865.026385 2.806673-.761393 5.381533-2.478924 7.550099-2.333179 2.947506-7.19177 3.18181-10.448421.491044-2.08315-1.721144-3.907478-3.750124-5.900166-5.585928-3.310677-3.050948-5.788344-3.221691-9.46464-.639353-4.399997 3.09083-7.043512 7.603691-9.558873 12.134-4.186404 7.541376-7.543568 15.475337-10.854245 23.427992-.961164 2.311891-.655853 3.19552 2.08692 3.527036 6.971896.843747 13.957612 1.165293 20.963431 1.362209 1.790404.051098 2.392231-.193177 1.805481-2.239606-2.030381-7.098938 1.31045-10.591077 8.714556-9.15783 3.68886.714132 7.336258 1.682509 10.957272 2.695752 1.811763.508492 2.692516.317808 3.500396-1.657582 2.785492-6.80855 5.827294-13.516149 8.851506-20.228734.848086-1.884409 1.954996-3.666621 3.608449-5.012628 4.149968-3.383711 8.901763-2.187261 10.876861 2.789225 1.541632 3.882232 1.50017 7.909035.824214 11.955779-.841804 5.033815-2.421129 9.874453-4.148711 14.656516-.693546 1.925537-.540262 2.72317 1.741403 3.052194 6.326094.909801 12.686111 1.272475 19.05618 1.56411 1.045345.047359 2.090689.072285 3.13729.094719 2.679952.05733 5.099824.676742 5.864987 3.618016.745059 2.859017-1.049114 4.712269-3.098342 6.261423-4.657563 3.52205-10.24111 3.939562-15.771888 4.345856-5.534546.407541-11.08794.287896-16.622487-.052345-1.750198-.107182-2.718901.478581-3.476524 1.939247-9.335229 17.98539-15.797017 36.967821-20.060063 56.715483-.173386.803865-.226156 1.650104-.212335 2.47391.065334 3.930838 2.182408 5.637026 6.121297 4.973993 7.265898-1.223869 13.537966-4.713516 19.649211-8.543403 15.583425-9.768518 28.965595-22.103173 41.700706-35.196826.663392-.682974 1.03655-1.941739 2.41736-1.650104 1.162192 1.107963.544031 2.310644.141976 3.46472-2.05174 5.880055-4.332149 11.680346-6.280863 17.59779-.43221 1.31111-.745059 2.973678-2.820671 2.695752-7.616441 7.241017-15.235395 14.478295-23.634588 20.849393-9.248536 7.01419-18.830024 13.483745-29.995862 17.154106-5.935346 1.952956-12.088054 3.104539-17.950527-.073532-7.435516-4.030542-8.950763-11.084613-8.602734-18.663378.456082-9.96668 4.153737-19.21549 7.064871-28.616349 3.376011-10.902654 7.269668-21.633317 11.299019-32.312882.248772-.661787.327927-1.387135.562878-2.425305-6.303478.840008-12.412211 1.346007-18.53602 1.535445-7.850136.243029-15.692734.022433-23.477536-1.06185-2.445-.341487-3.667501.291635-4.563331 2.756821-10.110442 27.802514-19.219515 55.921588-27.367423 84.348499-1.341861 4.678619-2.416103 9.479376-5.619984 13.386534-3.437575 4.191315-7.151564 3.748878-9.332716-1.2301-2.678695-6.118099-1.952482-12.398216-.392004-18.616019 3.079495-12.276078 6.388915-24.493581 10.143109-36.587699.368133-1.183987.603084-2.407856.902113-3.614277-1.023986-.574545-1.027755-1.390874-.675956-2.386669 2.319358-6.57923 3.639859-13.544814 7.676749-19.458519"></path><path d="m512.962073 229.342943c2.234932-6.01776 4.464856-12.038024 6.706049-18.05328.726196-1.942909 1.48119-3.874551 2.222411-5.8112 2.442775-5.970189 4.8555-11.951645 7.333333-17.908063 4.477377-10.758608 8.981047-21.505949 13.49849-32.249534 3.426896-8.152206 6.855044-16.304411 10.359568-24.424068 1.307154-3.028284 3.582152-5.374297 6.034944-7.504987 3.74492-3.254873 8.425131-1.917871 9.79614 2.870548.742473 2.597639 1.106823 5.295428.939047 8.043293-1.088043 17.631398-7.737749 33.090794-18.27511 47.0542-4.374708 5.79743-6.843776 12.598863-9.639633 19.173707-4.767855 11.216794-9.514426 22.461129-12.768537 34.256289-.972853 3.530286-1.780433 7.09312-2.161061 10.721052-.455751 4.333989 1.5776 5.91761 5.663081 4.3753 6.947697-2.622676 12.541914-7.384806 18.228784-11.956651 11.237264-9.032273 21.204937-19.42283 31.523188-29.44784 2.700699-2.623929 3.381821-5.604641 3.649763-8.933375.326788-4.04731.484548-8.10839.717432-12.163211.103921-1.817722-.126458-3.542804-1.35348-5.00249-.132719-.157736-.232884-.348021-.325536-.533298-2.817142-5.554567 4.082977-18.649172 10.253143-19.46289 3.292925-.434401 6.423083 1.507256 7.807864 5.011252 1.436116 3.636695 2.040863 7.442393 1.759148 11.349493-1.063001 14.762102-2.857207 29.446588-4.611347 44.136081-.557168 4.655721-1.051733 9.317701-1.538786 13.979681-.071367.691034-.296738 1.60991.479541 1.982969.835126.401851 1.319674-.456934 1.756644-.972707 8.435148-9.927363 16.867791-19.858482 24.764552-30.226505 4.168117-5.469439 8.396334-10.893811 12.455522-16.442118 2.580502-3.527781 4.842979-7.28716 7.365886-10.858757 1.260827-1.783921 1.63269-3.303697-.175289-4.927378-1.478686-1.32949-1.263331-2.920623-.562176-4.594379 2.435262-5.814956 12.893744-12.134417 19.211653-11.567318 3.602185.321731 5.154743 1.97045 5.370098 5.63093.359342 6.035287-1.913152 11.228061-5.234875 16.032755-6.928916 10.02501-13.632461 20.227785-20.993339 29.928559-7.741505 10.204028-16.073983 19.968648-24.276248 29.817143-14.470091 17.373512-29.74651 34.067256-43.730801 51.851383-.36435.463193-.667349.976462-1.454897 2.140705 3.821296-.829993 6.917648-1.543561 10.030276-2.169498 5.108417-1.026537 10.229354-2.021777 15.485514-1.248119 1.344716.197796 2.872232.322983 3.356781 1.846515.52211 1.641207-.634796 2.815465-1.74788 3.739348-3.825052 3.173502-8.438904 4.977452-12.920037 6.901583-6.125092 2.630188-12.426724 4.853517-18.660746 7.234582-1.669.638456-3.414375.831245-5.198565.978966-8.957258.739857-11.834498-5.660976-9.981445-12.979433 1.397302-5.512003 4.769107-9.917349 8.236069-14.243826 6.713562-8.377543 13.447156-16.740064 20.179498-25.103836.787548-.977714 1.696546-1.889079 1.434864-3.309956-1.923168-10.484447-.518354-20.997688-.270445-31.500914.017529-.717324.002504-1.434647.002504-2.119423-1.229526-.455682-1.653975.456934-2.152296 1.012767-13.271867 14.797154-27.765747 28.241032-44.111428 39.604296-4.640146 3.22608-9.598315 5.876298-15.27642 6.897827-5.368846.965195-10.765237-2.106904-12.700926-7.208292-2.623072-6.914102-1.488703-13.750588.256673-20.599592 1.108075-4.342752 2.164817-8.698023 3.242843-13.048286"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="326.277344" y="344">Contextual ligatures</tspan></text><use mask="url(#b)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#a"></use><use mask="url(#d)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#c"></use><use mask="url(#f)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#e"></use></g></svg></figure></p>
<p>These are alternate ligatures that are affected by their surrounding context. They often harmonize the shapes of grouped glyphs. These are enabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: contextual; /* enable */
font-variant-ligatures: no-contextual; /* disable */

font-feature-settings: &#x27;calt&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;calt&#x27; 0; /* low-level disable */
</code></pre>
<h3>historical-ligatures</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;sb&#x27; text with historical ligatures off (left) and historical ligatures on (right). In the ligatured version, an archaic &#x27;long s&#x27; character appears, with stylistic connections highlighted by circles." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(149 104)"><path d="m73.8 144.6c0 9.76-3.84 17.96-11.52 24.6s-16.96 9.96-27.84 9.96c-3.84 0-9.76-.84-17.76-2.52-6-1.2-10.08-1.8-12.24-1.8-.64-5.6-2.12-14.12-4.44-25.56 0-1.2 1.16-1.8 3.48-1.8 1.92 0 3.08.64 3.48 1.92 1.84 5.92 5.48 11.08 10.92 15.48s11.04 6.6 16.8 6.6c6 0 10.66-1.64 13.98-4.92s4.98-7.88 4.98-13.8c0-3.76-1.38-7.08-4.14-9.96s-8.74-6.44-17.94-10.68c-12.08-5.52-20.06-10.72-23.94-15.6s-5.82-10.72-5.82-17.52c0-8.4 3.64-15.62 10.92-21.66s15.88-9.06 25.8-9.06c4.16 0 10 .72 17.52 2.16 4.16.8 6.88 1.2 8.16 1.2.24 9.44.76 17.48 1.56 24.12 0 1.2-1.16 1.8-3.48 1.8-2 0-3.12-.64-3.36-1.92-.88-5.84-3.08-10.58-6.6-14.22s-7.72-5.46-12.6-5.46c-12.48 0-18.72 5.44-18.72 16.32 0 3.68 1.48 7.08 4.44 10.2s9.4 7.16 19.32 12.12c11.84 5.92 19.64 11.04 23.4 15.36s5.64 9.2 5.64 14.64z"></path><path d="m203.28 123.24c0 14.72-5.2 27.72-15.6 39s-22.44 16.92-36.12 16.92c-7.6 0-14.96-1.6-22.08-4.8-4.88-2.24-9.2-3.36-12.96-3.36-6 0-9.96 2.56-11.88 7.68-.4.96-1.4 1.44-3 1.44-2.08 0-3.12-.64-3.12-1.92.64-6.72.96-14.8.96-24.24v-117c0-6.48-.82-10.72-2.46-12.72s-5.22-3.28-10.74-3.84c-1.28 0-1.92-.96-1.92-2.88 0-2.24.64-3.36 1.92-3.36 14.24-3.68 24.36-7.92 30.36-12.72 1.2-.96 2.2-1.44 3-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.44-1.92 31.44-1.92 42v35.88c7.52-7.52 16.72-11.28 27.6-11.28 16.24 0 29.4 4.92 39.48 14.76s15.12 23.16 15.12 39.96zm-24.12.96c0-14.72-2.92-26.24-8.76-34.56s-14.04-12.48-24.6-12.48c-5.68 0-11.22 2.14-16.62 6.42s-8.1 8.54-8.1 12.78v55.44c0 4.24 3.22 8.54 9.66 12.9s12.42 6.54 17.94 6.54c9.6 0 17.08-4.28 22.44-12.84s8.04-19.96 8.04-34.2z"></path></g><path d="m194.28 123c0 14.8-5.22 27.82-15.66 39.06s-22.58 16.86-36.42 16.86c-7.52 0-14.8-1.56-21.84-4.68-4.96-2.16-9.28-3.24-12.96-3.24-5.92 0-9.92 2.48-12 7.44-.4.96-1.4 1.44-3 1.44-1.92 0-2.88-.64-2.88-1.92.64-6.72.96-14.8.96-24.24v-117c0-14.24-7.52-21.36-22.56-21.36-18.72 0-28.08 12-28.08 36v96.84c0 8.08.84 13.3 2.52 15.66s5.88 3.94 12.6 4.74c1.28 0 1.92 1.12 1.92 3.36s-.64 3.36-1.92 3.36c-3.28 0-7.32-.24-12.12-.72-5.28-.48-9.88-.72-13.8-.72s-8.72.24-14.4.72c-5.12.48-9.36.72-12.72.72-1.28 0-1.92-1.12-1.92-3.36s.64-3.36 1.92-3.36c6.96-.8 11.42-2.4 13.38-4.8s2.94-7.6 2.94-15.6v-57.12c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12 0-2 .72-3.2 2.16-3.6 10.24-2.72 15.36-4.96 15.36-6.72 0-12.16 2.96-24.1 8.88-35.82s13.74-20.9 23.46-27.54 20.38-9.96 31.98-9.96c7.36 0 13.6 1.52 18.72 4.56 2.48-1.44 4.6-2.84 6.36-4.2 1.12-.88 2.08-1.32 2.88-1.32 2.24 0 3.36.64 3.36 1.92-1.28 13.12-1.92 27.04-1.92 41.76v35.88c7.52-7.52 16.64-11.28 27.36-11.28 16.4 0 29.66 4.92 39.78 14.76s15.18 23.16 15.18 39.96zm-24.48.96c0-14.8-2.9-26.34-8.7-34.62s-14.02-12.42-24.66-12.42c-5.52 0-10.98 2.16-16.38 6.48s-8.1 8.56-8.1 12.72v55.44c0 4.32 3.2 8.64 9.6 12.96s12.4 6.48 18 6.48c9.6 0 17.04-4.24 22.32-12.72s7.92-19.92 7.92-34.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.36 104.24)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="470.565625" y="332.12">Historical ligatures on</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="165.444531" y="332.12">Historical ligatures off</tspan></text><path d="m552.834697 139.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.9547468c-.468072.474945-.916901.9689068-1.345221 1.4806208l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m469.167334 203.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m508.167334 290.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures which could be considered a subset of discretionary, but are specifically used to achieve a historical effect. These are disabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: historical-ligatures; /* enable */
font-variant-ligatures: no-historical-ligatures; /* disable */

font-feature-settings: &#x27;hlig&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;hlig&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-position</h2>
<p>The proper markup for subscripts and superscripts uses the <code>sub</code> and <code>sup</code> elements. By default, browsers take a regular numeral character, make it smaller using <code>font-size</code>, and raise or lower it with <code>vertical-align</code>. These are not true subscript and superscript characters and typically appear quite ugly, not to mention they can mess up line height.</p>
<p>Thankfully, there is now a way to enable true subscripts and superscripts with <code>font-variant-position</code>. Note that currently only Firefox supports this.</p>
<h3>sub</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Chemical formula &#x27;C2H3O2&#x27; demonstrating true subscript positioning. The numerals are lowered and resized relative to the main letters, with horizontal lines showing their vertical alignment." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <g stroke="#e6594c">
            <path d="m106 147.6 524.781432.5" stroke-linecap="square"></path>
            <path d="m106 260.6 524.781432.5" stroke-linecap="square"></path>
            <path d="m106 293.6 524.781432.5" stroke-linecap="square"></path>
        </g>
        <g fill="#f5f5f5" fill-rule="nonzero" transform="translate(106 145)">
            <path d="m92 98.5216802c-9.2 8.3848238-20.9824561 13.7059618-35.9929825 13.7059618-29.5368421 0-48.42105259-22.8970187-48.42105259-52.727642 0-28.8631436 20.49824559-52.72764228 50.35789469-52.72764228 11.9438597 0 22.2736843 3.54742548 30.5052632 9.35230348l2.2596491-6.77235768c-8.7157894-5.80487805-20.1754386-9.35230352-32.2807017-9.35230352-34.3789474 0-58.4280702 27.0894309-58.4280702 61.2737127 0 30.798103 21.7894737 57.7262873 55.6842105 57.7262873 14.3649123 0 26.4701755-4.676152 35.9929825-11.932249z"></path>
            <path d="m111.017986 100.401042c5.989208-5.166667 11.654676-7.7500003 18.129496-7.7500003 8.579137 0 13.758993 4.5208333 13.758993 11.4635413 0 5.651042-3.23741 10.817709-11.978417 19.052084-5.827339 5.489583-14.082734 12.270833-24.928058 21.473958l.971223 4.359375c6.636691-.161458 13.920863-.322917 21.690648-.322917 8.417266 0 15.053956.161459 21.852517.322917 0-2.098958.323741-4.036458.485612-6.135417-11.007194.322917-24.442446.484375-35.773381.484375 6.960431-5.8125 13.920863-11.625 19.42446-16.630208 9.71223-9.203125 14.568345-14.854167 14.568345-23.25 0-10.171875-8.093525-16.46875-19.748201-16.46875-8.093525 0-15.539568 3.5520833-21.205036 8.5572917z"></path>
            <path d="m264 116c-.159851-4.514851-.159851-17.0919378-.159851-23.2192362v-67.0777935c0-6.2885431 0-19.02687412.159851-23.7029703-2.237918.48373409-5.434944.64497878-7.992565.64497878.319703 7.73974542.479554 28.54031122.479554 38.85997172v12.2545969h-70.654275v-28.0565771c0-6.2885431 0-19.02687412.159851-23.7029703-2.237918.48373409-5.434944.64497878-7.992565.64497878.319703 7.73974542.479554 28.54031122.479554 38.85997172v35.6350778c0 10.4809052-.159851 31.1202267-.479554 38.8599717h7.992565c-.159851-4.514851-.159851-17.0919378-.159851-23.2192362v-32.5714286h70.654275v16.9306931c0 10.4809052-.159851 31.1202267-.479554 38.8599717z"></path>
            <path d="m290.802239 147.253846c5.776119 1.776923 11.391791 2.746154 17.328358 2.746154 14.440299 0 24.869403-7.269231 24.869403-17.284615 0-8.4-7.220149-14.053847-21.339552-15.669231 12.675373-2.907692 20.05597-8.238462 20.05597-16.153846 0-7.9153849-7.701493-13.892308-20.05597-13.892308-8.022388 0-15.08209 2.5846154-20.697761 5.6538462l1.925373 4.8461538c5.294776-3.0692308 11.712686-5.0076923 18.291044-5.0076923 9.305971 0 14.279851 4.0384615 14.279851 9.0461543 0 6.623076-7.380597 11.953846-24.869403 14.538461l.962687 4.038462c16.044776.484615 25.190298 4.523077 25.190298 12.6 0 6.784615-7.541044 11.792307-19.093283 11.792307-6.417911 0-12.19403-1.292307-17.649254-3.230769z"></path>
            <path d="m406.794835 112.550136c-27.959828 0-47.242468-22.7357729-47.242468-51.4376699 0-29.9918699 20.246772-54.6626016 49.652798-54.6626016 27.959828 0 47.242468 22.5745257 47.242468 51.4376694 0 29.9918699-20.086084 54.6626021-49.652798 54.6626021zm-.321377 6.449864c33.905308 0 57.526542-27.5731707 57.526542-62.402439 0-30.4756098-22.014347-56.597561-54.312769-56.597561-34.065997 0-57.687231 27.5731707-57.687231 62.402439 0 30.3143632 22.175036 56.597561 54.473458 56.597561z"></path>
            <path d="m485.017986 100.401042c5.989208-5.166667 11.654676-7.7500003 18.129496-7.7500003 8.579137 0 13.758993 4.5208333 13.758993 11.4635413 0 5.651042-3.23741 10.817709-11.978417 19.052084-5.827339 5.489583-14.082734 12.270833-24.928058 21.473958l.971223 4.359375c6.636691-.161458 13.920863-.322917 21.690648-.322917 8.417266 0 15.053956.161459 21.852517.322917 0-2.098958.323741-4.036458.485612-6.135417-11.007194.322917-24.442446.484375-35.773381.484375 6.960431-5.8125 13.920863-11.625 19.42446-16.630208 9.71223-9.203125 14.568345-14.854167 14.568345-23.25 0-10.171875-8.093525-16.46875-19.748201-16.46875-8.093525 0-15.539568 3.5520833-21.205036 8.5572917z"></path>
        </g>
        <text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16">
            <tspan x="667.230469" y="269">sub</tspan>
        </text>
        <path d="m643.5 232.5v62" stroke="#525252" stroke-linecap="square"></path>
    </g>
</svg></figure></p>
<p>This enables true subscript characters, which are positioned specifically for use in footnotes and scientific formulas.</p>
<pre><code class="language-css">font-variant-position: sub; /* enable */
font-variant-position: normal; /* disable both variants */

font-feature-settings: &#x27;subs&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;subs&#x27; 0; /* low-level disable */
</code></pre>
<h3>super</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Mathematical expression &#x27;f(x) = z²&#x27; demonstrating true superscript positioning. The &#x27;2&#x27; is raised and resized in relation to the main text, shown against baseline and cap-height guides." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd" transform="translate(106 141)">
        <g stroke="#e6594c" stroke-linecap="square">
            <path d="m0 23.5 524.781432.5"></path>
            <path d="m0 136.6 524.781432.5"></path>
            <path d="m0 .6 524.781432.5"></path>
        </g>
        <text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16">
            <tspan x="561" y="37">sup</tspan>
        </text>
        <path d="m537.5.5v62" stroke="#525252" stroke-linecap="square"></path>
        <g fill="#f5f5f5" fill-rule="nonzero" transform="translate(41 1)">
            <path d="m42.020371 19.7109228c-1.7846489-.814501-3.7315387-1.3032015-6.976355-1.3032015-14.6016733 0-22.2269916 12.0546139-22.2269916 32.2542373v12.2175141h-10.70789381l-2.10913059 6.1902071h12.8170244v39.5847462c0 9.448211-.1622408 20.362523-.6489633 27.367231h7.9497999c-.3244816-4.235405-.3244816-10.751412-.3244816-16.452919v-50.4990582h21.4157876c0-2.4435028.1622408-4.5612052.4867224-6.1902071h-21.90251v-12.8691149c0-15.8013183 5.0294653-24.9237288 15.8995999-24.9237288 2.595853 0 4.8672244.6516008 6.976355 1.4661017z"></path>
            <path d="m103.185158 173 3.082576-4.887006c-23.3626776-12.217514-44.6162244-38.933145-44.6162244-72.1647831 0-33.2316384 20.7668243-59.9472693 44.6162244-72.4905838l-3.082576-5.0499058c-26.4452526 14.0094162-48.5100034 43.1685499-48.5100034 77.86629 0 34.5348397 22.7137141 63.2052727 48.5100034 76.7259887z"></path>
            <path d="m118.111313 62.2278719-7.625318 1.1403014c1.622408 2.4435028 18.495453 25.086629 20.442343 28.3446327l4.867224 6.6789077-29.85231 37.6299433h8.436522c.973445-1.466101 20.117862-26.55273 25.471808-33.231638l24.336123 34.53484 7.463077-1.629002c-1.622408-2.443503-17.197526-23.457627-19.144416-26.552731l-8.274282-11.2401128 27.256457-35.3493409c-2.271371.1629002-5.516187.3258004-8.274281.1629002l-23.038196 30.6252354z"></path>
            <path d="m176.518007 173c26.120771-13.520716 48.672244-42.516949 48.672244-77.2146893 0-34.5348399-22.226992-63.5310734-48.672244-77.3775894l-2.920335 5.0499058c23.687159 12.3804143 44.616224 39.0960452 44.616224 72.4905838 0 33.0687381-21.253547 59.7843691-44.616224 72.0018831z"></path>
            <path d="m308.58203 76.2372881c-9.085486.3258004-19.631139.4887006-28.716624.4887006-11.84358 0-20.442343-.3258004-28.392143-.4887006 0 1.7919021-.162241 4.8870057-.486722 6.5160076 6.976355 0 13.628228-.1629002 22.389232-.1629002h11.356857c7.787559 0 15.412877.1629002 23.200437.1629002.16224-2.1177025.324481-4.7241055.648963-6.5160076zm0 26.3898309c-9.085486.3258-19.631139.4887-28.716624.4887-11.84358 0-20.442343-.1629-28.392143-.4887 0 1.954802-.162241 5.049905-.486722 6.516007 6.976355 0 13.628228-.1629 22.389232-.1629h11.356857c7.787559 0 15.412877.1629 23.200437.1629.16224-1.954802.324481-4.724105.648963-6.516007z"></path>
            <path d="m387.917788 62.5536723c-9.409967.3258004-18.819934.4887006-29.365587.4887006-10.058931 0-18.333212-.1629002-26.769735-.4887006 0 2.606403-.324481 4.3983051-.648963 6.6789077 15.575118-.3258003 30.663514-.1629002 46.563114-.1629002l-51.105857 65.4858762 1.460168 1.954802c9.247726-.488701 18.982175-.651601 29.85231-.651601 10.870134 0 20.117861.1629 29.203346.488701 0-2.443503.324482-4.561206.973445-7.004708-16.386322.4887-35.044016.3258-49.970171.3258l51.105857-65.3229756z"></path>
            <path d="m405.926519 13.5207156c6.00291-5.212806 11.681338-7.81920901 18.170971-7.81920901 8.598763 0 13.790469 4.56120531 13.790469 11.56591341 0 5.7015066-3.244816 10.9143126-12.00582 19.2222222-5.840669 5.5386064-14.114951 12.3804143-24.985086 21.665725l.973445 4.3983051c6.651874-.1629002 13.95271-.3258004 21.74027-.3258004 8.436522 0 15.088395.1629002 21.90251.3258004 0-2.1177024.324481-4.0725047.486722-6.1902071-11.032375.3258003-24.498363.4887005-35.85522.4887005 6.976355-5.8644068 13.95271-11.7288135 19.468898-16.7787194 9.734449-9.2853107 14.601673-14.9868173 14.601673-23.4576271 0-10.26271186-8.112041-16.6158192-19.793379-16.6158192-8.112041 0-15.575119 3.58380414-21.253547 8.63370998z"></path>
        </g>
    </g>
</svg></figure></p>
<p>This enables true superscript characters, which are sized and positioned specifically for use in mathematical expressions and scientific formulas.</p>
<pre><code class="language-css">font-variant-position: super; /* enable */
font-variant-position: normal; /* disable both variants */

font-feature-settings: &#x27;sups&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;sups&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-caps</h2>
<p>A capital is not a capital is not a capital. The most significant use of <code>font-variant-caps</code> is to enable small caps, although there are several other options available.</p>
<h3>small-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;Ab&#x27; with small caps off (left) and small caps on (right). In the right example, the &#x27;b&#x27; is resized to match the x-height and resembles a miniature uppercase letter." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd" transform="translate(105 125)"><path d="m0 6.62 589.754371.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m-.49957592 62.1195763-.00084781 1 3 .002543.00084674-.9999996zm4.99999821.004239-.00084781 1 3 .0025431.00084673-.9999996zm4.9999982.0042391-.00084781 1 3.00000002.002543.0008467-.9999996zm4.99999821.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008468-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008468-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008468-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008468-.9999997zm4.9999982.0042391-.0008478 1 3 .002543.0008468-.9999996zm4.9999982.004239-.0008478 1 2.9999997.0025431.000847-.9999997zm4.9999979.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000846-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000846-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000846-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000846-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000846-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997z" fill="#e6594c" fill-rule="nonzero"></path><path d="m0 155.62 589.754371.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><path d="m158.475238 154.876749c0 2.014657-.57575 3.021985-1.727251 3.021985-4.965845 0-10.579409-.215856-16.840693-.647568-5.397658-.431712-10.003659-.647568-13.818004-.647568-4.390095 0-9.823737.215856-16.300927.647568-6.837033.431712-12.666504.647568-17.4884118.647568-1.1515004 0-1.7272505-1.007328-1.7272505-3.021985s.4318126-3.021986 1.2954379-3.021986c6.4052208-.287808 11.0112224-1.133244 13.8180044-2.536309 2.806782-1.403064 4.210173-3.579613 4.210173-6.529647 0-1.870752-.719688-4.856762-2.159063-8.958028l-12.198707-36.1558956h-44.4767016l-12.3066602 33.4576946c-1.583313 4.461026-2.3749695 7.914724-2.3749695 10.361093 0 6.331779 5.8294706 9.785476 17.4884118 10.361092.8636253 0 1.2954379 1.007329 1.2954379 3.021986s-.5757502 3.021985-1.7272505 3.021985c-4.3181264 0-9.1040498-.215856-14.3577702-.647568-4.9658454-.431712-9.3919249-.647568-13.2782386-.647568-3.0946573 0-6.980971.215856-11.6589412.647568-4.89387659.431712-9.06806541.647568-12.52256651.647568-1.07953159 0-1.61929739-.8994-1.61929739-2.698201 0-2.014657.82764089-3.093937 2.48292266-3.237841 5.97340815-.575617 10.70535494-2.230513 14.19584044-4.964691 3.4904855-2.734177 7.1069163-8.310459 10.8492925-16.728847l50.5220786-124.00932722c.4318126-1.15123251 1.4393754-1.72684877 3.0226884-1.72684877 1.7272506 0 2.8067822.53964024 3.2385948 1.61892072l44.5846546 124.11725527c2.518907 6.979347 5.919432 12.123917 10.201574 15.433711 4.282142 3.309793 10.021651 5.396402 17.218529 6.259827 1.439375.143904 2.159063 1.115256 2.159063 2.914057zm-65.3116615-64.1092607-18.9997561-55.1512325-20.5111002 55.1512325z"></path><path d="m268.371554 110.842105c0 13.239174-4.67797 24.931379-14.033911 35.076616-9.35594 10.145236-20.18724 15.217855-32.493901 15.217855-6.837033 0-13.45816-1.439041-19.863381-4.317122-4.390095-2.014657-8.276409-3.021986-11.658941-3.021986-5.397658 0-8.960112 2.302465-10.687363 6.907395-.359844.863425-1.259453 1.295137-2.698829 1.295137-1.871188 0-2.806782-.575616-2.806782-1.726849.57575-6.04397.863625-13.311126.863625-21.801465v-105.2298472c0-5.8281146-.73768-9.6415723-2.21304-11.4403731-1.475359-1.7988008-4.695962-2.9500333-9.661807-3.4536975-1.151501 0-1.727251-.8634244-1.727251-2.5902732 0-2.0146569.57575-3.0219853 1.727251-3.0219853 12.810441-3.30979351 21.914491-7.12325121 27.312149-11.44037312 1.079532-.86342439 1.979141-1.29513658 2.698829-1.29513658 2.015126 0 3.022688.57561626 3.022688 1.72684877-1.1515 15.68554293-1.72725 28.27714853-1.72725 37.77481683v32.2704863c6.765065-6.763491 15.041473-10.1452365 24.829227-10.1452365 14.60966 0 26.448524 4.42505 35.516589 13.2751499s13.602098 20.8301132 13.602098 35.9400397zm-21.698585.863425c0-13.2391742-2.62686-23.6002668-7.880581-31.0832782-5.25372-7.4830113-12.630519-11.224517-22.130397-11.224517-5.109783 0-10.093621 1.9247169-14.951513 5.7741506s-7.286838 7.6808794-7.286838 11.4943371v49.8627585c0 3.813457 2.896743 7.680879 8.690229 11.602265s11.173152 5.882078 16.138998 5.882078c8.636252 0 15.365333-3.849433 20.18724-11.548301 4.821908-7.698867 7.232862-17.952032 7.232862-30.759493z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(330 4)"><path d="m158.475238 150.343771c0 2.014657-.57575 3.021985-1.727251 3.021985-4.965845 0-10.579409-.215856-16.840693-.647568-5.397658-.431712-10.003659-.647568-13.818004-.647568-4.390095 0-9.823737.215856-16.300927.647568-6.837033.431712-12.666504.647568-17.4884118.647568-1.1515004 0-1.7272505-1.007328-1.7272505-3.021985s.4318126-3.021986 1.2954379-3.021986c6.4052208-.287808 11.0112224-1.133244 13.8180044-2.536309 2.806782-1.403064 4.210173-3.579613 4.210173-6.529647 0-1.870752-.719688-4.856762-2.159063-8.958028l-12.198707-36.1558956h-44.4767016l-12.3066602 33.4576946c-1.583313 4.461026-2.3749695 7.914724-2.3749695 10.361093 0 6.331779 5.8294706 9.785476 17.4884118 10.361092.8636253 0 1.2954379 1.007329 1.2954379 3.021986s-.5757502 3.021985-1.7272505 3.021985c-4.3181264 0-9.1040498-.215856-14.3577702-.647568-4.9658454-.431712-9.3919249-.647568-13.2782386-.647568-3.0946573 0-6.980971.215856-11.6589412.647568-4.89387659.431712-9.06806541.647568-12.52256651.647568-1.07953159 0-1.61929739-.8994-1.61929739-2.698201 0-2.014657.82764089-3.093937 2.48292266-3.237841 5.97340815-.575617 10.70535494-2.230513 14.19584044-4.964691 3.4904855-2.734177 7.1069163-8.310459 10.8492925-16.728847l50.5220786-124.00932723c.4318126-1.15123251 1.4393754-1.72684877 3.0226884-1.72684877 1.7272506 0 2.8067822.53964024 3.2385948 1.61892072l44.5846546 124.11725528c2.518907 6.979347 5.919432 12.123917 10.201574 15.433711 4.282142 3.309793 10.021651 5.396402 17.218529 6.259827 1.439375.143904 2.159063 1.115256 2.159063 2.914057zm-65.3116615-64.1092607-18.9997561-55.1512325-20.5111002 55.1512325z"></path><path d="m259.843254 124.009327c0 8.706196-3.076665 15.703531-9.229995 20.992005-6.15333 5.288475-14.303793 7.932712-24.45139 7.932712-3.814345 0-7.376799-.071952-10.687363-.215856-10.003659-.431712-15.653208-.647568-16.948646-.647568-4.534033 0-8.636253.107928-12.30666.323784-11.011222.647568-16.768724.971352-17.272506.971352-.863625 0-1.295438-.935376-1.295438-2.806129 0-1.726849.431813-2.590273 1.295438-2.590273 5.829471-.863425 9.913699-2.230513 12.252684-4.101266s3.508478-5.900067 3.508478-12.087941v-56.7701537c0-6.1159227-1.187485-10.1092605-3.562455-11.9800133-2.374969-1.8707528-6.441205-3.2738174-12.198707-4.2091939-.863625-.143904-1.295438-.9353764-1.295438-2.374417 0-1.8707528.431813-2.8061293 1.295438-2.8061293 2.878751 0 6.117346.1079281 9.715785.3237842 8.348377.5036642 14.465723.7554963 18.352037.7554963 2.950719 0 7.286838-.143904 13.008355-.4317122 5.721518-.2878081 9.661808-.4317122 11.820871-.4317122 9.355941 0 16.876678 2.122585 22.562211 6.3677549s8.528299 9.8214523 8.528299 16.7288474c0 4.8927382-2.123079 9.4257162-6.369236 13.598934-4.246158 4.1732179-9.463894 6.9073951-15.653208 8.2025317 8.78019 1.6548971 15.797145 4.7308461 21.050866 9.2278481 5.25372 4.497002 7.88058 9.83944 7.88058 16.027315zm-27.851915-47.0566288c0-5.9000666-1.367406-10.1812125-4.10222-12.8434377-2.734813-2.6622252-7.124908-3.9933378-13.170285-3.9933378h-2.590876c-5.325689 0-7.988534 2.5183211-7.988534 7.5549634v28.9247168h9.283972c6.693096 0 11.461027-1.5289806 14.303794-4.586942 2.842766-3.0579614 4.264149-8.0766156 4.264149-15.0559627zm6.909003 47.0566288c0-6.763491-1.763235-11.980013-5.289705-15.649567-3.52647-3.669553-8.5283-5.50433-15.005489-5.50433h-14.465724v32.810126c0 4.389074 1.187485 7.357096 3.562455 8.904064 2.374969 1.546969 6.225298 2.320453 11.550988 2.320453 5.685533 0 10.381495-2.014657 14.087887-6.04397 3.706392-4.029314 5.559588-9.641573 5.559588-16.836776z"></path></g><g fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><text><tspan x="407.625" y="206">Small caps on</tspan></text><text><tspan x="80.503906" y="206">Small caps off</tspan></text></g></g></svg></figure></p>
<p>Small caps are designed to be the same height as lowercase letters and are used to capitalize words within running text. They make for a more cohesive and readable paragraph.</p>
<pre><code class="language-css">font-variant-caps: small-caps;  /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;smcp&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;smcp&#x27; 0; /* low-level disable */
</code></pre>
<h3>all-small-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;Ab&#x27; with all-small-caps off (left) and all-small-caps on (right). In the right example, both &#x27;A&#x27; and &#x27;B&#x27; are set to uniform small caps height, suitable for consistent text styling." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129 131.62 540.774771.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m128.500463 187.119538-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004622-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 1.775002.001641.000924-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129 280.62 540.774771.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="501.847656" y="331">All small caps on</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="198.726562" y="331">All small caps off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 125)"><path d="m158.552206 154.876749c0 2.014657-.57603 3.021985-1.728089 3.021985-4.968258 0-10.584548-.215856-16.848872-.647568-5.40028-.431712-10.008518-.647568-13.824716-.647568-4.392227 0-9.828509.215856-16.308844.647568-6.840354.431712-12.6726559.647568-17.4969056.647568-1.1520596 0-1.7280894-1.007328-1.7280894-3.021985s.4320223-3.021986 1.296067-3.021986c6.4083317-.287808 11.01657-1.133244 13.824716-2.536309 2.808145-1.403064 4.212218-3.579613 4.212218-6.529647 0-1.870752-.720038-4.856762-2.160112-8.958028l-12.2046319-36.1558956h-44.4983031l-12.3126372 33.4576946c-1.584082 4.461026-2.376123 7.914724-2.376123 10.361093 0 6.331779 5.8323019 9.785476 17.4969056 10.361092.8640447 0 1.2960671 1.007329 1.2960671 3.021986s-.5760299 3.021985-1.7280895 3.021985c-4.3202236 0-9.1084714-.215856-14.3647434-.647568-4.9682572-.431712-9.3964864-.647568-13.2846876-.647568-3.0961602 0-6.9843615.215856-11.6646037.647568-4.89625343.431712-9.07246957.647568-12.52864845.647568-1.0800559 0-1.62008385-.8994-1.62008385-2.698201 0-2.014657.82804286-3.093937 2.48412857-3.237841 5.97630931-.575617 10.71055433-2.230513 14.20273503-4.964691 3.4921808-2.734177 7.110368-8.310459 10.8545618-16.728847l50.5466161-124.00932722c.4320224-1.15123251 1.4400746-1.72684877 3.0241565-1.72684877 1.7280895 0 2.8081454.53964024 3.2401677 1.61892072l44.6063083 124.11725527c2.520131 6.979347 5.922307 12.123917 10.206529 15.433711 4.284221 3.309793 10.026519 5.396402 17.226891 6.259827 1.440075.143904 2.160112 1.115256 2.160112 2.914057zm-65.3433819-64.1092607-19.0089838-55.1512325-20.5210621 55.1512325z"></path><path d="m268.501897 110.842105c0 13.239174-4.680243 24.931379-14.040727 35.076616-9.360485 10.145236-20.197045 15.217855-32.509683 15.217855-6.840354 0-13.464697-1.439041-19.873028-4.317122-4.392228-2.014657-8.280429-3.021986-11.664604-3.021986-5.400279 0-8.964464 2.302465-10.692553 6.907395-.360019.863425-1.260066 1.295137-2.70014 1.295137-1.872097 0-2.808145-.575616-2.808145-1.726849.576029-6.04397.864044-13.311126.864044-21.801465v-105.2298472c0-5.8281146-.738038-9.6415723-2.214114-11.4403731-1.476077-1.7988008-4.698243-2.9500333-9.666501-3.4536975-1.152059 0-1.728089-.8634244-1.728089-2.5902732 0-2.0146569.57603-3.0219853 1.728089-3.0219853 12.816664-3.30979351 21.925135-7.12325121 27.325415-11.44037312 1.080056-.86342439 1.980102-1.29513658 2.700139-1.29513658 2.016105 0 3.024157.57561626 3.024157 1.72684877-1.15206 15.68554293-1.72809 28.27714853-1.72809 37.77481683v32.2704863c6.768351-6.763491 15.048779-10.1452365 24.841286-10.1452365 14.616757 0 26.46137 4.42505 35.533839 13.2751499 9.07247 8.8500999 13.608705 20.8301132 13.608705 35.9400397zm-21.709124.863425c0-13.2391742-2.628136-23.6002668-7.884408-31.0832782-5.256272-7.4830113-12.636654-11.224517-22.141146-11.224517-5.112265 0-10.098523 1.9247169-14.958774 5.7741506-4.860252 3.8494337-7.290378 7.6808794-7.290378 11.4943371v49.8627585c0 3.813457 2.89815 7.680879 8.69445 11.602265s11.178579 5.882078 16.146836 5.882078c8.640447 0 15.372796-3.849433 20.197045-11.548301 4.82425-7.698867 7.236375-17.952032 7.236375-30.759493z"></path></g><g transform="translate(460 180)"><path d="m107.789579 99.7255163c0 1.8707527-.432023 2.8061297-1.296067 2.8061297-3.600187 0-6.6243432-.107928-9.0724699-.323785-7.4163838-.647568-11.5926-.971352-12.5286484-.971352-3.3841752 0-6.4083317.107928-9.0724696.323784-8.0644173.647568-13.0326745.971353-14.9047714.971353-.7200372 0-1.0800559-.935377-1.0800559-2.8061297 0-1.7268487.2880149-2.5902731.8640447-2.5902731 3.4561789 0 5.9763094-.5576283 7.5603913-1.6728848 1.584082-1.1152565 2.376123-3.2198534 2.376123-6.3137908 0-2.374417-.6120317-5.1085942-1.836095-8.2025316l-5.0762627-13.383078h-30.4575764l-4.5362348 11.224517c-1.4400745 4.0293138-2.1601118 7.0512992-2.1601118 9.065956 0 3.3817455.8640447 5.7741506 2.5921342 7.1772152 1.7280894 1.4030647 4.3922273 2.104597 7.9924136 2.104597.5760299 0 .8640448.8634244.8640448 2.5902731 0 1.8707527-.4320224 2.8061297-1.2960671 2.8061297-3.168164 0-6.6243429-.215857-10.3685367-.647569-3.7441937-.431712-6.4803354-.647568-8.2084248-.647568-2.376123 0-4.5362348.107928-6.4803354.323784-5.76029812.647568-9.28848072.971353-10.5845478.971353-.72003727 0-1.0800559-.935377-1.0800559-2.8061297 0-1.7268487.57602981-2.5902731 1.72808944-2.5902731 3.5281826-.4317122 6.46233446-1.6189207 8.80245556-3.5616256s5.3462767-7.1592272 9.0184668-15.649567l33.1577161-76.41305793c.2160112-1.00732845 1.0800559-1.51099267 2.5921341-1.51099267 1.4400746 0 2.3401212.50366422 2.7001398 1.51099267l29.485526 76.41305793c2.8081454 7.4830114 5.5982898 12.4117255 8.3704333 14.7861426 2.7721434 2.3744171 6.2463229 3.8494337 10.4225389 4.42505 1.008053 0 1.512079.8634244 1.512079 2.5902731zm-46.2263927-38.206529-12.5286485-33.2418387-13.1766819 33.2418387z"></path><path d="m209.746856 73.1752165c0 8.7061959-3.07816 15.703531-9.234478 20.9920054-6.156319 5.2884743-14.310741 7.9327111-24.463266 7.9327111-3.816198 0-7.380382-.071952-10.692554-.215856-10.008518-.431712-15.66081-.647568-16.956877-.647568-4.536235 0-8.640448.107928-12.312638.323784-11.01657.647568-16.776868.971353-17.280894.971353-.864045 0-1.296067-.935377-1.296067-2.8061297 0-1.7268487.432022-2.5902731 1.296067-2.5902731 5.832302-.8634244 9.918513-2.230513 12.258634-4.1012659 2.340122-1.8707528 3.510182-5.9000666 3.510182-12.0879413v-56.7701533c0-6.1159227-1.188061-10.1092604-3.564184-11.9800133-2.376123-1.8707528-6.444334-3.27381743-12.204632-4.20919385-.864045-.14390406-1.296067-.93537642-1.296067-2.37441706 0-1.87075283.432022-2.80612924 1.296067-2.80612924 2.880149 0 6.120317.10792805 9.720503.32378414 8.352432.50366422 14.472749.75549634 18.36095.75549634 2.952153 0 7.290378-.14390407 13.014674-.4317122 5.724296-.28780812 9.6665-.43171219 11.826612-.43171219 9.360484 0 16.884874 2.12258495 22.573168 6.36775483 5.688295 4.24516993 8.532442 9.82145233 8.532442 16.72884743 0 4.8927382-2.12411 9.4257162-6.37233 13.5989341-4.24822 4.1732178-9.46849 6.907395-15.66081 8.2025316 8.784454 1.6548967 15.804818 4.7308461 21.06109 9.2278481s7.884408 9.8394404 7.884408 16.0273151zm-27.865443-47.0566289c0-5.9000666-1.36807-10.1812125-4.104212-12.8434377s-7.128369-3.99333777-13.176682-3.99333777h-2.592134c-5.328276 0-7.992414 2.51832107-7.992414 7.55496337v28.9247168h9.288481c6.696347 0 11.466593-1.5289806 14.310741-4.586942 2.844147-3.0579614 4.26622-8.0766156 4.26622-15.0559627zm6.912358 47.0566289c0-6.763491-1.764091-11.9800133-5.292274-15.6495669-3.528182-3.6695537-8.532441-5.5043305-15.012777-5.5043305h-14.472749v32.8101266c0 4.389074 1.188062 7.3570953 3.564185 8.904064 2.376123 1.5469686 6.228322 2.320453 11.556598 2.320453 5.688294 0 10.386537-2.0146569 14.094729-6.0439707s5.562288-9.6415723 5.562288-16.8367755z"></path></g></g></g></svg></figure></p>
<p>The <code>small-caps</code> value will only replace lowercase letters with small caps. To replace all letters with small caps (which is probably what you want) you need to use <code>all-small-caps</code>.</p>
<pre><code class="language-css">font-variant-caps: all-small-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;smcp&#x27; 1, &#x27;c2sc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;smcp&#x27; 1, &#x27;c2sc&#x27; 0; /* low-level disable */
</code></pre>
<h3>petite-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of small caps versus petite caps using &#x27;AB&#x27;. The left pair shows traditional small caps with slightly larger size, while the right pair uses petite caps that more closely match the font’s x-height." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129 135.62 541.774355.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m128.500462 195.119539-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999997.004614-.000922 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999997.004614-.000922 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 2.774584.00256.000923-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129 280.62 541.774355.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="509.777344" y="331">Petite caps</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="212.269531" y="331">Small caps</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m160.656574 148.568741c-.719788 0-1.619522-.21563-2.699203-.646889-1.079682-.431259-1.619522-1.078147-1.619522-1.940665 0-1.150024.57583-1.976604 1.72749-2.47974 1.15166-.503135 2.30332-.82658 3.45498-.970333 3.742895-.718765 7.053917-1.868789 9.933067-3.450072 2.879151-1.581283 4.318726-4.31259 4.318726-8.193922v-58.8668595c0-4.4563435-.935724-7.9064158-2.807172-10.3502171-1.871447-2.4438012-5.110491-4.0250844-9.717131-4.7438495-1.295618-.287506-2.483267-.7906416-3.562948-1.5094066-1.079682-.7187651-1.619522-1.5812832-1.619522-2.5875543 0-.8625181.53984-1.5094067 1.619522-1.9406657 1.079681-.4312591 1.979415-.6468886 2.699203-.6468886 2.87915 0 5.326427.0718765 7.341832.2156295 2.015405.1437531 4.030811.3234443 6.046216.5390739 2.015405.2156295 4.246746.3234442 6.694023.3234442 3.023108 0 6.442099-.1796912 10.256973-.5390738 3.814873-.3593825 7.953652-.5390738 12.416334-.5390738 10.796813 0 19.650199 1.7250362 26.56016 5.1751086 6.90996 3.4500723 10.36494 9.2001929 10.36494 17.2503618 0 6.1813796-1.223639 10.8533526-3.670917 14.0159189-2.447277 3.1625663-5.7583 5.5344911-9.933067 7.1157743-.287915.143753-.467862.3953207-.539841.7547033-.071979.3593825.107968.6109503.539841.7547033 3.023107.8625181 6.118194 2.0844187 9.285259 3.6657019s5.830279 3.9532082 7.989641 7.1157742c2.159363 3.162566 3.239044 7.61891 3.239044 13.36903 0 6.756392-2.015405 12.290883-6.046215 16.603474-4.03081 4.31259-9.357238 7.475156-15.979283 9.487699-6.622045 2.012542-13.963878 3.018813-22.025498 3.018813-1.007703 0-2.951129-.107815-5.830279-.323444-2.87915-.21563-5.938247-.431259-9.177291-.646889-3.239044-.215629-5.938247-.323444-8.097609-.323444-3.886853 0-7.881674.107815-11.984462.323444-4.102789.21563-7.161886.431259-9.177291.646889-2.015405.215629-2.015405.323444 0 .323444zm46.426295-6.468886c7.341832 0 12.920185-2.156295 16.735059-6.468885 3.814874-4.312591 5.722311-9.487699 5.722311-15.525326 0-5.750121-1.223639-10.134588-3.670916-13.153401-2.447278-3.018813-5.866269-5.067294-10.256972-6.145441-4.390704-1.0781479-9.537185-1.6172217-15.439443-1.6172217-1.439575 0-2.807171.2515678-4.102788.7547033-1.295618.5031354-2.303321 1.2219004-3.023108 2.1562954-.719788.934394-1.079681 2.120357-1.079681 3.557887v23.719247c0 3.593826 1.511553 6.612639 4.534661 9.05644 3.023108 2.443802 6.550066 3.665702 10.580877 3.665702zm-7.989642-49.3791604c3.742895 0 7.593758-.3593825 11.55259-1.0781476 3.958831-.718765 7.305843-2.3719247 10.041036-4.959479 2.735192-2.5875543 4.102788-6.6126387 4.102788-12.0752532 0-2.8750603-.467861-5.6423059-1.403585-8.3017367-.935724-2.6594307-2.807172-4.8516642-5.614343-6.5767004s-7.017928-2.5875543-12.632271-2.5875543c-4.03081 0-7.233864.5031356-9.609163 1.5094067s-3.562948 2.7313073-3.562948 5.1751085v23.503618c0 2.1562952.683798 3.5938254 2.051394 4.3125904 1.367596.7187651 3.059097 1.0781476 5.074502 1.0781476z"></path></g><g transform="translate(433 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m163.463745 148.568741c-.863745 0-1.907437-.071877-3.131076-.21563-1.223638-.143753-1.835458-.718765-1.835458-1.725036 0-1.150024.539841-1.976604 1.619522-2.479739 1.079681-.503136 2.195352-.970333 3.347012-1.401592 2.159363-.718765 4.246746-1.401592 6.262151-2.048481 2.015405-.646888 3.023108-2.479739 3.023108-5.498552v-58.435601c0-3.3063194-.791766-5.7141824-2.375299-7.223589-1.583532-1.5094067-3.45498-2.551616-5.614342-3.1266281-1.15166-.431259-2.267331-.9343946-3.347012-1.5094066-1.079682-.5750121-1.619522-1.3656537-1.619522-2.3719248 0-1.1500241.683798-1.7609744 2.051394-1.8328509s2.33931-.1078148 2.91514-.1078148c2.87915 0 4.966533.0359383 6.262151.1078148 1.295617.0718765 2.519256.1796912 3.670916.3234442 1.15166.1437531 2.807172.2156296 4.966534.2156296 2.015405 0 3.814874-.0718765 5.398407-.2156296 1.583532-.143753 3.383001-.287506 5.398406-.431259s4.462682-.2156295 7.341833-.2156295c10.94077 0 19.794156 1.6172214 26.560159 4.8516642 6.766003 3.2344429 10.149004 8.4454897 10.149004 15.6331404 0 5.7501206-1.583533 10.3142788-4.750598 13.6924747-3.167065 3.3781958-7.053917 5.6423054-11.660557 6.7923304-.57583.143753-.935724.287506-1.079682.431259-.143957.143753.215937.359382 1.079682.646888 2.735192.431259 5.686321 1.43753 8.853386 3.018813 3.167065 1.581284 5.866268 3.773517 8.09761 6.576701 2.231341 2.803184 3.347011 6.289194 3.347011 10.458032 0 6.756391-1.799468 12.039315-5.398406 15.84877-3.598937 3.809455-8.457503 6.468885-14.575697 7.978292s-13.064144 2.26411-20.837849 2.26411c-1.439575 0-3.886852-.21563-7.341832-.646889s-6.837982-.646888-10.149004-.646888c-3.167065 0-6.514077.107815-10.041036.323444-3.526959.21563-6.082205.431259-7.665737.646889-1.583533.215629-1.223639.323444 1.079681.323444zm36.277291-7.115774c7.197875 0 12.776228-1.473469 16.73506-4.420405 3.958831-2.946937 5.938247-7.367343 5.938247-13.261216 0-7.331404-2.447278-12.219006-7.341833-14.662808-4.894555-2.443801-11.156707-3.665702-18.786454-3.665702-2.30332 0-4.282736.359383-5.938247 1.078148-1.655512.718765-2.483267 2.156295-2.483267 4.312591v19.837916c0 3.593825.971713 6.289194 2.915139 8.086107 1.943427 1.796912 4.930545 2.695369 8.961355 2.695369zm-5.614343-42.4790162c9.069323 0 15.5834-1.6172214 19.542231-4.8516643 3.958832-3.2344428 5.938247-7.0079594 5.938247-11.3205499 0-4.1688374-1.475564-7.7267245-4.426693-10.6736613-2.951129-2.9469369-8.745418-4.4204053-17.382868-4.4204053-4.030811 0-6.694024.6109504-7.989642 1.832851-1.295617 1.2219006-1.943426 2.982875-1.943426 5.2829233v18.7597684c0 2.7313073.827755 4.3125905 2.483267 4.7438495 1.655511.4312591 2.915139.6468886 3.778884.6468886z"></path></g></g></g></svg></figure></p>
<p>Standard small caps will typically appear slightly larger than the x-height of the font. Some typefaces have additional small caps that match the x-height. These are called <code>petite-caps</code>.</p>
<pre><code class="language-css">font-variant-caps: petite-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;pcap&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pcap&#x27; 0; /* low-level disable */
</code></pre>
<h3>all-petite-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;AB&#x27; using small caps (left) and all petite caps (right). In the petite caps version, both letters are scaled down uniformly to better match lowercase rhythm." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m137 135.62 526.7806.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m136.500475 195.119526-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.00095 1 3 .002848.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 2.780836.002639.000949-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m137 280.62 526.7806.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="517.289062" y="331">All petite caps</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="220.269531" y="331">Small caps</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(137 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m160.656574 148.568741c-.719788 0-1.619522-.21563-2.699203-.646889-1.079682-.431259-1.619522-1.078147-1.619522-1.940665 0-1.150024.57583-1.976604 1.72749-2.47974 1.15166-.503135 2.30332-.82658 3.45498-.970333 3.742895-.718765 7.053917-1.868789 9.933067-3.450072 2.879151-1.581283 4.318726-4.31259 4.318726-8.193922v-58.8668595c0-4.4563435-.935724-7.9064158-2.807172-10.3502171-1.871447-2.4438012-5.110491-4.0250844-9.717131-4.7438495-1.295618-.287506-2.483267-.7906416-3.562948-1.5094066-1.079682-.7187651-1.619522-1.5812832-1.619522-2.5875543 0-.8625181.53984-1.5094067 1.619522-1.9406657 1.079681-.4312591 1.979415-.6468886 2.699203-.6468886 2.87915 0 5.326427.0718765 7.341832.2156295 2.015405.1437531 4.030811.3234443 6.046216.5390739 2.015405.2156295 4.246746.3234442 6.694023.3234442 3.023108 0 6.442099-.1796912 10.256973-.5390738 3.814873-.3593825 7.953652-.5390738 12.416334-.5390738 10.796813 0 19.650199 1.7250362 26.56016 5.1751086 6.90996 3.4500723 10.36494 9.2001929 10.36494 17.2503618 0 6.1813796-1.223639 10.8533526-3.670917 14.0159189-2.447277 3.1625663-5.7583 5.5344911-9.933067 7.1157743-.287915.143753-.467862.3953207-.539841.7547033-.071979.3593825.107968.6109503.539841.7547033 3.023107.8625181 6.118194 2.0844187 9.285259 3.6657019s5.830279 3.9532082 7.989641 7.1157742c2.159363 3.162566 3.239044 7.61891 3.239044 13.36903 0 6.756392-2.015405 12.290883-6.046215 16.603474-4.03081 4.31259-9.357238 7.475156-15.979283 9.487699-6.622045 2.012542-13.963878 3.018813-22.025498 3.018813-1.007703 0-2.951129-.107815-5.830279-.323444-2.87915-.21563-5.938247-.431259-9.177291-.646889-3.239044-.215629-5.938247-.323444-8.097609-.323444-3.886853 0-7.881674.107815-11.984462.323444-4.102789.21563-7.161886.431259-9.177291.646889-2.015405.215629-2.015405.323444 0 .323444zm46.426295-6.468886c7.341832 0 12.920185-2.156295 16.735059-6.468885 3.814874-4.312591 5.722311-9.487699 5.722311-15.525326 0-5.750121-1.223639-10.134588-3.670916-13.153401-2.447278-3.018813-5.866269-5.067294-10.256972-6.145441-4.390704-1.0781479-9.537185-1.6172217-15.439443-1.6172217-1.439575 0-2.807171.2515678-4.102788.7547033-1.295618.5031354-2.303321 1.2219004-3.023108 2.1562954-.719788.934394-1.079681 2.120357-1.079681 3.557887v23.719247c0 3.593826 1.511553 6.612639 4.534661 9.05644 3.023108 2.443802 6.550066 3.665702 10.580877 3.665702zm-7.989642-49.3791604c3.742895 0 7.593758-.3593825 11.55259-1.0781476 3.958831-.718765 7.305843-2.3719247 10.041036-4.959479 2.735192-2.5875543 4.102788-6.6126387 4.102788-12.0752532 0-2.8750603-.467861-5.6423059-1.403585-8.3017367-.935724-2.6594307-2.807172-4.8516642-5.614343-6.5767004s-7.017928-2.5875543-12.632271-2.5875543c-4.03081 0-7.233864.5031356-9.609163 1.5094067s-3.562948 2.7313073-3.562948 5.1751085v23.503618c0 2.1562952.683798 3.5938254 2.051394 4.3125904 1.367596.7187651 3.059097 1.0781476 5.074502 1.0781476z"></path></g><g transform="translate(478 192)"><path d="m4.31054461 91c-.7184241 0-1.61645423-.1084071-2.69409038-.3252212-1.07763615-.2168142-1.61645423-.7588496-1.61645423-1.6261062 0-1.1563422.53881808-1.9874632 1.61645423-2.4933629s2.19119351-.9756637 3.34067207-1.409292c3.44843569-1.0117994 6.0347625-2.0235988 7.7589803-3.0353982s3.1251448-2.2765487 4.202781-3.7942478 2.1193511-3.649705 3.1251448-6.3960177l19.1819236-49.8672567c.7184241-2.3126843 1.2572421-4.4446902 1.6164542-6.3960177.359212-1.9513274.6825029-4.0110619.9698725-6.17920349 1.0057938-.28908555 2.3348784-1.30088496 3.9872538-3.03539823 1.6523754-1.73451328 2.7659328-2.96312685 3.3406721-3.68584071 1.2931634-1.5899705 2.2630359-2.49336283 2.9096176-2.71017699s1.1853998.32522124 1.6164542 1.62610619l23.4924682 65.47787613c1.580533 4.4808259 3.340672 8.3112094 5.2804171 11.4911504s4.9930475 5.3480826 9.1599073 6.5044248c1.1494786.2890855 2.2630359.7227139 3.3406721 1.300885 1.0776361.578171 1.6164542 1.4454277 1.6164542 2.6017699 0 .8672566-.5388181 1.409292-1.6164542 1.6261062-1.0776362.2168141-1.9756663.3252212-2.6940904.3252212-2.8736964 0-5.1008111-.1084071-6.6813442-.3252212-1.580533-.2168142-3.0892236-.3974927-4.5260718-.5420354-1.4368482-.1445428-3.4484357-.2168142-6.0347625-.2168142-2.2989571 0-4.0231749.0722714-5.1726535.2168142-1.1494786.1445427-2.3707995.3252212-3.6639629.5420354-1.2931634.2168141-3.4484357.3252212-6.4658169.3252212-.7184241 0-1.6164543-.1084071-2.6940904-.3252212-1.0776362-.2168142-1.6164542-.7588496-1.6164542-1.6261062 0-1.1563422.538818-2.0235989 1.6164542-2.6017699 1.0776361-.5781711 2.1911935-1.0117995 3.3406721-1.300885 2.0115875-.5781711 3.4125144-1.4454277 4.202781-2.6017699.7902665-1.1563422.6825029-3.3244838-.3232909-6.5044248l-3.8794901-12.1415929h-28.8806489l-3.0173813 8.238938c-1.0057937 3.0353983-1.0417149 5.3842183-.1077636 7.0464602.9339514 1.6622419 2.4067208 2.9269912 4.4183082 3.7942478 2.0115875.8672566 3.9513326 1.5899705 5.8192353 2.1681416 1.1494785.4336283 2.2630359.9033923 3.340672 1.409292 1.0776362.5058997 1.6164543 1.3370207 1.6164543 2.4933629 0 .8672566-.5388181 1.409292-1.6164543 1.6261062-1.0776361.2168141-1.9756662.3252212-2.6940903.3252212-2.8736964 0-5.1726536-.1084071-6.8968714-.3252212-1.7242179-.2168142-3.3047509-.3974927-4.7415991-.5420354-1.4368482-.1445428-3.3765933-.2168142-5.8192352-.2168142-2.2989571 0-4.202781.0722714-5.7114716.2168142-1.5086906.1445427-3.0892237.3252212-4.7415991.5420354-1.65237543.2168141-3.98725376.3252212-7.00463499.3252212zm30.17381229-35.5575221h23.2769409l-9.6987254-30.3539823c-.5747393-1.5899705-1.0057937-2.3849558-1.2931634-2.3849558-.2873696 0-.7184241.7949853-1.2931633 2.3849558z"></path><path d="m111.212051 91c-.862109 0-1.903824-.0722714-3.125145-.2168142-1.221321-.1445427-1.831981-.7227138-1.831981-1.7345132 0-1.1563422.538818-1.9874632 1.616454-2.4933629s2.191193-.9756637 3.340672-1.409292c2.155272-.7227139 4.238702-1.409292 6.25029-2.0597345 2.011587-.6504425 3.017381-2.4933628 3.017381-5.5287611v-58.7566371c0-3.3244838-.790267-5.7455753-2.3708-7.2632744s-3.448435-2.5656342-5.603708-3.14380529c-1.149478-.43362832-2.263036-.93952802-3.340672-1.51769912-1.077636-.57817109-1.616454-1.37315634-1.616454-2.38495575 0-1.15634218.682503-1.77064897 2.047509-1.84292035 1.365006-.07227139 2.334878-.10840708 2.909617-.10840708 2.873697 0 4.957127.03613569 6.25029.10840708 1.293163.07227138 2.514484.18067846 3.663963.32522124 1.149479.14454277 2.801854.21681416 4.957126.21681416 2.011588 0 3.807648-.07227139 5.388181-.21681416 1.580533-.14454278 3.376593-.28908555 5.388181-.43362832 2.011587-.14454277 4.454229-.21681416 7.327926-.21681416 10.920046 0 19.756662 1.62610619 26.509849 4.87831858 6.753187 3.25221237 10.12978 8.49188787 10.12978 15.71902657 0 5.7817109-1.580533 10.3709439-4.741599 13.7676991s-7.040556 5.6733038-11.638471 6.829646c-.574739.1445428-.933951.2890856-1.077636.4336283-.143685.1445428.215527.361357 1.077636.6504425 2.730012.4336283 5.675551 1.4454277 8.836617 3.0353982s5.855156 3.7942478 8.082271 6.6128319 3.340672 6.3237463 3.340672 10.5154867c0 6.7935104-1.79606 12.1054573-5.388181 15.9358407-3.59212 3.8303835-8.441483 6.5044248-14.548088 8.0221239s-13.039397 2.2765487-20.798378 2.2765487c-1.436848 0-3.87949-.2168142-7.327925-.6504425-3.448436-.4336283-6.825029-.6504425-10.12978-.6504425-3.161066 0-6.501738.1084071-10.022016.3252213-3.520279.2168141-6.070684.4336283-7.651217.6504425-1.580533.2168141-1.221321.3252212 1.077636.3252212zm36.208575-7.1548673c7.184241 0 12.752028-1.4815634 16.70336-4.4446902 3.951333-2.9631269 5.926999-7.4078171 5.926999-13.3340708 0-7.3716814-2.442642-12.2861357-7.327926-14.7433629-4.885284-2.4572271-11.135573-3.6858407-18.750869-3.6858407-2.298957 0-4.274623.361357-5.926999 1.0840708-1.652375.7227139-2.478563 2.1681416-2.478563 4.3362832v19.9469027c0 3.6135693.969873 6.3237463 2.909618 8.130531 1.939745 1.8067846 4.921205 2.7101769 8.94438 2.7101769zm-5.603708-42.7123893c9.052143 0 15.553882-1.6261062 19.505214-4.8783186 3.951333-3.2522124 5.926999-7.0464602 5.926999-11.3827434 0-4.1917404-1.472769-7.769174-4.418308-10.7323009-2.945539-2.9631268-8.728853-4.44469023-17.349942-4.44469023-4.023175 0-6.681344.61430683-7.974508 1.84292033-1.293163 1.2286136-1.939745 2.9992626-1.939745 5.3119469v18.8628319c0 2.7463127.826188 4.3362832 2.478563 4.7699115 1.652376.4336283 2.909618.6504425 3.771727.6504425z"></path></g></g></g></svg></figure></p>
<p>Similarly to <code>all-small-caps</code>, this converts all letters, both lower and uppercase, to petite caps.</p>
<pre><code class="language-css">font-variant-caps: all-petite-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;pcap&#x27; 1, &#x27;c2pc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pcap&#x27; 1, &#x27;c2pc&#x27; 0; /* low-level disable */
</code></pre>
<h3>unicase</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of text with Unicase off and Unicase on. The left shows a standard uppercase &#x27;A&#x27; and lowercase &#x27;a&#x27; at different heights; the right shows &#x27;A&#x27; and &#x27;a&#x27; adjusted to a more unified height, blending uppercase and lowercase characteristics." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129.218452 133.5 539.973982.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m129.718915 186.999537-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129.218452 273.5 539.973982.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="497.382514" y="324">Unicase on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(407.218452 132)"><path d="m46.4349112 98.8930163h45.7869823l13.1745565 36.6270427h-1.511835c-7.7751475 0-12.7426032-.215453-16.6301771-.215453-1.5118343 0-3.0236687 1.508173-3.0236687 3.878158s1.5118344 3.662704 3.0236687 3.662704c4.1035503 0 9.0710059-1.077266 29.1568051-1.077266h1.079881c20.517752 0 25.053255 1.077266 29.156805 1.077266 1.727811 0 3.239645-1.292719 3.239645-3.662704s-1.511834-3.878158-3.239645-3.878158c-3.671598 0-6.047337.215453-16.630178.215453h-.647929l-48.5946741-133.15007386c-.4319526-1.50817236-1.295858-2.36998514-3.6715976-2.36998514s-3.0236686.64635958-3.6715976 2.36998514l-49.0266273 133.15007386c-14.47041416 0-17.4940828-.215453-21.38165676-.215453-1.72781065 0-3.02366864 1.508173-3.02366864 3.878158s1.29585799 3.662704 3.02366864 3.662704c4.10355029 0 6.26331361-1.077266 25.48520706-1.077266h1.0798817c19.2218935 0 21.5976331 1.077266 25.7011834 1.077266 1.5118343 0 3.239645-1.292719 3.239645-3.662704s-1.7278107-3.878158-3.239645-3.878158c-3.6715976 0-6.9112426.215453-22.4615384.215453zm42.5473373-7.9717682h-39.7396449l20.0857988-54.294205z"></path><path d="m218.568047 117.421991c-14.470414 15.51263-23.109467 15.51263-29.588757 15.51263-8.207101 0-16.630178-5.601783-16.630178-21.545319 0-26.2852901 24.18935-35.1188711 46.218935-35.1188711zm-40.171597-99.754829c2.375739-4.3090639 9.502958-8.18722144 20.517751-8.18722144 12.95858 0 19.653846 7.54086184 19.653846 22.62258544v37.2734027c-28.508875 0-69.760355 10.5572065-69.760355 45.8915303 0 19.175334 14.470415 29.732541 30.02071 29.732541 12.310651 0 25.053255-4.955423 40.387574-18.528975 1.943787 10.77266 9.071006 18.098069 20.085799 18.098069 4.967456 0 13.822485-.64636 21.381657-8.402675 1.079882-1.077266 2.159763-3.016345 2.159763-4.73997 0-2.369985-2.159763-4.093611-4.751479-4.093611-.863905 0-1.511834.430906-2.159763 1.292719-2.807693 2.369985-4.103551 8.618128-9.502959 8.618128-3.455621 0-5.399408-2.154532-5.399408-10.1263v-82.9494801c0-29.7325409-15.33432-42.65973254-42.115385-42.65973254-18.789941 0-39.739645 12.92719164-39.739645 27.79346214 0 7.3254086 5.615385 13.1426448 12.95858 13.1426448 7.127219 0 12.95858-5.8172362 12.95858-13.1426448 0-4.7399703-2.591716-9.4799406-6.695266-11.6344725z"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="196.261421" y="324">Unicase off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(129.218452 132)"><path d="m90.0621302 90.9212481h-47.0828403l23.9733728-63.5586924zm34.3402368 44.5988109-48.810651-133.15007386c-.647929-1.50817236-1.295858-2.36998514-3.6715977-2.36998514-2.5917159 0-3.2396449.64635958-3.8875739 2.36998514l-50.7544379 133.15007386h-1.295858c-9.71893489 0-10.58284022-.215453-12.74260353-.215453-1.51183432 0-3.23964497 1.508173-3.23964497 3.878158s1.72781065 3.662704 3.23964497 3.662704c2.15976331 0 3.02366864-1.077266 18.35798813-1.077266h1.0798817c15.1183432 0 15.9822485 1.077266 18.1420118 1.077266 1.5118343 0 3.239645-1.292719 3.239645-3.662704s-1.7278107-3.878158-3.239645-3.878158c-2.1597633 0-3.0236686.215453-13.3905325.215453h-1.5118343l14.0384615-36.8424958h52.9142012l13.3905325 36.8424958c-9.9349112 0-12.0946745-.215453-14.2544378-.215453-1.5118344 0-3.239645 1.508173-3.239645 3.878158s1.7278106 3.662704 3.239645 3.662704c2.1597633 0 4.3195266-1.077266 22.0295858-1.077266h2.591716c17.710059 0 19.869822 1.077266 22.029586 1.077266 1.72781 0 3.239645-1.292719 3.239645-3.662704s-1.511835-3.878158-3.239645-3.878158c-2.159764 0-4.319527.215453-14.254438.215453z"></path><path d="m190.491124 125.178306c-9.934911 8.833581-16.414201 10.341753-20.949704 10.341753-6.263313 0-11.662722-5.170876-11.662722-13.142644 0-12.711739 9.071006-19.821694 32.612426-19.821694zm-27.860946-59.2496284c1.72781-2.3699852 6.047337-5.1708767 13.822485-5.1708767 8.855029 0 14.038461 4.0936107 14.038461 14.435364v21.1144131c-24.837278 0-48.810651 8.402675-48.810651 28.870728 0 12.927192 9.502959 19.821694 20.949705 19.821694 8.423076 0 17.926035-3.447251 28.292899-12.927192 1.295858 7.325409 6.263314 12.496286 13.606509 12.496286 4.535503 0 8.855029-.430907 14.68639-4.955424 1.295858-1.077266 2.37574-3.878157 1.079882-5.38633-1.727811-1.508172-3.455621-1.723625-4.967456-.430906-2.375739 1.939079-2.591716 4.524517-5.399408 4.524517s-4.10355-1.723626-4.10355-7.756315v-47.1842497c0-20.4680535-11.014793-29.0861812-29.372781-29.0861812-12.95858 0-27.644971 8.6181277-27.644971 18.9598811 0 4.9554235 3.671598 9.0490342 8.85503 9.0490342 4.967456 0 8.855029-4.0936107 8.855029-9.0490342 0-3.2317979-1.511834-5.8172363-3.887573-7.3254086z"></path></g></g></svg></figure></p>
<p>This feature maps upper and lowercase letters to a mixed set of lowercase and small capital forms, creating a single case alphabet. Sometimes the small capitals used are actual small cap glyphs and sometimes they are specially designed unicase forms. The implementation of this feature varies greatly from font to font.</p>
<pre><code class="language-css">font-variant-caps: unicase; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;unic&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;unic&#x27; 0; /* low-level disable */
</code></pre>
<h3>titling-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of text with Titling Caps off and Titling Caps on. The left shows regular capital &#x27;A&#x27; and lowercase &#x27;a&#x27;; the right shows a lighter, more refined capital &#x27;A&#x27; for use in titling, matching better with the lowercase &#x27;a&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129.513957 123.62 540.972086.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m129.718915 180.999537-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129.513957 273.62 540.972086.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="493.648438" y="324">Titling caps on</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="201.527344" y="324">Titling caps off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 122)"><path d="m158.560889 150.646238c0-1.729081-1.2958-2.809757-2.159667-3.025892-17.27733-1.945217-23.540363-10.590626-27.427762-21.613521l-44.9210599-124.27774335c-.2159666-.86454083-1.2957998-1.72908165-3.0235328-1.72908165-1.5117665 0-2.5915996.64840562-3.0235329 1.72908165l-50.5361923 124.27774335c-5.6151325 12.751977-9.9344652 20.316709-25.05212955 21.613521-.86386654.216135-2.37563297 1.296811-2.37563297 3.025892-.21596664 1.729082.43193326 3.025893 1.51176643 3.025893 10.15043179 0 14.68573109-1.296811 24.18826299-1.296811 11.8781649 0 14.9016977 1.296811 27.6437291 1.296811.8638666 0 1.7277331-1.296811 1.7277331-3.025893 0-1.729081-.4319333-3.025892-1.2957998-3.025892-13.6058979-.648406-17.4932973-4.53884-17.4932973-10.37449 0-3.025893 1.0798331-6.700192 2.3756329-10.37449l12.3100982-33.5009571h44.4891265l12.5260643 36.0945791c1.079834 3.458164 1.9437 6.484056 1.9437 9.077679 0 5.40338-4.103366 8.429273-18.141197 9.077679-.8638666 0-1.2957998 1.296811-1.2957998 3.025892 0 1.729082.8638665 3.025893 1.727733 3.025893 14.2537978 0 20.5168298-1.296811 33.9067618-1.296811 11.878165 0 16.413464 1.296811 30.667262 1.296811.863866 0 1.727733-1.296811 1.727733-3.025893zm-65.4378902-64.1921557h-39.521894l20.5168302-55.3306127z"></path><path d="m256.609741 144.162182c0-2.593622-2.159667-4.538839-3.2395-3.674298-2.5916 2.377487-5.399166 4.322704-8.422699 4.322704-3.239499 0-7.558832-1.729082-7.342865-12.103572l1.511766-48.8465561c.6479-17.9392221-11.662198-26.8007656-26.131962-26.8007656-16.629431 0-43.193327 15.1294644-43.193327 26.5846304 0 4.7549745 3.455466 7.5647322 7.774799 7.5647322 6.910932 0 12.742031-4.5388394 12.957998-14.697194.215966-6.7001914 7.558832-10.8067603 15.333631-10.8067603 8.206732 0 14.253797 6.2679209 14.037831 17.5069516l-.6479 16.8585458c-14.037831 3.674299-52.479892 14.264924-52.479892 35.878444 0 11.239031 8.422699 20.965115 22.028597 20.965115 12.310098 0 23.108429-4.538839 30.235328-11.887436 2.159667 6.700191 8.638666 11.022896 16.629431 11.022896 8.422699 0 15.117664-4.106569 20.084897-9.94222.6479-.648405.6479-1.080676.863867-1.945217zm-37.578195-36.742985-.863866 28.962118c-2.807566 6.051786-11.878165 9.942219-18.789097 9.942219-7.558833 0-11.878165-5.619515-11.878165-15.345599 0-13.616518 15.333631-19.884439 31.531128-23.558738z"></path></g><path d="m582.578511 275.325702c1.2958 0 1.727733-2.377488-.215967-2.809758-5.183199-1.296811-12.742031-1.945217-15.549598-3.458163-5.831099-3.458164-11.446231-17.290817-58.526957-151.078509-.431934-1.080676-5.615133-1.512947-6.263033 0-30.019362 82.563648-50.536192 137.678126-57.015191 146.539669-3.2395 4.53884-5.831099 6.700192-16.845397 7.997003-1.727734.216135-1.2958 2.809758-.215967 2.809758 5.831099-.648406 10.798332-.864541 22.244563-.864541 11.662198 0 13.821865.216135 19.86893.864541 1.079834 0 1.511767-2.593623-.431933-2.809758-12.310098-1.945217-14.037831-3.890434-14.037831-7.780868 0-4.322704 7.342866-26.152359 17.493297-53.817666 5.399166-.216135 15.117665-.43227 33.474829-.43227h17.27733c3.671433 10.37449 7.342866 20.74898 10.798332 30.258929 8.854632 25.287819 7.126899 27.665306 4.319333 29.394388-2.807567 1.512946-10.150432 1.080676-15.333631 2.377487-1.727733.43227-1.511767 2.809758-.215967 2.809758 5.831099-.648406 22.028597-.864541 33.690795-.864541 11.446232 0 19.652964.216135 25.484063.864541zm-60.686624-69.595537c-4.319333 0-9.286566 0-15.333631 0-16.197498 0-25.70003 0-31.531129-.216135 6.910932-19.452169 15.117664-41.065689 22.892463-61.598534.215967-.648405 1.079833-.86454 1.2958 0 6.910932 18.371493 14.901698 40.201149 22.676497 61.814669z"></path><path d="m670.908864 266.680293c.431933-.648405-.6479-1.729081-1.511766-1.080676-2.5916 2.161352-4.103367 2.809758-7.774799 2.809758-4.5353 0-7.126899-3.890434-7.126899-9.726084 0-16.426276 1.943699-33.717092 1.943699-50.359503 0-18.155358-9.718498-27.016901-26.995829-27.016901-16.845397 0-36.498361 15.77787-36.930294 26.800765-.215967 4.322705 2.591599 7.132462 6.910932 7.132462 6.047066 0 9.502532-3.025893 10.150432-12.968112.6479-9.726084 6.047066-16.210141 14.901698-16.210141 11.014298 0 16.413464 6.051786 16.413464 22.261927v11.23903c-.215967 3.242028-.431933 4.106569-2.375633 4.754975-30.667262 10.590625-49.672326 16.642411-49.672326 35.446174 0 9.293814 9.502532 17.506951 20.300864 17.506951 12.094131 0 22.028596-6.700191 28.507595-12.319706.6479-.648406 1.511767-.432271 1.9437.216135 2.375633 6.051786 6.263032 11.887436 12.957998 11.887436 7.558832 0 15.981531-5.40338 18.357164-10.37449zm-30.667262-37.175255c0 5.187245-.431933 21.18125-1.2958 27.881441-.215966 2.377488-10.150432 11.022896-20.300863 11.022896-9.070599 0-14.037832-3.890434-14.037832-14.048788 0-12.103572 11.446232-19.668304 33.906762-26.15236 1.079833-.216136 1.727733.43227 1.727733 1.296811z"></path></g></g></svg></figure></p>
<p>Standard uppercase letters are designed for use alongside lowercase letters and when they are used in strings of all uppercase letters they can appear too strong. Some fonts include titling capitals specifically for this situation.</p>
<pre><code class="language-css">font-variant-caps: titling-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;titl&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;titl&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-numeric</h2>
<p>The proper display of numerals varies greatly depending on context. Here are some general rules:</p>
<ul>
<li>In running/body text, use <em>proportional old-style</em> numerals</li>
<li>For headings, use <em>proportional lining</em> numerals</li>
<li>Within numeric tables, use <em>tabular lining</em> numerals</li>
</ul>
<p>You can combine values to achieve, for example, tabular lining numerals like this:</p>
<pre><code class="language-css">font-variant-numeric: lining-nums tabular-nums;
</code></pre>
<h3>lining-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sample showing uppercase &#x27;A&#x27;, lowercase &#x27;a&#x27;, and lining numerals &#x27;7&#x27;, &#x27;8&#x27;, and &#x27;9&#x27; aligned along the same cap height and baseline." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m110.500432 146.5 578.758951.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m110.000864 195.999568-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000863 1 3 .002591.000862-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000863 1 3 .002591.000862-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m110.500432 294.06 578.758951.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(110.500432 140)"><path d="m0 154.941495h11.4468138c1.5118433-3.878924 9.2870376-23.920036 16.1983214-39.651231l6.0473733-14.43822h70.8406595l24.40547 55.382426 10.798881-1.292975c-1.943798-3.878924-9.718992-20.903094-17.278209-37.711768l-52.0506062-117.229727-3.2396643.64648746c-4.1035748 11.20578274-9.7189929 23.70454034-19.6539633 46.76259314zm69.112838-135.7623669 31.532732 73.0530833h-63.0654643z"></path><path d="m181.565185 157.311949c15.766366 0 29.372956-9.481816 34.556419-22.411565-.86391 17.670657 5.831396 21.549582 12.958657 21.549582 4.103575 0 7.559217-1.292975 10.150948-3.016941l.647933-7.111362c-2.375754 1.292974-5.39944 2.585949-8.207149 2.585949-4.967486 0-7.559217-2.801445-7.34324-12.929749l1.295866-42.6681725c.647933-24.9975152-12.742679-37.280777-33.692508-37.280777-11.446814 0-21.81374 3.4479331-31.964688 9.2663203l2.375754 8.6198328c7.775194-5.1718997 18.14212-9.4818161 28.509046-9.4818161 17.278209 0 25.917314 10.1283036 25.485359 30.8159024l-.215978 5.1719001c-4.751508-.430992-9.503015-.8619837-15.334411-.8619837-35.636307 0-48.594964 14.4382197-48.594964 31.0313987 0 14.869211 10.150948 26.721481 29.372956 26.721481zm1.943799-7.973345c-15.334411 0-21.81374-9.050824-21.81374-19.394624 0-11.85227 8.639105-23.489044 38.875971-23.489044 4.751508 0 10.150949.215495 15.334411.861983l-.431955 9.481816c-.647933 18.748136-14.686478 32.539869-31.964687 32.539869z"></path></g><g transform="translate(380.580444 142.334538)"><path d="m1.29586571 3.66342896c-.21597762 3.01694149-.64793285 7.11136214-1.29586571 9.69731194 11.6627914-.2154958 27.4291576-.2154958 42.7635685-.2154958 11.8787691 0 25.2693815 0 35.6363072.2154958l-47.5150762 99.3435731c-5.8313957 12.283262-15.1184333 30.600407-19.4379857 38.358257l11.2308362 1.50847c1.9437986-5.171899 7.7751943-17.239665 12.9586571-28.014456l44.9233447-94.1716742c3.8875972-8.1888412 7.5592167-16.5931782 10.3669258-21.76507796l-3.2396643-4.95640388c-13.3906124.43099164-28.0770905.64648746-43.627479.64648746-15.5503886 0-29.8049115-.21549582-42.76356859-.64648746z"></path><path d="m101.761455 116.798735c0 21.980574 19.437985 38.789248 46.435188 38.789248 28.293068 0 47.947031-18.101649 47.947031-41.375198 0-17.886153-14.4705-31.2468939-36.716195-39.8667267 19.869941-7.3268579 33.044576-18.5326406 33.044576-36.8497854 0-20.2566072-17.27821-37.4962729-42.115636-37.4962729-25.701337 0-43.195524 17.6706573-43.195524 38.3582562 0 18.7481364 14.470501 29.7384233 31.964688 36.6342895-22.893628 7.5423538-37.364128 20.472103-37.364128 41.8061893zm84.663226-2.154958c0 18.101649-15.118433 32.539869-37.580105 32.539869-21.381785 0-37.364128-13.360741-37.364128-31.031398 0-19.3946243 14.686478-30.600407 37.580105-37.2807775 23.109606 7.5423538 37.364128 19.1791281 37.364128 35.7723065zm-69.544793-76.7165125c0-15.9466907 12.74268-29.30743166 32.828598-29.30743166 19.222008 0 32.828598 13.14524506 32.828598 29.52292746 0 15.731195-12.526702 26.505986-32.180665 32.3243732-19.653963-6.4648746-33.476531-15.5156991-33.476531-32.539869z"></path><path d="m225.336649 148.261125 2.159776 8.404337c49.89083-9.697312 81.423563-50.857014 81.423563-100.2055569 0-34.6948272-19.006031-56.24440928-47.083121-56.24440928-28.293068 0-47.731054 22.62706118-47.731054 50.64151798 0 25.213011 18.358097 44.6076349 43.627479 44.6076349 17.494187 0 33.476531-9.4818161 41.251725-25.4285068-5.183463 39.0047431-31.964688 70.0361421-73.648368 78.2249831zm-1.511843-97.8351029c0-23.0580528 15.118433-41.37519761 37.580105-41.37519761 22.67765 0 36.500218 18.53264061 36.500218 37.92726451 0 20.9030946-16.198321 39.8667269-38.012061 39.8667269-21.813739 0-36.068262-15.7311949-36.068262-36.4187938z"></path></g></g></g></svg></figure></p>
<p>Lining numerals approximate capital letters and are uniform in height. They should be used in headings or numeric tables. Usually numbers are lining figures by default.</p>
<pre><code class="language-css">font-variant-numeric: lining-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;lnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;lnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>oldstyle-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sample showing uppercase &#x27;A&#x27;, lowercase &#x27;a&#x27;, and old-style numerals &#x27;7&#x27;, &#x27;8&#x27;, and &#x27;9&#x27;, where the numerals vary in height to better match the rhythm of lowercase text." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m120 125.5 557.767694.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m120.000952 181-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004622-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000951-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147607.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147607.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 1.827403.001641.000952-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m120 279.06 557.767694.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(120 124)"><path d="m0 155.554842h11.4546511c1.5128784-3.894279 9.2933962-24.014725 16.2094119-39.808193l6.0515138-14.495375h70.8891612l24.422181 55.601662 10.806274-1.298094c-1.945129-3.894279-9.725647-20.985841-17.290039-37.861053l-52.0862435-117.693789-3.2418824.64904663c-4.1063844 11.25014157-9.7256472 23.79837647-19.6674198 46.94770627zm69.1601575-136.299792 31.5543215 73.3422692h-63.1086434z"></path><path d="m181.689497 157.93468c15.777161 0 29.393067-9.519351 34.580079-22.500283-.864502 17.740608 5.835388 21.634888 12.967529 21.634888 4.106385 0 7.564393-1.298094 10.157899-3.028885l.648376-7.139513c-2.37738 1.298094-5.403137 2.596187-8.212769 2.596187-4.970886 0-7.564392-2.812536-7.348266-12.980933l1.296753-42.8370774c.648376-25.0964697-12.751405-37.4283557-33.715577-37.4283557-11.454651 0-21.828675 3.4615821-31.986573 9.3030017l2.37738 8.6539551c7.780518-5.192373 18.154542-9.5193506 28.528565-9.5193506 17.29004 0 25.935059 10.1683972 25.502808 30.9378894l-.216125 5.1923735c-4.754761-.432698-9.509522-.865396-15.34491-.865396-35.660706 0-48.628236 14.495375-48.628236 31.154238 0 14.928073 10.157898 26.827261 29.393067 26.827261zm1.94513-8.004908c-15.34491 0-21.828675-9.086653-21.828675-19.471399 0-11.899189 8.64502-23.582028 38.902588-23.582028 4.754761 0 10.157899.216349 15.34491.865396l-.432251 9.51935c-.648376 18.822352-14.696533 32.668681-31.986572 32.668681z"></path></g><g transform="translate(389.184301 134.565037)"><path d="m81.9115616 40.6735888c-12.5352786.4326978-26.1511846.6490467-40.6315926.6490467s-27.664063-.2163489-40.19934154-.6490467c0 2.8125354-.43225098 6.4904663-1.08062746 9.3030017 11.0224001-.2163489 25.5028081-.2163489 39.9832161-.2163489 11.2385256 0 22.6931766 0 32.2026983.2163489l-43.008973 89.7847835c-5.1870118 10.817444-14.2642824 28.558052-18.3706668 35.481216l9.2933962 4.759675c1.5128784-4.326977 7.3482667-16.442514 11.886902-25.745516l42.7928475-88.9193882c3.4580079-7.3558618 7.1321413-15.3607703 9.9417727-20.3367944z"></path><path d="m96.6441159 110.554276c0 20.985841 18.1545411 36.779309 42.5767221 36.779309 25.935059 0 44.305726-17.30791 44.305726-39.808193 0-16.226166-13.399781-29.6397964-33.0672-37.2120071 17.506164-6.923164 29.176941-17.3079101 29.176941-34.8321691 0-19.25505-15.993286-35.4812158-38.254212-35.4812158-23.341553 0-39.550965 16.6588635-39.550965 36.3466113 0 17.7406079 12.751404 28.3417028 28.312439 34.8321691-20.315796 6.9231641-33.4994511 19.6877478-33.4994511 39.3754956zm77.1568011-2.163489c0 17.091561-13.399781 30.505192-33.931703 30.505192-19.019043 0-33.715576-11.899188-33.715576-28.99075 0-17.9569564 12.967529-28.7744002 33.931702-35.0485177 20.964173 6.4904663 33.715577 18.1733057 33.715577 33.5340757zm-62.676393-72.2605246c0-15.5771191 11.670776-27.90900508 29.825318-27.90900508 17.073914 0 29.393067 12.11553708 29.393067 27.69265618 0 15.1444214-11.238526 25.0964697-29.176942 30.9378894-17.72229-6.4904663-30.041443-14.9280725-30.041443-30.7215405z"></path><path d="m209.281518 172.430055 3.241883 8.004908c47.115357-10.817444 76.292298-44.567868 76.292298-89.5684348 0-30.5051916-15.993286-52.572777-44.521851-52.572777-26.583436 0-45.386353 21.4185388-45.386353 46.9477062 0 23.1493296 17.073914 41.9716826 41.063843 41.9716826 13.615906 0 26.36731-5.625071 36.741334-13.62998-7.996643 29.639796-32.634949 51.058335-67.431154 58.846895zm33.067201-53.654522c-20.315797 0-33.715577-15.144421-33.715577-34.1831222 0-20.3367944 14.264282-37.6447046 35.228455-37.6447046 24.422181 0 35.660706 19.9040967 35.660706 44.3515198 0 4.3269775-.432251 8.4376062-.864502 12.548235-10.157898 9.086653-23.773804 14.928072-36.309082 14.928072z"></path></g></g></g></svg></figure></p>
<p>Old-style numerals have varying heights and alignments and are therefore more similar to lowercase letters. They should be used in running text.</p>
<pre><code class="language-css">font-variant-numeric: oldstyle-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;onum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;onum&#x27; 0; /* low-level disable */
</code></pre>
<h3>proportional-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Proportional numerals &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, and &#x27;5&#x27; displayed inside separate brown background boxes, each number having varying width for natural text flow." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#e6594c" fill-opacity="0.25"><path d="m152 143h52v155h-52z"></path><path d="m212 143h102v155h-102z"></path><path d="m322 143h98v155h-98z"></path><path d="m428 143h117v155h-117z"></path><path d="m553 143h95v155h-95z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(156 143)"><path d="m39.0577526.21648045-11.2210118 3.89664804-27.8367408 8.65921791 2.15788688 8.6592178 28.69989552-9.0921787v93.0865925c0 12.339385 0 37.018156-.4315774 46.326815h10.3578571c-.2157887-5.412011-.4315774-20.349162-.4315774-27.709497v-96.3337988c0-2.3812849.2157887-24.67877094.4315774-26.41061452z"></path><path d="m75.4882853 142.877095c14.2420535-14.28771 27.4051637-28.142458 37.5472317-39.399441 23.08939-26.1941344 35.173556-43.9455311 35.173556-64.2946931 0-23.1634078-16.39994-39.1829609-41.647217-39.1829609-14.242053 0-28.9156838 6.49441341-41.4314277 16.452514l4.5315624 8.0097765c11.6525892-9.9581006 24.5999105-15.37011173 36.2524993-15.37011173 20.284137 0 32.368304 13.20530723 32.368304 31.17318433 0 24.8952514-22.226235 49.7905028-77.8997168 105.2094969l1.7263095 6.927375c13.5946873-.649442 28.4841068-.865922 44.6682583-.865922 16.831518 0 31.28936.21648 45.099836.649441 0-3.463687.431577-6.710894 1.078943-9.9581-24.59991.865921-53.0840169.649441-77.4681387.649441z"></path><path d="m171.687062 148.722067c11.652589 4.329609 22.873601 6.277933 34.741978 6.277933 30.857783 0 52.436652-16.885475 52.436652-42.213687 0-19.6997208-14.457842-33.9874303-43.373527-38.9664806 21.794658-5.6284916 40.136696-17.9678771 40.136696-40.2653631 0-18.400838-16.184151-33.5544693-41.215639-33.5544693-13.16311 0-27.620952 4.97905028-39.705119 13.6382682l4.099985 8.2262569c10.573646-8.0097765 23.952545-12.77234633 34.957768-12.77234633 20.068348 0 31.936726 11.90642463 31.936726 25.76117323 0 19.4832402-21.147292 32.9050279-55.457693 38.1005586l1.726309 6.7108939c35.820923.2164804 56.968214 12.5558659 56.968214 33.7709495 0 20.132682-17.263095 32.472067-43.589315 32.472067-11.652589 0-23.305178-2.597765-34.957767-6.927374z"></path><path d="m350.275034 151.752793h10.142068c-.215789-5.412011-.431577-17.318435-.431577-24.895251v-20.998603c8.19997 0 16.184151.21648 22.873601.43296.215788-3.680167.431577-5.628491 1.294732-9.3086588-7.121027.2164805-15.536786.4329609-24.168333.4329609v-66.0265363c0-2.1648045.215788-28.1424581.431577-30.09078212l-6.689449-.86592179c-1.294733 1.94832403-14.026265 18.40083801-15.968363 20.78212291l-61.499776 78.7988822 2.805252 6.494414c14.457843-.649441 34.526191-.865922 51.14192-.865922h20.715714v5.844972c0 12.772347-.215789 30.740224-.647366 40.265363zm-61.283988-54.3365919 61.715565-79.2318436.215789 79.2318436c-3.452619.2164805-7.552604.2164805-10.142069.2164805-9.710491 0-42.078794 0-51.789285-.2164805z"></path><path d="m487 109.322626c0-27.925978-21.147291-43.2960897-56.968214-43.2960897-3.23683 0-7.984181.4329609-10.789434.6494414l2.373675-53.9036313c7.552605 0 21.363081-.2164805 28.484107-.2164805 12.731533 0 22.010447.4329609 31.936726.4329609.431578-2.5977653.863155-6.71089384 1.72631-9.7416201-11.436801.4329609-20.284137.4329609-34.310402.4329609-14.242053 0-23.305178 0-35.605133-.21648045l-1.72631 1.51536313c.215789 7.36033522 0 17.31843572-.431577 25.97765362l-1.078944 21.2150838c-.215788 9.0921788-.863154 17.1019553-1.294732 22.9469274l1.294732 1.0824022c6.905238-.8659218 12.515744-1.2988827 17.047307-1.2988827 30.426205 0 49.415609 10.6075419 49.415609 34.8533524 0 22.297486-18.557827 36.152234-43.589315 36.152234-11.221011 0-21.578869-1.948324-31.289359-5.628491l1.294732 9.74162c9.063125 3.247206 18.989404 4.97905 30.426205 4.97905 30.426205 0 53.084017-17.751397 53.084017-45.677374z"></path></g></g></svg></figure></p>
<p>Proportional numerals have variable spacing and blend in with horizontal text. They should be used in most situations, other than numeric tables where vertical alignment is important. Usually numbers are proportional figures by default.</p>
<pre><code class="language-css">font-variant-numeric: proportional-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;pnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>tabular-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Tabular numerals &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, and &#x27;5&#x27; displayed inside separate brown background boxes, all aligned with equal width for consistent stacking in tables." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#e6594c" fill-opacity="0.25"><path d="m118 143h104v155h-104z"></path><path d="m230 143h104v155h-104z"></path><path d="m342 143h104v155h-104z"></path><path d="m454 143h117v155h-117z"></path><path d="m579 143h104v155h-104z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(122 143)"><path d="m96.9102299 142.444134c-7.1225781.432961-17.0510204.649441-24.8211056.649441h-16.8351847v-19.050279-96.3337988c0-2.3812849.2158357-24.67877094.4316714-26.41061452l-1.7266857-1.08240223-11.2234564 3.89664804c-7.985921 2.38128492-31.5120124 11.25698321-42.0879618 14.28770951l1.94252132 8.8756983 43.16714028-14.9371508v93.0865925c0 9.525139 0 26.194134-.2158357 37.667597h-20.7202273c-10.144278 0-15.10849914-.21648-24.8211057-.649441.4316714 2.814246.6475071 6.710894.86334281 9.74162 11.65512789-.21648 20.72022729-.432961 33.02286229-.432961h27.1952984c12.5184707 0 25.6844485 0 35.6128907.432961.2158357-2.381285.2158357-7.793296.2158357-9.74162z"></path><path d="m125.141501 142.877095c17.482692-15.803073 33.022862-30.523743 44.246319-41.997207 25.468612-26.1941338 36.476233-41.9972064 36.476233-61.6969271 0-24.0293296-18.130199-39.1829609-44.462154-39.1829609-17.698528 0-32.807027 8.22625698-46.836347 20.9986034l4.316714 8.0097765c13.597649-12.7723464 26.547791-19.91620113 42.087961-19.91620113 21.367735 0 34.965384 12.33938543 34.965384 31.17318433 0 24.2458101-21.799406 47.4092179-85.902609 105.2094969l1.726685 6.927375c14.892664-.649442 31.080341-.865922 48.347198-.865922 18.56187 0 34.317876.21648 49.210539.649441 0-3.463687.647508-6.710894 1.079179-9.9581-26.979463.865921-58.275639.649441-85.255102.649441z"></path><path d="m223.994446 148.072626c12.734306 4.76257 24.173598 6.927374 39.929605 6.927374 33.454533 0 56.980625-17.751397 56.980625-42.213687 0-20.9986035-18.561871-35.286313-51.153061-38.5335197 30.001162-6.0614525 47.915525-20.7821229 47.915525-40.698324 0-18.6173185-17.914363-33.5544693-45.109661-33.5544693-17.914364 0-33.454534 6.49441341-45.973005 14.9371508l4.100879 8.0097766c11.870963-8.226257 25.252777-13.85474863 41.224619-13.85474863 22.446913 0 35.828726 11.25698323 35.828726 25.32821233 0 17.3184357-17.266856 31.1731843-58.923146 38.3170391l1.510849 7.1438547c37.123741.6494414 60.433997 11.9064246 60.433997 33.5544691 0 18.833799-18.346035 32.472067-47.268019 32.472067-16.835184 0-28.274477-2.814246-40.792947-7.793296z"></path><path d="m409.001615 151.752793h10.144278c-.215836-5.412011-.431672-17.318435-.431672-24.895251v-14.28771c9.0651 0 17.698528.216481 25.684449.432961.215835-3.680167.431671-5.412011 1.295014-9.308659-8.633428.216481-17.266856.432961-26.979463.432961v-72.7374302c0-2.1648045.215836-28.1424581.431672-30.09078212l-6.906743-.86592179c-1.295014 1.94832403-14.02932 19.26675981-15.756006 21.43156421l-62.160682 85.0768159 2.590028 6.277933c15.540171-.649442 36.476234-.649442 54.390597-.649442h18.346035v6.494414c0 10.391061 0 25.111732-.647507 32.688547zm-7.122579-47.409218c-11.00762 0-44.462154 0-55.253939-.21648l63.024025-86.3756984v86.3756984c-2.590029.21648-5.395893.21648-7.770086.21648z"></path><path d="m462.816456 148.505587c10.791785 4.113128 22.662748 6.494413 36.907905 6.494413 33.238698 0 58.275639-17.751397 58.275639-45.677374 0-27.925978-22.878584-43.2960897-62.160682-43.2960897-5.180057 0-12.734306.8659218-17.482692 1.5153631l2.590029-54.769553c9.280935 0 25.900284-.2164805 34.749548-.2164805 15.54017 0 26.979462.4329609 39.066261.4329609 0-2.5977653.863343-6.71089384 1.51085-9.7416201-13.597649.4329609-24.389434.4329609-41.008783.4329609-16.835185 0-27.842805 0-42.303797-.21648045l-1.726686 1.51536313c0 7.36033522 0 17.31843572-.431671 25.97765362l-.863343 21.2150838c-.431672 9.5251397-1.295014 17.7513967-1.51085 23.8128492l1.295014 1.0824022c9.496771-1.5153631 17.266856-2.1648045 23.310256-2.1648045 33.886205 0 55.253939 10.6075419 55.253939 34.8533524 0 22.297486-21.367734 36.152234-48.994704 36.152234-13.597649 0-26.11612-2.597765-37.771248-7.143855z"></path></g></g></svg></figure></p>
<p>Tabular numerals have the same width and should be used in numeric tables to allow vertical alignment of numbers.</p>
<pre><code class="language-css">font-variant-numeric: tabular-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;tnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;tnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>diagonal-fractions</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of diagonal fractions with feature off and on. Left side shows full-size &#x27;1/2&#x27; characters; right side shows properly formatted diagonal fraction where numerator and denominator are adjusted for better alignment." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m106.500424 98.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m105.000849 148.119576-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m106.500424 262.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="177.952859" y="369">Diagonal fractions off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="503.920859" y="369">Diagonal fractions on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(132.664859 87)"><path d="m37.68 177.12c-.24-5.76-.48-16.8-.48-24.72v-60.48c0-2.64.24-28.08.48-30l-2.16-1.2-10.08 2.88c-6.24 1.68-17.28 4.8-25.44 6.72l1.92 9.84 24.72-6.72v62.64c0 12.96 0 31.44-.72 41.04z"></path><path d="m135.36 0c-3.84.48-7.92.72-10.8.72-3.12 12.96-6 23.76-12.24 45.12l-37.68 132.48c-6.24 21.84-11.52 40.32-16.8 57.12l10.56-.96 9.36-34.08 47.76-167.52c3.36-12 8.88-30.24 9.84-32.88z"></path><path d="m236.16 166.8c-23.52.96-48.24.72-71.52.72 12-8.64 30.24-22.08 43.2-34.32 13.68-12.48 22.08-25.2 22.08-39.6 0-21.12-16.8-34.08-38.64-34.08-13.44 0-27.12 5.28-38.16 13.92l3.6 9.36c10.56-8.88 22.56-13.68 33.84-13.68 17.04 0 28.8 9.36 28.8 25.44 0 17.52-12.96 32.4-73.44 75.6l2.16 7.68c13.92-.72 29.04-.96 45.12-.96 15.6 0 28.56.24 41.52.72 0-3.84.48-6.96 1.44-10.8z"></path></g><path d="m503.904859 267.36c6.96-9.6 12-15.84 17.28-23.28l84.96-115.92c5.52-7.92 14.64-20.64 20.64-28.08-1.44-.72-6.24-3.12-7.68-4.08-4.56 7.2-11.04 16.32-26.64 37.68l-66.96 91.44c-8.16 11.28-12.96 17.76-28.56 37.92zm9.84-159.84v53.52c0 7.44-.24 22.08-.48 27.6h9.6c-.24-3.36-.24-12.24-.24-16.56v-58.56c0-2.16.24-14.16.24-16.08l-1.92-.72-8.16 2.64c-6.24 1.92-13.2 4.32-21.12 6.48l1.92 7.68zm85.68 84.96c8.88-7.68 17.28-11.52 26.88-11.52 12.72 0 20.4 6.72 20.4 17.04 0 8.4-4.8 16.08-17.76 28.32-8.64 8.16-20.88 18.24-36.96 31.92l1.44 6.48c9.84-.24 20.64-.48 32.16-.48 12.48 0 22.32.24 32.4.48 0-3.12.48-6 .72-9.12-16.32.48-36.24.72-53.04.72 10.32-8.64 20.64-17.28 28.8-24.72 14.4-13.68 21.6-22.08 21.6-34.56 0-15.12-12-24.48-29.28-24.48-12 0-23.04 5.28-31.44 12.72z"></path></g></g></svg></figure></p>
<p>By default, fractions will display as lowercase letters with a slash. Proper fractions will be formatted to match the height of a lining figure and can be either diagonal or stacked.</p>
<pre><code class="language-css">font-variant-numeric: diagonal-fractions; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;frac&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;frac&#x27; 0; /* low-level disable */
</code></pre>
<h3>stacked-fractions</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of stacked fractions with feature off and on. Left side shows large &#x27;1/2&#x27; separated by a slash; right side shows a neatly stacked fraction with &#x27;1&#x27; above &#x27;2&#x27; separated by a horizontal line." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m107.000849 192-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m106 124.5 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m105.835565 258.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="212.069142" y="358">Stacked fractions off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="524.037142" y="358">Stacked fractions on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(135.789142 107)"><path d="m80.1131105 152.895038.8637533-8.410305h-33.6863754v-130.4675574l-9.5012853.8625954v14.879771l-36.06169667 4.9599236.2159383 6.9007634 35.84575837-2.5877863v105.4522903h-37.7892031v8.410305z"></path><path d="m189.485861 0-101.922879 188.26145 8.6375321 2.372138 101.2750639-186.96755747z"></path><path d="m291.51671 152.895038v-8.625954h-74.282777c44.699229-37.091603 69.100257-61.2442748 69.100257-88.8473283 0-21.7805343-16.411311-38.601145-75.362468-37.9541984l-.863753 9.0572519c52.688946 0 66.940874 12.5076335 66.940874 30.6221374 0 24.7996183-24.832905 48.0896944-71.043702 87.5534354l.863754 8.194656z"></path></g><path d="m625.822561 168.062977.647815-7.332061h-25.912596v-81.730916l-8.205656.6469466v13.1545801l-27.856041 4.0973283.215938 6.038168 27.640103-2.372138v60.166031h-28.935733v7.332061zm-79.033419 29.543893h91.557841v-7.116412h-91.557841zm77.305913 107.39313v-7.54771h-51.177378c31.095115-22.427481 47.938303-37.522901 47.938303-54.774809 0-14.017176-12.308483-25.015267-55.280206-24.58397l-.647815 7.332062c37.357327.431297 47.722366 7.763358 47.722366 19.192748 0 14.879771-17.706941 29.328244-50.745502 53.265267l.863753 7.116412z"></path></g></g></svg></figure></p>
<p>Stacked fractions are not as common of a feature in most web fonts as diagonal fractions, but should prove useful with heavily scientific or mathematical content.</p>
<pre><code class="language-css">font-variant-numeric: stacked-fractions; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;afrc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;afrc&#x27; 0; /* low-level disable */
</code></pre>
<h3>ordinal</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of ordinal formatting with feature off and on. Left side shows &#x27;1st&#x27; at normal size; right side shows &#x27;st&#x27; as smaller, raised text next to the &#x27;1&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m106 113.450058 588.754788.450058" stroke="#e6594c" stroke-linecap="square"></path><path d="m106 179.450058 588.754788.450058" stroke="#e6594c" stroke-dasharray="2 3" stroke-linecap="square"></path><path d="m106 296.569686 588.754788.450058" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 154.396051)"><path d="m30.456 142.146341h12.528v-120.9756093l-42.984 1.2961673v9.2891986h30.456z"></path><path d="m113.4 144.522648c19.224 0 42.12-6.912892 42.12-32.836237 0-38.0209058-58.968-29.3797908-58.968-60.2717769 0-11.0174216 8.424-19.8745644 23.976-19.8745644 13.176 0 22.032 3.2404181 25.704 4.3205575l2.376-10.1533101c-2.376-.6480837-12.96-4.5365854-25.704-4.5365854-22.248 0-37.8 11.0174216-37.8 31.1080139 0 39.749129 59.4 30.2439025 59.4 61.1358884 0 13.1777-13.608 20.954704-31.968 20.954704-11.448 0-22.896-3.672474-28.728-5.400697l-2.592 10.585366c5.4 1.728223 16.632 4.968641 32.184 4.968641z"></path><path d="m230.04 144.522648c7.128 0 16.2-2.808362 19.008-3.888502l-3.024-10.585366c-3.24 1.08014-10.368 3.456446-16.632 3.456446-19.872 0-25.056-3.672473-25.056-23.33101v-74.7456446h36.936v-11.2334494h-37.152v-24.195122h-11.448v24.195122h-17.28v11.2334494h17.28v74.9616726c0 33.052265 15.768 34.132404 37.368 34.132404z"></path></g><path d="m504.456 297.019744h12.528v-120.975609l-42.984 1.296167v9.289199h30.456z"></path><path d="m576.816 208.664344c12.744 0 30.672-4.968641 30.672-22.898955 0-25.275261-43.416-19.010453-43.416-38.020906 0-6.696864 6.696-11.017421 16.416-11.017421 8.856 0 16.848 1.94425 20.088 2.808362l2.16-8.857143c-2.376-.864111-12.096-3.02439-20.952-3.02439-14.904 0-28.512 7.344948-28.512 21.818815 0 27.219512 43.416 19.010453 43.416 37.804878 0 7.560976-9.72 11.665505-21.816 11.665505-5.832 0-18.36-2.160278-22.464-3.240418l-1.728 9.505227c2.16 1.080139 15.768 3.456446 26.136 3.456446z"></path><path d="m658.032 208.664344c4.968 0 11.664-1.728223 13.608-2.376307l-1.944-8.857143c-1.08.216028-2.376.648084-3.672.864112-2.376.648083-4.968.864111-8.208.864111-12.096 0-15.12-1.728223-15.12-13.393728v-47.094077h24.192v-9.289198h-24.192v-15.986063h-10.8v15.986063h-11.448v9.289198h11.448v47.310105c0 22.682927 11.664 22.682927 26.136 22.682927z"></path></g><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="213.672" y="343.396051">Ordinals off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="532.64" y="343.396051">Ordinals on</tspan></text></g></svg></figure></p>
<p>Ordinals like st, nd, rd, and th will appear as standard lowercase letters by default. However, these should ideally appear as smaller raised numbers following the numeral. The <code>ordinal</code> value enables that.</p>
<pre><code class="language-css">font-variant-numeric: ordinal; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;ordn&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;ordn&#x27; 0; /* low-level disable */
</code></pre>
<h3>slashed-zero</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of a standard zero and a slashed zero. Left side shows &#x27;0&#x27; and &#x27;1&#x27; in normal form; right side shows &#x27;0&#x27; with a diagonal slash across it to distinguish it from the letter &#x27;O&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(451 125)"><path d="m49.2 157.2c31.92 0 52.32-31.44 52.32-78.96 0-47.04-18-75.12-49.2-75.12-31.92 0-52.32 31.2-52.32 78.96 0 46.8 18 75.12 49.2 75.12zm-38.64-77.04c0-42.48 14.4-67.68 40.8-67.68 20.64 0 33.12 16.08 37.68 43.68l-77.76 40.32c-.48-5.04-.72-10.56-.72-16.32zm39.84 67.68c-20.4 0-33.36-15.6-37.92-42.72l77.52-40.32c.48 4.8.72 9.84.72 15.36 0 42.48-13.68 67.68-40.32 67.68z"></path><path d="m215.4 154.56.96-9.36h-37.44v-145.2l-10.56.96v16.56l-40.08 5.52.24 7.68 39.84-2.88v117.36h-42v9.36z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(132 125)"><path d="m49.2 157.2c31.92 0 52.32-31.44 52.32-78.96 0-47.04-18-75.12-49.2-75.12-31.92 0-52.32 31.2-52.32 78.96 0 46.8 18 75.12 49.2 75.12zm2.16-144.72c25.92 0 39.36 25.44 39.36 67.68 0 42.48-13.68 67.68-40.32 67.68-25.92 0-39.84-25.44-39.84-67.68 0-42.48 14.4-67.68 40.8-67.68z"></path><path d="m215.4 154.56.96-9.36h-37.44v-145.2l-10.56.96v16.56l-40.08 5.52.24 7.68 39.84-2.88v117.36h-42v9.36z"></path></g><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="510.179688" y="331">Slashed zero</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="186.71875" y="331">Standard zero</tspan></text><path d="m462.167334 243.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m547.167334 201.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>This enables an alternate zero character with a slash through it.</p>
<pre><code class="language-css">font-variant-numeric: slashed-zero; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;zero&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;zero&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-alternates</h2>
<p>Fonts can provide a variety of alternates for any character. The <code>font-variant-alternates</code> property provides many ways of controlling this character substitution.</p>
<h3>historical-forms</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard form and historical form characters. On the left, regular &#x27;s&#x27; and &#x27;b&#x27; characters; on the right, &#x27;long s&#x27; and historical &#x27;b&#x27; with ornate flourishes, highlighting historical typographic forms." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(149 104)"><path d="m73.8 144.6c0 9.76-3.84 17.96-11.52 24.6s-16.96 9.96-27.84 9.96c-3.84 0-9.76-.84-17.76-2.52-6-1.2-10.08-1.8-12.24-1.8-.64-5.6-2.12-14.12-4.44-25.56 0-1.2 1.16-1.8 3.48-1.8 1.92 0 3.08.64 3.48 1.92 1.84 5.92 5.48 11.08 10.92 15.48s11.04 6.6 16.8 6.6c6 0 10.66-1.64 13.98-4.92s4.98-7.88 4.98-13.8c0-3.76-1.38-7.08-4.14-9.96s-8.74-6.44-17.94-10.68c-12.08-5.52-20.06-10.72-23.94-15.6s-5.82-10.72-5.82-17.52c0-8.4 3.64-15.62 10.92-21.66s15.88-9.06 25.8-9.06c4.16 0 10 .72 17.52 2.16 4.16.8 6.88 1.2 8.16 1.2.24 9.44.76 17.48 1.56 24.12 0 1.2-1.16 1.8-3.48 1.8-2 0-3.12-.64-3.36-1.92-.88-5.84-3.08-10.58-6.6-14.22s-7.72-5.46-12.6-5.46c-12.48 0-18.72 5.44-18.72 16.32 0 3.68 1.48 7.08 4.44 10.2s9.4 7.16 19.32 12.12c11.84 5.92 19.64 11.04 23.4 15.36s5.64 9.2 5.64 14.64z"></path><path d="m203.28 123.24c0 14.72-5.2 27.72-15.6 39s-22.44 16.92-36.12 16.92c-7.6 0-14.96-1.6-22.08-4.8-4.88-2.24-9.2-3.36-12.96-3.36-6 0-9.96 2.56-11.88 7.68-.4.96-1.4 1.44-3 1.44-2.08 0-3.12-.64-3.12-1.92.64-6.72.96-14.8.96-24.24v-117c0-6.48-.82-10.72-2.46-12.72s-5.22-3.28-10.74-3.84c-1.28 0-1.92-.96-1.92-2.88 0-2.24.64-3.36 1.92-3.36 14.24-3.68 24.36-7.92 30.36-12.72 1.2-.96 2.2-1.44 3-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.44-1.92 31.44-1.92 42v35.88c7.52-7.52 16.72-11.28 27.6-11.28 16.24 0 29.4 4.92 39.48 14.76s15.12 23.16 15.12 39.96zm-24.12.96c0-14.72-2.92-26.24-8.76-34.56s-14.04-12.48-24.6-12.48c-5.68 0-11.22 2.14-16.62 6.42s-8.1 8.54-8.1 12.78v55.44c0 4.24 3.22 8.54 9.66 12.9s12.42 6.54 17.94 6.54c9.6 0 17.08-4.28 22.44-12.84s8.04-19.96 8.04-34.2z"></path></g><path d="m194.28 123c0 14.8-5.22 27.82-15.66 39.06s-22.58 16.86-36.42 16.86c-7.52 0-14.8-1.56-21.84-4.68-4.96-2.16-9.28-3.24-12.96-3.24-5.92 0-9.92 2.48-12 7.44-.4.96-1.4 1.44-3 1.44-1.92 0-2.88-.64-2.88-1.92.64-6.72.96-14.8.96-24.24v-117c0-14.24-7.52-21.36-22.56-21.36-18.72 0-28.08 12-28.08 36v96.84c0 8.08.84 13.3 2.52 15.66s5.88 3.94 12.6 4.74c1.28 0 1.92 1.12 1.92 3.36s-.64 3.36-1.92 3.36c-3.28 0-7.32-.24-12.12-.72-5.28-.48-9.88-.72-13.8-.72s-8.72.24-14.4.72c-5.12.48-9.36.72-12.72.72-1.28 0-1.92-1.12-1.92-3.36s.64-3.36 1.92-3.36c6.96-.8 11.42-2.4 13.38-4.8s2.94-7.6 2.94-15.6v-57.12c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12 0-2 .72-3.2 2.16-3.6 10.24-2.72 15.36-4.96 15.36-6.72 0-12.16 2.96-24.1 8.88-35.82s13.74-20.9 23.46-27.54 20.38-9.96 31.98-9.96c7.36 0 13.6 1.52 18.72 4.56 2.48-1.44 4.6-2.84 6.36-4.2 1.12-.88 2.08-1.32 2.88-1.32 2.24 0 3.36.64 3.36 1.92-1.28 13.12-1.92 27.04-1.92 41.76v35.88c7.52-7.52 16.64-11.28 27.36-11.28 16.4 0 29.66 4.92 39.78 14.76s15.18 23.16 15.18 39.96zm-24.48.96c0-14.8-2.9-26.34-8.7-34.62s-14.02-12.42-24.66-12.42c-5.52 0-10.98 2.16-16.38 6.48s-8.1 8.56-8.1 12.72v55.44c0 4.32 3.2 8.64 9.6 12.96s12.4 6.48 18 6.48c9.6 0 17.04-4.24 22.32-12.72s7.92-19.92 7.92-34.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.36 104.24)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="497.249219" y="332.12">Historical form</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="194.546094" y="332.12">Standard form</tspan></text><path d="m552.834697 139.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.9547468c-.468072.474945-.916901.9689068-1.345221 1.4806208l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m469.167334 203.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m508.167334 290.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Historical alternates can be used for a “period” effect. Note the difference between this and historical ligatures. Historical ligatures are historical character combinations, whereas historical forms are substitutions for individual characters.</p>
<pre><code class="language-css">font-variant-alternates: historical-forms; /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: &#x27;hist&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;hist&#x27; 0; /* low-level disable */
</code></pre>
<h3>stylistic(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard character and stylistic alternate for the letter &#x27;G&#x27;. Left side shows a traditional &#x27;G&#x27;; right side shows an alternate &#x27;G&#x27; with a straight vertical bar instead of a horizontal crossbar." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m146.64 159.36v-18.72c0-15.36.48-48.72 1.68-58.08-14.16.72-21.12.96-37.92.96-10.8 0-18-.24-32.64-.72.48 5.76.48 13.44 0 21.6 13.68-.48 20.64-.72 32.64-.72 7.44 0 5.52 0 12.72.24.48 4.32.48 10.8.48 14.4v30c-10.08 5.28-20.64 7.68-34.08 7.68-35.52 0-65.28-24.48-65.28-67.2 0-38.88 25.92-67.44 64.8-67.44 16.32 0 36.96 5.76 48.96 15.36l6.72-21.6c-13.2-8.64-35.28-15.12-53.28-15.12-52.32 0-91.44 40.32-91.44 90.72 0 48.24 37.68 86.4 86.88 86.4 29.04 0 46.32-8.88 59.76-17.76z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(171 105)"></path><path d="m146.64 140.88c0-15.6 1.44-53.52 1.44-53.52h-25.2s.72 27.6.72 31.2v29.76c-10.08 5.28-20.64 7.68-34.08 7.68-35.52 0-65.28-24.48-65.28-67.2 0-38.88 25.92-67.44 64.8-67.44 16.32 0 36.96 5.76 48.96 15.36l6.72-21.6c-13.2-8.64-35.28-15.12-53.28-15.12-52.32 0-91.44 40.32-91.44 90.72 0 48.24 37.68 86.4 86.88 86.4 29.04 0 46.32-8.88 59.76-17.76z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(475 105)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="483.335938" y="330">Stylistic alternate</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="172.316406" y="330">Standard character</tspan></text><path d="m608.834697 219.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use this to select stylistic features on an individual basis. In order to use this and several of the following <code>font-variant-alternates</code> functions, you must define a <code>font-feature-value</code> using the <code>@font-feature-values</code> rule. For example, if you wanted to select stylistic feature number 1 in the font you are using, you would first define the feature value, and then use it within the <code>font-variant-alternates: stylistic()</code> function.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @stylistic { inscriptional-g: 1 }
}

font-variant-alternates: stylistic(inscriptional-g); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: salt 1; /* low-level enable */
font-feature-settings: salt 0; /* low-level disable */
</code></pre>
<h3>styleset(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard and alternate stylesets for the letter &#x27;w&#x27;. Left side shows a simple cursive &#x27;w&#x27;; right side shows an alternate &#x27;w&#x27; with an extended decorative leading stroke." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="482.558594" y="309">Alternate styleset</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="178.679688" y="309">Standard styleset</tspan></text><g fill-rule="nonzero"><path d="m171.24 18.96c0 12-3.8 25.58-11.4 40.74s-16.82 27.48-27.66 36.96-21.46 14.22-31.86 14.22c-9.76 0-16.64-5.6-20.64-16.8-13.6 11.2-24.88 16.8-33.84 16.8-7.28 0-13.02-2.4-17.22-7.2s-6.3-11.2-6.3-19.2c0-9.6 3.62-21.1 10.86-34.5s15.3-24.06 24.18-31.98c-3.2 1.28-6.24 1.92-9.12 1.92-2.48 0-5.88-.64-10.2-1.92-3.84-1.28-6.76-1.92-8.76-1.92-5.2 0-9.26.92-12.18 2.76s-4.38 4.28-4.38 7.32c0 1.44.8 3.2 2.4 5.28 2.24 2.88 3.36 5.68 3.36 8.4 0 5.44-2.8 8.16-8.4 8.16-2.8 0-5.18-1.16-7.14-3.48s-2.94-5.48-2.94-9.48c0-6.88 3.84-14.44 11.52-22.68s14.72-12.36 21.12-12.36c3.44 0 7.76.72 12.96 2.16 4.16 1.12 7.36 1.68 9.6 1.68 2.8 0 6.08-.48 9.84-1.44 1.52-.48 2.56-.72 3.12-.72 1.04 0 1.98.44 2.82 1.32s1.26 1.8 1.26 2.76c0 1.84-2.36 5.8-7.08 11.88-8.8 11.2-14.82 21.14-18.06 29.82s-4.86 17.74-4.86 27.18c0 11.04 4.64 16.56 13.92 16.56 7.44 0 14.4-2.24 20.88-6.72-.48-3.36-.72-6.96-.72-10.8 0-17.36 3.96-33.98 11.88-49.86s16.4-23.82 25.44-23.82c7.84 0 11.76 5.68 11.76 17.04 0 19.76-10.36 40.88-31.08 63.36 2.4 7.2 7.88 10.8 16.44 10.8 11.68 0 21.8-5.78 30.36-17.34s12.84-24.58 12.84-39.06c0-4.96-1.24-9.8-3.72-14.52-1.68-3.12-2.52-5.8-2.52-8.04 0-3.6 1.06-6.54 3.18-8.82s4.98-3.42 8.58-3.42c3.52 0 6.36 1.74 8.52 5.22s3.24 8.06 3.24 13.74zm-54.96 1.68c0-4.32-1.68-6.48-5.04-6.48-5.68 0-10.56 3.98-14.64 11.94s-6.12 17.98-6.12 30.06c0 5.44.56 10.4 1.68 14.88 7.44-8.64 13.32-17.44 17.64-26.4s6.48-16.96 6.48-24z" fill="#f5f5f5" transform="translate(148 149.92)"></path><path d="m221.04 20.88c0 11.44-3.5 24.44-10.5 39s-15.74 26.76-26.22 36.6c-11.6 10.88-22.96 16.32-34.08 16.32-4.96 0-9.18-1.46-12.66-4.38s-6.22-7.06-8.22-12.42c-6.4 5.28-12.52 9.4-18.36 12.36s-11 4.44-15.48 4.44c-7.52 0-13.4-2.56-17.64-7.68-3.92-4.72-5.88-10.96-5.88-18.72 0-9.92 3.88-21.88 11.64-35.88 7.12-12.88 14.92-23.08 23.4-30.6-4.56 2-9.12 3.46-13.68 4.38s-10.08 1.38-16.56 1.38c-3.76 0-8.34-.86-13.74-2.58s-10.66-3.42-15.78-5.1c-6.48-1.76-12.8-2.64-18.96-2.64-5.04 0-8.86.78-11.46 2.34s-3.9 3.98-3.9 7.26c0 1.28.92 3.2 2.76 5.76s2.76 5.12 2.76 7.68c0 2.72-.72 4.8-2.16 6.24s-3.44 2.16-6 2.16c-2.48 0-4.68-.92-6.6-2.76-2.48-2.4-3.72-5.8-3.72-10.2 0-8.32 3.8-16.04 11.4-23.16s15.4-10.68 23.4-10.68c5.44 0 11.76.92 18.96 2.76 15.92 4.08 25.04 6.12 27.36 6.12 6.72 0 13.28-.52 19.68-1.56 5.68-1.2 11.36-2.44 17.04-3.72 1.04 0 1.98.42 2.82 1.26s1.26 1.78 1.26 2.82c0 1.84-2.56 6.04-7.68 12.6-6.72 8.56-11.56 15.96-14.52 22.2-5.2 10.8-7.8 22.16-7.8 34.08 0 5.36 1.22 9.46 3.66 12.3s5.94 4.26 10.5 4.26c3.68 0 7.32-.6 10.92-1.8s6.92-2.84 9.96-4.92c-.32-1.36-.56-3.04-.72-5.04s-.24-3.92-.24-5.76c0-17.2 3.94-33.74 11.82-49.62s16.42-23.82 25.62-23.82c3.68 0 6.6 1.42 8.76 4.26s3.24 7.02 3.24 12.54c0 10.08-3.04 20.92-9.12 32.52-5.36 10.32-12.8 20.6-22.32 30.84 1.2 3.52 3.24 6.2 6.12 8.04s6.36 2.76 10.44 2.76c12 0 22.36-6.04 31.08-18.12 8.24-11.44 12.36-24.2 12.36-38.28 0-4.32-.64-7.96-1.92-10.92-3.04-7.04-4.56-10.92-4.56-11.64 0-3.44 1-6.3 3-8.58s4.92-3.42 8.76-3.42c3.6 0 6.46 1.62 8.58 4.86s3.18 7.86 3.18 13.86zm-54.72 1.92c0-2.08-.42-3.72-1.26-4.92s-2.18-1.8-4.02-1.8c-5.36 0-10.08 3.64-14.16 10.92-4.48 8-6.72 18.36-6.72 31.08 0 2.4.16 5 .48 7.8s.72 5.16 1.2 7.08c7.52-8.48 13.48-17.16 17.88-26.04s6.6-16.92 6.6-24.12z" fill="#f5f5f5" transform="translate(430 147)"></path><path d="m478.834697 179.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill="#e6594c"></path></g></g></svg></figure></p>
<p>Use this to select an entire set of alternative glyphs. The glyphs in a set are often designed to work together. Select a particular set by defining a <code>font-feature-values</code> rule using the set’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @styleset { special-styleset: 1 }
}

font-variant-alternates: styleset(special-styleset); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: ss01; /* low-level enable */
</code></pre>
<h3>character-variant(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard character and character variant for the letter &#x27;k&#x27;. Left side shows a regular cursive &#x27;k&#x27;; right side shows an alternate &#x27;k&#x27; with an exaggerated extended lower stroke." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m108.725106 91.8c0 6.16-2.66 12.34-7.98 18.54-5.3199996 6.2-12.2599996 11.02-20.8199996 14.46s-18 5.16-28.32 5.16c4.08 8.48 9.76 17 17.04 25.56s12.96 12.84 17.04 12.84c3.84 0 5.76-1.92 5.76-5.76 0-1.92-1.12-3.88-3.36-5.88l-1.2-1.56c0-1.12.38-2.08 1.14-2.88s1.66-1.2 2.7-1.2c1.92 0 3.96 1.42 6.12 4.26s3.2399996 5.58 3.2399996 8.22c0 10.4-6.7999996 15.6-20.3999996 15.6-8.4 0-17.04-4.36-25.92-13.08s-16-19.64-21.36-32.76l-13.44 38.88c-.32 1.12-1.6 2.08-3.84 2.88s-4.48 1.2-6.72000002 1.2c-2.08 0-4.02-.34-5.82-1.02s-2.66-1.7-2.58-3.06l44.40000002-135.24c1.44-4.32 2.16-7.92 2.16-10.8 0-3.12-3.52-5.08-10.56-5.88-1.44-.16-2.16-1.16-2.16-3 0-1.92.56-2.88 1.68-2.88 5.12-.96 11.2-2.76 18.24-5.4s12.4-5.12 16.08-7.44c1.6-1.04 2.96-1.56 4.08-1.56 1.6 0 2.4.88 2.4 2.64 0 1.92-.4 4-1.2 6.24l-29.28 85.32c8.16-9.76 15.34-16.52 21.54-20.28s12.86-5.64 19.98-5.64c6.4 0 11.56 2.2 15.4799996 6.6 3.92 4.4 5.88 10.04 5.88 16.92zm-20.8799996 3.12c0-7.68-3.44-11.52-10.32-11.52-4.4 0-9.5 1.94-15.3 5.82s-11.1 8.76-15.9 14.64-7.2 10.34-7.2 13.38c0 3.52 2.64 5.28 7.92 5.28 27.2 0 40.8-9.2 40.8-27.6z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(184 81)"></path><path d="m171.191111 211.68c0 6.24-2.48 11.2-7.44 14.88-5.36 4-12.96 6-22.8 6-13.76 0-28.68-6.08-44.7599999-18.24-13.52-10.24-26.64-23.72-39.36-40.44-11.2-14.72-19.32-28.2-24.36-40.44l-13.44 38.88c-.32 1.2-1.64 2.18-3.96 2.94s-4.52 1.14-6.59999999 1.14c-2.24 0-4.28-.36-6.12-1.08-1.84-.72-2.6-1.72-2.28-3l44.39999999-135.36c.72-2.24 1.26-4.26 1.62-6.06s.54-3.38.54-4.74c0-3.12-3.52-5.04-10.56-5.76-1.44 0-2.16-1.04-2.16-3.12 0-1.68.56-2.64 1.68-2.88 5.44-.96 11.56-2.72 18.36-5.28s12.12-5.04 15.96-7.44c.64-.48 1.28-.88 1.92-1.2s1.36-.48 2.16-.48c1.6 0 2.4.96 2.4 2.88 0 .88-.1 1.82-.3 2.82s-.5 2.06-.9 3.18l-29.28 85.44c7.44-8.8 13.92-15.04 19.44-18.72 6.88-4.64 14.24-6.96 22.08-6.96 6.64 0 11.92 2.24 15.8399999 6.72 3.68 4.24 5.52 9.76 5.52 16.56 0 8.88-4.84 17.16-14.5199999 24.84-11.2 8.88-25.4 13.32-42.6 13.32 5.04 10.32 12.4 22 22.08 35.04 11.76 15.84 23.44 28.48 35.0399999 37.92 14.48 11.84 27.68 17.76 39.6 17.76 4.8 0 8.56-.86 11.28-2.58s4.08-4.22 4.08-7.5c0-1.84-1-3.72-3-5.64l-1.56-1.8c0-1.12.36-2.08 1.08-2.88s1.56-1.2 2.52-1.2c1.92 0 3.8 1.4 5.64 4.2s2.76 5.56 2.76 8.28zm-83.2799999-116.64c0-3.6-.9-6.42-2.7-8.46s-4.34-3.06-7.62-3.06c-7.2 0-15.52 4.56-24.96 13.68-8.96 8.64-13.44 15.36-13.44 20.16 0 1.68.62 2.98 1.86 3.9s3.26 1.38 6.06 1.38c15.68 0 26.84-3.04 33.48-9.12 4.88-4.48 7.32-10.64 7.32-18.48z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(454 81)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="473.679688" y="355">Character variant</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="165.316406" y="355">Standard character</tspan></text><path d="m558.834697 313.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use this to select specific character variants. Select a particular variant by defining a <code>font-feature-values</code> rule using the variant’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @character-variant { special-variant: 1 }
}

font-variant-alternates: character-variant(special-variant); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: cv01; /* low-level enable */
</code></pre>
<h3>swash(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of swash flourish off and on for the letter &#x27;M&#x27;. Left side shows a plain &#x27;M&#x27;; right side shows an ornate &#x27;M&#x27; with decorative swashes and curled endings." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="446.273438" y="325">Swash flourish on</tspan></text><path d="m194.784 1.92c0 2.304-.704 3.456-2.112 3.456-8 .896-13.616 2.368-16.848 4.416s-5.424 6.016-6.576 11.904l-12.48 90.336c-.32 2.56-.48 4.448-.48 5.664 0 3.264 1.296 5.648 3.888 7.152s7.216 2.64 13.872 3.408c.768.064 1.152.608 1.152 1.632 0 .896-.24 1.728-.72 2.496s-1.008 1.152-1.584 1.152c-4.288 0-9.408-.192-15.36-.576-5.696-.384-10.496-.576-14.4-.576s-8.736.192-14.496.576c-6.016.384-11.168.576-15.456.576-.768 0-1.152-.576-1.152-1.728 0-.832.24-1.616.72-2.352s1.008-1.136 1.584-1.2c8-.96 13.488-2.48 16.464-4.56s4.848-5.968 5.616-11.664l13.44-92.064-64.032 115.104c-.64 1.024-1.664 1.536-3.072 1.536-1.536 0-2.304-.512-2.304-1.536l-15.552-111.456-27.84 88.416c-.96 2.752-1.44 4.96-1.44 6.624 0 2.752 1.376 4.848 4.128 6.288s7.424 2.544 14.016 3.312c.64.128.96.672.96 1.632 0 .896-.24 1.728-.72 2.496s-1.008 1.152-1.584 1.152c-3.328 0-7.744-.192-13.248-.576-5.312-.384-9.472-.576-12.48-.576-3.2 0-7.616.192-13.248.576-5.44.384-9.6.576-12.48.576-.64 0-.96-.576-.96-1.728 0-2.24.768-3.456 2.304-3.648 8-.896 13.744-2.368 17.232-4.416s6.192-5.952 8.112-11.712l31.488-90.336c.768-2.56 1.152-4.64 1.152-6.24 0-3.008-1.424-5.264-4.272-6.768s-7.632-2.608-14.352-3.312c-.64 0-.96-.512-.96-1.536 0-.96.224-1.84.672-2.64s.992-1.2 1.632-1.2c1.536 0 4.48.192 8.832.576 4.8.384 8.128.576 9.984.576 2.176 0 5.344-.192 9.504-.576 4.224-.384 7.52-.576 9.888-.576l13.92 104.544 58.944-104.544c2.56 0 5.92.192 10.08.576 3.776.384 6.752.576 8.928.576 2.56 0 5.888-.192 9.984-.576 4.288-.384 7.872-.576 10.752-.576.64 0 .96.64.96 1.92z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(132 131)"></path><path d="m310.848 17.28c0 3.648-.816 6.288-2.448 7.92s-4.08 2.448-7.344 2.448c-3.328 0-6.528-3.2-9.6-9.6s-7.36-9.6-12.864-9.6c-8 0-14.016 4.032-18.048 12.096-4.544 9.024-8.576 26.496-12.096 52.416l-8.064 57.984c-.32 2.176-.48 3.536-.48 4.08v1.392c0 3.2 1.184 5.584 3.552 7.152s7.168 2.736 14.4 3.504c.64.192.96.768.96 1.728s-.208 1.808-.624 2.544-.976 1.104-1.68 1.104c-4.288 0-9.344-.16-15.168-.48s-10.624-.48-14.4-.48c-3.904 0-8.832.16-14.784.48s-11.072.48-15.36.48c-.64 0-.96-.576-.96-1.728 0-.832.208-1.616.624-2.352s.976-1.168 1.68-1.296c8.256-.96 13.808-2.512 16.656-4.656s4.656-5.968 5.424-11.472l6.72-47.232c1.408-9.408 2.304-15.424 2.688-18.048.896-5.888 1.68-10.512 2.352-13.872s1.488-6.608 2.448-9.744c-2.304 3.008-5.488 7.552-9.552 13.632s-8.048 12.192-11.952 18.336c-4.096 6.464-7.616 12.128-10.56 16.992l-37.632 62.976c-.64 1.024-1.664 1.536-3.072 1.536-1.28 0-2.048-.512-2.304-1.536l-9.792-101.184c-4.032 16.448-10.976 32.576-20.832 48.384-10.624 16.96-22.656 30.464-36.096 40.512-15.104 11.264-30.496 16.896-46.176 16.896-13.376 0-24.416-3.744-33.12-11.232-8.896-7.68-13.344-17.632-13.344-29.856 0-9.024 3.6-17.264 10.8-24.72s15.12-11.184 23.76-11.184c7.936 0 14.624 2.528 20.064 7.584s8.16 11.232 8.16 18.528c0 5.696-1.408 10.88-4.224 15.552-3.392 5.632-7.872 8.448-13.44 8.448-2.816 0-5.024-.976-6.624-2.928s-2.4-4.176-2.4-6.672c0-3.776 2.08-7.648 6.24-11.616s6.24-7.264 6.24-9.888c0-3.392-1.424-6.384-4.272-8.976s-6.096-3.888-9.744-3.888c-5.568 0-10.464 2.56-14.688 7.68-4.544 5.504-6.816 12.288-6.816 20.352 0 8.576 3.328 15.808 9.984 21.696s14.464 8.832 23.424 8.832c17.024 0 33.504-6.496 49.44-19.488 14.4-11.712 26.176-26.736 35.328-45.072s13.728-35.6 13.728-51.792c-3.712 0-7.872-.448-12.48-1.344-10.56-2.048-17.344-3.072-20.352-3.072-10.112 0-17.952 1.408-23.52 4.224s-8.352 7.104-8.352 12.864c0 2.368 1.248 4.352 3.744 5.952 5.44 3.456 8.16 6.528 8.16 9.216 0 3.008-.896 5.424-2.688 7.248s-4.48 2.736-8.064 2.736c-3.84 0-7.104-1.6-9.792-4.8s-4.032-7.36-4.032-12.48c0-9.152 3.936-17.056 11.808-23.712 8.512-7.232 19.424-10.848 32.736-10.848 4.544 0 10.4.64 17.568 1.92s12.64 1.92 16.416 1.92c2.112 0 4.128-.096 6.048-.288 5.824-.576 9.12-.864 9.888-.864 1.024 0 1.792.288 2.304.864s.768 1.568.768 2.976l9.024 100.992 25.536-41.28c12.352-20.352 22.72-35.968 31.104-46.848 9.536-12.352 18.528-21.28 26.976-26.784 8.704-5.696 18.016-8.544 27.936-8.544 6.08 0 11.792 1.808 17.136 5.424s8.016 7.568 8.016 11.856z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(358 112)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="161.152344" y="325">Swash flourish off</tspan></text><path d="m404.834697 251.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path><path d="m663.167334 149.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m444.167334 190.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Swashes can be used to provide typographic interest to headings or more artistic settings of text. They are typically exaggerated alternative character designs, or have some sort of typographic flourish. Select a particular swash by defining a <code>font-feature-values</code> rule using the set’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @swash { flourish: 1 }
}

font-variant-alternates: swash(flourish); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: swsh 1; /* low-level enable */
font-feature-settings: swsh 0; /* low-level disable */
</code></pre>
<h3>ornaments(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two ornamental glyphs shown side-by-side. The left ornament resembles a curving floral motif; the right ornament is a stylized leaf or vine flourish, demonstrating decorative glyph options." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(118 128)"><path d="m289.536 75.936c0 11.712-3.376 22.608-10.128 32.688s-15.952 18.032-27.6 23.856-24.32 8.736-38.016 8.736c-16.64 0-32.08-3.904-46.32-11.712s-24.528-18.4-30.864-31.776c2.048 4.352 3.072 8.928 3.072 13.728 0 8.192-2.912 15.2-8.736 21.024s-12.832 8.736-21.024 8.736c-8.768 0-16.24-3.104-22.416-9.312s-9.264-13.664-9.264-22.368c0-9.728 2.816-17.984 8.448-24.768s13.76-11.776 24.384-14.976c-5.696-4.032-12.8-7.408-21.312-10.128s-16.288-4.08-23.328-4.08c-14.144 0-26.384 4.608-36.72 13.824s-15.504 20.672-15.504 34.368c2.368-1.28 5.248-1.92 8.64-1.92 5.376 0 9.984 1.92 13.824 5.76s5.76 8.448 5.76 13.824-1.92 10.016-5.76 13.92-8.448 5.856-13.824 5.856c-6.592 0-12.048-2.784-16.368-8.352s-6.48-13.024-6.48-22.368c0-10.624 3.056-20.656 9.168-30.096s14.336-16.976 24.672-22.608 21.2-8.448 32.592-8.448c6.464 0 14.672 1.328 24.624 3.984s17.52 5.712 22.704 9.168c-2.688-4.224-5.056-9.28-7.104-15.168s-3.072-10.848-3.072-14.88c0-8.192 3.072-15.36 9.216-21.504s13.312-9.216 21.504-9.216 15.2 2.912 21.024 8.736 8.736 12.832 8.736 21.024c0 5.696-1.536 11.008-4.608 15.936 2.56-.768 4.16-1.152 4.8-1.152 7.104 0 13.456 2.176 19.056 6.528s12.464 13.696 20.592 28.032c8 14.208 14.848 23.536 20.544 27.984s12.064 6.672 19.104 6.672c7.104 0 13.584-1.824 19.44-5.472s10.656-8.784 14.4-15.408 5.616-12.848 5.616-18.672c0-5.888-1.568-10.688-4.704-14.4s-7.136-5.568-12-5.568c-3.072 0-5.6.976-7.584 2.928s-2.976 4.432-2.976 7.44c0 1.92.256 3.712.768 5.376-4.096 0-7.376-1.248-9.84-3.744s-3.696-5.728-3.696-9.696c0-4.352 1.712-8.08 5.136-11.184s7.504-4.656 12.24-4.656c8.768 0 15.824 3.104 21.168 9.312s8.016 14.272 8.016 24.192zm-45.984 45.888c-5.696 0-10.944-1.12-15.744-3.36s-9.328-5.68-13.584-10.32-9.648-12.752-16.176-24.336c-7.36-12.992-13.408-21.456-18.144-25.392s-9.952-5.904-15.648-5.904c-.768 0-2.048.128-3.84.384-1.984.256-3.392.384-4.224.384-2.048 0-3.072-1.024-3.072-3.072 0-.448.096-.896.288-1.344 2.88-5.952 4.32-11.744 4.32-17.376 0-6.784-2.128-12.384-6.384-16.8s-9.936-6.624-17.04-6.624c-6.848 0-12.656 2.336-17.424 7.008s-7.152 10.464-7.152 17.376c0 4.352 1.424 10.288 4.272 17.808s5.712 13.264 8.592 17.232c7.872 0 15.824 2.112 23.856 6.336s19.088 12.928 33.168 26.112c11.712 11.008 20.496 18.176 26.352 21.504s11.472 4.992 16.848 4.992c9.472 0 16.384-1.536 20.736-4.608z"></path><path d="m564.672 88.032c-3.264.192-8.64 1.152-16.128 2.88-11.392 2.56-20.448 3.84-27.168 3.84s-13.376-.896-19.968-2.688c4.736 4.736 7.104 11.136 7.104 19.2 0 6.72-2.336 12.4-7.008 17.04s-10.336 6.96-16.992 6.96c-6.464 0-12.016-2.4-16.656-7.2s-6.96-10.784-6.96-17.952c0-2.176.192-4.416.576-6.72 4.288 5.76 8.96 8.64 14.016 8.64 7.04 0 10.56-3.776 10.56-11.328 0-5.632-2.88-11.44-8.64-17.424s-13.216-10.656-22.368-14.016-19.168-5.04-30.048-5.04c-15.488 0-27.968 3.408-37.44 10.224s-14.816 16.08-16.032 27.792c1.216-.384 3.072-1.024 5.568-1.92 12.096-4.224 23.84-6.336 35.232-6.336 10.816 0 19.152 2.368 25.008 7.104s8.784 11.456 8.784 20.16c0 8.256-3.776 15.408-11.328 21.456s-16.96 9.072-28.224 9.072c-13.376 0-24.112-3.472-32.208-10.416s-12.816-16.72-14.16-29.328c-2.56.512-5.888.768-9.984.768-24.32 0-36.48-9.28-36.48-27.84 0-6.208 1.456-12.096 4.368-17.664s7.088-10.496 12.528-14.784 9.28-6.432 11.52-6.432c1.984 0 3.76 2 5.328 6s2.352 8.112 2.352 12.336-.768 6.4-2.304 6.528c-16.64 1.6-24.96 7.168-24.96 16.704 0 12.672 9.216 19.008 27.648 19.008 3.456 0 6.656-.448 9.6-1.344 0-12.928 3.424-24.736 10.272-35.424s16.368-19.184 28.56-25.488 25.008-9.456 38.448-9.456c10.24 0 23.104.8 38.592 2.4 9.024.96 15.232 1.44 18.624 1.44 12.032 0 18.048-4.032 18.048-12.096 0-3.392-1.168-6.064-3.504-8.016s-5.392-2.928-9.168-2.928c-2.432 0-5.184.512-8.256 1.536 6.72-11.52 14.528-17.28 23.424-17.28 6.72 0 12.304 2.192 16.752 6.576s6.672 9.872 6.672 16.464c0 6.72-2.208 12.592-6.624 17.616s-10.336 8.208-17.76 9.552c6.528 2.112 12.656 5.056 18.384 8.832s12.688 9.856 20.88 18.24c5.184 5.312 9.024 8.896 11.52 10.752zm-32.544-64.992c0-5.056-1.6-9.136-4.8-12.24s-7.36-4.656-12.48-4.656c-4.16 0-7.936 1.6-11.328 4.8 4.032 0 7.536 1.584 10.512 4.752s4.464 6.832 4.464 10.992c0 8.96-3.392 15.36-10.176 19.2 15.872-2.432 23.808-10.048 23.808-22.848zm19.2 60.96c-10.944-11.2-19.712-18.688-26.304-22.464 2.56 2.56 3.84 5.824 3.84 9.792 0 3.456-1.008 6.8-3.024 10.032s-4.656 5.648-7.92 7.248h3.456c7.36 0 17.344-1.536 29.952-4.608zm-48.96 27.264c0-8.192-2.88-14.464-8.64-18.816.256 2.56.384 4.352.384 5.376 0 6.272-1.744 11.264-5.232 14.976s-7.952 5.568-13.392 5.568c-2.624 0-5.184-.832-7.68-2.496.96 3.904 2.992 7.088 6.096 9.552s6.64 3.696 10.608 3.696c5.056 0 9.296-1.696 12.72-5.088s5.136-7.648 5.136-12.768zm-63.168 9.984c0-6.656-2.32-11.84-6.96-15.552s-11.28-5.568-19.92-5.568c-9.344 0-20.096 2.048-32.256 6.144-3.968 1.344-6.88 2.24-8.736 2.688.384 24.448 12.128 36.672 35.232 36.672 9.344 0 17.12-2.448 23.328-7.344s9.312-10.576 9.312-17.04z"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="360.40625" y="328">Ornaments</tspan></text></g></svg></figure></p>
<p>This replaces default glyphs with ornaments, if they are provided in the font.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @ornaments { fleurons: 1 }
}

font-variant-alternates: ornaments(fleurons); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: ornm 1; /* low-level enable */
font-feature-settings: ornm 0; /* low-level disable */
</code></pre>
<h3>annotation(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Examples of annotation characters: the number &#x27;1&#x27; inside a circle, the number &#x27;2&#x27; inside a filled circle, and the letter &#x27;B&#x27; inside a square, demonstrating typographic annotations." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="356.761719" y="331">Annotations</tspan></text><g fill="#f5f5f5"><g transform="translate(135 125)"><path d="m96.2851658 149.786822c-5.8728125 1.392886-11.8359644 2.013304-17.871995 2.004236-15.6613395-.100957-30.2052049-4.051924-42.9202692-13.450657-17.1629455-12.686493-26.19991038-30.10559-28.3642574-51.2578961-1.33231464-13.0188608.17005041-25.7145232 5.2996515-37.7882388 9.6670625-22.7545451 26.7024701-36.6016497 50.7570123-41.56041528 15.608958-3.21746717 30.931715-1.80853593 45.533276 4.58208278 19.415354 8.497139 32.254161 23.2435451 38.168727 43.6631153 6.729138 23.229792 4.157884 45.4571341-9.291282 65.7949491-9.871274 14.928253-24.035563 23.915157-41.3108632 28.012824m-17.793043-149.78681688c-44.5038637.01528638-78.55797763 34.32704078-78.49202717 79.08429358.06690142 44.7381513 33.97070287 78.8367323 78.46545677 78.9155663 44.5334706.078563 78.5435536-34.126987 78.5344456-78.98586-.009112-44.8718622-33.947075-79.029276-78.5078752-79.01399988"></path><path d="m84.9950732 73.4206697c0 9.9612311.0464499 19.9224623-.0418809 29.8821703-.0167524 1.807187.5718657 2.232138 2.2646186 2.19863 4.9465242-.096719 9.8968558.03427 14.8426181-.071587 1.577771-.034271 2.139738.534616 2.247105 2.002908.097469 1.323595.252048 2.664705.586334 3.944891.370837 1.421836-.259662 1.605373-1.430807 1.593188-3.6154701-.03884-7.2317022-.012947-10.8471728-.012947-11.7997751 0-23.5995501-.040362-35.3985638.042077-1.7970746.011994-2.2372056-.557654-2.2166459-2.257461.0647252-5.273817.0038074-5.273817 5.2891868-5.273817 4.9480471 0 9.8960942-.035031 14.8433799.021324 1.2960259.015231 1.7650928-.362503 1.7628084-1.717322-.0380736-17.447386-.0357892-34.8947718-.0030459-52.3421576.0022845-1.41879-.3731214-1.603088-1.6204131-1.0418168-5.665354 2.5497096-11.3748735 5.0011777-17.0318514 7.5676417-1.3280077.6023956-1.9090111.6671284-2.1427831-1.0600943-.7340593-5.4147059-.7987844-5.4078519 4.2345476-7.6773067 5.6036748-2.5276243 11.2187717-5.0308787 16.8117859-7.5821114 2.3240135-1.0600944 4.7454955-.4622682 7.1235736-.5239547.948033-.02437.7081692.8994047.7119766 1.4736225.0243671 3.806287.014468 7.6133355.0152294 11.4196225z"></path></g><path d="m103.982569 114.119306c-16.9549887-.038983-33.9099778-.045096-50.8657264-.018353-1.333675.002292-1.8683602-.468369-1.6860812-1.779495.0174684-.124542 0-.253668.0022785-.381266.0394938-2.668096-.66304-5.669321.3326593-7.908016.9615219-2.161524 3.6524163-3.558989 5.6187515-5.2513807 8.7007864-7.4877833 17.4342311-14.9365994 26.1099541-22.4526529 2.6453247-2.2906504 5.0377371-4.8555981 6.5741976-8.0677043 3.2840607-6.8704232-.2544312-14.0739762-7.8091381-15.9703719-4.8865974-1.2263156-9.6623083-.6853614-14.3658672.9481978-3.9653287 1.3775993-7.712682 3.2136343-11.2056042 5.5424877-1.1802568.7869813-1.5683593.5294933-1.7384864-.8053187-.3440517-2.7124113-.7830404-5.4125976-1.1787378-8.1188964-.1048105-.7159237-.107089-1.361554.6326601-1.8291585 10.972439-6.9422447 22.7036145-10.4347607 35.3818815-6.0024515 15.7967577 5.5210941 19.6853777 23.353479 8.1980001 35.8435598-5.53065 6.0131484-12.1549743 10.7403846-18.404867 15.9084831-3.8058346 3.1479252-7.6671123 6.2263205-11.6916817 9.4888555.9584839.478301 1.6579798.309444 2.3286147.310208 10.502311.012989 21.0046219.049664 31.5054136-.033619 1.623803-.012225 2.212412.478301 2.398489 2.053028.275697 2.33191.75266 4.641662 1.194687 6.951413.221013 1.152202-.093418 1.575491-1.331397 1.572451m-25.5623571-114.11924338c-44.4996312.05354693-78.28884951 34.06871228-78.41984839 78.94269148-.12874876 44.7402689 33.95819199 79.0709909 78.49655749 79.0572419 44.611277-.015285 78.537205-34.172566 78.503053-79.0389045-.034203-44.8793276-34.004941-79.01445029-78.5797621-78.96102888" transform="translate(327 125)"></path><g transform="translate(519 130)"><path d="m132.611253 131.327999c.002299 1.828575-.361673 2.477399-2.394549 2.473613-37.7273586-.067714-75.4554838-.049458-113.1828428-.05098-2.4504853-.00076-2.4589141-.007606-2.4596804-2.542813-.0015325-19.200032-.0015325-38.4008232-.0015325-57.6016149 0-19.2639246 0-38.5278493.0015325-57.7925346 0-2.6165956.0068963-2.6219201 2.5799825-2.6219201 37.664526-.0007606 75.3275195.0144521 112.9912797-.0433715 1.915639-.0030274 2.476538.4533555 2.473485 2.4043927-.057482 38.5917429-.054417 77.1834858-.007675 115.7752284m14.388747-128.50603104c0-2.80143073-.003065-2.80675519-2.769248-2.80675519-47.2373564-.00608511-94.4754794-.01140958-141.71360247-.01521277-2.51178574 0-2.51714953.00608511-2.51714953 2.51999457.00383128 47.27214683.00842881 94.54353293.01532511 141.81567943 0 2.662234.00536379 2.664326 2.69645333 2.664326h141.71360256c2.570021 0 2.574619-.002852 2.574619-2.553272 0-23.635313 0-47.2713867 0-70.90746 0-23.5721798 0-47.1451203 0-70.71730004"></path><path d="m85.4049476 89.4742556c-.8535663 2.7932875-2.8207817 4.4974212-5.5489522 5.3399742-5.0071768 1.545822-10.183369 1.0214146-15.3086251 1.0754537-1.1244538.0114167-.9284269-.8410307-.9322857-1.498633-.0185222-2.7247873-.0084893-5.4495745-.0077176-8.1743618 0-2.7247873.0077176-5.4495745-.0047635-8.1751229-.0029541-.822764.0379492-1.5077664 1.1870994-1.4796051 4.1049897.1027503 8.2285017-.2793288 12.3064799.4734127 6.7675607 1.2489877 10.1694774 6.3522555 8.3087648 12.4388822m-20.3759992-40.3161959c1.6044883.0380557 3.211292.0106556 4.8165521.0091333 2.309105.0167445 4.6205253-.0829614 6.9087927.3904514 4.1906551.8676697 6.51288 3.472201 6.7374621 7.6217932.2029728 3.7758854-1.9209099 6.7609735-5.7874259 7.9856056-4.2508523 1.3456491-8.648339.8707141-13.0018354.9026809-.8335005.0060889-1.0943552-.4718905-1.0928117-1.2208265.0077176-4.8140445.0208375-9.6280891-.0116607-14.4413725-.0076333-1.0541425.514848-1.2695377 1.4309268-1.2474654m29.1061447 23.724677c-1.5659004-.9491088-3.2938703-1.639439-4.9608712-2.455353.3225955-.63553.9438621-.7101191 1.4223531-.9734645 9.508079-5.2395071 11.351813-18.8596379 3.4582551-26.2622303-4.2076338-3.9448526-9.5520696-5.3978188-15.158132-5.8171925-9.5621025-.7154469-19.1519883-.1461338-28.726439-.3562012-1.7001865-.0372946-2.1694164.4528627-2.1655576 2.1273129.0540231 22.2557275.0571102 44.511455-.0046663 66.7671829-.0053666 1.752845.6020083 2.102196 2.2126707 2.086727 7.392686-.074343 14.7876873-.022587 22.1811451-.05227 4.9593278-.019789 9.8970462-.298357 14.6811845-1.75589 7.5053629-2.286385 13.0404235-6.4763167 14.5106255-14.6088173 1.494899-8.2649343-1.070431-14.8303016-7.4505679-18.699804"></path></g></g></g></svg></figure></p>
<p>Annotations are notational forms of glyphs (for example, glyphs placed in open or solid circles, squares, parentheses, diamonds, rounded boxes. etc.).</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @ornaments { circles: 1 }
}

font-variant-alternates: annotation(circles); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: nalt 1; /* low-level enable */
font-feature-settings: nalt 0; /* low-level disable */
</code></pre>
<h2>Further Resources</h2>
<p>There is a huge amount to learn about typography on the web including font variants and much more. Check out the following excellent resources for more information:</p>
<ul>
<li><a href="https://www.w3.org/TR/css-fonts-4/" target="_blank" rel="noreferrer">CSS Fonts Module Level 4 Spec</a></li>
<li><a href="http://book.webtypography.net/" target="_blank" rel="noreferrer">Web Typography, by Richard Rutter</a></li>
<li><a href="https://helpx.adobe.com/typekit/using/open-type-syntax.html" target="_blank" rel="noreferrer">Guide to OpenType Syntax in CSS, from Adobe</a></li>
<li><a href="https://www.microsoft.com/typography/otspec/features_ae.htm" target="_blank" rel="noreferrer">OpenType Layout Tag Registry, from Microsoft</a></li>
</ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Component Reusability in React & Vue]]></title>
            <link>https://www.jonathanharrell.com/blog/component-reusability-in-react-vue</link>
            <guid>https://www.jonathanharrell.com/blog/component-reusability-in-react-vue</guid>
            <pubDate>Mon, 06 Aug 2018 19:55:00 GMT</pubDate>
            <description><![CDATA[Learn how to use render props in React and scoped slots in Vue to create components that are flexible and reusable.]]></description>
            <content:encoded><![CDATA[<p>One of the issues all front-end developers face is how to make UI components reusable. How do we craft components in such a way that satisfies the narrow use case that is clear to us now, while also making them reusable enough to work in a variety of circumstances? Render props and scoped slots provide a solution.</p>
<p>Let’s say we are building an autocomplete component:</p>

<p>Take a look at the initial React component code:</p>
<pre><code class="language-jsx">class Autocomplete extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      results: props.options
    }
  }

  searchList(event) {
    const results = this.props.options
      .filter(option =&gt;
        option.toLowerCase().includes(
          event.target.value.toLowerCase()
        )
      )
    this.setState({ results })
  }

  render() {
    return (
      &lt;div className=&quot;autocomplete&quot;&gt;
        &lt;input
          type=&quot;text&quot;
          placeholder=&quot;Type to search list&quot;
          onChange={searchList}
        /&gt;
        &lt;div className=&quot;autocomplete-dropdown&quot;&gt;
          &lt;ul className=&quot;autocomplete-search-results&quot;&gt;
            {this.state.results.map(option =&gt; (
              &lt;li class=&quot;autocomplete-search-result&quot;&gt;
                {option}
              &lt;/li&gt;
            ))}
          &lt;/ul&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<p>In this component, we have some logic that controls the core search behavior, but we also specify how the input and search results will be rendered. In this instance, we render a div that serves as a dropdown container and an unordered list containing a list item for each result within it.</p>
<p>Think about how you would reuse this component. Sure, you could use this very same component if you want to reproduce exactly the same behavioral and visual result. But what if you want to reuse the same behavior, but visualize the component slightly differently? What if you want to reuse the core search behavior but add a few modifications for a slightly different use case?</p>
<p>Imagine that instead of a dropdown containing the search results, you want a tag-like list of search results that always display:</p>

<p>At their core, the functionality of these two components is very similar: type into an input to filter a list.</p>
<p>This is a perfect use case for some relatively new tools that modern JavaScript frameworks now provide. These are <em>render props</em> in React and <em>scoped slots</em> in Vue. They work very similarly and provide a way to separate the <strong>behavior</strong> of a component from its <strong>presentation</strong>.</p>
<h2>Render props in React</h2>
<p>First, let’s look at how we would restructure our autocomplete component using render props in React. We will now have two components — one for our Autocomplete component and one for a core SearchSelect component.</p>
<p>Let’s look at the SearchSelect component first:</p>
<pre><code class="language-jsx">class SearchSelect extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      results: props.options
    }
  }

  searchList(event) {
    const results = this.props
      .filterMethod(
        this.props.options,
        event.target.value
      )
    this.setState({ results })
  }

  render() {
    return this.props.render({
      results: this.state.results,
      searchList: (event) =&gt; this.searchList(event)
    })
  }
}
</code></pre>
<p>This is a <em>renderless</em> component (one that doesn’t render any markup of its own). Rather, it returns the result of a special prop called a <em>render prop</em>. This render prop accepts an object, into which you can pass any data that you would like the parent component to have access to.</p>
<p>Our <code>SearchSelect</code> component is handling the lowest level functionality — filtering a list of options based on a query string. It is then using the special render prop to render an element.</p>
<p>In the parent, we pass a function to the render prop of the <code>SearchSelect</code> component. This function returns a React element, which we can hydrate with state and behavior from the <code>SearchSelect</code> component itself. Basically, this means we are able to access data from the child component in the parent.</p>
<pre><code class="language-jsx">import SearchSelect from &#x27;./search-select&#x27;

class Autocomplete extends React.Component {
  constructor(props) {
    super(props)
  }

  filterMethod (options, query) {
    return options.filter(option =&gt;
      option.toLowerCase().includes(
        query.toLowerCase()
      )
    )
  }

  render() {
    return (
      &lt;SearchSelect
        options={this.props.options}
        filterMethod={this.filterMethod}
        render={({results, searchList}) =&gt; (
          &lt;div&gt;
            &lt;input
              type=&quot;text&quot;
              placeholder=&quot;Type to search list&quot;
              onChange={searchList}
            /&gt;
            &lt;ul&gt;
              {results.map(option =&gt; (
                &lt;li&gt;{option}&lt;/li&gt;
              ))}
            &lt;/ul&gt;
          &lt;/div&gt;
        )}
      /&gt;
    )
  }
}
</code></pre>
<p>The key to making this work is the arguments we pass to the render prop function. See how we are destructuring a single object and using those destructured properties inside our markup? This object should be passed as an argument when you call <code>this.props.render()</code> in the child component.</p>
<p>All this means that we can write whatever markup we want, as long as we properly hydrate it with the data and behavior exposed by the <code>SearchSelect</code> component.</p>
<p>Also, note how we are passing the method for filtering our list in as a prop. This will allow us to change the way our list of options is filtered, while still using the <code>SearchSelect</code> component.</p>
<h2>Implementing the Tag List Variant</h2>
<p>Let’s look at how we would implement our tag-like list component. We use the same SearchSelect core component and just change the markup rendered by the render prop:</p>
<pre><code class="language-jsx">import SearchSelect from &#x27;./search-select&#x27;

class TagListSearch extends React.Component {
  constructor(props) {
    super(props)
  }

  filterMethod(options, query) {
    return options.filter(option =&gt;
      option.toLowerCase().includes(
        query.toLowerCase()
      )
    )
  }

  render() {
    return (
      &lt;SearchSelect
        options={this.props.options}
        filterMethod={this.filterMethod}
        render={({ results, searchList }) =&gt; (
          &lt;div className=&quot;tag-list-search&quot;&gt;
            &lt;input
              type=&quot;text&quot;
              placeholder=&quot;Type to search list&quot;
              onChange={searchList}
            /&gt;
            &lt;ul className=&quot;tag-list&quot;&gt;
              {results.map(result =&gt; (
                &lt;li className=&quot;tag&quot; key={result}&gt;
                  {result}
                &lt;/li&gt;
              ))}
            &lt;/ul&gt;
          &lt;/div&gt;
        )}
      /&gt;
    )
  }
}
</code></pre>
<h2>Scoped slots in Vue</h2>
<p>Now let’s look at how we would implement this in Vue using scoped slots. First, here’s our search select component (for this example I am using globally registered components but you should probably use single file components in a real project):</p>
<pre><code class="language-javascript">Vue.component(&#x27;search-select&#x27;, {
  props: [
    &#x27;options&#x27;,
    &#x27;filterMethod&#x27;
  ],

  data() {
    return {
      query: &#x27;&#x27;
    }
  },

  computed: {
    results() {
      return this.filterMethod(
        this.options,
        this.query
      )
    }
  },

  methods: {
    setQuery(event) {
      this.query = event.target.value
    }
  },

  render() {
    return this.$scopedSlots.default({
      results: this.results,
      searchList: (event) =&gt; {
        this.setQuery(event)
      }
    })
  }
})
</code></pre>
<p>As you can see, this looks very similar to the render prop in our React component. Here, we are returning a default <em>scoped slot</em>, which passes along an object with whatever we want. Here, we give it the results and our search method.</p>
<p>In our <code>autocomplete</code> component, we use the <code>slot-scope</code> attribute to get access to the data from the child component. We can destructure the properties that come through for easier access, in much the same way as in our React render prop argument:</p>
<pre><code class="language-javascript">Vue.component(&#x27;autocomplete&#x27;, {
  data() {
    return {
      dropdownVisible: false
    }
  },

  methods: {
    filterMethod(options, query) {
      return options.filter(option =&gt;
        option.toLowerCase().includes(
          query.toLowerCase()
        )
      )
    },

    showDropdown() {
      this.dropdownVisible = true
    },

    hideDropdown() {
      this.dropdownVisible = false
    }
  },

  template: html`
    &lt;search-select
      :options=&quot;options&quot;
      :filterMethod=&quot;filterMethod&quot;
    &gt;
      &lt;div slot-scope=&quot;{ results, searchList }&quot;&gt;
        &lt;div class=&quot;autocomplete&quot;&gt;
          &lt;input
            type=&quot;text&quot;
            placeholder=&quot;Type to search list&quot;
            @input=&quot;searchList&quot;
            @focus=&quot;showDropdown&quot;
            @blur=&quot;hideDropdown&quot;
          /&gt;
          &lt;div
            v-if=&quot;dropdownVisible&quot;
            class=&quot;autocomplete-dropdown&quot;
          &gt;
            &lt;ul class=&quot;autocomplete-search-results-list&quot;&gt;
              &lt;li
                class=&quot;autocomplete-search-result&quot;
                v-for=&quot;result in results&quot;
                :key=&quot;result&quot;
              &gt;
                {{ result }}
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/search-select&gt;
  `
})
</code></pre>
<h2>Other uses for render props &amp; scoped slots</h2>
<p>Creating reusable interface components isn’t the only use for render props and scoped slots. Here are some other ideas for how you can use them to encapsulate reusable behavior in a component that can then be exposed to its parent.</p>
<h3>Data provider components</h3>
<p>You can use render props/scoped slots to create a component that handles asynchronously fetching data and exposing that data to its parent. This allows you to hide the logic for hitting an endpoint, getting the result and handling possible errors, as well as displaying a loading state to users while the data fetch is in progress.</p>
<p>Here’s what the base component could look like:</p>
<pre><code class="language-jsx">class FetchData extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      loading: false,
      results: [],
      error: false
    }
  }

  componentDidMount() {
    this.fetchData(this.props.url)
  }

  fetchData(url) {
    this.setState({ loading: true })

    fetch(url)
      .then(data =&gt; data.json())
      .then(json =&gt; {
        this.setState({
          loading: false,
          results: json
        })
      })
      .catch(error =&gt; {
        this.setState({
          loading: false,
          error: true
        })
      })
  }

  render() {
    return this.props.render({
      loading: this.state.loading,
      results: this.state.results,
      error: this.state.error
    })
  }
}
</code></pre>
<p>It accepts a URL as a prop and handles the actual fetching logic. Then, we use it in a parent component:</p>
<pre><code class="language-jsx">class App extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    return (
      &lt;div className=&quot;wrapper&quot;&gt;
        &lt;FetchData
          url=&quot;https://...&quot;
          render={({ loading, results, error }) =&gt; (
            &lt;div&gt;
              {loading &amp;&amp; (
                &lt;p&gt;Loading...&lt;/p&gt;
              )}
              {results.length &gt; 0 &amp;&amp; (
                &lt;div className=&quot;results&quot;&gt;
                  {results.map(result =&gt; (
                    &lt;p key={result.id}&gt;
                      {result.title}
                    &lt;/p&gt;
                  ))}
                &lt;/div&gt;
              )}
              {error &amp;&amp; (
                &lt;p&gt;There was a problem loading.&lt;/p&gt;
              )}
            &lt;/div&gt;
          )}
        /&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<h2>Observers (resize, intersection, etc.)</h2>
<p>You can also use render props/scoped slots to create a component that acts as a wrapper around resize or intersection observers. This component can simply expose the current size or intersection point of an element to a parent component. You can then perform whatever logic you need based on that data in the parent, preserving a nice separation of concerns.</p>
<p>Here is a base component that observes its own size and exposes its height and width to its parent:</p>
<pre><code class="language-jsx">class ObserveDimensions extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      width: null,
      height: null
    }
    this.elementToObserve = React.createRef()
  }

  componentDidMount(nextProps) {
    const erd = elementResizeDetectorMaker({
      strategy: &#x27;scroll&#x27;
    })

    erd.listenTo(
      this.elementToObserve.current,
        element =&gt; {
        this.setState({
          width: element.offsetWidth,
          height: element.offsetHeight
        })
      }
    )
  }

  render() {
    return (
      &lt;div
        className=&quot;observed-element&quot;
        ref={this.elementToObserve}
      &gt;
        {this.props.render({
          width: this.state.width,
          height: this.state.height
        })}
      &lt;/div&gt;
    )
  }
}
</code></pre>
<p>We are using the <a href="https://github.com/wnr/element-resize-detector" target="_blank" rel="noreferrer">Element Resize Detector</a> library to listen to changes in our element size, and a React ref to get a reference to the actual DOM node.</p>
<p>We can then use this component quite easily in our app:</p>
<pre><code class="language-jsx">class App extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    return (
      &lt;div className=&quot;wrapper&quot;&gt;
        &lt;ObserveDimensions
          render={({ width, height }) =&gt; (
            &lt;div&gt;
              Width: {width}px
              Height: {height}px
            &lt;/div&gt;
          )}
        /&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<h2>Conclusion</h2>
<p>The key to successfully creating reusable components using both render props and scoped slots is being able to correctly separate <strong>behavior</strong> from <strong>presentation</strong>. Each time you create a new UI component, think “What is the core behavior of this component? Can I use this anywhere else?”</p>
<p>Having a core set of renderless components that use render props or scoped slots can help you cut down on code duplication in your app and think more carefully about your core interface behaviors.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Component Variants with Scoped CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/component-variants-with-scoped-css-variables</link>
            <guid>https://www.jonathanharrell.com/blog/component-variants-with-scoped-css-variables</guid>
            <pubDate>Thu, 12 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Scoped CSS variables provide an incredibly easy and clean way to create variants of common interface components like buttons.]]></description>
            <content:encoded><![CDATA[<p>Generating variants of common interface components like buttons, inputs, cards, etc., has typically involved multiple class names, pre-processor mixins, or repeated code. Now, component variants can be created in a clean and straightforward manner using CSS variables.</p>
<p>Let’s take buttons as an example. I want to create a set of different buttons, including common variants like “primary” and “secondary”.</p>
<h2>Base Styling</h2>
<p>I’m going to start by giving these buttons some base styling. I can give the <code>button</code> a base class and then add additional classes for each variant.</p>
<pre><code class="language-html">&lt;button class=&quot;button is-primary&quot;&gt;Primary&lt;/button&gt;
&lt;button class=&quot;button is-secondary&quot;&gt;Secondary&lt;/button&gt;
</code></pre>
<pre><code class="language-css">.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  height: 2.5rem;
  padding: 0 1rem;
  border-radius: 4px;
}
</code></pre>
<h2>Defining Variables</h2>
<p>Next, I’m going to define some variables on the <code>:root</code>. These will be the properties that need to change with each variant.</p>
<pre><code class="language-css">:root {
  --button-background-color: gray;
  --button-border-color: gray;
  --button-text-color: black;
}
</code></pre>
<p>I will use these to add color to my base styling:</p>
<pre><code class="language-css">.button {
  /* ... */
  background-color: var(--button-background-color);
  border: 1px solid var(--button-border-color);
  color: var(--button-text-color);
}
</code></pre>
<h2>Overriding Variables for Component Variants</h2>
<p>Finally, I will override these variable values within each variant selector.</p>
<pre><code class="language-css">.button.is-primary {
  --button-background-color: orange;
  --button-border-color: orange;
  --button-text-color: white;
}

.button.is-secondary {
  --button-background-color: black;
  --button-border-color: black;
  --button-text-color: white;
}
</code></pre>
<h2>Alternate Selector Scheme</h2>
<p>If I wanted to simplify my classes further, I could use only one class to define both the base styling and the variants.</p>
<pre><code class="language-html">&lt;button class=&quot;button-primary&quot;&gt;Primary&lt;/button&gt;
&lt;button class=&quot;button-secondary&quot;&gt;Secondary&lt;/button&gt;
</code></pre>
<p>Here I’m nesting variant selectors with PostCSS:</p>
<pre><code class="language-css">[class^=&#x27;button&#x27;] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  height: 2.5rem;
  padding: 0 1rem;
  background-color: var(--button-background-color);
  border: 1px solid var(--button-border-color);
  border-radius: 4px;
  color: var(--button-text-color);

  &amp;[class*=&#x27;primary&#x27;] {
    --button-background-color: orange;
    --button-border-color: orange;
    --button-text-color: white;
  }

  &amp;[class*=&#x27;secondary&#x27;] {
    --button-background-color: black;
    --button-border-color: black;
    --button-text-color: white;
  }
}
</code></pre>
<h2>Browser Support for CSS Variables</h2>
<p>For browsers that do not support custom properties, you can use the <a href="https://github.com/postcss/postcss-custom-properties" target="_blank" rel="noreferrer">PostCSS custom properties</a> plugin. This will compile the CSS variables as static values.</p>
<p>Keep in mind, however, that this will not allow you to override the variable values, as the variables will no longer exist in the browser, having already been evaluated during the CSS build.</p>
<p>The technique for component variants described in this article is future-looking and, as more and more browsers fully support custom properties, will be able to be used in production sites.</p>
<aside><p>You can learn more about CSS variables in <a href="https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties" target="_blank" rel="noreferrer">my article here</a>.</p></aside>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Contextual Callouts with CSS Grid]]></title>
            <link>https://www.jonathanharrell.com/blog/contextual-callouts-with-css-grid</link>
            <guid>https://www.jonathanharrell.com/blog/contextual-callouts-with-css-grid</guid>
            <pubDate>Thu, 10 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Using the power of CSS grid, it is now easier than ever before to create callouts — small paragraphs that sit next to the primary text and offer additional information.]]></description>
            <content:encoded><![CDATA[<p>At long last, contextual callouts are possible with CSS grid. <dfn>Contextual callouts</dfn> are small paragraphs that sit beside primary text and offer secondary information to a reader. They have long been a feature of books, magazines and other printed materials. I enjoy coming across these small asides while reading, as they add texture and interest to the content.</p>
<p>I&#x27;ve been searching for a while now for a way to bring these to the web with pure CSS. The solutions in the past have typically been fairly messy, requiring complex floats and clearing, or manual absolute positioning. That is changing now, thanks to CSS grid.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="CSS grid layout showing white horizontal content blocks arranged in a 13-column structure. Two content groupings are present—one near the top and one near the bottom—each spanning columns 3 to 9. A nested grid figure with a centered dark gray block spans across the middle columns." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path>
        <path d="m400-139.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 269.5 530.5)"></path>
        <path d="m400-46.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 176.5 623.5)"></path>
        <path d="m400 43.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 86.5 713.5)"></path>
        <path d="m400 56.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 73.5 726.5)"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 165 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 211 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 533 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 579 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 625 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path>
        <g fill="#f5f5f5">
            <path d="m314 131h173v3h-173z"></path>
            <path d="m314 141h173v3h-173z"></path>
            <path d="m314 151h173v3h-173z"></path>
            <path d="m314 161h173v3h-173z"></path>
            <path d="m314 171h173v3h-173z"></path>
            <path d="m314 181h173v3h-173z"></path>
            <path d="m314 191h173v3h-173z"></path>
            <path d="m314 201h173v3h-173z"></path>
            <path d="m314 211h115v3h-115z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 131h81v3h-81z"></path>
            <path d="m222 141h81v3h-81z"></path>
            <path d="m241 151h62v3h-62z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 327h81v3h-81z"></path>
            <path d="m222 337h81v3h-81z"></path>
            <path d="m241 347h62v3h-62z"></path>
        </g>
        <path d="m314 314h113v3h-113z" fill="#f5f5f5"></path>
        <g fill="#f5f5f5">
            <path d="m314 327h173v3h-173z"></path>
            <path d="m314 337h173v3h-173z"></path>
            <path d="m314 347h173v3h-173z"></path>
            <path d="m314 357h173v3h-173z"></path>
            <path d="m314 367h173v3h-173z"></path>
            <path d="m314 377h115v3h-115z"></path>
        </g>
        <path d="m314 224h173v81h-173z" fill="#525252"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 257 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 303 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 349 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 395 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 441 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 487 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g fill="#e6594c" fill-opacity="0.5">
            <path d="m626 95h9v317h-9z" opacity=".25"></path>
            <path d="m258 95h9v317h-9z" opacity=".25"></path>
            <path d="m304 95h9v317h-9z" opacity=".25"></path>
            <path d="m350 95h9v317h-9z" opacity=".25"></path>
            <path d="m396 95h9v317h-9z" opacity=".25"></path>
            <path d="m442 95h9v317h-9z" opacity=".25"></path>
            <path d="m488 95h9v317h-9z" opacity=".25"></path>
            <path d="m534 95h9v317h-9z" opacity=".25"></path>
            <path d="m580 95h9v317h-9z" opacity=".25"></path>
            <path d="m166 95h9v317h-9z" opacity=".25"></path>
            <path d="m212 95h9v317h-9z" opacity=".25"></path>
        </g>
    </g>
</svg></figure></p>
<h2>The Grid Markup</h2>
<p>Say I’m building a blog post template. First, I’ll need a <code>header</code> to contain the title. Then I’ll need the primary blog content, consisting of headings, paragraphs, images, and callouts. First let’s write some semantic markup:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post&quot;&gt;
  &lt;header&gt;
    &lt;h1&gt;Article Heading&lt;/h1&gt;
  &lt;/header&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
  &lt;figure&gt;
    &lt;img src=&quot;image.jpg&quot; alt=&quot;Alt text&quot;/&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Section Heading&lt;/h2&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
  &lt;aside&gt;
    &lt;p&gt;Callout text&lt;/p&gt;
  &lt;/aside&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
&lt;/article&gt;
</code></pre>
<p>The <code>article</code> element contains the header and all post content as direct children. This will be important as we apply CSS grid styles to the post. Callouts are written using <code>aside</code> elements, perfect for content that is connected tangentially to the rest of the document, and appear in the document directly before the paragraph they are connected to. Note that each <code>aside</code> contains a child paragraph of its own.</p>
<h2>Fallback Styling</h2>
<p>Next, we’ll apply some basic styles for browsers that don’t yet support CSS grid. We’ll set a max-width of 70 characters using the <code>ch</code> unit:</p>
<pre><code class="language-css">.blog-post {
  max-width: 70ch;
}
</code></pre>
<h2>Using CSS Grid</h2>
<p>Now, let’s progressively enhance for browsers that <em>do</em> support CSS grid using a <code>@supports</code> query:</p>
<pre><code class="language-css">@supports(display: grid) {
  .blog-post {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-column-gap: 2rem;
  }
}
</code></pre>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Expanded CSS grid layout with 13 columns and two vertical groupings of white horizontal content lines. The upper group spans columns 3 to 9, and the lower group begins at column 3 and spans to column 9 as well. A dark gray rectangular block centered between columns 6 and 9 indicates a figure or figcaption." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <g stroke="#e6594c">
            <path d="m130.5 95.5h539v316h-539z"></path>
            <path d="m400-139.5v540" transform="matrix(0 -1 1 0 269.5 530.5)"></path>
            <path d="m400-46.5v540" transform="matrix(0 -1 1 0 176.5 623.5)"></path>
            <path d="m400 43.5v540" transform="matrix(0 -1 1 0 86.5 713.5)"></path>
            <path d="m400 56.5v540" transform="matrix(0 -1 1 0 73.5 726.5)"></path>
            <g transform="matrix(0 -1 1 0 165 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 211 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 533 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 579 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 625 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
        </g>
        <path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path>
        <g fill="#f5f5f5">
            <path d="m314 131h173v3h-173z"></path>
            <path d="m314 141h173v3h-173z"></path>
            <path d="m314 151h173v3h-173z"></path>
            <path d="m314 161h173v3h-173z"></path>
            <path d="m314 171h173v3h-173z"></path>
            <path d="m314 181h173v3h-173z"></path>
            <path d="m314 191h173v3h-173z"></path>
            <path d="m314 201h173v3h-173z"></path>
            <path d="m314 211h115v3h-115z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 131h81v3h-81z"></path>
            <path d="m222 141h81v3h-81z"></path>
            <path d="m241 151h62v3h-62z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 327h81v3h-81z"></path>
            <path d="m222 337h81v3h-81z"></path>
            <path d="m241 347h62v3h-62z"></path>
        </g>
        <path d="m314 314h113v3h-113z" fill="#f5f5f5"></path>
        <g fill="#f5f5f5">
            <path d="m314 327h173v3h-173z"></path>
            <path d="m314 337h173v3h-173z"></path>
            <path d="m314 347h173v3h-173z"></path>
            <path d="m314 357h173v3h-173z"></path>
            <path d="m314 367h173v3h-173z"></path>
            <path d="m314 377h115v3h-115z"></path>
        </g>
        <path d="m314 224h173v81h-173z" fill="#525252"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 257 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 303 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 349 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 395 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 441 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 487 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g fill="#e6594c">
            <path d="m626 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m258 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m304 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m350 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m396 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m442 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m488 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m534 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m580 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m166 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m212 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <g fill-rule="nonzero">
                <path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z" transform="translate(128.320312 81.291016)"></path>
                <path d="m.07324219 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273438-1.66015625c.83496094-.87890625 1.13769531-1.43066407 1.13769531-2.09960938 0-1.09863281-.92773437-1.89453125-2.21679687-1.89453125-1.31835938 0-2.25585938.85449219-2.25585938 1.73339844 0 .32714844.22460938.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042969-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195312 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199219.62988282-.54199219.87890626z" transform="translate(167.736816 81.208008)"></path>
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z" transform="translate(213.626953 81.208008)"></path>
                <path d="m3.23730469 6.14746094c0 .41503906.22949219.66894531.61523437.66894531.38574219 0 .62011719-.25390625.62011719-.66894531v-.625h.32714844c.35644531 0 .56640625-.20019532.56640625-.52734375 0-.33203125-.21484375-.546875-.56640625-.546875h-.32714844v-3.515625c0-.58105469-.39550781-.93261719-1.0546875-.93261719-.5078125 0-.8203125.20507813-1.23046875.80078125-.86914062 1.28417969-1.39160156 2.17285156-1.94824219 3.22753906-.18066406.36621094-.23925781.55664063-.23925781.77148438 0 .45410156.30273438.72265625.80078125.72265625h2.43652344zm-2.03125-1.69921875v-.03417969c.4296875-.77636719 1.37695312-2.39257812 1.96289062-3.28125h.06835938v3.31542969z" transform="translate(259.397461 81.242188)"></path>
                <path d="m0 5.31738281c0 .74707031.9375 1.49414063 2.26074219 1.49414063 1.51367187 0 2.53417969-.95214844 2.53417969-2.37304688 0-1.2890625-.87402344-2.16796875-2.14355469-2.16796875-.57128907 0-1.11328125.21484375-1.34277344.52734375h-.06835937l.13671874-1.72363281h2.52441407c.39550781 0 .62011719-.19042969.62011719-.53222656 0-.34179688-.22949219-.54199219-.62011719-.54199219h-2.76367188c-.53710937 0-.81542968.22460938-.84960937.68847656l-.18066406 2.50976563c-.02929688.44921875.24414062.73730468.64453125.73730468.18066406 0 .32226562-.05859375.61035156-.30273437.28808594-.22460938.62011719-.34667969.94726562-.34667969.703125 0 1.20605469.48828125 1.20605469 1.20117188 0 .73730469-.52246094 1.25-1.25976562 1.25-.49804688 0-.88867188-.22949219-1.19628907-.68847657-.16113281-.22949218-.31738281-.31738281-.52246093-.31738281-.32714844 0-.53710938.25878907-.53710938.5859375z" transform="translate(305.67334 81.330078)"></path>
                <path d="m0 3.56445312c0 1.03027344.20019531 1.84570313.60058594 2.40722657.43945312.625 1.12304687.95703125 1.97265625.95703125 1.4453125 0 2.41699219-.93261719 2.41699219-2.32421875 0-1.27441407-.859375-2.15820313-2.08496094-2.15820313-.73242188 0-1.39160156.39550782-1.62109375.9765625h-.04394531c.00976562-1.54785156.5078125-2.37792968 1.45996093-2.37792968.37597657 0 .67871094.12695312 1.015625.41503906.22949219.18066406.36621094.23925781.546875.23925781.30273438 0 .51269531-.20019531.51269531-.49316406 0-.25878906-.20507812-.56152344-.546875-.79101563-.40039062-.26367187-.94238281-.41503906-1.5234375-.41503906-1.73339843 0-2.70507812 1.27929688-2.70507812 3.56445312zm1.39648438 1.08398438c0-.71289062.48828124-1.21582031 1.171875-1.21582031.69824218 0 1.16699218.48828125 1.16699218 1.22070312 0 .7421875-.46386718 1.23535157-1.14746094 1.23535157-.69335937 0-1.19140624-.51269532-1.19140624-1.24023438z" transform="translate(351.521973 81.212891)"></path>
                <path d="m.96679688 6.15234375c0 .3515625.26367187.59082031.61035156.59082031.2734375 0 .44921875-.14648437.59082031-.41992187l2.29980469-4.765625c.18554687-.36621094.26855468-.64453125.26855468-.8984375 0-.40039063-.28808593-.65917969-.67871093-.65917969h-3.41796875c-.41015625 0-.63964844.21972656-.63964844.54199219 0 .31738281.22949219.53222656.63964844.53222656h2.734375v.0390625l-2.29003906 4.63867187c-.07324219.14160157-.1171875.26855469-.1171875.40039063z" transform="translate(397.583008 81.334961)"></path>
                <path d="m2.56835938 6.93359375c1.54296874 0 2.59277343-.79589844 2.59277343-1.96289063 0-.8203125-.56152343-1.484375-1.39648437-1.65527343v-.07324219c.71289062-.21972656 1.1328125-.77636719 1.1328125-1.47949219 0-1.03515625-.95214844-1.76269531-2.31445313-1.76269531s-2.31445312.72753906-2.31445312 1.76269531c0 .70800781.41503906 1.25976563 1.12792969 1.47949219v.07324219c-.83984375.17089843-1.39648438.83496093-1.39648438 1.66015625 0 1.171875 1.03027344 1.95800781 2.56835938 1.95800781zm.01464843-4.06738281c-.61523437 0-1.0546875-.40527344-1.0546875-.96191406 0-.55175782.43945313-.94726563 1.0546875-.94726563.61523438 0 1.0546875.39550781 1.0546875.94726563 0 .56152343-.43945312.96191406-1.0546875.96191406zm0 3.11523437c-.7421875 0-1.26953125-.45898437-1.26953125-1.09375 0-.63964843.52734375-1.10351562 1.26953125-1.10351562.73730469 0 1.26953125.46386719 1.26953125 1.10351562 0 .63476563-.53222656 1.09375-1.26953125 1.09375z" transform="translate(443.419434 81.208008)"></path>
                <path d="m.20996094 5.75195312c0 .29296876.21972656.5859375.57617187.80566407.39550781.24414062.91796875.38085937 1.48925781.38085937 1.74316407 0 2.70507813-1.23535156 2.70507813-3.52050781 0-2.17773437-.92773437-3.41796875-2.55371094-3.41796875-1.45507812 0-2.42675781.92773438-2.42675781 2.30957031 0 1.29882813.85449219 2.20214844 2.08496094 2.20214844.75195312 0 1.3671875-.38085937 1.61132812-1.00097656h.04394532c0 1.50878906-.5078125 2.37792969-1.46972657 2.37792969-.43457031 0-.7421875-.14648438-1.06445312-.4296875-.20019531-.16113282-.32714844-.21484376-.48828125-.21484376-.28808594 0-.5078125.20019532-.5078125.5078125zm3.34472656-3.46191406c0 .72265625-.46875 1.21582032-1.15234375 1.21582032s-1.14746094-.49316407-1.14746094-1.22070313c0-.73242187.46875-1.24023437 1.14257813-1.24023437.68359375 0 1.15722656.51269531 1.15722656 1.24511718z" transform="translate(489.536621 81.198242)"></path>
                <g transform="translate(533.412598 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                </g>
                <g transform="translate(580.269531 81.291016)">
                    <path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path>
                    <path d="m5.7421875 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902344.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path>
                </g>
                <g transform="translate(625.534668 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.32617188 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273437-1.66015625c.83496094-.87890625 1.13769532-1.43066407 1.13769532-2.09960938 0-1.09863281-.92773438-1.89453125-2.21679688-1.89453125-1.31835937 0-2.25585937.85449219-2.25585937 1.73339844 0 .32714844.22460937.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042968-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195313 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199218.62988282-.54199218.87890626z"></path>
                </g>
                <g transform="translate(665.478516 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.19921875 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972657 0 2.50488281-.81542969 2.50488281-1.98242187 0-.84472657-.61035156-1.53808594-1.42089843-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726562-1.76757812-2.29492188-1.76757812-1.27441406 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460938.53710937.53710938.53710937.22949219 0 .40039062-.10253906.546875-.34667969.25878906-.43945312.63476562-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945313.92773437-1.04003906.92773437h-.45410157c-.29785156 0-.5078125.21972657-.5078125.51269531 0 .30273438.21484376.52246094.5078125.52246094h.47851563c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179688-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                </g>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>Now it’s time to start placing content on the grid:</p>
<pre><code class="language-css">.blog-post header {
  grid-column-start: 3;
  grid-column-end: span 2;
}

.blog-post h2,
.blog-post p,
.blog-post figure {
  grid-column-start: 5;
  grid-column-end: span 4;
}
</code></pre>
<p>The post header and content now sit next to each other in a row. The callouts are up next:</p>
<pre><code class="language-css">.blog-post aside {
  position: relative;
  grid-column-start: 3;
  grid-column-end: 5;
}

.blog-post aside p {
  position: absolute;
}
</code></pre>
<p>The asides are now pulled to the left of the paragraph immediately following them, looking exactly like callouts. The paragraphs within each callout have absolute positioning applied so that they don’t force the proceeding paragraph down if they are taller than the adjacent content.</p>
<div class="warning"><p>Since setting up asides requires using absolute positioning, you need to be careful that one aside does not overlap the proceeding one.</p></div>
<h2>Bonus: Full-Width Figures</h2>
<p>I can easily style figures within the post so that they stretch across the full width of the grid container. The rest of the content remains at a narrower width.</p>
<pre><code class="language-css">.blog-post figure {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-column-gap: 2rem;
  grid-column-start: 1;
  grid-column-end: -1;
}

.blog-post figure img {
  grid-column-start: 1;
  grid-column-end: -1;
}

.blog-post figure figcaption {
  grid-column-start: 5;
  grid-column-end: span 4;
}
</code></pre>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Grid layout with 13 columns and white content blocks aligned between columns 3 to 9. The top section contains staggered horizontal bars, suggesting header and paragraph placement. A gray area spans the lower portion, representing a full-width figure." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m131 194h539v162h-539z" fill="#525252"></path><path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path><path d="m400-139.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 269.5 530.5)"></path><path d="m400-76.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 206.5 593.5)"></path><path d="m400 95.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 34.5 765.5)"></path><path d="m314 366h173v3h-173z" fill="#f5f5f5"></path><g stroke="#e6594c" transform="matrix(0 -1 1 0 165 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 211 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 533 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 579 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 625 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#f5f5f5"><path d="m314 131h173v3h-173z"></path><path d="m314 141h173v3h-173z"></path><path d="m314 151h173v3h-173z"></path><path d="m314 161h173v3h-173z"></path><path d="m314 171h173v3h-173z"></path><path d="m314 181h115v3h-115z"></path></g><g fill="#f5f5f5"><path d="m222 131h81v3h-81z"></path><path d="m222 141h81v3h-81z"></path><path d="m241 151h62v3h-62z"></path></g><g stroke="#e6594c"><g transform="matrix(0 -1 1 0 257 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 303 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 349 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 395 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 441 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 487 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g></g><g fill="#e6594c"><path d="m626 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m258 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m304 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m350 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m396 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m442 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m488 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m534 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m580 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m166 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m212 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><g fill-rule="nonzero"><path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z" transform="translate(128.320312 81.291016)"></path><path d="m.07324219 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273438-1.66015625c.83496094-.87890625 1.13769531-1.43066407 1.13769531-2.09960938 0-1.09863281-.92773437-1.89453125-2.21679687-1.89453125-1.31835938 0-2.25585938.85449219-2.25585938 1.73339844 0 .32714844.22460938.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042969-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195312 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199219.62988282-.54199219.87890626z" transform="translate(167.736816 81.208008)"></path><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z" transform="translate(213.626953 81.208008)"></path><path d="m3.23730469 6.14746094c0 .41503906.22949219.66894531.61523437.66894531.38574219 0 .62011719-.25390625.62011719-.66894531v-.625h.32714844c.35644531 0 .56640625-.20019532.56640625-.52734375 0-.33203125-.21484375-.546875-.56640625-.546875h-.32714844v-3.515625c0-.58105469-.39550781-.93261719-1.0546875-.93261719-.5078125 0-.8203125.20507813-1.23046875.80078125-.86914062 1.28417969-1.39160156 2.17285156-1.94824219 3.22753906-.18066406.36621094-.23925781.55664063-.23925781.77148438 0 .45410156.30273438.72265625.80078125.72265625h2.43652344zm-2.03125-1.69921875v-.03417969c.4296875-.77636719 1.37695312-2.39257812 1.96289062-3.28125h.06835938v3.31542969z" transform="translate(259.397461 81.242188)"></path><path d="m0 5.31738281c0 .74707031.9375 1.49414063 2.26074219 1.49414063 1.51367187 0 2.53417969-.95214844 2.53417969-2.37304688 0-1.2890625-.87402344-2.16796875-2.14355469-2.16796875-.57128907 0-1.11328125.21484375-1.34277344.52734375h-.06835937l.13671874-1.72363281h2.52441407c.39550781 0 .62011719-.19042969.62011719-.53222656 0-.34179688-.22949219-.54199219-.62011719-.54199219h-2.76367188c-.53710937 0-.81542968.22460938-.84960937.68847656l-.18066406 2.50976563c-.02929688.44921875.24414062.73730468.64453125.73730468.18066406 0 .32226562-.05859375.61035156-.30273437.28808594-.22460938.62011719-.34667969.94726562-.34667969.703125 0 1.20605469.48828125 1.20605469 1.20117188 0 .73730469-.52246094 1.25-1.25976562 1.25-.49804688 0-.88867188-.22949219-1.19628907-.68847657-.16113281-.22949218-.31738281-.31738281-.52246093-.31738281-.32714844 0-.53710938.25878907-.53710938.5859375z" transform="translate(305.67334 81.330078)"></path><path d="m0 3.56445312c0 1.03027344.20019531 1.84570313.60058594 2.40722657.43945312.625 1.12304687.95703125 1.97265625.95703125 1.4453125 0 2.41699219-.93261719 2.41699219-2.32421875 0-1.27441407-.859375-2.15820313-2.08496094-2.15820313-.73242188 0-1.39160156.39550782-1.62109375.9765625h-.04394531c.00976562-1.54785156.5078125-2.37792968 1.45996093-2.37792968.37597657 0 .67871094.12695312 1.015625.41503906.22949219.18066406.36621094.23925781.546875.23925781.30273438 0 .51269531-.20019531.51269531-.49316406 0-.25878906-.20507812-.56152344-.546875-.79101563-.40039062-.26367187-.94238281-.41503906-1.5234375-.41503906-1.73339843 0-2.70507812 1.27929688-2.70507812 3.56445312zm1.39648438 1.08398438c0-.71289062.48828124-1.21582031 1.171875-1.21582031.69824218 0 1.16699218.48828125 1.16699218 1.22070312 0 .7421875-.46386718 1.23535157-1.14746094 1.23535157-.69335937 0-1.19140624-.51269532-1.19140624-1.24023438z" transform="translate(351.521973 81.212891)"></path><path d="m.96679688 6.15234375c0 .3515625.26367187.59082031.61035156.59082031.2734375 0 .44921875-.14648437.59082031-.41992187l2.29980469-4.765625c.18554687-.36621094.26855468-.64453125.26855468-.8984375 0-.40039063-.28808593-.65917969-.67871093-.65917969h-3.41796875c-.41015625 0-.63964844.21972656-.63964844.54199219 0 .31738281.22949219.53222656.63964844.53222656h2.734375v.0390625l-2.29003906 4.63867187c-.07324219.14160157-.1171875.26855469-.1171875.40039063z" transform="translate(397.583008 81.334961)"></path><path d="m2.56835938 6.93359375c1.54296874 0 2.59277343-.79589844 2.59277343-1.96289063 0-.8203125-.56152343-1.484375-1.39648437-1.65527343v-.07324219c.71289062-.21972656 1.1328125-.77636719 1.1328125-1.47949219 0-1.03515625-.95214844-1.76269531-2.31445313-1.76269531s-2.31445312.72753906-2.31445312 1.76269531c0 .70800781.41503906 1.25976563 1.12792969 1.47949219v.07324219c-.83984375.17089843-1.39648438.83496093-1.39648438 1.66015625 0 1.171875 1.03027344 1.95800781 2.56835938 1.95800781zm.01464843-4.06738281c-.61523437 0-1.0546875-.40527344-1.0546875-.96191406 0-.55175782.43945313-.94726563 1.0546875-.94726563.61523438 0 1.0546875.39550781 1.0546875.94726563 0 .56152343-.43945312.96191406-1.0546875.96191406zm0 3.11523437c-.7421875 0-1.26953125-.45898437-1.26953125-1.09375 0-.63964843.52734375-1.10351562 1.26953125-1.10351562.73730469 0 1.26953125.46386719 1.26953125 1.10351562 0 .63476563-.53222656 1.09375-1.26953125 1.09375z" transform="translate(443.419434 81.208008)"></path><path d="m.20996094 5.75195312c0 .29296876.21972656.5859375.57617187.80566407.39550781.24414062.91796875.38085937 1.48925781.38085937 1.74316407 0 2.70507813-1.23535156 2.70507813-3.52050781 0-2.17773437-.92773437-3.41796875-2.55371094-3.41796875-1.45507812 0-2.42675781.92773438-2.42675781 2.30957031 0 1.29882813.85449219 2.20214844 2.08496094 2.20214844.75195312 0 1.3671875-.38085937 1.61132812-1.00097656h.04394532c0 1.50878906-.5078125 2.37792969-1.46972657 2.37792969-.43457031 0-.7421875-.14648438-1.06445312-.4296875-.20019531-.16113282-.32714844-.21484376-.48828125-.21484376-.28808594 0-.5078125.20019532-.5078125.5078125zm3.34472656-3.46191406c0 .72265625-.46875 1.21582032-1.15234375 1.21582032s-1.14746094-.49316407-1.14746094-1.22070313c0-.73242187.46875-1.24023437 1.14257813-1.24023437.68359375 0 1.15722656.51269531 1.15722656 1.24511718z" transform="translate(489.536621 81.198242)"></path><g transform="translate(533.412598 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path></g><g transform="translate(580.269531 81.291016)"><path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path><path d="m5.7421875 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902344.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path></g><g transform="translate(625.534668 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.32617188 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273437-1.66015625c.83496094-.87890625 1.13769532-1.43066407 1.13769532-2.09960938 0-1.09863281-.92773438-1.89453125-2.21679688-1.89453125-1.31835937 0-2.25585937.85449219-2.25585937 1.73339844 0 .32714844.22460937.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042968-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195313 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199218.62988282-.54199218.87890626z"></path></g><g transform="translate(665.478516 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.19921875 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972657 0 2.50488281-.81542969 2.50488281-1.98242187 0-.84472657-.61035156-1.53808594-1.42089843-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726562-1.76757812-2.29492188-1.76757812-1.27441406 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460938.53710937.53710938.53710937.22949219 0 .40039062-.10253906.546875-.34667969.25878906-.43945312.63476562-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945313.92773437-1.04003906.92773437h-.45410157c-.29785156 0-.5078125.21972657-.5078125.51269531 0 .30273438.21484376.52246094.5078125.52246094h.47851563c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179688-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path></g></g></g></g></svg></figure></p>
<p>The <code>figure</code> now spans all 12 columns of the parent grid. I set up a nested grid within the <code>figure</code> with the same number of columns and spacing as the parent. This allows me to have the <code>img</code> element span the full width, while the <code>figcaption</code> is aligned with the narrower post content.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Controlling Element Visibility with the Intersection Observer API]]></title>
            <link>https://www.jonathanharrell.com/blog/controlling-element-visibility-with-the-intersection-observer-api</link>
            <guid>https://www.jonathanharrell.com/blog/controlling-element-visibility-with-the-intersection-observer-api</guid>
            <pubDate>Wed, 18 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use the new IntersectionObserver API to control the visibility of elements relative to the viewport.]]></description>
            <content:encoded><![CDATA[<p>Controlling the display of elements based on their visibility within the viewport has typically been a rather messy affair, involving calculations using window height and <code>getBoundingClientRect()</code>. There is now a new API that makes this much simpler called Intersection Observer. It is now <a href="https://caniuse.com/#feat=intersectionobserver" target="_blank" rel="noreferrer">supported</a> in Chrome, Firefox, Opera and Edge.</p>
<p>I decided to experiment and push IntersectionObserver to its limits.</p>

<h2>The HTML and CSS</h2>
<p>I have a simple grid of cards that is styled using CSS grid:</p>
<pre><code class="language-html">&lt;section class=&quot;card-grid&quot;&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  ...
&lt;/section&gt;
</code></pre>
<pre><code class="language-css">.card-grid {
  display: grid;
  grid-template-columns: repeat(
      auto-fill,
      minmax(100px, 1fr)
  );
  grid-gap: 45px;
}
</code></pre>
<h2>Creating the Observers</h2>
<p>I loop over each card and create an observer. The observer accepts a callback and an options object. Note that in options I am setting the <code>rootMargin</code> to a negative value. This insets the intersection point in from the viewport on all sides by 100px. So a card can be up to 100px in the viewport before the observer will read it as intersected.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram showing a large container with 100px of margin on all sides, marked in dark red. This illustrates the rootMargin option in the Intersection Observer API, visually indicating how the observer’s area of interest is inset from the edges of the viewport." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m700 65v377h-600v-377zm-29.761273 30h-540v317h540z" fill="#e6594c" fill-opacity="0.5" opacity=".25"></path><path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path><path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m665 96.0166667v-1l4-.0006667v-27.033l-4 .0003333v-1h9v1l-4-.0003333v27.033l4 .0006667v1z"></path><path d="m669.983333 100h-1v-9h1l-.000333 3.999h27.033l.000667-3.999h1v9h-1l-.000667-4.001h-27.033z"></path><g transform="translate(633.023926 77.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m9.91210938 3.62304688c0 2.01171874.94238282 3.31054687 2.52441402 3.31054687 1.5820313 0 2.5488282-1.31347656 2.5488282-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.5292969-3.31054688-1.5869141 0-2.54394532 1.30859375-2.54394532 3.31054688zm1.31835942-.30761719c0-1.40625.4589843-2.24121094 1.2158203-2.24121094.7568359 0 1.2158203.83984375 1.2158203 2.24121094v.29785156c0 1.40625-.4589844 2.24609375-1.2158203 2.24609375-.756836 0-1.2158203-.83984375-1.2158203-2.24609375z"></path><path d="m17.2900391 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.928711-2.3046875-.727539 0-1.2988281.34667969-1.508789.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888671-1.32324219.6884766 0 1.0791016.5078125 1.0791016 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m21.5380859 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033203-1.38671875h.0634766l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634766l-.9277343-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859376.24902344-.5859376.5859375 0 .16113281.0683594.33203125.1708985.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></g></svg></figure></p>
<p>I have also set the <code>threshold</code> option as an array with two numeric values. These are essentially the percentages of intersection at which the observer will respond. So, when a card is 50% in the viewport and when it is 100% in, the observer will fire the callback.</p>
<pre><code class="language-javascript">const options = {
  rootMargin: &#x27;-100px&#x27;,
  threshold: [0.5, 1]
}
</code></pre>
<pre><code class="language-javascript">const observer = new IntersectionObserver(callback, options);

const targets = document.querySelectorAll(&#x27;.card&#x27;);
targets.forEach(target =&gt; observer.observe(target));
</code></pre>
<h2>Setup the Callback</h2>
<p>The callback function gives me an array of entries—each entry is essentially an intersection change. I can check the <code>intersectionRatio</code> on each entry and apply some styling appropriately.</p>
<p><figure><svg height="565" viewBox="0 0 800 565" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Visual showing multiple boxes at different positions within and outside the margin-adjusted viewport. Labels on the boxes indicate intersection ratios: 0%, 50%, and 100%, demonstrating how the threshold values of 0.5 and 1 control when the Intersection Observer triggers based on how much of an element is visible." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m100.5 565v-214m599 0v214" stroke="#979797" stroke-dasharray="2"></path><path d="m700 65v285h-600v-285zm-29.761273 30h-540v225h540z" fill="#e6594c" fill-opacity="0.5" opacity=".25"></path><path d="m130.5 95.5h539v225h-539z" stroke="#e6594c"></path><path d="m101 66h598v284h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m665 96.0166667v-1l4-.0006667v-27.033l-4 .0003333v-1h9v1l-4-.0003333v27.033l4 .0006667v1z"></path><path d="m669.983333 100h-1v-9h1l-.000333 3.999h27.033l.000667-3.999h1v9h-1l-.000667-4.001h-27.033z"></path><g transform="translate(633.023926 77.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m9.91210938 3.62304688c0 2.01171874.94238282 3.31054687 2.52441402 3.31054687 1.5820313 0 2.5488282-1.31347656 2.5488282-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.5292969-3.31054688-1.5869141 0-2.54394532 1.30859375-2.54394532 3.31054688zm1.31835942-.30761719c0-1.40625.4589843-2.24121094 1.2158203-2.24121094.7568359 0 1.2158203.83984375 1.2158203 2.24121094v.29785156c0 1.40625-.4589844 2.24609375-1.2158203 2.24609375-.756836 0-1.2158203-.83984375-1.2158203-2.24609375z"></path><path d="m17.2900391 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.928711-2.3046875-.727539 0-1.2988281.34667969-1.508789.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888671-1.32324219.6884766 0 1.0791016.5078125 1.0791016 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m21.5380859 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033203-1.38671875h.0634766l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634766l-.9277343-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859376.24902344-.5859376.5859375 0 .16113281.0683594.33203125.1708985.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g stroke="#f5f5f5" stroke-width="2"><path d="m176 381h118v118h-118z"></path><path d="m341 261h118v118h-118z"></path><path d="m506 141h118v118h-118z"></path></g><path d="m507.5 200.5h115" stroke="#e6594c" stroke-dasharray="2" stroke-linecap="square"></path><path d="m177.5 440.5h116" stroke="#f5f5f5" stroke-dasharray="2" stroke-linecap="square"></path><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="14" x="558.5" y="134.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(561.733887 137.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="14" x="393.5" y="254.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(396.733887 257.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="14" x="228.5" y="374.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(231.733887 377.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="18" x="556.5" y="195.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(559.618164 198.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="18" x="391.5" y="315.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(394.618164 318.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="18" x="226.5" y="435.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(229.618164 438.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="20" x="555.5" y="254.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(558.261719 257.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="20" x="390.5" y="374.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(393.261719 377.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="20" x="225.5" y="494.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(228.261719 497.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g></g></svg></figure></p>
<pre><code class="language-javascript">const callback = entries =&gt; {
  entries.forEach(entry =&gt; {
    const ratio = entry.intersectionRatio;

    // look at the ratio and do stuff to each element
  });
}
</code></pre>
<p>I use a switch statement to apply different styling for different ratios:</p>
<pre><code class="language-javascript">switch (true) {
  case (ratio === 1):
    entry.target.style.opacity = 1;
    entry.target.style.transform = &#x27;scale(1.25)&#x27;;
    return;

  case (ratio &lt; 1 &amp;&amp; ratio &gt;= 0.5):
    entry.target.style.opacity = 0.5;
    entry.target.style.transform = &#x27;scale(1.1)&#x27;;
    return;

  case (ratio &lt; 0.5):
    entry.target.style.opacity = 0.15;
    entry.target.style.transform = &#x27;scale(1.0)&#x27;;
    return;

  default:
    return;
}
</code></pre>
<h2>Conclusion</h2>
<p>The Intersection Observer API provides a more straightforward and powerful method for checking element visibility relative to the viewport. Hopefully browser support continues to improve and we’ll be able to use it soon in production sites without needing a polyfill.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implicit State Sharing in React & Vue]]></title>
            <link>https://www.jonathanharrell.com/blog/implicit-state-sharing-in-react-vue</link>
            <guid>https://www.jonathanharrell.com/blog/implicit-state-sharing-in-react-vue</guid>
            <pubDate>Mon, 05 Nov 2018 22:14:59 GMT</pubDate>
            <description><![CDATA[Learn to use React’s Context API and provide/inject in Vue to share state between related components without resorting to a global data store.]]></description>
            <content:encoded><![CDATA[<p>Imagine you are creating an accordion component that you want to distribute publicly through an npm package. You would like the users of this accordion to be able to use the component in a very flexible way, by composing multiple components together. React Context and provide/inject in Vue provide a solution.</p>

<p>Imagine this is your ideal API:</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem&gt;
    &lt;AccordionHeader&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  &lt;/AccordionItem&gt;
&lt;/Accordion&gt;
</code></pre>
<p><code>AccordionItem</code> will contain each section of the accordion that can be expanded or collapsed, <code>AccordionHeader</code> will be the place where the user can click to expand or collapse, and <code>AccordionPanel</code> will contain the content to be shown or hidden.</p>
<p>Each <code>AccordionItem</code> will need to maintain some state — whether it is expanded or not. But <code>AccordionHeader</code> will also need access to this value, so that it can show the appropriate toggle button. And <code>AccordionPanel</code> may also need to access this, since it is the thing being expanded and collapsed.</p>
<p>One possibility is exposing the expanded value to your user through render props and making sure your documentation lets them know that they need to pass that down to the header and panel components.</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem render={({ expanded }) =&gt; (
    &lt;AccordionHeader expanded={expanded}&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel expanded={expanded}&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  )} /&gt;
&lt;/Accordion&gt;
</code></pre>
<p>While this may seem like a decent solution at first, it’s not ideal that the consumer of our component has to worry about the component internals. The fact that <code>AccordionHeader</code> and <code>AccordionPanel</code> need access to the expanded state should not be something our user has to be concerned about.</p>
<p>It should also be noted that while this is a trivial example, your component may be far more complex, with multiple levels of nested components, in which case prop drilling may become quite tedious.</p>
<p>What we really need is a way to <em>implicitly</em> pass down props.</p>
<h2>Using React Context</h2>
<p>There is a better solution for cases like this: React Context. We can use the Context API to create some state and provide it where needed behind the scenes, removing this concern from our public-facing API.</p>
<p>First, we will create a context and define the <em>shape</em> of that context. We will start with an <code>expanded</code> value and a <code>toggleExpansion</code> method. We are defining this context as specifically relevant to our accordion item:</p>
<pre><code class="language-jsx">const AccordionItemContext = React.createContext({
  expanded: false,
  toggleExpansion: () =&gt; {}
})
</code></pre>
<p>Now, inside our <code>AccordionItem</code> component, we will define the <code>expanded</code> and <code>toggleExpansion</code> values and feed them in as the value of the <code>Provider</code> component.</p>
<pre><code class="language-jsx">class AccordionItem extends React.Component {
  constructor(props) {
    super(props)

    this.toggleExpansion = () =&gt; {
      this.setState({
        expanded: !this.state.expanded
      });
    }

    this.state = {
      expanded: false,
      toggleExpansion: this.toggleExpansion
    }
  }

  render() {
    return (
      &lt;AccordionItemContext.Provider value={this.state}&gt;
        &lt;div className=&quot;accordion-item&quot;&gt;
          {this.props.children}
        &lt;/div&gt;
      &lt;/AccordionItemContext.Provider&gt;
    )
  }
}
</code></pre>
<p>The <code>Provider</code> is one half of the React Context equation. The other half is the <code>Consumer</code>. The <code>Provider</code> allows the <code>Consumer</code> to subscribe to context changes, as we will see soon.</p>
<p>Next, we need to set up <code>AccordionHeader</code> and <code>AccordionPanel</code> as consumers of this context:</p>
<pre><code class="language-jsx">const AccordionHeader = props =&gt; {
  return (
    &lt;AccordionItemContext.Consumer&gt;
      {({ expanded, toggleExpansion }) =&gt; (
        &lt;h2 className=&quot;accordion-header&quot;&gt;
          &lt;button onClick={toggleExpansion}&gt;
            {expanded ? &#x27;→ &#x27; : &#x27;↓ &#x27;}
            {props.children}
          &lt;/button&gt;
        &lt;/h2&gt;
      )}
    &lt;/AccordionItemContext.Consumer&gt;
  )
}
</code></pre>
<p>The <code>Consumer</code> component requires a function as its child. This function will receive the context value, which we are destructuring into <code>expanded</code> and <code>toggleExpansion</code>. Our component is then able to use these values in its template.</p>
<p>We will similarly use <code>Consumer</code> to give <code>AccordionPanel</code> access to the context value:</p>
<pre><code class="language-jsx">const AccordionPanel = props =&gt; {
  return (
    &lt;AccordionItemContext.Consumer&gt;
      {({ expanded }) =&gt;
        &lt;div className={
          &#x27;accordion-panel &#x27; +
          (expanded ? &#x27;expanded&#x27; : &#x27;&#x27;)
        }&gt;
          {props.children}
        &lt;/div&gt;
      }
    &lt;/AccordionItemContext.Consumer&gt;
  )
}
</code></pre>
<p>Now, we really can achieve our ideal API for the accordion component. Users of our component won’t have to worry about passing state up or down the component tree. Those component internals are hidden from them:</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem&gt;
    &lt;AccordionHeader&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  &lt;/AccordionItem&gt;
&lt;/Accordion&gt;
</code></pre>
<h2>Provide/Inject in Vue</h2>
<p>Vue provides a similar tool to React’s Context API, called provide/inject. To use this, we will use the <code>provide</code> method on our <code>accordion-item</code> Vue component:</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-item&#x27;, {
  data() {
    return {
      sharedState: {
        expanded: false
      }
    }
  },

  provide() {
    return {
      accordionItemState: this.sharedState
    }
  },

  render(createElement) {
    return createElement(
      &#x27;div&#x27;,
      { class: &#x27;accordion-item&#x27; },
      this.$slots.default
    )
  }
})
</code></pre>
<p>We return an object from <code>provide()</code> that contains the state we want to provide to other components. Note that we are passing an object to <code>accordionItemState</code>, rather than simply passing the <code>expanded</code> value. In order to be reactive, provide must pass an object.</p>
<p>Note that we are using a render function here to create this component, but this is not necessary to use provide/inject.</p>
<p>Now, we will inject this state into our child components. We will simply use the <code>inject</code> property, which accepts an array of strings corresponding to the properties of the object we defined in <code>provide</code>.</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-header&#x27;, {
  inject: [&#x27;accordionItemState&#x27;],

  template: html`
    &lt;h2 class=&quot;accordion-header&quot;&gt;
      &lt;button @click=&quot;accordionItemState.expanded = !accordionItemState.expanded&quot;&gt;
        {{ accordionItemState.expanded ? &#x27;→&#x27; : &#x27;→&#x27; }}
        &lt;slot&gt;&lt;/slot&gt;
      &lt;/button&gt;
    &lt;/h2&gt;
  `
})
</code></pre>
<p>Once we include the property name in <code>inject</code>, we have access to those values in our template.</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-panel&#x27;, {
  inject: [&#x27;accordionItemState&#x27;],

  template: html`
    &lt;div
      class=&quot;accordion-panel&quot;
      :class=&quot;{ expanded: accordionItemState.expanded }&quot;
    &gt;
      &lt;slot&gt;&lt;/slot&gt;
    &lt;/div&gt;
  `
})
</code></pre>
<h2>Use with Caution</h2>
<p>It’s worth noting that you should only implicitly pass down props when it really makes sense. Doing this too much can obfuscate the real behavior of your components and cause confusion for other developers who may be working on your project.</p>
<p>A component library that is packaged up and distributed for use in other applications is a perfect use case for this, since the internal props of the components really don’t need to be exposed to the end user.</p>
<p>React Context and Vue’s provide/inject feature both make it possible to do this through implicit state sharing.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Input Types Cheat Sheet]]></title>
            <link>https://www.jonathanharrell.com/blog/input-types-cheat-sheet</link>
            <guid>https://www.jonathanharrell.com/blog/input-types-cheat-sheet</guid>
            <pubDate>Fri, 20 Jun 2025 19:59:00 GMT</pubDate>
            <description><![CDATA[Reference all the different text and temporal input types in HTML—like text, email, search, date, time and more, so you can choose the right ones to use in your forms.]]></description>
            <content:encoded><![CDATA[<p>The humble input field. Or maybe not so humble… This handy cheat sheet will help you quickly reference all the different text and temporal input types available in HTML. The next time you need to collect information from your users, make sure you are using the right input for the job.</p>
<h2>Text Inputs</h2>
<table><thead><tr><th>Name</th><th>Code</th><th>Example</th></tr></thead><tbody><tr><td>Text input</td><td><code>&lt;input type=&quot;text&quot; /&gt;</code></td><td><input type="text" placeholder="Enter text"/></td></tr><tr><td>Search input</td><td><code>&lt;input type=&quot;search&quot; /&gt;</code></td><td><input type="search" placeholder="Enter search term"/></td></tr><tr><td>Number input</td><td><code>&lt;input type=&quot;number&quot; /&gt;</code></td><td><input type="search" placeholder="1234"/></td></tr><tr><td>Email input</td><td><code>&lt;input type=&quot;email&quot; /&gt;</code></td><td><input type="email" placeholder="name@email.com" autoComplete="off"/></td></tr><tr><td>Password input</td><td><code>&lt;input type=&quot;password&quot; /&gt;</code></td><td><input type="password" placeholder="••••••••••" autoComplete="off"/></td></tr><tr><td>Telephone input</td><td><code>&lt;input type=&quot;tel&quot; /&gt;</code></td><td><input type="url" placeholder="999-999-9999"/></td></tr><tr><td>URL input</td><td><code>&lt;input type=&quot;url&quot; /&gt;</code></td><td><input type="url" placeholder="https://yoursite.com"/></td></tr></tbody></table>
<h2>Temporal Inputs</h2>
<table><thead><tr><th>Name</th><th>Code</th><th>Example</th></tr></thead><tbody><tr><td>Date input</td><td><code>&lt;input type=&quot;date&quot; /&gt;</code></td><td><input type="date"/></td></tr><tr><td>Time input</td><td><code>&lt;input type=&quot;time&quot; /&gt;</code></td><td><input type="time"/></td></tr><tr><td>Month input (Chrome/Edge only)</td><td><code>&lt;input type=&quot;month&quot; /&gt;</code></td><td><input type="month"/></td></tr><tr><td>Week input (Chrome/Edge only)</td><td><code>&lt;input type=&quot;week&quot; /&gt;</code></td><td><input type="week"/></td></tr><tr><td>Datetime input</td><td><code>&lt;input type=&quot;datetime-local&quot; /&gt;</code></td><td><input type="datetime-local"/></td></tr></tbody></table>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Dynamic SVGs in Light & Dark Mode]]></title>
            <link>https://www.jonathanharrell.com/blog/light-dark-mode-svgs</link>
            <guid>https://www.jonathanharrell.com/blog/light-dark-mode-svgs</guid>
            <pubDate>Sun, 25 May 2025 12:55:00 GMT</pubDate>
            <description><![CDATA[Learn how to make your SVG illustrations respond to light and dark mode using CSS variables—plus, a script to automate replacing hex values.]]></description>
            <content:encoded><![CDATA[<p>When supporting light and dark mode, you likely want your images to respond accordingly, showing both a light and dark version. The easiest way to do this is by providing two image sources and using the <code>picture</code> element to switch between them.</p>
<pre><code class="language-html">&lt;picture&gt;
  &lt;source
    media=&quot;(prefers-color-scheme: dark)&quot;
    srcset=&quot;./dark-mode-image.png&quot;
  &gt;
  &lt;source
    media=&quot;(prefers-color-scheme: light)&quot;
    srcset=&quot;./light-mode-image.png&quot;
  &gt;
  &lt;img src=&quot;./default-image.png&quot; alt=&quot;Image&quot;&gt;
&lt;/picture&gt;
</code></pre>
<p>However, this requires exporting and maintaining two versions of the image. When the image needs an update, you need to update and export two files. Additionally, if you ever decide to change your color scheme, you will need to update all of your image source files and export them again.</p>
<p>For SVGs in particular, there is a better way to respond to theme changes using CSS variables. The SVG must be loaded inline within your page’s HTML.</p>
<p>Here is an SVG I’ve exported from a graphics program (I’m using Sketch):</p>

<p>I want to replace the hex codes in this SVG with CSS variables that can respond to theme changes. However, I may need to re-export this image in the future, so I don’t want to do this manually. I need a repeatable way to easily replace the hex codes.</p>
<p>I’ve written a script to be run via the command line that will go through at all the SVGs in a particular directory, look for certain hex codes, and replace those with references to CSS variables.</p>
<pre><code class="language-javascript">const fs = require(&quot;fs&quot;);
const path = require(&quot;path&quot;);

const hexToCssVariables = {
  &quot;#fafafa&quot;: &quot;#27272a&quot;,
  &quot;#262626&quot;: &quot;#f5f5f5&quot;,
  &quot;#d4d4d4&quot;: &quot;#525252&quot;,
  &quot;#e6594c&quot;: &quot;#e6594c&quot;
};

const inputDir = path.join(
  __dirname,
  &quot;../content/illustrations&quot;
);
const outputDir = path.join(
  __dirname,
  &quot;../public/assets/illustrations&quot;
);

// Ensure output directory exists
if (!fs.existsSync(outputDir)) {
  fs.mkdirSync(outputDir, { recursive: true });
}

// Read all images from the input directory
fs.readdirSync(inputDir).forEach((file) =&gt; {
  const inputFile = path.join(inputDir, file);
  const outputFile = path.join(outputDir, file);

  if (inputFile.endsWith(&quot;.svg&quot;)) {
    fs.readFile(
      inputFile,
      &quot;utf-8&quot;,
      function (err, data) {
        if (err) throw err;

        let svgContent = data;

        // replace each hex code with a CSS variable reference
        Object.keys(hexToCssVariables).forEach((hex) =&gt; {
          const cssVar = hexToCssVariables[hex];
          const regex = new RegExp(hex, &quot;gi&quot;);
          svgContent = svgContent.replace(regex, cssVar);
        });

        // generate the new SVG file
        fs.writeFile(
          outputFile,
          svgContent,
          &quot;utf-8&quot;,
          function (err) {
            if (err) throw err;
          }
        );
      }
    );
  }
});
</code></pre>
<p>I have the CSS variables defined in my styles and have set them up to change based on the presence of a <code>dark</code> class on my root element.</p>
<pre><code class="language-css">:root {
  --accent: #ff6354;

  --illustration-accent: var(--accent);
  --illustration-background: #fafafa;
  --illustration-black: #262626;
  --illustration-gray: #d4d4d4;
}

.dark {
  --accent: #e6594c;

  --illustration-background: #27272a;
  --illustration-black: #f5f5f5;
  --illustration-gray: #525252;
}
</code></pre>
<p>Now, the SVG will respond perfectly to changes in my theme, and I only have to maintain a single file for each image. I export all my SVGs to a <code>content</code> directory, then run my script to generate the final files in the <code>public</code> directory. If I decide to drastically update my theme in the future, I don’t have to manually update all the source files; just a quick change of a few variables, and I’m good to go!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Live Theming with CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/live-theming-with-css-variables</link>
            <guid>https://www.jonathanharrell.com/blog/live-theming-with-css-variables</guid>
            <pubDate>Sat, 19 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[CSS variables are opening up exciting new possibilities, like creating a very performant live theme editor that dynamically updates CSS values.]]></description>
            <content:encoded><![CDATA[<p>CSS variables, now enjoying fairly good <a href="https://caniuse.com/#search=css%20variables" target="_blank" rel="noreferrer">browser support</a>, are opening up exciting possibilities for more dynamic styling. Having true CSS variables means that we can get and set their values using JavaScript, allowing us to build exciting features like live theming.</p>
<p>The process is fairly simple—set up initial variable values in CSS, mark up some inputs, add event listeners and set the values in JavaScript. Let’s get started!</p>
<h2>Set Up Initial Values</h2>
<p>First we’ll set up the variables and their initial values in the <code>:root</code> pseudo-class. In HTML, <code>:root</code> represents the <code>html</code> element.</p>
<pre><code class="language-css">:root {
  --background-color: #FFFFFF;
  --text-color: #101727;
}
</code></pre>
<p>Now we can write some styles using these variables. Think about using these values as a base and generating other values in your styles from them. This will let you create fewer variables while still giving the user the power to affect the entire document.</p>
<pre><code class="language-css">body {
  background-color: var(--background-color);
  color: var(--text-color);
}
</code></pre>
<p>You may also want to add some transitions for the properties that will be changing to smooth out the theme editing experience.</p>
<h2>Create Some Inputs</h2>
<p>Now it’s time to create the form that the user will be interacting with to customize their theme. I’m using color inputs for the color options and range inputs for the font size and line height.</p>
<pre><code class="language-html">&lt;input type=&quot;color&quot; id=&quot;background-color&quot; value=&quot;#FFFFFF&quot;&gt;
&lt;input type=&quot;color&quot; id=&quot;text-color&quot; value=&quot;#OOOOO&quot;&gt;
</code></pre>
<p>Set your initial input values to match the starting values of your CSS variables. You could also set these through JavaScript on page load to remain DRY.</p>
<h2>Set up Event Listeners</h2>
<p>I’m setting up listeners for the “change” event for color inputs, and the “input” event for range inputs. I’ve extracted the logic to a separate function called <code>handleInputChange</code> so that I can reuse it for all the inputs.</p>
<pre><code class="language-javascript">const handleInputChange = (event, property) =&gt; {
  document.documentElement.style.setProperty(
    `--${property}`,
    event.target.value
  );
};

document.getElementById(&#x27;background-color&#x27;)
  .addEventListener(&#x27;change&#x27;, event =&gt; {
    handleInputChange(&#x27;background-color&#x27;);
  });
</code></pre>
<p>That’s all it takes to set up basic interactive theming with CSS variables. We can go a step further and keep these values in localStorage so the theme settings will persist on refresh.</p>
<h2>Store Values in localStorage</h2>
<p>I’ll edit my <code>handleInputChange</code> function to store values in <code>localStorage</code>:</p>
<pre><code class="language-javascript">const handleInputChange = (event, property) =&gt; {
  document.documentElement.style.setProperty(
    `--${property}`,
    event.target.value
  );

  localStorage.setItem(property, newValue);
};
</code></pre>
<p>Next, I’ll need to add some functionality to grab the values from <code>localStorage</code> and set them on page load. I will need to set both the CSS variable and the input value so that everything is consistent. Once again, I’ve extracted the logic to a separate function.</p>
<pre><code class="language-javascript">const setValueFromLocalStorage = property =&gt; {
  const value = localStorage.getItem(property);
  document.documentElement.style.setProperty(
    `--${property}`,
    value
  );

  const input = document.getElementById(property);
  input.value = value;
}

document.addEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; {
  setValueFromLocalStorage(&#x27;background-color&#x27;);
});
</code></pre>
<p>Now, refresh your page to see a persistent theme!</p>
<h2>Bonus: Pre-Defined Themes</h2>
<p>If you want to offer some pre-defined themes, in addition to the free-form inputs, simply create a method that sets all the variables to pre-defined values and hook it up to an event listener.</p>
<p>I’ve created a <code>setTheme</code> function that accepts an options object, loops through the object keys, and sets the values. I’ve reworked the function that actually sets the values a bit so it’s more generic.</p>
<p>Now, I just need to call this function with the values I want to set on the appropriate trigger:</p>
<pre><code class="language-javascript">setTheme({
  &#x27;background-color&#x27;: &#x27;#FFFFFF&#x27;,
  &#x27;text-color&#x27;: &#x27;#101727&#x27;
});
</code></pre>
<p>CSS variables make live theming easy. Hopefully this gets you started playing around with the fun things that CSS variables make possible. You can learn more about CSS variables in <a href="https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties/" target="_blank" rel="noreferrer">my article here</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Semantic Image Overlays With Object-Fit]]></title>
            <link>https://www.jonathanharrell.com/blog/semantic-image-overlays-with-object-fit</link>
            <guid>https://www.jonathanharrell.com/blog/semantic-image-overlays-with-object-fit</guid>
            <pubDate>Sun, 27 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use CSS grid and the object-fit property to create an image grid with overlays that is semantic and great for SEO.]]></description>
            <content:encoded><![CDATA[<p>Think of how many times you have coded a grid of images with an overlay that appears on hover and displays some sort of text. With the <code>object-fit</code> property getting wider support, there is now a clean, semantic way to do this.</p>

<h2>Without object-fit</h2>
<p>Here’s how I used to accomplish this:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post-teaser&quot;&gt;
  &lt;div
    class=&quot;image&quot;
    style=&quot;background-image: url(...)&quot;
  &gt;&lt;/div&gt;
  &lt;div class=&quot;overlay&quot;&gt;
    &lt;h2&gt;
      &lt;a href=&quot;...&quot;&gt;
        Article Title
      &lt;/a&gt;
    &lt;/h2&gt;
  &lt;/div&gt;
&lt;/article&gt;
</code></pre>
<p>The markup involved an <code>article</code> containing a <code>div</code> with a background image applied, and an overlay <code>div</code> that contained the text that needed to sit on top of the image. I would then absolutely position both the image and the overlay. The size of the <code>div</code> would be determined by a percentage padding trick on the article:</p>
<pre><code class="language-css">.blog-post-teaser {
  position: relative;
  padding: 30% 0;
}

.blog-post-teaser .image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.blog-post-teaser .overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
</code></pre>
<p>The key downside with this approach is that it’s not as semantic as it could be. The image for each article seems like a pretty important piece of content, and the browser doesn’t know that it’s an image. And we can’t feed in <code>alt</code> tags to help with SEO.</p>
<p>How do we improve semantics while retaining control of the image sizing? Enter <code>object-fit</code>.</p>
<h2>With object-fit</h2>
<p>Here’s what my markup looks like now:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post-teaser&quot;&gt;
  &lt;figure&gt;
    &lt;img src=&quot;...&quot; alt=&quot;...&quot;&gt;
    &lt;figcaption&gt;
      &lt;h2&gt;
        &lt;a href=&quot;...&quot;&gt;
          Article Title
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/article&gt;
</code></pre>
<p>Now the browser knows we’re serving up an image. It even knows that the article title is both a heading for the article and a caption for the image. Search engines can now access alt text. Let’s look at the styling:</p>
<pre><code class="language-css">.blog-post-teaser figure {
  position: relative;
  padding: 30% 0;
}

.blog-post-teaser figcaption {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.blog-post-teaser img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
</code></pre>
<p>It’s almost identical, only that now we’re using the <code>img</code> element and applying the <code>object-fit</code> property. This works the exact same way as setting <code>background-size: cover</code>. The image will fill the specified space.</p>
<p>Now the browser knows we’re serving up an image. Search engines can properly access alternative text.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[System-Based Theming with Styled Components]]></title>
            <link>https://www.jonathanharrell.com/blog/system-based-theming-with-styled-components</link>
            <guid>https://www.jonathanharrell.com/blog/system-based-theming-with-styled-components</guid>
            <pubDate>Thu, 09 Apr 2020 20:18:26 GMT</pubDate>
            <description><![CDATA[Learn how to support system-based theming in Styled Components, while allowing a user to select their preferred theme and persist that choice.]]></description>
            <content:encoded><![CDATA[<p>Most operating systems these days support a system-wide light/dark mode toggle, and we may want our web sites and applications to take on a corresponding mode, essentially inheriting their color scheme from the system on which they are being viewed. Let’s take a look at how to implement this, and how it would integrate with a CSS-in-JS theming system such as Styled Components.</p>
<p>Detecting a user’s system theme involves either using the <code>prefers-color-scheme</code> media query in CSS, or checking the media feature in JavaScript. <a href="https://caniuse.com/#search=prefers-color-scheme" target="_blank" rel="noreferrer">Browser support for these features</a> is fairly good.</p>
<h2>Basic System Theming</h2>
<p>Let’s look at a basic implementation where we swap the <code>theme</code> object passed to Styled Component’s <code>ThemeProvider</code> component based on the detected system theme.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
const { ThemeProvider } from &quot;styled-components&quot;;

// set up theme colors
const themes = {
  light: {
    colors: {
      text: &quot;black&quot;,
      background: &quot;white&quot;
    }
  },
  dark: {
    colors: {
      text: &quot;white&quot;,
      background: &quot;black&quot;
    }
  }
};

// set up styled components to use theme colors
const Wrap = styled.div`
  background-color: ${({ theme }) =&gt; theme.colors.background};
`;

const Heading = styled.h1`
  color: ${({ theme }) =&gt; theme.colors.text};
`;

const P = styled.p`
  color: ${({ theme }) =&gt; theme.colors.text};
`;

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(
  &quot;(prefers-color-scheme: dark)&quot;
);

const App = () =&gt; {
  // perform an initial detection of system theme
  const [theme, setTheme] = useState(
    darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );


  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setTheme(event.matches ? &quot;dark&quot; : &quot;light&quot;);
    });
  });

  // pass the correct theme object to the provider
  return (
    &lt;ThemeProvider theme={themes[theme]}&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;P&gt;Change your system theme to see this page respond&lt;/P&gt;
      &lt;/Wrap&gt;
    &lt;/ThemeProvider&gt;
  );
};

export default App;
</code></pre>
<p>This approach is straightforward and feels very natural to Styled Components. However, if our app is server-side rendered but a user has JavaScript disabled, the app will not respond to system theme changes.</p>
<h2>Supporting Disabled JavaScript with CSS Variables</h2>
<p>We can enable our app to respond to the system theme even without JavaScript enabled (in cases where the app is server-side rendered) by taking a slightly different approach. Instead of storing our light and dark theme as separate styled component themes, we will use CSS variables, and override them with a media query.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { createGlobalStyle, ThemeProvider, css } from &quot;styled-components&quot;;

// set up color values that will be used across both light and dark themes
const theme = {
  colors: {
    black: &quot;black&quot;,
    white: &quot;white&quot;
  }
};

// set up light theme CSS variables
const lightValues = css`
  --text: ${({ theme }) =&gt; theme.colors.black};
  --background: ${({ theme }) =&gt; theme.colors.white};
`;

// set up dark theme CSS variables
const darkValues = css`
  --text: ${({ theme }) =&gt; theme.colors.white};
  --background: ${({ theme }) =&gt; theme.colors.black};
`;

const GlobalStyle = createGlobalStyle`
  :root {
    /* define light theme values as the defaults within the root selector */
    ${lightValues}

    /* override with dark theme values within media query */
    @media (prefers-color-scheme: dark) {
      ${darkValues}
    }
  }
`;

// set up styled components to use CSS variables
const Wrap = styled.div`
  background-color: var(--background);
`;

const Heading = styled.h1`
  color: var(--text);
`;

const P = styled.p`
  color: var(--text);
`;

const App = () =&gt; (
  &lt;ThemeProvider theme={theme}&gt;
    &lt;&gt;
      &lt;GlobalStyle /&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;P&gt;Change your system theme to see this page respond&lt;/P&gt;
      &lt;/Wrap&gt;
    &lt;/&gt;
  &lt;/ThemeProvider&gt;
);

export default App;
</code></pre>
<p>Now, when server-side rendered, our theme will change even without JavaScript enabled, since a CSS media query is now controlling the theme values.</p>
<h2>Custom Theme Overrides</h2>
<p>There are some cases where you may want to allow a user to manually change the theme, overriding what the app inherited from the system by default. Let’s look at how we might achieve this using our initial simpler example. We will need to add a theme toggle method that will update our theme state.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { ThemeProvider } from &quot;styled-components&quot;;

// ...set up themes and styled components

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(&quot;(prefers-color-scheme: dark)&quot;);

const App = () =&gt; {
  // perform an initial detection of system theme
  const [activeTheme, setActiveTheme] = useState(
    darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );

  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setActiveTheme(
        event.matches ? &quot;dark&quot; : &quot;light&quot;
      );
    });
  });

  // set up a theme toggle method that will update our state when a user clicks the button
  const toggleTheme = () =&gt; {
    setActiveTheme(
      activeTheme === &quot;dark&quot; ? &quot;light&quot; : &quot;dark&quot;
    )
  }

  // pass the correct theme object to the provider
  return (
    &lt;ThemeProvider theme={themes[activeTheme]}&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;Button onClick={toggleTheme}&gt;
          Change theme to {activeTheme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;}
        &lt;/Button&gt;
      &lt;/Wrap&gt;
    &lt;/ThemeProvider&gt;
  );
};

export default App;
</code></pre>
<h2>Persistent Custom Theme Overrides</h2>
<p>What if we want the user’s custom theme override to be persisted between sessions? We’ll need to bring in some logic to interact with <code>localStorage</code> in order to set and retrieve the user’s preference.</p>
<p>Let’s look at a full example that uses CSS variables, supports custom overrides, and persists those overrides between sessions:</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { createGlobalStyle, ThemeProvider, css } from &quot;styled-components&quot;;

// set up color values that will be used across both light and dark themes
const theme = {
  colors: {
    black: &quot;black&quot;,
    white: &quot;white&quot;
  }
};

// set up light theme CSS variables
const lightValues = css`
  --text: ${({ theme }) =&gt; theme.colors.black};
  --background: ${({ theme }) =&gt; theme.colors.white};
`;

// set up dark theme CSS variables
const darkValues = css`
  --text: ${({ theme }) =&gt; theme.colors.white};
  --background: ${({ theme }) =&gt; theme.colors.black};
`;

const GlobalStyle = createGlobalStyle`
  :root {
    /* define light theme values as the defaults within the root selector */
    ${lightValues}

    /* override with dark theme values if theme data attribute is set to dark */
    [data-theme=&quot;dark&quot;] {
      ${darkValues}
    }

    /* support no JavaScript scenario by using media query */
    &amp;.no-js {
      @media (prefers-color-scheme: dark) {
        ${darkValues}
      }
    }
  }
`;

// set up styled components to use CSS variables
const Wrap = styled.div`background-color: var(--background);`;

const Heading = styled.h1`
  color: var(--text);
`;

const P = styled.p`
  color: var(--text);
`;

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(
  &quot;(prefers-color-scheme: dark)&quot;
);

// find saved theme
const savedTheme = localStorage.getItem(&quot;theme&quot;);

const App = () =&gt; {
  // set active theme to saved theme, if there is one
  // otherwise, set to system theme
  const [activeTheme, setActiveTheme] = useState(
    savedTheme
      ? savedTheme
      : darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );

  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setActiveTheme(
        event.matches ? &quot;dark&quot; : &quot;light&quot;
      );
    });
  }, []);

  // every time the active theme changes, set the theme data attribute
  useEffect(() =&gt; {
    document.body.setAttribute(
      &quot;data-theme&quot;,
      activeTheme
    );
  }, [activeTheme]);

  // set up a theme toggle method that will update our state when a user clicks the button
  // and save the new theme in localStorage
  const toggleTheme = () =&gt; {
    const newTheme = activeTheme === &quot;light&quot;
      ? &quot;dark&quot;
      : &quot;light&quot;;

    setActiveTheme(newTheme);
    localStorage.setItem(&quot;theme&quot;, newTheme);
  };

  return (
    &lt;ThemeProvider theme={theme}&gt;
      &lt;&gt;
        &lt;GlobalStyle /&gt;
        &lt;Wrap&gt;
          &lt;Heading&gt;System Theming&lt;/Heading&gt;
          &lt;Button onClick={toggleTheme}&gt;
            Change theme to {activeTheme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;}
          &lt;/Button&gt;
          &lt;P&gt;Refresh to see the persisted preference&lt;/P&gt;
        &lt;/Wrap&gt;
      &lt;/&gt;
    &lt;/ThemeProvider&gt;
  );
};
</code></pre>
<p>Now, instead of using a media query to override CSS variable values, we use a data attribute set on the document body. This allows theme overrides to work.</p>
<p>Note that we support responding to system theme changes without JavaScript by using a <code>no-js</code> class and falling back to a media query. Of course, this won’t support custom overrides of the theme.</p>
<h2>Preventing the Default Theme Flash</h2>
<p>There is one remaining problem with this implementation when used with server-side rendering. Since we are no longer using a media query, but rather a data attribute to set the theme, we get an initial default themed flash of content, before our app has a chance to actually detect and set the theme. We will need to relocate our theme-setting code to the <code>head</code> of the document, before the HTML has actually rendered.</p>
<p>We can store the theme and the theme toggle method on the window so that our React app will then have access to it. This code looks a bit messier, but it supports all of our use cases and prevents the annoying default themed flash.</p>
<p>In <code>head</code>:</p>
<pre><code class="language-javascript">(function () {
  // set up method to set theme value on window, set data attribute,
  // and dispatch a custom event indicating the theme change
  function setTheme(newTheme) {
    window.__theme = newTheme;
    preferredTheme = newTheme;

    document.body.setAttribute(
      &quot;data-theme&quot;,
      newTheme
    );

    window.dispatchEvent(
      new CustomEvent(&quot;themeChange&quot;, {
        detail: newTheme
      })
    );
  }

  // grab the saved theme
  var preferredTheme = localStorage.getItem(&quot;theme&quot;);

  // set up method to set the active theme to the user’s preferred theme
  // and save that theme for persistence
  window.__setPreferredTheme = function (newTheme) {
    setTheme(newTheme);
    localStorage.setItem(&quot;theme&quot;, newTheme);
  };

  // set up detection of system dark mode
  var darkModeQuery = window.matchMedia(
    &quot;(prefers-color-scheme: dark)&quot;
  );

  // set up a listener to respond to future changes of system theme
  darkModeQuery.addListener(function (event) {
    window.__setPreferredTheme(
      event.matches ? &quot;dark&quot; : &quot;light&quot;
    );
  });

  // set active theme to saved theme, if there is one, or the system theme
  setTheme(
    preferredTheme ||
    (darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;)
  );
})();
</code></pre>
<p>In our app:</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;

// ...set up CSS variables and styled components

const App = () =&gt; {
  const [activeTheme, setActiveTheme] = useState();

  useEffect(() =&gt; {
    // set initial theme based on value set on window
    setActiveTheme(window.__theme);

    // set up listener for custom theme change event
    window.addEventListener(&quot;themeChange&quot;, (event) =&gt; {
      setActiveTheme(event.detail);
    });
  }, []);

  // allow user to manually change their theme
  const toggleTheme = (theme) =&gt; {
    window.__setPreferredTheme(theme);
  };

  // ...render content
});

export default App;
</code></pre>
<h2>Conclusion</h2>
<p>Thanks to improving browser support for the detection of system themes, it has never been easier to implement a theme for your application or website that responds to your users’ operating system themes. With a bit of extra code, you can also enable user-chosen theme overrides. This will go a long way in creating a more customizable and comfortable experience for your users.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Typographic Details - Using Correct Spaces and Punctuation]]></title>
            <link>https://www.jonathanharrell.com/blog/typographic-details-cheat-sheet</link>
            <guid>https://www.jonathanharrell.com/blog/typographic-details-cheat-sheet</guid>
            <pubDate>Sun, 20 Apr 2025 11:57:00 GMT</pubDate>
            <description><![CDATA[Learn how to use the correct spaces, punctuation, and special characters to create precise, elegant web typography.]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>One of the principles of durable typography is always legibility; another is something more than legibility: some earned or unearned interest that gives its living energy to the page. It takes various forms and goes by various names, including serenity, liveliness, laughter, grace and joy.
<cite>Robert Bringhurst</cite></p>
</blockquote>
<p>Welcome to this quick cheat sheet that will you help you know which spaces, punctuation and characters to use to make your web typography great! Much of this content has been adapted from Richard Rutter&#x27;s excellent handbook <a href="https://book.webtypography.net/" target="_blank" rel="noreferrer">Web Typography</a>.</p>
<h2>Use the right spaces</h2>
<h3>Non-breaking space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The text “Page 2” using a non-breaking space between the word and the number. The space is emphasized with a tall red rectangle and spacing marker." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(115.5 132.013889)"><path d="m112.64 41.1461111c0-18.26-11.88-33.21999999-31.02-38.27999999-8.58-2.2-13.86-2.86-29.26-2.86-17.16 0-33-.22-50.6 1.98-1.32 0-1.76 1.98-1.76 3.74.22 1.54.88 3.3 1.76 3.08l11-.22c8.8-.22 10.56 3.73999999 10.56 17.81999999v101.4199999c0 8.36-3.08 9.02-13.42 9.02-3.3 0-6.38.66-6.6 4.84 0 1.1.22 1.98.66 2.86.44.66.88 1.32 3.96 1.32 15.62-.44 44-.44 61.16.22 3.08.66 3.96-8.14.22-9.24-2.86-.66-4.84 0-7.7 0-13.2.22-16.94-1.76-16.94-13.64v-33.6599999c.22-1.98.88-5.06 2.2-4.84 4.18.66 5.72 1.1 11 1.1 34.54 0 54.78-17.16 54.78-44.66zm-23.32-.66c0 22.88-10.34 38.28-33 38.28-3.74 0-5.06-.22-8.58-.88-1.54-.44-3.08-1.76-3.08-3.74v-62.04c0-1.76.44-4.83999999 2.2-5.05999999 9.68-1.32 18.7-1.1 27.5 3.73999999 9.24 4.84 14.96 15.62 14.96 29.7z"></path><path d="m208.78 134.866111c.66-1.76.88-5.06-1.54-5.5-1.1 0-1.32.22-1.98.66-2.2 1.98-3.96 2.86-5.28 3.3-1.32.66-2.42.66-3.96.66-3.08 0-4.84-1.54-4.84-10.78v-40.0399999c0-13.86-.22-15.62-3.74-20.46-5.06-7.26-15.18-12.54-24.64-12.54-7.04 0-12.54 2.42-20.68 9.02-8.58 6.6-13.86 13.2-13.86 18.7 0 4.18 1.32 4.62 5.06 3.3 1.54-.44 11.66-4.84 13.2-6.6-.88-1.98-.66-3.3-.66-5.28 0-5.06 7.92-9.9 12.54-9.9 9.24 0 14.74 7.04 14.96 19.8l.22 14.08c0 2.2-1.76 3.52-2.42 3.96-7.48 3.5199999-12.98 5.9399999-20.9 8.1399999-15.18 3.96-23.32 11.22-23.32 22.44 0 11.66 8.8 19.8 21.34 19.8 8.36 0 12.98-2.2 22.44-10.34.66-.44 2.86-3.08 3.3-1.1 1.32 7.7 5.06 11.44 11.44 11.44 5.5 0 14.3-4.84 23.32-12.76zm-35.42-9.46c-1.76 5.06-12.98 11.66-17.38 11.66-6.82 0-12.1-5.28-12.1-12.1 0-5.94 3.08-9.9 11.88-13.42 5.28-2.2 10.56-4.4 15.62-6.82 1.98-1.1 1.98 3.52 1.98 4.4z"></path><path d="m311.74 160.386111c0-9.46-3.3-16.72-11.22-20.24-10.12-4.62-21.56-4.84-34.76-5.06-27.28-.22-27.28-3.96-27.28-6.16 0-1.98 1.76-3.74 4.18-5.72 1.98-1.76 4.62-3.52 6.16-5.72 3.08.88 5.94 1.32 9.02 1.32 21.34 0 37.18-13.64 37.18-33.4399999 0-4.18-.22-6.6-1.98-11-.22-.66 1.54-1.98 2.2-1.76 4.62.66 12.32 1.54 13.64 1.54 1.76 0 1.98-1.54 2.2-2.86.22-3.74-.22-7.04-.66-10.78-.22-3.3-1.1-3.52-4.18-3.08-5.72.88-18.7 2.42-20.02 2.42h-1.76c-5.72-6.16-13.86-9.24-23.32-9.24-20.68 0-36.96 15.84-36.96 36.74 0 12.32 6.38 21.7799999 17.38 27.2799999 1.1.66-2.2 2.42-2.64 2.86-2.2 1.1-3.3 1.98-6.82 3.96-4.84 2.64-9.24 5.5-9.24 9.46 0 6.16 3.52 12.1 15.4 16.28 1.1.44.22 2.64-1.1 3.74-1.76 1.1-3.52 1.98-5.28 3.3-7.92 5.28-13.42 10.78-13.42 21.56 0 15.18 20.68 24.2 35.42 24.2 31.46 0 57.86-17.16 57.86-39.6zm-33-73.6999999c0 15.6199999-7.7 24.4199999-18.48 24.4199999-11 0-19.8-10.56-19.8-28.5999999 0-14.08 7.7-24.64 18.04-24.64 11.44 0 20.24 11.88 20.24 28.82zm20.02 79.6399999c0 11.22-18.7 22.44-32.78 22.44-16.06 0-31.68-7.48-31.46-18.92 0-5.72 7.48-12.98 11.44-16.94 1.32-1.32 2.42-2.42 2.86-3.3 9.68.44 15.84 0 25.52.66 18.7 1.54 24.42 6.16 24.42 16.06z"></path><path d="m407.66 84.2661111c.22-1.54.22-2.2-.22-3.52-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.9399999 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.1599999 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.7c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m563.42 111.986111c.22-1.32-1.1-1.98-2.42-2.2s-2.86 0-3.74.88c-2.42 6.38-4.62 10.78-6.38 13.86-2.42 4.4-3.96 4.84-9.46 5.06-12.1.44-24.2.22-36.08.22-.88 0-1.76-.44-1.98-.88-.44-.66-.44-1.1 0-1.54 17.82-12.54 47.74-33.8799999 47.74-56.7599999 0-14.52-13.64-25.74-30.36-25.74-14.74 0-25.52 5.94-38.94 21.12-1.76 3.74 3.96 4.84 4.84 3.96 9.68-8.8 16.94-12.1 25.52-12.1 12.54 0 21.56 8.8 21.56 21.34 0 9.24-5.06 17.6-18.7 29.6999999-11.22 9.9-21.78 18.04-40.26 30.8-.88 1.1-1.32 5.28.44 6.16h72.82 1.98c2.2 0 5.28-.44 5.94-3.08z"></path></g><g fill="#e6594c"><path d="m524 133h64v145h-64z" fill-opacity="0.25"></path><path d="m524 316h-1v-9h1v4h64v-4h1v9h-1v-4h-64z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a non-breaking space to keep words together on the same line. This prevents awkward line breaks between closely related elements, such as labels and numbers.</p>
<pre><code class="language-html">Page&amp;nbsp;2.
</code></pre>
<h3>Thin space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The word “you” followed by a closing single and double quotation mark, with a thin space placed between them, highlighted in red." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(133.862966 132.32)"><path d="m102.857034 62.48c-.44-2.42-2.42-1.98-4.18-1.98-6.82-.44-23.76-.22-31.68.22-.66 0-1.32-.22-1.76 0-2.86.22-1.98 5.72-.66 6.38 11.22.22 13.42 2.42 13.42 7.92 0 2.2-.88 5.72-1.98 9.02-1.1 3.52-2.42 6.82-3.3 9.02l-13.2 33.66c-.22.66-2.86 4.4-3.52 2.86-6.6-16.5-12.98-33.22-20.24-49.28-1.98-4.4-2.42-6.16-2.42-7.7 0-3.3 1.54-5.28 11.44-5.5 1.1-.22 1.76-3.3 1.32-5.28-.66-2.2-2.42-1.76-4.18-1.76-10.56.22-28.16 1.1-37.40000002.44-1.98-.22-3.74-.44-4.4 1.98-.44 1.76.44 4.4 1.32 4.62 10.34000002.88 11.44000002 1.54 19.58000002 20.9l27.94 66.44-3.08 10.12c-5.5 17.82-11 24.42-19.8 26.84-7.04 1.76-11 4.4-11 9.46 0 5.28 4.84 9.9 10.34 9.9 3.74 0 7.7-1.54 10.12-4.62 3.08-3.74 5.5-7.7 7.92-13.42 2.64-5.94 5.28-13.2 9.24-23.54l27.28-73.48c9.02-23.98 12.76-27.5 21.56-28.6.88 0 1.76-2.86 1.32-4.62z"></path><path d="m210.657034 107.36c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z"></path><path d="m329.017034 145.86c2.64-.44 2.42-7.48-.22-7.04-1.32.44-3.08.88-4.62 1.32-4.4 1.1-9.46 1.98-9.46-4.84v-6.82-69.96c0-2.86-1.98-3.74-4.4-3.52-7.92.88-22.44 3.96-31.46 5.94-1.76.44-2.2 4.62-.44 5.72 4.4.66 6.16.88 7.26 1.1 1.32.44 1.98.22 4.84.88 3.74.66 5.72 3.52 6.6 7.04.88 4.18.66 8.58.66 12.98v38.06c0 1.76-.88 3.96-.88 4.18-8.58 6.82-17.82 11-24.64 11-14.74 0-19.36-5.94-19.36-29.7v-52.8c0-1.76-.88-4.62-3.52-4.18-7.7 1.54-20.68 5.06-27.5 6.6-2.64.66-1.1 5.28 0 5.5 2.86.88 5.94 1.54 8.8 2.42 4.4 1.32 4.84 3.74 4.84 8.14v46.64c0 18.7 7.7 30.36 24.86 30.36 13.64 0 24.86-8.36 35.42-16.06.88-.88 1.54 2.64 1.54 3.3l.44 8.58c.22 4.18 2.86 3.74 6.16 3.08 7.48-1.54 18.48-5.06 25.08-7.92z"></path><path d="m378.737034 19.36c0-11.22-7.04-19.36-16.72-19.36-7.04 0-12.76 5.28-12.76 12.32 0 6.38 4.4 11.22 10.56 11.22 1.76 0 3.3-.44 4.84-.88 2.2-.44 2.42 1.76 2.42 3.52 0 7.04-5.5 14.52-16.5 20.9-1.98 1.32-1.32 3.96 0 5.5 1.1 1.32 3.52.44 4.84-.22 13.86-6.6 23.32-19.8 23.32-33z"></path><path d="m520.452268 19.36c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22 1.32 0 2.64-.44 4.18-.66.22-.22.66-.22 1.1-.22 1.32-.22 2.2.44 2.2 3.52 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.54 3.96-.22 5.5 1.1 1.54 3.52.66 5.06 0 14.3-6.6 23.98-20.02 23.98-33.22zm-49.5 0c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22.88 0 1.98-.22 3.08-.44.66-.22 1.76-.66 2.64-.66.66 0 1.76.88 1.76 3.74 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.32 3.52-.22 5.06 1.32 1.76 4.18.66 4.84.44 14.3-6.6 24.2-20.02 24.2-33.22z"></path></g><g fill="#e6594c"><path d="m513 132h61v154h-61z" fill-opacity="0.25"></path><path d="m514 324h-1v-9h1v4h61v-4h1v9h-1v-4h-61z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a thin space to separate characters when a regular space is too big. This maintains typographic rhythm by creating subtle breathing room but avoiding excessive spacing.</p>
<pre><code class="language-html">Looking up he said, “She mouthed ‘I love you’&amp;thinsp;” and then returned to his book.
</code></pre>
<h3>Hair space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The initials “D. H. L.” spaced with thin hair spaces between each letter and period. Each space is marked with a dark vertical bar and a red spacing indicator." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(116 140)"><path d="m155.976399 68.86c0-22-9.24-40.7-26.62-53.24-15.62-11.22-32.5600004-15.62-61.3800004-15.62-21.78 0-42.9.88-64.68000004 1.76l-1.54.44c-1.76.22-2.86 6.82 0 6.82h1.98c18.70000004 0 18.92000004 4.18 18.92000004 22.66v83.82c0 9.68 1.1 20.46-11.88 21.56-2.86000004.22-5.28000004 0-8.14000004.44-2.86.88-2.64 4.4-1.76 6.38.66 1.98 3.3 1.98 4.84 1.98l52.80000004-.22c16.5 0 27.28 0 43.3400004-4.62 31.9-9.24 54.12-39.16 54.12-72.16zm-23.76 3.52c0 46.86-29.7 66-71.0600004 66-14.74 0-17.16-5.5-17.16-15.84v-109.78c0-3.08 2.42-4.84 4.84-5.06 9.68-.44 15.62-.44 25.3.44 17.38 1.76 25.74 4.84 35.4200004 12.32 14.08 10.78 22.66 30.14 22.66 51.92z"></path><path d="m187.896399 136.18c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m376.617727 139.48c-.66-1.76-3.3-1.76-4.84-1.76-12.98 0-16.72-4.18-16.72-14.52 0-21.34-.88-65.56 0-99 .22-10.56 3.74-14.08 14.52-14.96.88 0 2.64 0 3.08-1.1 1.1-2.2.44-6.38-2.86-6.16-13.2.44-39.16-1.1-55.22-.66-3.08 0-3.52 1.1-3.96 1.98-.66 1.98-.66 5.28 1.54 5.72h4.4c13.42 0 16.94 4.84 16.94 15.18 0 13.2.22 26.62 0 40.04 0 1.98-4.84 3.52-6.6 3.52-24.42.44-49.94.44-67.98 0-2.86 0-3.96-2.2-3.96-3.3v-40.26c0-10.56 3.74-15.18 16.72-15.18 1.76-.22 2.42-.22 2.64-1.32.44-1.76.88-3.74-.22-4.84-.66-.44-1.32-.88-2.2-.88-12.54.66-38.72.66-53.02 0-2.2-.22-2.2 6.16-.44 7.04 11.22.66 14.96 3.3 14.96 15.18v99c0 10.78-3.3 13.86-13.42 14.52-1.98 0-3.3-.22-5.5.22-1.98 1.32-1.76 4.18-1.1 6.16.66 1.54 2.2 1.54 3.52 1.54 13.86 0 41.8-.44 55.88 0 4.4-.66 3.08-8.36 0-7.92h-1.1-1.1c-12.1 0-15.62-2.86-15.62-14.52v-39.6c0-3.52 2.86-5.5 3.96-5.5 20.46.66 48.84.88 70.4 0 2.42 0 3.96 1.76 4.18 3.96v41.14c0 11.22-5.28 14.74-16.94 14.74h-5.28c-2.42 0-3.52 3.08-2.64 5.72.22 1.32 1.1 1.98 2.86 1.98 29.7 0 47.08-.44 62.48 0 2.64 0 3.74-3.74 2.64-6.16z"></path><path d="m421.497727 136.18c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m567.099055 112.42c.22-.44.44-1.98-.88-2.64-1.1-.88-2.86-.66-4.62 0l-7.7 10.12c-10.78 14.3-14.3 14.74-30.8 14.74h-20.68c-9.02 0-12.54-2.64-12.54-11.88v-100.76c0-11.44.88-11.66 17.38-12.1 2.42 0 4.84-.22 7.04-.44 3.08-.22 3.74-2.64 2.86-5.94-.44-1.76-1.76-1.98-3.08-1.98-25.52.44-40.92.66-62.92.22-.88-.22-2.64-.22-3.3 1.1-1.1 1.54-1.1 5.94 1.1 6.16h2.64c12.98 0 16.94 3.3 16.94 15.18v90.42c0 9.02-.22 13.2-.44 15.62-1.54 7.7-12.76 7.26-18.48 7.26-.66.22-1.1.22-1.76.44-1.76.66-2.2 4.18-1.54 5.72.22 1.1 1.54 2.2 3.08 1.98 6.6-.22 56.76-.44 96.8.22 3.52 0 5.28-1.98 6.82-4.18 2.86-4.62 8.8-16.72 14.08-29.26z"></path></g><g fill="#e6594c"><path d="m304.356399 141.98h23v92.046749 51.953251h-23z" fill-opacity="0.25"></path><path d="m538.356399 141.98h23v144h-23z" fill-opacity="0.25"></path><path d="m305.356399 323.98h-1v-9h1l-.000399 3.999h22l.000399-3.999h1v9h-1l-.000399-4.001h-22z" fill-rule="nonzero"></path><path d="m539.356399 323.98h-1v-9h1l-.000399 3.999h22l.000399-3.999h1v9h-1l-.000399-4.001h-22z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a hair space to prevent adjacent characters touching. This adds just enough separation to avoid visual collisions between initials without disrupting flow.</p>
<pre><code class="language-html">D.&amp;hairsp;H.&amp;hairsp;Lawrence.
</code></pre>
<h3>Narrow no-break space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The expression “1⁄2 em” with a narrow no-break space between the number and the unit, highlighted by a vertical block and measurement bar beneath it." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(116 136.06)"><path d="m61.7785054 141.02c-2.42-.44-4.62 0-7.04-.22-2.64-.22-4.62-.22-6.16-.66-1.76-.22-2.86-.44-3.74-1.1-1.54-1.32-1.76-3.96-1.76-9.02v-77.44c0-2.86-8.58-1.54-9.46-.88-5.72 7.92-15.84 16.72-23.75999997 22.22-3.3 2.2-5.5 3.52-9.46 6.16-1.32 1.1.88 6.82 3.08 5.72 4.4-2.2 7.91999997-3.52 12.53999997-5.94 3.08-1.54 5.94-3.08 8.8-5.28.66-.44 1.1 0 1.32 1.32.22 1.1.22 2.64.44 3.74v51.04c0 5.28-1.76 7.7-4.62 9.02-1.32.66-3.08.88-4.84.88-1.98.44-4.18.22-6.38.22-.87999997-.22-2.63999997-.22-3.95999997.44-2.42 1.32-1.98 9.02.66 8.58 13.63999997-.44 36.29999997-.22 54.11999997 0 2.86 0 2.64-8.14.22-8.8z"></path><path d="m172.438505 6.38c2.42-3.52.66-5.94-.88-5.94l-11-.44c-1.76 0-3.08 2.42-3.74 3.52-25.3 48.62-49.28 95.7-74.5799996 144.32-3.74 7.26 8.8 5.5 11.22 5.72 2.64.22 3.74-1.98 4.84-4.18z"></path><path d="m255.398505 115.94c.22-1.32-1.1-1.98-2.42-2.2s-2.86 0-3.74.88c-2.42 6.38-4.62 10.78-6.38 13.86-2.42 4.4-3.96 4.84-9.46 5.06-12.1.44-24.2.22-36.08.22-.88 0-1.76-.44-1.98-.88-.44-.66-.44-1.1 0-1.54 17.82-12.54 47.74-33.88 47.74-56.76 0-14.52-13.64-25.74-30.36-25.74-14.74 0-25.52 5.94-38.94 21.12-1.76 3.74 3.96 4.84 4.84 3.96 9.68-8.8 16.94-12.1 25.52-12.1 12.54 0 21.56 8.8 21.56 21.34 0 9.24-5.06 17.6-18.7 29.7-11.22 9.9-21.78 18.04-40.26 30.8-.88 1.1-1.32 5.28.44 6.16h72.82 1.98c2.2 0 5.28-.44 5.94-3.08z"></path><path d="m385.89374 88.22c.22-1.54.22-2.2-.22-3.52-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.94 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.16 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.7c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m567.61374 146.3c.22-1.54.22-3.74-.88-4.18-.88-.66-3.08-.66-4.18-.44-12.76 0-14.74-1.32-14.74-8.36 0-11.66.88-23.1.88-34.76 0-17.82-.44-24.2-3.3-30.8-3.52-8.14-11-13.2-20.24-13.2-12.98 0-24.86 8.8-35.2 16.06-1.1.88-2.2.88-2.42 0-3.08-9.9-11-16.06-21.12-16.06-12.54 0-24.86 8.14-34.54 14.96-1.1.88-2.64 1.54-2.86-.22v-12.98c0-2.42-.44-4.62-3.3-3.96-10.12 2.64-22.66 6.6-28.82 9.46-1.1.44-1.76 5.72 0 5.94l5.06.66c6.16.88 8.14 1.76 9.02 3.52.66.88.66 4.84.66 16.5v31.46c0 18.92-1.98 21.78-11.66 22.22-1.54 0-4.18 0-4.84 1.54-.44 1.1-.66 3.3-.22 4.4.44 1.32 1.32 1.54 1.98 1.54 12.76-.44 35.64-.44 46.64 0 .88.22 1.98-1.54 2.2-3.08 0-1.76-.66-3.74-1.54-3.96-.22-.22-1.1-.22-1.98 0-11.22 0-13.2-1.98-13.2-13.2v-50.82c7.48-5.06 18.26-12.76 27.72-12.76 9.02 0 14.74 6.6 14.74 18.26v35.86c0 20.02-1.76 22.44-13.2 22.44-.88 0-2.2-.22-2.86.22-2.64 1.1-2.2 6.82.44 6.82 12.1-.22 34.76 0 45.76.22 1.1 0 2.2-1.98 2.2-3.74-.22-2.64-.66-3.3-3.08-3.3-9.68 0-12.1-2.42-12.1-13.2v-50.82c11.22-7.7 20.46-12.76 26.84-12.76 11.66 0 15.62 6.6 15.62 34.54 0 13.2-.44 21.78-1.1 30.8-.88 9.24-3.08 11.44-12.54 11.44h-2.2c-2.64 0-2.2 4.18-1.54 5.72s1.54 1.32 2.86 1.32c14.96-.22 33.66-.66 48.84 0 1.1.22 2.2-1.54 2.2-3.3z"></path></g><g fill="#e6594c"><path d="m372.518505 136h45v150h-45z" fill-opacity="0.25"></path><path d="m373.518505 324h-1v-9h1l-.000505 4h44l.000505-4h1v9h-1l-.000505-4h-44z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a narrow no-break space to prevent initials or numbers and their units from wrapping across two lines.</p>
<pre><code class="language-html">A hair space is 1/24&amp;#8239;em wide.
</code></pre>
<h2>Use the right punctuation marks</h2>
<h3>Hyphen</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The word “op–ed” shown with a hyphen between “op” and “ed” to illustrate compound word formation." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(143.5 115.212983)"><path d="m99.66 116.467017c.22-27.9399999-21.78-49.2799999-50.16-49.2799999-28.16 0-49.5 20.9-49.5 49.0599999 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.7999999 11.88-34.0999999 27.28-34.0999999 18.04 0 33.66 21.12 33.66 46.6399999z"></path><path d="m209.66 112.287017c0-23.0999999-15.62-43.7799999-34.32-43.7799999-8.58 0-16.94 3.96-31.24 14.08-1.76 1.32-2.2-3.08-2.2-3.96v-13.64c0-3.52-2.42-3.96-5.94-1.76l-24.2 15.18c-.44.44-.88.66-1.32 1.54-.66.88-1.1 4.18.88 4.62 2.64.66 5.06 1.76 7.7 2.42 5.06 1.32 5.72 1.98 5.72 7.48v5.28 91.0799999c0 21.34-1.76 24.64-14.08 24.64h-1.98c-2.42 0-2.64 4.4-1.54 6.38.66 1.32 2.2 1.1 3.52 1.1 9.24.44 34.1-.66 49.5 0 .88 0 2.42-.44 2.86-1.32.66-1.1.66-3.52.22-5.06-.44-1.1-2.2-1.76-3.96-1.76h-3.08c-12.32 0-14.3-2.64-14.3-23.98v-26.18c0-4.18 1.1-3.96 2.64-3.52 6.38 1.98 11.22 3.08 16.5 3.08 26.18 0 48.62-24.2 48.62-51.92zm-17.16 8.58c0 19.8-10.78 34.1-25.3 34.1-8.14 0-17.38-4.4-25.3-11.88v-47.9599999c0-1.98.88-3.52 1.32-3.96 7.48-5.94 14.74-9.46 21.12-9.46 15.84 0 28.16 16.72 28.16 39.1599999z"></path><path d="m302.94 106.347017c0-1.54-1.54-3.52-3.08-3.52-23.1-.66-53.68.44-70.18 0-1.54 0-4.18 1.1-4.18 3.74v8.8c.22.88.66 2.64 2.2 2.64 26.84.44 36.74-.88 71.06 0 1.32-.22 3.3-1.1 3.74-3.08z"></path><path d="m400.4 101.067017c.22-1.5399999.22-2.1999999-.22-3.5199999-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.9399999 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.16 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.6999999c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m515.24 148.147017c-.88-2.86-4.18-1.32-6.16-.88-1.32.44-3.52 1.32-4.84 1.32-4.62 0-5.94-.22-5.94-12.54v-131.77999986c0-3.08-1.1-5.06-3.74-3.96-8.8 3.3-20.02 7.04-27.72 9.46-1.32.22-1.98.87999996-2.2 1.97999996s0 1.98.22 3.08c.22 1.54 1.1 1.32 2.42 1.54 3.52.44 9.02 0 11.88 1.76 1.54.88 1.32 2.2 1.76 3.52.22 11.22.66 27.94 0 44.22 0 3.08-1.32 5.72-2.42 5.5-5.94-1.98-12.76-3.52-18.26-3.52-28.16 0-49.5 22.66-49.5 51.9199999 0 24.86 16.06 45.32 36.74 45.32 8.58 0 17.6-4.4 31.02-13.64 1.54-1.1 2.42 1.76 2.42 3.3s-1.54 11.44 3.96 9.46c7.7-1.98 22.44-7.48 29.7-11 1.1-.44 1.32-3.08.66-5.06zm-34.54-9.68c-.22 2.42-1.32 4.62-2.2 5.06-8.8 5.94-16.94 9.02-22.88 9.02-15.4 0-27.28-16.94-27.28-39.6 0-21.5599999 10.78-36.2999999 27.06-36.2999999 9.9 0 17.16 5.06 25.3 16.72z"></path></g><path d="m371 340h-1v-9h1v4h74v-4h1v9h-1v-4h-74z" fill="#e6594c"></path></g></svg></figure></p>
<p>Use a hyphen for one of the following:</p>
<ul>
<li>joining words to indicate they have a combined meaning</li>
<li>indicating missing words shared by a series of compounds</li>
<li>indicating stuttering speech</li>
<li>splitting words when breaking them across lines</li>
</ul>
<p><em>Example:</em> She wore a well-tailored jacket.</p>
<h3>Figure dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The numbers 55 and 12 separated by a figure dash, illustrating the precise punctuation used for numeric identifiers." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><path d="m371.690859 321.8h-1v-9h1l-.000859 4h54l.000859-4h1v9h-1l-.000859-4h-54z" fill="#e6594c"></path><g fill="#f5f5f5" transform="translate(160 142)"><path d="m80.74 95.92c0-25.3-18.48-45.1-43.56-45.1-6.16 0-9.9.66-14.74 2.42-1.76.88-3.52.22-3.3-1.76l1.54-27.5c.66-2.42 3.08-3.52 4.62-3.96l37.84.66c5.5-.44 6.38-1.54 7.48-4.18l1.76-12.32c.44-2.42-.22-3.3-1.54-4.18h-2.42c-.88 0-2.2.44-2.86 1.32-2.2 2.64-5.72 1.98-11.66 1.98l-31.46-.44c-3.3 0-9.46.66-9.9 5.28l-4.62 62.04c-.22 3.08 0 3.74 1.98 5.06 1.54 1.1 3.3-.22 4.4-.88 6.16-4.18 12.32-5.94 18.92-5.94 17.38 0 28.16 13.2 28.16 32.56s-10.78 35.2-25.52 35.2c-3.52 0-5.5-.66-8.36-3.08-5.06-4.4-11.44-12.1-18.7-12.1-4.84 0-8.8 3.96-8.8 8.8 0 9.24 13.86 14.96 31.02 14.96 29.26 0 49.72-21.56 49.72-48.84z"></path><path d="m188.32 95.92c0-25.3-18.48-45.1-43.56-45.1-6.16 0-9.9.66-14.74 2.42-1.76.88-3.52.22-3.3-1.76l1.54-27.5c.66-2.42 3.08-3.52 4.62-3.96l37.84.66c5.5-.44 6.38-1.54 7.48-4.18l1.76-12.32c.44-2.42-.22-3.3-1.54-4.18h-2.42c-.88 0-2.2.44-2.86 1.32-2.2 2.64-5.72 1.98-11.66 1.98l-31.46-.44c-3.3 0-9.46.66-9.9 5.28l-4.62 62.04c-.22 3.08 0 3.74 1.98 5.06 1.54 1.1 3.3-.22 4.4-.88 6.16-4.18 12.32-5.94 18.92-5.94 17.38 0 28.16 13.2 28.16 32.56s-10.78 35.2-25.52 35.2c-3.52 0-5.5-.66-8.36-3.08-5.06-4.4-11.44-12.1-18.7-12.1-4.84 0-8.8 3.96-8.8 8.8 0 9.24 13.86 14.96 31.02 14.96 29.26 0 49.72-21.56 49.72-48.84z"></path><path d="m212.190859 69.5792969h53.925782v19.8730469h-53.925782z"></path><path d="m361.241719 136.84c-.44-2.64-1.54-4.4-3.74-4.4-1.98.22-5.72 0-8.8 0-6.82-.22-7.48-3.08-7.48-8.14v-2.64l-.22-117.26c-.22-1.98-2.2-4.4-4.62-4.4h-2.64c-1.98.44-4.18 2.42-4.84 3.52-1.98 2.42-3.96 4.62-10.34 10.34-8.58 8.14-14.74 12.98-22.22 18.26-.66.44-.88 1.54-.88 2.64l1.1 1.98c1.1 1.1 2.64 1.32 3.52.88 6.38-3.08 13.42-7.04 19.36-11.44 1.54-1.1 3.96.88 4.4 3.3l-.22 93.06c0 5.28-.22 9.46-6.6 9.68-1.98.88-4.84.22-8.14.22-2.64 0-4.18 1.54-5.28 3.74-.22 1.1 0 2.64.22 3.96.66 1.32 2.64 1.54 3.96 1.32 13.86-.44 36.08-.66 49.28.22 4.84.44 4.18-3.96 4.18-4.84z"></path><path d="m481.581719 111.98c0-2.64-.44-3.3-1.76-3.3l-1.1-.44c-1.98.44-3.52 2.42-3.74 3.52-2.42 12.32-7.48 14.08-23.32 13.2-6.6-.44-21.34-.44-29.7 0-7.04-.66-6.38-3.08-5.06-4.4 16.06-16.72 33-31.46 47.3-49.94 7.04-9.02 13.42-18.26 13.42-30.58 0-22.88-13.2-40.04-36.96-40.04-23.54 0-41.36 16.5-45.1 42.24-.22 1.1 0 2.86 2.42 2.86 1.54 0 3.74-.66 4.4-2.64 5.5-16.72 18.26-26.84 31.9-26.84 15.18 0 22.88 11.66 22.88 27.5 0 27.28-18.7 43.78-35.86 61.38-13.2 13.64-21.12 22.44-26.62 28.82-.44.88-2.64 2.64-2.42 4.4l.22 1.76c.88 1.54 4.18 2.2 5.94 2.2 29.04-1.76 55.44 0 72.38 0 3.08 0 6.82-1.76 7.48-4.18.88-5.72 3.52-18.7 3.3-25.52z"></path></g></g></svg></figure></p>
<p>A figure dash has the same width as a numerical digit and is used within numbers to maintain alignment.</p>
<p><em>Example:</em> (800‒555‒1212)</p>
<h3>En dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The numbers 4 and 5 separated by an en dash, demonstrating correct punctuation for numeric ranges." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(233.717354 176.426063)"><path d="m94.8226464 97.9339375c0-1.76 0-7.04-.22-8.36-.66-2.86-2.64-1.98-4.62-2.42l-18.04.44c-1.98-.88-2.64-1.54-3.08-3.74v-81.62000004c0-1.32-1.1-1.76-2.2-2.2-1.76-.22-3.74.66-4.62 1.76l-61.37999999 92.84000004c-1.32 1.98-.44 5.7199995.66 5.9399995 11.87999999.44 35.41999999.66 47.29999999 0 1.98-.22 1.98 2.64 2.2 4.18-.66 9.68-.22 22 .22 31.24 0 1.1 1.32 3.96 3.08 3.74h11.22c3.08 0 3.52-2.2 3.52-4.18.22-7.04.44-20.9 0-32.12 0-1.1 2.2-2.86 3.08-2.86l19.14.22c.66.22 3.74-1.0999995 3.74-2.8599995zm-43.78-12.54c-1.76 2.42-1.1 1.98-4.18 2.2-8.36.22-21.56.22-28.82 0-1.32 0-1.98-1.76-1.1-3.3l32.56-49.94c1.1-1.76 1.76 2.2 1.54 2.86-.66 14.3-.22 35.86 0 48.18z"></path><path d="m232.562646 51.9539375v-8.14c0-1.1-1.32-2.86-3.08-2.86-23.98-.44-78.1-1.1-111.98 0-1.1.22-2.42 1.32-2.64 2.42l-.22 7.7c0 1.32 1.32 2.86 2.2 2.86 38.28-.44 65.56-.44 112.2 0 1.98 0 3.3-.44 3.52-1.98z"></path><path d="m323.642646 7.29393746c.22-1.76.44-3.3-3.74-3.74l-25.08-2.86c-1.54-.22-1.98 0-3.08 1.32-8.58 9.24000004-23.98 28.60000004-31.24 38.72000004-.44.66-1.98 3.08 0 4.4 18.7 11.66 44.66 29.7 44.66 53.46 0 15.8399995-11 29.0399995-23.1 29.0399995-2.86 0-6.82-1.1-16.28-4.4-2.2-.88-4.18-1.32-5.72-1.32-4.4 0-7.92 3.96-7.92 8.58 0 5.72 4.84 9.02 11.66 9.02 11.22 0 23.76-3.96 34.32-10.78 14.3-9.24 22.22-22.44 22.22-37.1799995 0-13.42-7.26-27.94-20.02-40.04-7.26-6.82-9.68-9.24-20.68-16.06-3.74-2.2-2.42-3.08-.22-5.94l8.58-10.56c1.32-1.76 1.98-1.76 3.96-1.54l20.68 2.64c1.76 0 2.42-.22 3.74-1.54 1.1-1.1 6.6-8.36 7.26-11.22000004z"></path></g><path d="m349 340h-1v-9h1v4h116v-4h1v9h-1v-4h-116z" fill="#e6594c"></path></g></svg></figure></p>
<p>An en dash indicates range with spacing that visually balances the digits it connects.</p>
<p><em>Example:</em> 4–5 minutes.</p>
<h3>Em dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The phrase “I—no” with an em dash between words, highlighting punctuation for interruptions or emphasis." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(165.44 133.7712)"><path d="m58.3 2.4288c-.22-2.2-1.54-2.42-3.52-2.42-26.84 1.32-32.56 0-50.6 0-1.54 0-2.42-.22-3.08 1.54-1.32 4.18.66 5.28 2.42 5.5 11.88 1.32 13.64 3.96 13.86 15.4l.22 7.7v83.6l-.22 7.7c-.44 11.88-1.54 13.64-15.4 14.96-1.1 0-1.98 2.42-1.98 4.18 0 2.2 1.32 3.3 2.64 3.3 13.86-.44 40.7-.44 54.56 0 1.76 0 3.08-5.94.22-7.7-.88-.22-1.98-.22-3.3-.22-11.88-.22-15.18-3.08-15.18-14.52v-91.3c0-20.24 1.76-22.44 15.18-22.66 1.1 0 2.2-.44 3.08-.44 1.32 0 1.32-2.86 1.1-4.62z"></path><path d="m236.28 88.2288c-.22-1.32-2.2-1.98-3.74-2.42-34.32-.66-104.06-.66-141.02 0-3.74 0-4.84 2.86-4.84 4.18-.22 3.08.44 3.96.44 6.16-.22 2.2 1.98 3.08 3.52 2.86 36.08-.66 95.48-.66 142.12 0 1.54.22 2.64-1.54 3.08-2.42.22-3.74 1.54-5.06.44-8.36z"></path><path d="m366.74 141.6888c.44-1.54.22-3.52-.44-4.62-.88-1.1-2.42-1.32-3.52-.66-10.34 0-11-1.54-11-7.92 0-13.42 1.76-26.62 1.76-39.82 0-16.06-2.42-39.6-24.42-39.6-4.62 0-9.46 1.54-15.4 4.4-7.04 3.52-11.66 6.6-18.26 11.22-1.32.88-2.42-2.2-2.42-2.64v-12.1c0-2.64-1.54-4.62-5.06-3.74-8.14 1.76-18.92 8.36-25.96 9.46-1.54.66-1.54 5.72 0 5.94l4.4.88c6.82 1.32 7.92 1.98 8.58 3.52.66 1.32.88 5.06.88 17.82v30.14c0 19.8-2.42 22.88-12.54 22.88h-1.32c-2.2 0-2.42 3.74-1.76 5.72.44 1.1 2.2 1.1 3.08 1.1 11.66.66 30.8-.22 42.02.22 2.42-.22 3.08-1.1 3.08-3.74-.22-1.54-.88-3.74-1.98-3.74-11 0-13.42-1.32-13.42-12.76v-49.72c9.68-7.48 20.9-12.98 27.06-12.98 10.56 0 16.06 7.48 16.06 24.42 0 12.98 0 25.96-1.32 38.72-.88 9.02-3.74 11.44-13.42 12.32h-1.54c-1.32 0-1.76 2.2-1.76 3.74.22 2.86.66 3.52 3.52 3.52 11.44-.44 30.8.22 41.8 0 2.42 0 2.86.22 3.3-1.98z"></path><path d="m475.2 97.9088c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z"></path></g><path d="m254 340h-1v-9h1v4h146v-4h1v9h-1v-4h-146z" fill="#e6594c"></path></g></svg></figure></p>
<p>Use an em dash to set off phrases. Separate em dashes from phrases with hair spaces. You can also use to indicate attribution after a quote, followed by a full space.</p>
<p><em>Example:</em> this and that — that and this.</p>
<h3>Minus symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two horizontal dashes side by side: a shorter hyphen labeled with a red “X,” and a longer minus sign labeled with a green checkmark." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m77.44 3.73671287c0-1.54-1.54-3.52-3.08-3.52-23.1-.66-53.68.44-70.18 0-1.54 0-4.18 1.1-4.18 3.74v8.80000003c.22.88.66 2.64 2.2 2.64 26.84.44 36.74-.88 71.06 0 1.32-.22 3.3-1.1 3.74-3.08z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(184.68 179.823287)"></path><g transform="translate(195 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".121094" y="53">hyphen</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(17)"></path></g><path d="m122.98 9.26067903v-4.84c0-3.08-.44-4.62-4.4-4.4-7.26.66-75.68.88-114.18 0-3.52 0-4.4.66-4.4 4.18v5.72c0 4.61999997 3.08 4.61999997 7.48 4.61999997 34.54-.66 80.08-.66 109.56.22 2.86 0 4.4-.22 5.06-1.1.44-.44.66-.88.66-1.76.22-.66.22-1.54.22-2.63999997z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(486.62 168.139321)"></path><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="492.132812" y="355">minus symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(530 296)"></path></g></svg></figure></p>
<p>The minus symbol is longer and sits at the mathematical midpoint—unlike the shorter hyphen.</p>
<h3>Multiplication symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The lowercase letter “x” on the left labeled as incorrect, contrasted with a typographic multiplication symbol on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m110.88 89.6441365c0-1.54-.66-3.3-1.76-3.96-9.46-.66-13.64-2.86-19.8-10.78-8.8-11.22-3.74-4.84-26.62-34.1l10.34-11.88 8.36-9.24c9.24-10.34 12.32-12.32 25.52-13.2 1.54 0 2.64.44 3.3-1.32.44-1.1.22-2.86-.22-3.96-.66-1.1-1.32-1.32-2.64-1.1-9.02.44-25.08.22-41.8 0-1.1-.22-2.42-.22-2.64 1.32-.22 1.1-.22 2.86.22 3.96.66 1.54 1.32.88 2.64 1.1 8.14.22 9.68 1.98 9.68 5.06 0 2.86-2.64 7.26-5.94 11.22-3.08 3.96-6.82 7.92-8.58 9.68-2.2 2.64-3.08 2.42-4.84 0-.22-.22-4.62-5.28-8.58-10.56-4.18-5.5-7.92-11.22-7.92-12.98 0-2.64 5.72-2.64 7.48-2.64h1.98c1.1 0 1.54-3.96.22-5.72-.44-.66-1.76-.44-2.42-.44-10.34.22-31.02.66-42.68 0-3.3-.22-2.64 5.94-1.1 6.38 12.54.66 15.18 2.64 25.74 16.72l18.26 24.42-19.58 22.22c-11.88 13.64-15.18 15.84-25.74 16.06-1.32 0-1.76 1.54-1.76 3.3.22 1.54.88 3.08 1.76 3.08 10.56-.22 30.58-.22 42.02.22 2.2.44 2.2-6.16 0-6.38h-1.76c-9.46-.88-11.88-2.64-11.88-6.38 0-4.18 16.28-20.9 19.8-24.86 1.32-1.54 3.52.22 5.06 2.2l12.54 16.72c1.54 2.2 5.72 6.16 5.72 8.8 0 1.98-1.1 3.52-7.7 3.52h-1.98c-2.64 0-2.64 6.38 0 6.38 12.98-.44 34.1-.44 45.32-.22 1.1.22 1.98-1.1 1.98-2.64z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(164.12 147.155863)"></path><g transform="translate(193 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".53125" y="53">x letter</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(16)"></path></g><path d="m109.302904 5.96613481-5.72-5.06c-.88-.66-5.2799999 0-7.0399999 2.2-10.34 11.65999999-26.4 28.81999999-36.74 38.27999999-3.74 3.3-5.06 3.52-8.14.44-12.76-13.64-29.04-30.36-39.82-40.69999999-2.42000001-2.42-5.50000001-.22-5.72000001 0l-4.62 4.62c-2.64 2.64-.88 5.49999999 1.32 7.69999999l38.72000001 39.16c1.98 2.2 2.64 3.74-.22 6.6-10.12 10.12-31.24 31.68-39.82000001 39.82-2.42 2.2000002-1.54 5.0600002 0 6.3800002l3.74 3.52c3.08 2.86 5.72000001 1.98 7.92000001-.22 13.2-12.7600002 23.54-22.4400002 36.74-36.9600002 2.86-3.08 5.94-4.84 9.9-.66l37.84 38.5000002c1.54 1.54 3.2999999 2.2 6.3799999-.44l4.84-3.96c2.42-1.98 1.98-3.96-.88-6.8200002l-40.0399999-39.82c-2.42-2.42-1.32-4.4.44-5.72 8.8-7.92 29.7-29.92 40.6999999-40.7 2.64-2.63999999 1.76-4.61999999.22-6.15999999z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(503.587096 120.173865)"></path><g transform="translate(478 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".007813" y="59">multiplication symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(66)"></path></g></g></svg></figure></p>
<p>A proper multiplication sign avoids confusion with the letter “x” and aligns better with numerals.</p>
<h3>Obelus</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="A slash symbol on the left marked incorrect and labeled “slash,” contrasted with a division sign (obelus) on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m90.8913316 6.38c2.42-3.52.66-5.94-.88-5.94l-11-.44c-1.76 0-3.08 2.42-3.74 3.52-25.3 48.62-49.28 95.7-74.57999997 144.32-3.74000001 7.26 8.79999999 5.5 11.21999997 5.72 2.64.22 3.74-1.98 4.84-4.18z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(175.418668 90.06)"></path><g transform="translate(200 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".480469" y="53">slash</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(9)"></path></g><path d="m69.96 9.02c0-5.06-4.18-9.02-9.24-9.02-4.84 0-9.46 3.52-9.46 8.58-.22 5.5 4.18 9.9 9.46 9.9 5.06 0 9.24-4.18 9.24-9.46zm52.58 49.5-.44-6.38c-.22-1.98-1.32-2.86-3.08-3.3-.88-.22-1.98-.22-3.08-.22h-3.96-105.16c-2.86 0-6.82 0-6.82 3.96v5.5c0 2.42 4.62 4.84 7.04 4.84h108.68c3.08 0 7.04-.22 6.82-4.4zm-52.58 43.12c0-5.28-3.96-9.24-9.24-9.24-5.06 0-9.46 3.96-9.46 9.24s4.4 9.46 9.46 9.46c5.28 0 9.24-4.4 9.24-9.46z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(497.39 119.76)"></path><g transform="translate(532 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".910156" y="59">obelus</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(12)"></path></g></g></svg></figure></p>
<p>The obelus is the correct symbol for division, with visual weight that centers between operands.</p>
<h3>Quotation marks &amp; apostrophes</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Four straight vertical quote marks on the left labeled “straight marks” and marked with a red X. On the right, matching typographic curly quotes marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(133.339336 150.72)"><path d="m65.34 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.92 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path><path d="m174.201328 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.92 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.589336 157.32)"><path d="m79.2 40.92c0-6.16-4.4-11.22-10.56-11.22-.88 0-1.76.22-2.64.44s-1.54.44-2.42.44c-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.5-14.96 16.5-21.12 1.98-1.1 1.54-3.52.66-5.06-1.1-1.32-3.08-1.1-4.4-.66-14.74 6.38-24.64 19.8-24.64 33.66 0 10.78 7.04 19.14 16.94 19.14 7.04 0 12.76-5.28 12.76-12.32zm-49.5 0c0-6.16-4.4-11.22-10.56-11.22-1.1 0-1.98.22-2.86.44l-1.1.22c-.44 0-.88.22-1.1.22-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.72-14.74 16.5-21.12 1.76-.88 1.1-3.3.22-4.84-.44-.88-2.2-1.54-3.96-.88-14.74 6.38-24.64 19.8-24.64 33.66 0 10.78 7.04 19.14 16.94 19.14 7.04 0 12.76-5.28 12.76-12.32z"></path><path d="m204.561328 19.36c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22 1.32 0 2.64-.44 4.18-.66.22-.22.66-.22 1.1-.22 1.32-.22 2.2.44 2.2 3.52 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.54 3.96-.22 5.5 1.1 1.54 3.52.66 5.06 0 14.3-6.6 23.98-20.02 23.98-33.22zm-49.5 0c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22.88 0 1.98-.22 3.08-.44.66-.22 1.76-.66 2.64-.66.66 0 1.76.88 1.76 3.74 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.32 3.52-.22 5.06 1.32 1.76 4.18.66 4.84.44 14.3-6.6 24.2-20.02 24.2-33.22z"></path></g><g transform="translate(496 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".929688" y="59">quotation marks</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(48)"></path></g></g></svg></figure></p>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="On the left: two straight vertical marks labeled “straight marks” and marked incorrect. On the right: typographic apostrophes with curled shapes marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(179.979336 150.72)"><path d="m24.42 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path><path d="m80.4813281 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(505.659336 156.985695)"><path d="m29.48 41.2543047c0-6.16-4.62-11.44-10.78-11.44-1.54 0-3.08 1.1-4.62 1.1-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.5-14.96 16.28-21.12000002 3.96-2.86.44-7.26-1.98-6.38-15.62 5.94-26.18 19.14000002-26.18 33.44000002 0 11 7.26 20.02 16.94 20.02 7.04 0 12.54-5.28 12.54-12.32z"></path><path d="m105.121328 19.6943047c0-11.22000002-7.0399999-19.36000002-16.7199999-19.36000002-7.04 0-12.76 5.28-12.76 12.32000002 0 6.38 4.4 11.22 10.56 11.22 1.76 0 3.3-.44 4.84-.88 2.2-.44 2.42 1.76 2.42 3.52 0 7.04-5.5 14.52-16.5 20.9-1.98 1.32-1.32 3.96 0 5.5 1.1 1.32 3.52.44 4.84-.22 13.86-6.6 23.3199999-19.8 23.3199999-33z"></path></g><g transform="translate(510 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".761719" y="59">apostrophes</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(34)"></path></g></g></svg></figure></p>
<p>Use proper quotation marks and apostrophes (not straight marks).</p>
<h3>Ellipsis</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of ellipses shown side by side: three individual dots on the left marked incorrect, and a single ellipsis character on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(167 188)"><path d="m26.18 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m71.06 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m115.94 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path></g><g transform="translate(181 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".214844" y="53">three dots</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(28)"></path></g><path d="m178.42 12.32c0-7.26-5.28-12.32-12.98-12.32s-13.2 4.18-13.2 11.66c0 7.04 5.72 12.98 13.42 12.98s12.76-5.06 12.76-12.32zm-75.68.22c0-7.26-5.28-12.32-12.98-12.32s-13.2 4.84-13.2 12.32c0 7.04 5.5 12.1 13.42 12.1 7.7 0 12.76-4.84 12.76-12.1zm-76.34-.22c0-7.26-5.28-12.32-12.98-12.32s-13.42 4.4-13.42 11.66 5.72 12.98 13.42 12.98 12.98-5.28 12.98-12.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(470 189)"></path><g transform="translate(493 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".863281" y="59">ellipsis character</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(51)"></path></g></g></svg></figure></p>
<p>The proper ellipsis character (instead of three individual dots) ensures consistent spacing and baseline alignment across typefaces.</p>
<h3>Primes</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="On the left, three straight vertical tick marks labeled “straight marks” and marked incorrect; on the right, slanted tick marks representing prime and double prime symbols are marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(153.579336 150.72)"><path d="m24.42 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path><path d="m127.561328 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.9199999 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(476.896484 148.652344)"><path d="m43.5058594 0-28.6816406 63.2714844h-14.8242188l19.6582031-63.2714844z"></path><path d="m132.128906 0-28.68164 63.2714844h-14.8242191l19.6582031-63.2714844zm37.597656 0-28.68164 63.2714844h-14.824219l19.658203-63.2714844z"></path></g><g transform="translate(532 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".375" y="59">primes</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(12)"></path></g></g></svg></figure></p>
<p>Prime marks indicate units like inches and minutes; straight apostrophes are typographic imposters.</p>
<h3>Degree symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="A lowercase letter “o” on the left marked incorrect, contrasted with a correctly raised and smaller degree symbol on the right." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m99.66 49.28c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(170.17 144.4)"></path><g transform="translate(193 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="0" y="53">o letter</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(16)"></path></g><path d="m66 29.92c0-17.16-14.52-29.92-33.22-29.92s-32.78 12.76-32.78 29.92 14.3 29.92 33.22 29.92c18.26 0 32.78-12.98 32.78-29.92zm-13.64 3.3c0 12.1-7.48 20.68-17.38 20.68-11.66 0-21.56-12.1-21.56-28.16 0-11.66 7.48-20.02 17.38-20.02 11.44 0 21.56 12.1 21.56 27.5z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(525.22 101.72)"></path><g transform="translate(502 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".046875" y="59">degree symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(42)"></path></g></g></svg></figure></p>
<p>The proper degree symbol is smaller and raised—distinct from a lowercase o.</p>
<h3>Parentheses</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of parentheses compared side by side. On the left, the italicized version is marked incorrect; on the right, the roman version is marked correct, showing the preferred typographic form." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g transform="translate(202 326)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".226563" y="53">italic</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(7)"></path></g><g transform="translate(534 320)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".183594" y="59">roman</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(10)"></path></g><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(179 68.458291)"><path d="m67.32 7.38170935c2.86-4.84-.88-6.38-3.08-5.5-34.32 33.22000005-64.24 78.54000005-64.24 127.81999965 0 27.5 8.8 55.88 20.02 80.74 2.86 3.74 7.48 2.2 5.72-2.64-12.32-35.42-15.4-70.62-6.16-106.92 9.02-35.6399996 24.2-65.3399996 47.74-93.49999965z"></path><path d="m117.881328 83.0617094c0-28.38-9.68-55.88-20.0199999-80.96000005-2.86-4.84-7.04-.22-5.72 2.86 11.8799999 37.18000005 16.0599999 68.86000005 6.38 106.91999965-9.02 35.64-24.2 65.56-48.18 93.28-3.52 2.86-1.98 8.36 3.3 5.72 34.54-33.22 64.2399999-78.54 64.2399999-127.8199996z"></path></g><g transform="translate(496.38 67.985601)"><path d="m50.16 198.474399c-6.38-7.48-8.36-10.12-14.3-20.46-14.74-25.74-20.24-45.98-20.24-74.8 0-19.5800003 2.42-34.1000003 8.36-49.7200003 6.16-16.06 16.72-34.76 26.18-45.31999996 2.64-4.18-3.52-10.56-7.92-7.26-25.3 27.49999996-42.24 64.67999996-42.24 102.30000026 0 36.3 16.06 73.48 40.26 100.32 1.32 1.54 2.86 2.64 4.62 1.76 3.3-1.54 6.6-3.96 5.28-6.82z"></path><path d="m122.281328 102.774399c0-36.7400003-15.4-73.2600003-40.2599999-100.54000026-1.76-1.76-4.84-2.42-7.48-.22-2.42 1.98-2.42 5.5-.66 7.26 5.28 6.15999996 7.48 9.23999996 12.76 18.69999996 14.7399999 25.96 20.4599999 46.2 20.4599999 74.8000003 0 19.8-2.42 34.32-8.3599999 49.94-6.16 16.06-16.72 34.54-26.4 45.32-3.52 5.5 3.52 10.56 7.92 7.26 25.9599999-27.28 42.0199999-64.9 42.0199999-102.52z"></path></g></g></g></svg></figure></p>
<p>Parentheses and brackets are not designed to be italicized; they retain proper shape and spacing when set in roman.</p>
<h2>Use the right characters</h2>
<p>To learn what characters to use, read my article about <a href="https://www.jonathanharrell.com/blog/better-typography-with-font-variants" target="_blank" rel="noreferrer">better typography with font variants</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking the Benefits of CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties</link>
            <guid>https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties</guid>
            <pubDate>Tue, 24 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Overview of the benefits of CSS variables and helpful tips and tricks for working with them.]]></description>
            <content:encoded><![CDATA[<p>More and more developers are starting to use CSS variables, or as they are more correctly known, custom properties. Native CSS custom properties provide several clear benefits over preprocessor variables. They provide the power to achieve things like live theming which were previously much more difficult.</p>
<p>I want to take a quick look at the benefits of CSS custom properties and go over some lesser known features that may come in handy.</p>
<h2>Benefits of CSS Custom Properties</h2>
<h3>They’re Native</h3>
<p>This one is obvious, but important. You can use CSS custom properties without the need for a preprocessor. The tooling around CSS has grown in complexity over the last several years. We may now be looking at a simplification as more features are adopted into CSS proper.</p>
<h3>They’re Live</h3>
<p>Preprocessor variables are not actually live in the browser. They are evaluated when the CSS is compiled. Redefining a variable within a media query will do nothing. With CSS custom properties, the property actually lives in the browser so it can be redefined in media queries, or with JavaScript.</p>
<p>This also means that all variable expressions and calc statements using CSS custom properties will be recalculated when the variable is redefined.</p>
<p>Here we are redefining a grid gutter within a media query and using that custom property inside <code>calc()</code> statements:</p>
<pre><code class="language-css">:root {
  --grid-gutter: 1rem;
}

@media (min-width: 600px) {
  :root {
    --grid-gutter: 1.25rem;
  }
}

.grid {
  display: grid;
  grid-gap: var(--grid-gutter);
  margin-left: calc(-1 * var(--grid-gutter));
  margin-right: calc(-1 * var(--grid-gutter));
}
</code></pre>
<h3>They Cascade</h3>
<p>Since preprocessor variables don’t run in the browser, they have no knowledge of the DOM. Therefore they cannot be scoped to DOM elements. CSS custom properties, on the other hand, do have this knowledge. CSS custom properties can be scoped to particular elements, or classes on elements.</p>
<p>A clear use case for this is theme switching:</p>
<pre><code class="language-css">:root {
  --body-background-color: white;
  --body-text-color: black;
}

body {
  background-color: var(--body-background-color);
  color: var(--body-text-color);
}

.dark {
  --body-background-color: black;
  --body-text-color: white;
}
</code></pre>
<h3>They Work Anywhere</h3>
<p>Preprocessor variables do not work in plain CSS or with other preprocessors so their shareability is limited. Because custom properties are native, they can be used with any preprocessor. They can also be accessed and defined through JavaScript.</p>
<p>Here’s an example of overriding default Bootstrap Sass typography variables to use custom properties.</p>
<pre><code class="language-css">$font-size-h1: calc(var(--font-size-base) * 2.6) !default;
$font-size-h2: calc(var(--font-size-base) * 2.15) !default;
$font-size-h3: calc(var(--font-size-base) * 1.7) !default;
$font-size-h4: calc(var(--font-size-base) * 1.25) !default;
$font-size-h5: var(--font-size-base) !default;
$font-size-h6: calc(var(--font-size-base) * 0.85) !default;
</code></pre>
<h3>Using Fallback Values</h3>
<p>If you aren’t sure if a particular custom property exists, you can provide a default value for a particular property. This can be especially useful if you are creating a component that will be packaged up and imported as part of a library.</p>
<p>Simply pass in the default value as the second argument of the <code>var()</code> function:</p>
<pre><code class="language-css">/* single fallback */
.button {
  background-color: var(--button-background-color, gray);
}
</code></pre>
<p>You can provide multiple fallbacks by nesting multiple <code>var()</code> functions inside of each other:</p>
<pre><code class="language-css">/* multiple fallbacks */
.button-primary {
  background-color: var(
    --primary-button-background-color,
    var(
      --button-background-color,
      gray
    )
  );
}
</code></pre>
<h2>Converting Unitless Values</h2>
<p>There may be times when you need to define a custom property as a unitless value and then tack on a unit. This can often be the case when dealing with responsive typography. To accommodate this, simply write a <code>calc()</code> expression where you multiply the custom property value by the unit you wish to add onto it.</p>
<p>Here’s an example of a complex responsive font size calculation using custom properties:</p>
<pre><code class="language-css">:root {
  /* unitless base font size variables in px */
  --unitless-min-font-size: 15;
  --unitless-max-font-size: 18;

  /* unitless viewport widths in px */
  --unitless-lower-font-range: 460;
  --unitless-upper-font-range: 1200;

  --font-size-difference: calc(
    var(--unitless-max-font-size) -
    var(--unitless-min-font-size)
  );
  --font-range-difference: calc(
    var(--unitless-upper-font-range) -
    var(--unitless-lower-font-range)
  );
  --viewport-difference: calc(
    100vw -
    (var(--unitless-lower-font-range) * 1px)
  );
}

html {
  font-size: calc(
    (var(--unitless-min-font-size) * 1px) +
    var(--font-size-difference) *
    var(--viewport-difference) /
    var(--font-range-difference)
  );
}
</code></pre>
<h2>Redefining Custom Properties in Media Queries</h2>
<p>Remember that you can redefine custom properties within media queries. Margins, padding, and grid gutters are particularly good use cases for this. Imagine a condensed view of a grid on mobile, a slightly more spaced out view on tablet, and a view with even more space on desktop. This is possible very simply with custom properties. Instead of redefining the spacing properties on the element, just redefine the custom properties within the media queries.</p>
<pre><code class="language-css">:root {
  --card-padding: 1rem;
}

@media (min-width: 600px) {
  :root {
    --card-padding: 1.25rem;
  }
}

@media (min-width: 1000px) {
  :root {
    --card-padding: 1.5rem;
  }
}

.card {
  padding: var(--card-padding);
}
</code></pre>
<p>Learn how to use custom properties to enable live theming in my article <a href="https://www.jonathanharrell.com/blog/live-theming-with-css-variables" target="_blank" rel="noreferrer">Live Theming with CSS Variables</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s the Deal with Margin Collapse?]]></title>
            <link>https://www.jonathanharrell.com/blog/whats-the-deal-with-margin-collapse</link>
            <guid>https://www.jonathanharrell.com/blog/whats-the-deal-with-margin-collapse</guid>
            <pubDate>Sun, 11 Mar 2018 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn about margin collapse, a fundamental concept of CSS layout. See visual examples of when margin collapse happens, and when it doesn’t.]]></description>
            <content:encoded><![CDATA[<p>The concept of <em>margin collapse</em> is foundational to an understanding of the box model in CSS, but it is actually quite complex and potentially confusing. <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">The spec</a> describing how it works is thorough but difficult to understand. This article is an attempt to give some visual examples to the concepts from the specs.</p>
<p>The basic idea is that if two margins are adjoining, they will collapse into one margin, which will have the greater of the two margin values (it will be the more negative of the margins if both margins are negative).</p>
<h2>What makes margins adjoining?</h2>
<p>The key is understanding when two margins are adjoining. Here are the basic situations:</p>
<h3>Sibling Elements</h3>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of stacked rectangular blocks representing sibling elements. Each top and bottom pair is separated by a 30px space, which collapses into a single 30px margin between them." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 79h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m90 216h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 462)"></path><path d="m90 261h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 552)"></path><path d="m91 292h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m235 218.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z"></path><path d="m226 288.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z"></path><g transform="translate(240.46875 227.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><g transform="translate(240.46875 274.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 102h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 239h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 508)"></path><path d="m431 270h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m566 266.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 250.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The bottom margin of an element collapses with the top margin of its proceeding sibling.</p>
<h3>Child Elements</h3>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram of a parent element with a top margin of 30px and a child element with a top margin of 30px. Arrows indicate that both margins collapse into one." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 130h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m91 162h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c"><path d="m90 99h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 228)"></path><path d="m90 131h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 292)"></path><path d="m165 101.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 110.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><path d="m156 158.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 144.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 130h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m431 130h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 99h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 228)"></path><path d="m566 126.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 110.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The top margin of an element collapses with the top margin of its first child element.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram of a parent element with a bottom margin of 30px and a child element with a bottom margin of 30px. Both margins collapse into a single 30px space." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 100h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m91 208h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c"><path d="m90 347h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 724)"></path><path d="m156 374.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 360.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><path d="m90 379h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 788)"></path><path d="m165 381.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 390.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 100h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m431 240h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 379h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 788)"></path><path d="m566 406.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 390.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The bottom margin of an element collapses with the bottom margin of its last child element.</p>
<h3>An Element’s Own Top and Bottom Margins</h3>
<p><figure><svg height="400" viewBox="0 0 800 400" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Dashed rectangles representing an element with zero height. The element has top and bottom margins of 30px each, but they collapse into 0px due to the element not occupying vertical space." style="width:100%;height:auto"><defs><path id="a" d="m90 185h280v30h-280z"></path><mask id="b" fill="#fff" height="30" width="280" x="0" y="0"><use xlink:href="#a"></use></mask><path id="c" d="m0 0h280v30h-280z"></path><mask id="d" fill="#fff" height="30" width="280" x="0" y="0"><use xlink:href="#c"></use></mask></defs><g fill="none" fill-rule="evenodd"><use mask="url(#b)" stroke="#f5f5f5" stroke-dasharray="4 3" stroke-width="4" xlink:href="#a"></use><g fill="#e6594c"><path d="m90 155h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 340)"></path><path d="m90 215h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 460)"></path><g fill-rule="nonzero" transform="translate(225.319082 157.480136)"><path d="m.68091839 24.0198644v-1h4v-20.09099997l-3.56421223 6.33613062-.24513062.43578777-.87157554-.49026124.24513062-.43578777 4.5-8 .43578777-.77473381.43578777.77473381 4.50000004 8 .2451306.43578777-.87157556.49026124-.24513062-.43578777-3.56421223-6.33613062v20.09099997h4v1z"></path><g transform="translate(15.149668 9.727872)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g fill-rule="nonzero" transform="translate(225.319082 218.5)"><path d="m9.68091839 0v1l-4-.001v20.092l3.56421223-6.3361306.24513062-.4357878.87157556.4902613-.2451306.4357877-4.50000004 8-.43578777.7747338-.43578777-.7747338-4.5-8-.24513062-.4357877.87157554-.4902613.24513062.4357878 3.56421223 6.3361306v-20.091h-4v-1l4 .001v-.001z"></path><g transform="translate(15.149668 8.708008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m226 210.5v-1h4v-19h-4v-1h9v1h-4v19h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(240.366211 196.208008)"><path d="m0 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835938-.30761719c0-1.40625.45898437-2.24121094 1.21582031-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582031-.83984375-1.21582031-2.24609375z"></path><path d="m7.37792969 7.92480469v-1.92382813h.06347656c.22949219.546875.76171875.859375 1.46972656.859375 1.21582029 0 1.94824219-.86914062 1.94824219-2.30957031v-.71777344c0-1.44042969-.7226562-2.3046875-1.92871094-2.3046875-.72753906 0-1.29882812.34667969-1.50878906.90332031h-.06347656v-.24902343c-.02929688-.40039063-.25390625-.62011719-.63476563-.62011719-.40527343 0-.62988281.25390625-.62988281.71289062v5.64941407c0 .45410156.22949219.70800781.63964844.70800781.41503906 0 .64453125-.25390625.64453125-.70800781zm0-3.35449219v-.68847656c0-.83007813.41503906-1.32324219 1.08886719-1.32324219.68847656 0 1.07910156.5078125 1.07910156 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.06933594 1.40136718-.65917969 0-1.09863281-.49804687-1.09863281-1.25976562z"></path><path d="m11.6259766 6.25c0 .33691406.258789.59082031.571289.59082031.2832032 0 .4589844-.12695312.6738282-.45410156l.9033203-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.2099609-.32226563-.390625-.44921875-.6689453-.44921875-.3222656 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841796 1.62109375c-.0976563.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g transform="translate(430 185)"><use mask="url(#d)" stroke="#f5f5f5" stroke-dasharray="4 3" stroke-width="4" xlink:href="#c"></use><g fill="#e6594c" fill-rule="nonzero"><path d="m136 25.5v-1h4v-19h-4v-1h9v1h-4v19h4v1z"></path><g transform="translate(150.366211 11.208008)"><path d="m0 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835938-.30761719c0-1.40625.45898437-2.24121094 1.21582031-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582031-.83984375-1.21582031-2.24609375z"></path><path d="m7.37792969 7.92480469v-1.92382813h.06347656c.22949219.546875.76171875.859375 1.46972656.859375 1.21582029 0 1.94824219-.86914062 1.94824219-2.30957031v-.71777344c0-1.44042969-.7226562-2.3046875-1.92871094-2.3046875-.72753906 0-1.29882812.34667969-1.50878906.90332031h-.06347656v-.24902343c-.02929688-.40039063-.25390625-.62011719-.63476563-.62011719-.40527343 0-.62988281.25390625-.62988281.71289062v5.64941407c0 .45410156.22949219.70800781.63964844.70800781.41503906 0 .64453125-.25390625.64453125-.70800781zm0-3.35449219v-.68847656c0-.83007813.41503906-1.32324219 1.08886719-1.32324219.68847656 0 1.07910156.5078125 1.07910156 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.06933594 1.40136718-.65917969 0-1.09863281-.49804687-1.09863281-1.25976562z"></path><path d="m11.6259766 6.25c0 .33691406.258789.59082031.571289.59082031.2832032 0 .4589844-.12695312.6738282-.45410156l.9033203-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.2099609-.32226563-.390625-.44921875-.6689453-.44921875-.3222656 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841796 1.62109375c-.0976563.10742188-.15625.26855469-.15625.42480469z"></path></g></g></g></g></svg></figure></p>
<p>The top and bottom margins of an element collapse if the element has no height, padding, or border and all of its children elements’ margins collapse (height is represented here only for clarity).</p>
<h2>When does margin collapse not occur?</h2>
<p>There are several exceptions to these rules. This is where things can get hard to follow. Following are some visual examples of situations where margins would not collapse. For a more complete understanding, refer to <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">the spec</a>.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Left side shows a parent with padding above a child element. Both have 30px top margins, which do not collapse due to the padding. Right side has the same margins but no padding, so margins collapse." style="width:100%;height:auto">
    <defs>
        <path id="a2" d="m0 0h276v30h-276z"></path>
        <mask id="b2" fill="#fff">
            <use fill="#fff" fill-rule="evenodd" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a2"></use>
        </mask>
    </defs>
    <g fill="none" fill-rule="evenodd">
        <path d="m370 130v280h-280v-280" stroke="#f5f5f5" stroke-width="2"></path>
        <path d="m431 131h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path>
        <path d="m89 130h282" stroke="#f5f5f5" stroke-width="4"></path>
        <path d="m90 163h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path>
        <g transform="translate(430 162)">
            <path d="m1 31h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path>
            <g fill="#e6594c">
                <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z" fill-rule="nonzero"></path>
                <g fill-rule="nonzero" transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c">
            <path d="m89 98h282v30h-282z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 226)"></path>
            <path d="m90 132h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 294)"></path>
            <path d="m155 125.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(169.46875 109.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <path d="m155 159.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(170.46875 145.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <path d="m430 100h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 230)"></path>
            <path d="m566 127.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(578.46875 111.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <g transform="translate(432 132)">
                <use fill-opacity="0.1" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a2"></use>
                <path d="m31.8087452-2.20709356.7114183.70276883-32.31371111 32.71141833-.71141829-.7027689zm-7.9027356 0 .7114183.70276883-32.31371107 32.71141833-.71141829-.7027689zm-7.9027355 0 .7114182.70276883-32.313711 32.71141833-.7114183-.7027689zm-7.90273561 0 .71141829.70276883-32.31371108 32.71141833-.7114183-.7027689zm31.61094221 0 .7114183.70276883-32.31371105 32.71141833-.71141828-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027355 0 .7114183.70276883-32.3137111 32.71141833-.7114182-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114182.70276883-32.313711 32.71141833-.7114183-.7027689zm7.9027355 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027353 0 .711419.70276883-32.3137115 32.71141833-.7114183-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.7114183-.7027689zm7.902735 0 .711419.70276883-32.3137114 32.71141833-.7114183-.7027689zm7.902736 0 .711418.70276883-32.3137109 32.71141833-.7114182-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711419-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313712 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689z" fill-rule="nonzero" mask="url(#b2)"></path>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>If the parent element has a top border or padding, the parent’s top margin does not collapse with the first child’s top margin.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Left side shows a parent with bottom padding and a child with bottom margin; margins do not collapse. Right side shows same margins but no padding; the 30px margins collapse." style="width:100%;height:auto">
    <defs>
        <path id="a3" d="m0 0h276v30h-276z"></path>
        <mask id="b3" fill="#fff">
            <use fill="#fff" fill-rule="evenodd" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a3"></use>
        </mask>
    </defs>
    <g fill="none" fill-rule="evenodd">
        <g stroke="#f5f5f5">
            <path d="m90 378v-280h280v280" stroke-width="2"></path>
            <path d="m431 99h278v278h-278z" stroke-width="2"></path>
            <path d="m89 378h282" stroke-width="4"></path>
            <path d="m90 207h138v138h-138z" fill="#525252" stroke-width="2"></path>
            <path d="m431 177h138v138h-138z" fill="#525252" stroke-width="2"></path>
        </g>
        <g fill="#e6594c" transform="translate(89 380)">
            <path d="m0 0h282v30h-282z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 11.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(89 346)">
            <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(432 346)">
            <use fill-opacity="0.1" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a3"></use>
            <g fill-rule="nonzero" mask="url(#b3)">
                <g transform="translate(-24 -2)">
                    <path d="m55.8087452-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m47.9060096-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m40.0032741-.20709356.7114182.70276883-32.31371103 32.71141833-.71141829-.7027689z"></path>
                    <path d="m32.1005385-.20709356.7114183.70276883-32.3137111 32.71141833-.71141828-.7027689z"></path>
                    <path d="m63.7114807-.20709356.7114183.70276883-32.313711 32.71141833-.7114183-.7027689z"></path>
                    <path d="m71.6142163-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m79.5169519-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m87.4196874-.20709356.7114183.70276883-32.3137111 32.71141833-.7114182-.7027689z"></path>
                    <path d="m95.322423-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m103.225159-.20709356.711418.70276883-32.3137112 32.71141833-.7114183-.7027689z"></path>
                    <path d="m111.127894-.20709356.711418.70276883-32.3137107 32.71141833-.7114183-.7027689z"></path>
                    <path d="m119.03063-.20709356.711418.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m126.933365-.20709356.711419.70276883-32.3137115 32.71141833-.7114183-.7027689z"></path>
                    <path d="m134.836101-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m142.738836-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m150.641572-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m158.544307-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m166.447043-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m174.349779-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m182.252514-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m190.15525-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m198.057985-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m205.960721-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m213.863456-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m221.766192-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m229.668928-.20709356.711418.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m237.571663-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m245.474399-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m253.377134-.20709356.711419.70276883-32.313712 32.71141833-.711418-.7027689z"></path>
                    <path d="m261.27987-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m269.182605-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m277.085341-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m284.988076-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m292.890812-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m300.793548-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m308.696283-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m316.599019-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m324.501754-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(430 378)">
            <path d="m0 0h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m136 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(148.46875 11.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(430 316)">
            <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>If the parent element has a bottom border or padding, the parent’s bottom margin does not collapse with the last child’s bottom margin.</p>
<h2>Further Resources</h2>
<p>There are some additional, more complex scenarios that prevent collapse that aren’t covered here. For updated and complete information, see the <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">CSS Box Model Spec</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Advanced CSS-Only HTML Form Styling]]></title>
            <link>https://www.jonathanharrell.com/blog/advanced-css-only-form-styling</link>
            <guid>https://www.jonathanharrell.com/blog/advanced-css-only-form-styling</guid>
            <pubDate>Tue, 31 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn about selectors both new and old that you can use to style form inputs based on requirement, validity and more.]]></description>
            <content:encoded><![CDATA[<p>HTML form inputs have always been notoriously difficult to style with CSS, but there are several little-used selectors that give us significant power to style inputs and surrounding elements. Some of these are relatively new, while others have been available for quite some time.</p>
<h2>:placeholder-shown</h2>

<p>The first selector is relatively new and doesn’t have complete <a href="https://caniuse.com/#feat=css-placeholder-shown" target="_blank" rel="noreferrer">browser support</a> yet. However, this seems like something that could easily work as a progressive enhancement. The selector allows us to detect whether a placeholder is currently visible to the user. This could come in handy if we want to dynamically hide and show the input’s associated label.</p>
<p>Here I am hiding the label until the user types in the input, thus hiding the placeholder. I use a nice transition effect to display the label. Note that for this to work, the label must come <em>after</em> the input.</p>
<pre><code class="language-html">&lt;div class=&quot;form-group&quot;&gt;
  &lt;input type=&quot;text&quot; id=&quot;dynamic-label-input&quot; placeholder=&quot;Enter some text&quot;&gt;
  &lt;label for=&quot;dynamic-label-input&quot;&gt;Enter some text&lt;/label&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.form-group {
  position: relative;
  padding-top: 1.5rem;
}

label {
  position: absolute;
  top: 0;
  opacity: 1;
  transform: translateY(0);
  transition: all 0.2s ease-out;
}

input:placeholder-shown + label {
  opacity: 0;
  transform: translateY(1rem);
}
</code></pre>
<h2>:required</h2>

<p>Use this selector to indicate that an input has the <code>required</code> attribute. Here I am using an empty <code>.help-text</code> span and placing some content dynamically using the <code>::before</code> pseudo-element. Realistically, this would be done with JavaScript, but I am including here to demonstrate a pure CSS approach.</p>
<pre><code class="language-html">&lt;label for=&quot;required-input&quot;&gt;Required input&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;required-input&quot; required&gt;
&lt;span class=&quot;help-text&quot;&gt;&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input:required + .help-text::before {
  content: &#x27;*Required&#x27;;
}
</code></pre>
<h2>:optional</h2>

<p>This selector does the opposite of <code>:required</code>. I am again using an empty <code>.help-text</code> <code>span</code> to display some optional text if the required attribute is NOT present.</p>
<pre><code class="language-css">input:optional + .help-text::before {
  content: &#x27;*Optional&#x27;;
}
</code></pre>
<h2>:disabled</h2>

<p>This one should be familiar to most of you, but still important to remember. It’s pretty essential to display whether or not an input is disabled to a user.</p>
<pre><code class="language-css">&amp;:disabled {
  border-color: var(--gray-lighter);
  background-color: var(--gray-lightest);
  color: var(--gray-light);
}
</code></pre>
<h2>:read-only</h2>

<p>An input with the <code>readonly</code> attribute should convey a slightly different meaning than a disabled input. Thankfully we have this selector to help with that.</p>
<pre><code class="language-html">&lt;input type=&quot;text&quot; value=&quot;Read-only value&quot; readonly&gt;
</code></pre>
<pre><code class="language-css">input:read-only {
  border-color: var(--gray-lighter);
  color: var(--gray);
  cursor: not-allowed;
}
</code></pre>
<h2>:valid</h2>

<p>While much form validation will happen with JavaScript, we are able to take advantage of HTML form validation and style inputs accordingly. This selector gives us the chance to style any input which is currently passing the native browser validation rules.</p>
<p>Here I am encoding an svg to display a checkbox in the input using the <code>background-image</code> property.</p>
<pre><code class="language-css">input:valid {
  border-color: var(--color-primary);
  background-image: url(&quot;data:image/svg+xml,...&quot;);
}
</code></pre>
<h2>:invalid</h2>

<p>This selector checks if an input is currently NOT passing the native browser validation rules (for example, if an email input does not contain a real email).</p>
<p>Again, I am encoding an svg to display an ‘x’ in the input.</p>
<pre><code class="language-css">input:invalid {
  border-color: var(--color-error);
  background-image: url(&quot;data:image/svg+xml,...&quot;);
}
</code></pre>
<p>I can also customize some validation messages for each input type using the <code>.help-text</code> span and the <code>::before</code> pseudo-element.</p>
<pre><code class="language-html">&lt;label for=&quot;invalid-email&quot;&gt;Invalid input&lt;/label&gt;
&lt;input type=&quot;email&quot; id=&quot;invalid-email&quot; value=&quot;notanemail&quot;&gt;
&lt;span class=&quot;help-text&quot;&gt;&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input[type=&#x27;email&#x27;]:invalid + .help-text::before {
  content: &#x27;You must enter a valid email.&#x27;
}
</code></pre>
<h2>:in-range/:out-of-range</h2>

<p>These selectors detect whether the value of a number input is within the min/max values specified or not.</p>
<pre><code class="language-html">&lt;label for=&quot;out-of-range-input&quot;&gt;Out-of-range input&lt;/label&gt;
&lt;input
  type=&quot;number&quot;
  id=&quot;out-of-range-input&quot;
  min=&quot;1&quot;
  max=&quot;10&quot;
  value=&quot;12&quot;
&gt;
&lt;span class=&quot;help-text&quot;&gt;(value must be between 1 and 10)&lt;/span&gt;
</code></pre>
<pre><code class="language-css">input:out-of-range + .help-text::before {
  content: &#x27;Out of range&#x27;;
}
</code></pre>
<h2>:checked</h2>

<p>Most of you will be familiar with this selector. It gives us the ability to apply custom styles to checkboxes and radio buttons when checked. My technique for styling checkboxes involves creating a wrapper element and placing the <code>label</code> after the <code>input</code>.</p>
<p>I visually hide the input so that it disappears from view but is still clickable. Then I style <code>label::before</code> to look like the checkbox input and <code>label::after</code> to look like a checkmark. I use the <code>:checked</code> selector to style these two pseudo-elements appropriately:</p>
<pre><code class="language-html">&lt;div class=&quot;checkbox&quot;&gt;
  &lt;input type=&quot;checkbox&quot;/&gt;
  &lt;label&gt;Option&lt;/label&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">&amp;:checked + label::before {
  background-color: var(--color-primary);
}

&amp;:checked + label::after {
  display: block;
  position: absolute;
  top: 0.2rem;
  left: 0.375rem;
  width: 0.25rem;
  height: 0.5rem;
  border: solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
  content: &#x27;&#x27;;
}
</code></pre>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Better Typography with Font Variants]]></title>
            <link>https://www.jonathanharrell.com/blog/better-typography-with-font-variants</link>
            <guid>https://www.jonathanharrell.com/blog/better-typography-with-font-variants</guid>
            <pubDate>Sun, 07 Jan 2018 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use font variants, including ligatures, caps, numerals and alternate glyphs, to create more precise, beautiful typography on the web.]]></description>
            <content:encoded><![CDATA[<p>Typography on the web has always lagged behind its expression in print. This makes sense, as type on the printed page developed over centuries to a point of complexity that has been hard to replicate within the confines of a browser.</p>
<p>However, this is quickly changing thanks to the increasing availability of OpenType features in web fonts and the ability to control those features with CSS.</p>
<p>This article is an overview of how to control OpenType features using CSS, but remember that whatever web font you are using will also need to support these features.</p>
<h2>The font-variant- Properties</h2>
<p>You can control most OpenType features using various properties beginning with <code>font-variant-</code>. There is also a low-level property <code>font-feature-settings</code> which can be used to support legacy browsers. Whenever possible, however, you should use the more modern <code>font-variant</code> properties. One solution is to use an <code>@supports</code> rule to check if a font-variant property is supported and otherwise use <code>font-feature-settings</code>.</p>
<pre><code class="language-css">body {
  font-feature-settings: &quot;liga&quot; 1;
}

@supports (font-variant-ligatures: common-ligatures) {
  body {
    font-feature-settings: normal;
    font-variant-ligatures: common-ligatures;
  }
}
</code></pre>
<h2>font-variant-ligatures</h2>
<p>Ligatures are single glyphs made from two or more characters. They typically prevent ugly or awkward letter collisions and, therefore, aid legibility.</p>
<h3>common-ligatures</h3>
<p><figure><svg height="366" viewBox="0 0 800 366" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;ffi&#x27; text with common ligatures off (left) and common ligatures on (right). The ligatured version connects the letters more smoothly, and red dotted circles highlight the connected areas." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(134 76)"><path d="m93.84 11.28c0 3.28-1.24 5.86-3.72 7.74s-5.88 2.82-10.2 2.82c-3.84 0-7.72-1.48-11.64-4.44-3.28-2.48-6.2-3.72-8.76-3.72-5.44 0-10.08 3.02-13.92 9.06s-5.76 14.22-5.76 24.54v27.96h26.88c1.92 0 2.88 2.16 2.88 6.48s-.96 6.48-2.88 6.48l-27.12-.96v60.24c0 7.84.96 12.96 2.88 15.36s6.32 4.04 13.2 4.92c1.28.16 1.92 1.24 1.92 3.24 0 2.24-.64 3.36-1.92 3.36-3.28 0-7.44-.24-12.48-.72-5.68-.48-10.48-.72-14.4-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-57.36c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12s.72-3.28 2.16-3.6c10.24-2.32 15.36-4.56 15.36-6.72 0-19.36 5.9-36.42 17.7-51.18s25.42-22.14 40.86-22.14c5.36 0 9.58 1 12.66 3s4.62 4.76 4.62 8.28z"></path><path d="m174.24 11.28c0 3.28-1.24 5.86-3.72 7.74s-5.88 2.82-10.2 2.82c-3.84 0-7.72-1.48-11.64-4.44-3.28-2.48-6.2-3.72-8.76-3.72-5.44 0-10.08 3.02-13.92 9.06s-5.76 14.22-5.76 24.54v27.96h26.88c1.92 0 2.88 2.16 2.88 6.48s-.96 6.48-2.88 6.48l-27.12-.96v60.24c0 7.84.96 12.96 2.88 15.36s6.32 4.04 13.2 4.92c1.28.16 1.92 1.24 1.92 3.24 0 2.24-.64 3.36-1.92 3.36-3.28 0-7.44-.24-12.48-.72-5.68-.48-10.48-.72-14.4-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-57.36c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12s.72-3.28 2.16-3.6c10.24-2.32 15.36-4.56 15.36-6.72 0-19.36 5.9-36.42 17.7-51.18s25.42-22.14 40.86-22.14c5.36 0 9.58 1 12.66 3s4.62 4.76 4.62 8.28z"></path><path d="m198.12 25.92c0 3.36-1.22 6.28-3.66 8.76s-5.38 3.72-8.82 3.72-6.38-1.24-8.82-3.72-3.66-5.4-3.66-8.76c0-3.52 1.2-6.48 3.6-8.88s5.36-3.6 8.88-3.6c3.44 0 6.38 1.2 8.82 3.6s3.66 5.36 3.66 8.88zm16.8 145.08c0 2.24-.64 3.36-1.92 3.36-3.28 0-7.48-.24-12.6-.72-5.76-.48-10.6-.72-14.52-.72-4 0-8.8.24-14.4.72-5.04.48-9.2.72-12.48.72-1.28 0-1.92-1.12-1.92-3.36 0-2 .64-3.08 1.92-3.24 6.8-.88 11.18-2.52 13.14-4.92s2.94-7.52 2.94-15.36v-44.4c0-6.4-.82-10.6-2.46-12.6s-5.22-3.32-10.74-3.96c-1.28 0-1.92-1.04-1.92-3.12 0-1.92.64-2.88 1.92-2.88 8.4-2.16 15.28-4.46 20.64-6.9s8.72-4.46 10.08-6.06c.8-.96 1.68-1.44 2.64-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.92-1.92 31.84-1.92 41.76v37.68c0 7.84.98 12.96 2.94 15.36s6.42 4.04 13.38 4.92c1.28.16 1.92 1.24 1.92 3.24z"></path></g><path d="m197.28 171.12c0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-47.76c0-4.72-.98-7.98-2.94-9.78s-5.46-2.7-10.5-2.7h-37.2v60.24c0 7.76 1 12.88 3 15.36s6.44 4.16 13.32 5.04c1.28.16 1.92 1.2 1.92 3.12 0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-60.24h-45.84v60.24c0 7.76.96 12.88 2.88 15.36s6.32 4.16 13.2 5.04c1.28.16 1.92 1.2 1.92 3.12 0 2.24-.64 3.36-1.92 3.36-3.2 0-7.52-.2-12.96-.6s-10.16-.6-14.16-.6c-3.84 0-8.48.2-13.92.6s-9.76.6-12.96.6c-1.28 0-1.92-1.12-1.92-3.36 0-1.92.64-2.96 1.92-3.12 6.88-.88 11.32-2.56 13.32-5.04s3-7.6 3-15.36v-57.12c0-2.4-.96-3.6-2.88-3.6h-12.24c-1.76 0-2.64-1.04-2.64-3.12 0-2.16.72-3.36 2.16-3.6 10.32-2.24 15.48-4.4 15.48-6.48.08-17.36 6.46-33.02 19.14-46.98s27.78-20.94 45.3-20.94c4.4 0 8.72.82 12.96 2.46s7.56 3.74 9.96 6.3l3.24 3.24c11.84-11.84 25.52-17.76 41.04-17.76 6.96 0 13.22 1.7 18.78 5.1s8.34 7.14 8.34 11.22c0 6.24-4 9.36-12 9.36-2.88 0-6.8-1.84-11.76-5.52s-10.96-5.52-18-5.52c-18.4 0-27.6 11.92-27.6 35.76v24.96h36.72c7.04 0 12.86-.48 17.46-1.44s8.74-2.84 12.42-5.64c1.6-1.2 2.76-1.8 3.48-1.8 2.24 0 3.36.64 3.36 1.92 0 3.04-.32 9.64-.96 19.8s-.96 17.48-.96 21.96v37.44c0 7.76 1 12.88 3 15.36s6.44 4.16 13.32 5.04c1.28.16 1.92 1.2 1.92 3.12zm-100.08-139.68c-6.88-7.36-16.72-11.04-29.52-11.04-18.56 0-27.84 11.92-27.84 35.76v19.2h45.84v-1.68c0-16.16 3.84-30.24 11.52-42.24z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(451 76)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="160.046875" y="297">Common ligatures off</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="469.667969" y="297">Common ligatures on</tspan></text><path d="m614.234697 112.966543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.5615382-.922931-.3849641c-.246281.5903705-.516624 1.1701318-.810258 1.7379603l.888173.45951c.305396-.590563.587475-1.1951375.845016-1.8125062zm-44.532059-.9126517-.931972.3625315c.242614.6239585.510056 1.2355171.801112 1.8334624l.898847-.4382621c-.279826-.5749154-.536067-1.1612644-.767987-1.7577318zm45.76287-2.8914793-.97363-.2281349c-.146459.6237542-.3183 1.2401719-.514981 1.8480249l.951226.3084932c.204496-.6319437.384012-1.2751262.537385-1.9283832zm-46.861861-.8229393-.979108.2033412c.136207.6565946.298692 1.3035657.486305 1.9397645l.959143-.2829239c-.180601-.6124244-.336218-1.2328865-.46634-1.8601818zm47.454653-3.1407804-.99775-.0670456c-.04281.6408108-.111476 1.2772743-.205648 1.9083244l.989021.1477696c.097738-.6549075.169555-1.3182827.214377-1.9890484zm-47.926526-.7224656-.999222.0394396c.026299.6720717.079671 1.3371911.159054 1.9942982l.992665-.1208987c-.07645-.6330477-.12739-1.2710053-.152497-1.9128391zm47.98013-1.2190201c-.007631-.6727971-.04238-1.3390799-.103207-1.9978066l-.995773.0918395c.058624.6348503.091736 1.2741208.099038 1.9168098zm-48.820056-2.6876153c-.079399.6567798-.132811 1.3215654-.159178 1.9932983l.999225.0393589c.025184-.6416779.076189-1.2794792.152692-1.912371zm48.441635-1.3509399c-.117605-.6607347-.261694-1.3123055-.431132-1.9535755l-.966707.2558876c.163065.6171974.30099 1.2418748.4133 1.8728534zm-47.636728-2.5717139c-.186299.6365608-.347453 1.2838592-.482316 1.9407471l.979508.2014036c.128803-.6274123.283096-1.2480338.462373-1.8606627zm46.599791-1.3372391c-.224879-.6305914-.474864-1.2492626-.748752-1.85481l-.911108.4121669c.263442.5824572.503003 1.1757603.717985 1.7786069zm-45.147112-2.4320018c-.289862.5986803-.556076 1.2109443-.797428 1.8355786l.932936.3600433c.230647-.5968999.485631-1.1837262.764218-1.7591648zm43.483734-1.2392887c-.325312-.5841843-.673829-1.1536754-1.044305-1.7072273l-.830835.5565188c.355823.5316767.689834 1.0776441 1.0011 1.6365635zm-41.461825-2.1923753c-.38351.5443357-.745406 1.104995-1.084439 1.6807297l.861555.5076641c.324709-.5514254.671849-1.0893917 1.040452-1.6125621zm39.225035-1.1471089c-.41549-.5222254-.851856-1.0270994-1.307837-1.5133595l-.730049.6833952c.437837.4668778.85656.9513562 1.255023 1.4521586zm-36.633572-1.9547463c-.468072.474945-.916901.9689066-1.345221 1.4806208l.76679.6418975c.410782-.4907633.841394-.9647082 1.290665-1.4205765zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m601.167334 173.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m535.167334 173.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m559.167334 119.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.3336957-.267854-1.9824311l-.981784.1899977c.119336.6151633.203766 1.2387854.252555 1.8687724zm-34.483861-2.6482938c-.151202.6436458-.266871 1.3009878-.344825 1.9698428l.993317.115421c.073081-.6269337.181703-1.2465778.325051-1.8567581zm33.70785-1.3196086c-.20454-.6394284-.444848-1.2628628-.718571-1.8679496l-.910695.4130807c.258926.5724718.484941 1.1597527.676749 1.7593548zm-32.341151-2.4626681c-.296496.594511-.560155 1.2082667-.788602 1.8388918l.940321.3402895c.214348-.5916694.462453-1.1699726.742917-1.7323841zm30.705438-1.159937c-.342872-.5741376-.717695-1.1269877-1.122015-1.6560953l-.794188.6076718c.381979.4999114.735182 1.0211703 1.057686 1.5612093zm-28.526149-2.1878034c-.424449.5130808-.82019 1.050779-1.184762 1.6106335l.837872.5458672c.3432-.5270498.716309-1.0342173 1.117307-1.5189599zm26.084823-1.0030196c-.463157-.4799571-.953497-.9335094-1.468539-1.3581776l-.635889.7717808c.485486.4003155.947931.8280353 1.384922 1.2808838zm-23.158979-1.8017493c-.531945.4034182-1.040109.8365589-1.522018 1.2969486l.691165.7226965c.454991-.4346444.934359-.843125 1.435634-1.2232532zm20.090753-.7302188c-.55788-.3626904-1.137721-.6944476-1.737092-.9928403l-.445793.8951364c.563217.2803874 1.109833.5928713 1.637264.9357364zm-16.699081-1.2844902c-.610629.274748-1.202656.5834952-1.773668.9238304l.512288.8588139c.540121-.3219079 1.098294-.6127142 1.671945-.8708125zm13.066184-.5159124c-.623868-.2230703-1.264101-.4117269-1.91841-.5636832l-.226376.97404c.613699.1425186 1.217265.3199919 1.808321.5313392zm-9.219694-.7012222c-.660204.1270521-1.307205.2912062-1.938748.4902075l.300227.953868c.598409-.188574 1.208278-.3429207 1.82729-.462054zm3.326647-.3157896v1c.633159 0 1.261717.0356159 1.88375.1062625l.112887-.9936079c-.655251-.0744207-1.321479-.1126546-1.996637-.1126546zm-.024032.0000161c-.424413.0005705-.845286.0162491-1.262109.0465269l.072071.9973996c.395227-.0287181.792733-.0434072 1.192045-.0439265z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures that the type designer has decided should be used in normal conditions. In most circumstances you should use these. Most browsers enable them by default.</p>
<pre><code class="language-css">font-variant-ligatures: common-ligatures; /* enable */
font-variant-ligatures: no-common-ligatures; /* disable */

font-feature-settings: &#x27;liga&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;liga&#x27; 0; /* low-level disable */
</code></pre>
<h3>discretionary-ligatures</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;ct&#x27; text with discretionary ligatures off (left) and discretionary ligatures on (right). In the ligatured version, a decorative connection forms between the letters, with highlighted circles marking the join points." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(160 142.52)"><path d="m92.64 38.52c0 6.56-3.28 9.84-9.84 9.84-2.8 0-5.1-.6-6.9-1.8s-3.62-3.8-5.46-7.8c-2.16-4.72-4.46-7.82-6.9-9.3s-5.62-2.22-9.54-2.22c-9.68 0-17.06 4.02-22.14 12.06s-7.62 19.78-7.62 35.22c0 12.88 3.2 23.26 9.6 31.14s14.96 11.82 25.68 11.82c12.16 0 21.8-3.8 28.92-11.4l.6-.24c.72 0 1.42.46 2.1 1.38s1.02 1.94 1.02 3.06c0 1.6-2.34 4.36-7.02 8.28s-9.8 6.88-15.36 8.88-11.46 3-17.7 3c-14.32 0-26.58-5.26-36.78-15.78s-15.3-23.82-15.3-39.9c0-15.92 5.34-29.1 16.02-39.54s23.34-15.66 37.98-15.66c10.8 0 19.94 1.86 27.42 5.58s11.22 8.18 11.22 13.38z"></path><path d="m185.28 31.32c0 4.32-1.04 6.48-3.12 6.48l-35.76-.96v57.6c0 15.04 5.36 22.56 16.08 22.56 6.64 0 12.68-1.56 18.12-4.68.64 0 1.22.42 1.74 1.26s.78 1.74.78 2.7c0 2-2.98 4.7-8.94 8.1s-12.66 5.1-20.1 5.1c-9.12 0-16.4-2.78-21.84-8.34s-8.16-12.9-8.16-22.02v-1.08l.48-58.32c0-2.24-.96-3.36-2.88-3.36h-9.12c-1.76 0-2.64-1.04-2.64-3.12 0-1.6.72-2.8 2.16-3.6 11.12-6.56 20.8-15.8 29.04-27.72.88-1.28 2-1.92 3.36-1.92 2.24 0 3.36.64 3.36 1.92l-.96 22.92h35.28c2.08 0 3.12 2.16 3.12 6.48z"></path></g><path d="m185.16 78.84c0 4.48-1.04 6.72-3.12 6.72l-35.76-.96v57.36c0 15.04 5.36 22.56 16.08 22.56 6.72 0 12.8-1.56 18.24-4.68.56 0 1.06.42 1.5 1.26s.66 1.74.66 2.7c0 2.24-2.92 5-8.76 8.28s-12.6 4.92-20.28 4.92c-9.04 0-16.26-2.78-21.66-8.34s-8.1-12.9-8.1-22.02v-1.08l.24-58.08c0-2.24-.88-3.36-2.64-3.36h-9.36c-1.6 0-2.4-1.12-2.4-3.36 0-1.44.76-2.6 2.28-3.48 5.76-3.36 9.7-6.48 11.82-9.36s3.18-6.4 3.18-10.56c0-14.8-3.12-26.26-9.36-34.38s-15.16-12.18-26.76-12.18c-10.32 0-18.78 3.28-25.38 9.84s-9.9 14.88-9.9 24.96c0 6.64 1.54 11.96 4.62 15.96s8.06 7.08 14.94 9.24c4.24 1.36 7.72 3.4 10.44 6.12s4.08 5.44 4.08 8.16c0 6.72-3.28 10.08-9.84 10.08-2.48 0-4.48-.56-6-1.68s-3.04-3.52-4.56-7.2c-1.92-4.56-4.04-7.58-6.36-9.06s-5.32-2.22-9-2.22c-19.84 0-29.76 15.76-29.76 47.28 0 12.96 3.4 23.32 10.2 31.08s16.12 11.64 27.96 11.64c5.76 0 11.58-1.24 17.46-3.72s10.62-5.64 14.22-9.48l.6-.24c.72 0 1.44.46 2.16 1.38s1.08 1.9 1.08 2.94c0 1.68-2.6 4.62-7.8 8.82s-10.84 7.46-16.92 9.78-12.16 3.48-18.24 3.48c-15.52 0-28.56-5.18-39.12-15.54s-15.84-23.74-15.84-40.14c0-15.92 5.3-29.06 15.9-39.42s23.3-15.54 38.1-15.54c-1.92-2-3.56-4.96-4.92-8.88s-2.04-7.72-2.04-11.4c0-13.84 4.78-25.14 14.34-33.9s21.66-13.14 36.3-13.14c14.32 0 26.08 4.9 35.28 14.7s13.8 22.34 13.8 37.62v20.04h35.28c2.08 0 3.12 2.16 3.12 6.48z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(450 95)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="445.285156" y="325">Discretionary ligatures on</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="160.164062" y="325">Discretionary ligatures off</tspan></text><path d="m584.834697 186.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path><path d="m515.767334 178.718016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-34.986909-.736193v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353l-.007179-.543468zm34.94722-1.316287c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.023101.000015c-.424729.000549-.845912.016228-1.26304.046528l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043928z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures which can be used for typographic purposes, for example to achieve a special effect. These are disabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: discretionary-ligatures; /* enable */
font-variant-ligatures: no-discretionary-ligatures; /* disable */

font-feature-settings: &#x27;dlig&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;dlig&#x27; 0; /* low-level disable */
</code></pre>
<h3>contextual</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Handwritten-style word &#x27;Deftly&#x27; demonstrating contextual ligatures, where certain letter combinations automatically adjust for smoother, more natural connections, with key join areas circled." style="width:100%;height:auto"><defs><path id="a" d="m374.5 235c9.664983 0 17.5-7.835017 17.5-17.5s-7.835017-17.5-17.5-17.5-17.5 7.835017-17.5 17.5 7.835017 17.5 17.5 17.5z"></path><mask id="b" fill="#fff" height="35" width="35" x="0" y="0"><use xlink:href="#a"></use></mask><path id="c" d="m449.1 195.92c13.530976 0 24.5-10.969024 24.5-24.5s-10.969024-24.5-24.5-24.5-24.5 10.969024-24.5 24.5 10.969024 24.5 24.5 24.5z"></path><mask id="d" fill="#fff" height="49" width="49" x="0" y="0"><use xlink:href="#c"></use></mask><path id="e" d="m518.5 227c9.664983 0 17.5-7.835017 17.5-17.5s-7.835017-17.5-17.5-17.5-17.5 7.835017-17.5 17.5 7.835017 17.5 17.5 17.5z"></path><mask id="f" fill="#fff" height="35" width="35" x="0" y="0"><use xlink:href="#e"></use></mask></defs><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5"><path d="m240.157985 201.117708c-6.941739 13.001845-17.769945 22.289595-30.072892 30.01893-14.149209 8.891244-29.516244 14.899046-45.700621 18.931851-.489901.121712-.998693.163119-2.215261.353843 6.264189-5.956356 8.468116-13.226448 10.975554-20.28574 5.980827-16.831379 12.01077-33.651466 17.625116-50.607067 2.727831-8.238769 5.992161-16.271756 8.756515-24.489193 1.159895-3.444323 1.677502-3.524627 5.31587-2.734127 6.990855 1.515753 13.883478 3.338922 20.373097 6.349096 8.620501 4.001437 15.907312 9.482238 18.56084 19.187823 2.250524 8.232495.253136 16.022058-3.618218 23.274584m3.040159-52.738909c-9.887444-6.559896-21.162732-10.578899-33.037488-12.438457-2.202667-.343805-3.988477-1.002555-4.882642-3.307553-.746816-1.92355-2.426838-2.466862-4.39274-2.246024-1.695135.191978-3.304631.727762-4.727738 1.621152-1.988571 1.245979-4.027518 1.263546-6.317083 1.130541-6.886326-.400269-13.833102-1.224648-20.614899.855748-2.162367.663769-4.293249 1.746629-4.666027 4.177103-.371519 2.421691 1.361397 3.939953 3.169876 5.372892 3.618218 2.863367 7.958064 3.653867 12.273982 4.476991 2.609449.496886 3.730303 1.297424 2.317271 4.13946-1.953309 3.926151-3.653481 7.989071-5.260458 12.072067-7.077753 17.999563-13.441433 36.252589-18.825311 54.823069-2.198889 7.586292-5.344836 15.023267-4.723959 23.220628.298475 3.921132 1.441998 7.169711 6.004756 8.740673-5.885114 1.45176-11.183353 2.71656-16.457664 4.076723-3.259293.84069-6.398944 2.0026-9.099069 4.109346-1.686318 1.313736-3.540135 2.678917-2.785763 5.123194.74052 2.401614 2.93563 3.022722 5.211342 3.384093 5.959417.947346 11.898685.703922 17.865658-.011293 27.011324-3.236031 52.258247-11.356852 74.432266-27.43412 14.289001-10.360571 26.284658-22.812831 32.009829-40.030677 7.561357-22.742564.871496-39.669306-17.494139-51.855556"></path><path d="m323.761276 178.030459c1.533979-1.011339 3.297618-1.801254 5.066251-2.301325 2.393956-.677958 5.177336-1.317353 6.832386 1.186737 1.571424 2.377206 1.25689 5.1587-.063655 7.678962-1.070915 2.047557-2.837051 3.561455-4.520809 5.081574-8.78949 7.940193-19.522353 12.185826-30.640896 15.795797 6.008606-10.759005 12.943342-20.590017 23.326723-27.441745m44.138417 40.418729c-8.863131 8.195205-18.072001 15.908998-28.21948 22.447248-9.854164 6.349169-20.198852 11.669584-32.234787 12.315199-9.756808.521219-15.070193-3.103679-16.587947-12.399788-.549187-3.357446-.218427-6.586765.124815-9.88077.948596-9.077172.984793-8.884358 9.665693-11.342422 13.842012-3.92096 27.409429-8.594515 38.944855-17.588342 7.05955-5.503277 12.459058-12.107457 13.556184-21.455812.856233-7.292091-4.885269-17.121858-11.287043-19.542603-10.026409-3.79532-19.005618-1.395722-27.464348 4.229462-11.522944 7.664034-20.472197 17.80106-27.50304 29.586331-5.187322 8.695277-10.070094 17.563463-12.27558 27.633315-1.603876 7.324433-2.837051 14.622743-1.680013 22.137502 1.54022 9.992726 6.591493 17.605758 15.704255 22.131282 9.404829 4.672312 19.249008 3.978182 28.887241.91431 16.710266-5.31295 30.283924-15.774649 43.114932-27.241467 5.475645-4.894981 10.545641-10.244006 15.801611-15.386534 2.562457-7.190086 4.928954-14.442369 6.954706-21.802877-5.680342 4.556623-10.167451 10.313667-15.502054 15.245966"></path><path d="m381.883202 203.673532c2.521643-6.91324 4.976695-13.851405 7.605133-20.724763.732495-1.918059-.536493-2.118714-1.662248-2.532486-4.701538-1.723636-9.408102-3.39742-13.506556-6.408487-3.13729-2.304413-5.994398-4.810727-5.249339-9.105485.619417-3.576888 4.503023-6.069493 9.410614-6.295074 5.608676-.255492 11.070351.701669 16.258124 2.801688 2.135921.864934 3.014161.544634 3.908735-1.689986 4.43392-11.073397 9.130432-22.038365 16.425228-31.663558 7.917983-10.447753 17.67914-17.336067 31.63047-15.855459 9.538769 1.013244 16.773257 8.458654 16.857438 17.066865.026385 2.806673-.761393 5.381533-2.478924 7.550099-2.333179 2.947506-7.19177 3.18181-10.448421.491044-2.08315-1.721144-3.907478-3.750124-5.900166-5.585928-3.310677-3.050948-5.788344-3.221691-9.46464-.639353-4.399997 3.09083-7.043512 7.603691-9.558873 12.134-4.186404 7.541376-7.543568 15.475337-10.854245 23.427992-.961164 2.311891-.655853 3.19552 2.08692 3.527036 6.971896.843747 13.957612 1.165293 20.963431 1.362209 1.790404.051098 2.392231-.193177 1.805481-2.239606-2.030381-7.098938 1.31045-10.591077 8.714556-9.15783 3.68886.714132 7.336258 1.682509 10.957272 2.695752 1.811763.508492 2.692516.317808 3.500396-1.657582 2.785492-6.80855 5.827294-13.516149 8.851506-20.228734.848086-1.884409 1.954996-3.666621 3.608449-5.012628 4.149968-3.383711 8.901763-2.187261 10.876861 2.789225 1.541632 3.882232 1.50017 7.909035.824214 11.955779-.841804 5.033815-2.421129 9.874453-4.148711 14.656516-.693546 1.925537-.540262 2.72317 1.741403 3.052194 6.326094.909801 12.686111 1.272475 19.05618 1.56411 1.045345.047359 2.090689.072285 3.13729.094719 2.679952.05733 5.099824.676742 5.864987 3.618016.745059 2.859017-1.049114 4.712269-3.098342 6.261423-4.657563 3.52205-10.24111 3.939562-15.771888 4.345856-5.534546.407541-11.08794.287896-16.622487-.052345-1.750198-.107182-2.718901.478581-3.476524 1.939247-9.335229 17.98539-15.797017 36.967821-20.060063 56.715483-.173386.803865-.226156 1.650104-.212335 2.47391.065334 3.930838 2.182408 5.637026 6.121297 4.973993 7.265898-1.223869 13.537966-4.713516 19.649211-8.543403 15.583425-9.768518 28.965595-22.103173 41.700706-35.196826.663392-.682974 1.03655-1.941739 2.41736-1.650104 1.162192 1.107963.544031 2.310644.141976 3.46472-2.05174 5.880055-4.332149 11.680346-6.280863 17.59779-.43221 1.31111-.745059 2.973678-2.820671 2.695752-7.616441 7.241017-15.235395 14.478295-23.634588 20.849393-9.248536 7.01419-18.830024 13.483745-29.995862 17.154106-5.935346 1.952956-12.088054 3.104539-17.950527-.073532-7.435516-4.030542-8.950763-11.084613-8.602734-18.663378.456082-9.96668 4.153737-19.21549 7.064871-28.616349 3.376011-10.902654 7.269668-21.633317 11.299019-32.312882.248772-.661787.327927-1.387135.562878-2.425305-6.303478.840008-12.412211 1.346007-18.53602 1.535445-7.850136.243029-15.692734.022433-23.477536-1.06185-2.445-.341487-3.667501.291635-4.563331 2.756821-10.110442 27.802514-19.219515 55.921588-27.367423 84.348499-1.341861 4.678619-2.416103 9.479376-5.619984 13.386534-3.437575 4.191315-7.151564 3.748878-9.332716-1.2301-2.678695-6.118099-1.952482-12.398216-.392004-18.616019 3.079495-12.276078 6.388915-24.493581 10.143109-36.587699.368133-1.183987.603084-2.407856.902113-3.614277-1.023986-.574545-1.027755-1.390874-.675956-2.386669 2.319358-6.57923 3.639859-13.544814 7.676749-19.458519"></path><path d="m512.962073 229.342943c2.234932-6.01776 4.464856-12.038024 6.706049-18.05328.726196-1.942909 1.48119-3.874551 2.222411-5.8112 2.442775-5.970189 4.8555-11.951645 7.333333-17.908063 4.477377-10.758608 8.981047-21.505949 13.49849-32.249534 3.426896-8.152206 6.855044-16.304411 10.359568-24.424068 1.307154-3.028284 3.582152-5.374297 6.034944-7.504987 3.74492-3.254873 8.425131-1.917871 9.79614 2.870548.742473 2.597639 1.106823 5.295428.939047 8.043293-1.088043 17.631398-7.737749 33.090794-18.27511 47.0542-4.374708 5.79743-6.843776 12.598863-9.639633 19.173707-4.767855 11.216794-9.514426 22.461129-12.768537 34.256289-.972853 3.530286-1.780433 7.09312-2.161061 10.721052-.455751 4.333989 1.5776 5.91761 5.663081 4.3753 6.947697-2.622676 12.541914-7.384806 18.228784-11.956651 11.237264-9.032273 21.204937-19.42283 31.523188-29.44784 2.700699-2.623929 3.381821-5.604641 3.649763-8.933375.326788-4.04731.484548-8.10839.717432-12.163211.103921-1.817722-.126458-3.542804-1.35348-5.00249-.132719-.157736-.232884-.348021-.325536-.533298-2.817142-5.554567 4.082977-18.649172 10.253143-19.46289 3.292925-.434401 6.423083 1.507256 7.807864 5.011252 1.436116 3.636695 2.040863 7.442393 1.759148 11.349493-1.063001 14.762102-2.857207 29.446588-4.611347 44.136081-.557168 4.655721-1.051733 9.317701-1.538786 13.979681-.071367.691034-.296738 1.60991.479541 1.982969.835126.401851 1.319674-.456934 1.756644-.972707 8.435148-9.927363 16.867791-19.858482 24.764552-30.226505 4.168117-5.469439 8.396334-10.893811 12.455522-16.442118 2.580502-3.527781 4.842979-7.28716 7.365886-10.858757 1.260827-1.783921 1.63269-3.303697-.175289-4.927378-1.478686-1.32949-1.263331-2.920623-.562176-4.594379 2.435262-5.814956 12.893744-12.134417 19.211653-11.567318 3.602185.321731 5.154743 1.97045 5.370098 5.63093.359342 6.035287-1.913152 11.228061-5.234875 16.032755-6.928916 10.02501-13.632461 20.227785-20.993339 29.928559-7.741505 10.204028-16.073983 19.968648-24.276248 29.817143-14.470091 17.373512-29.74651 34.067256-43.730801 51.851383-.36435.463193-.667349.976462-1.454897 2.140705 3.821296-.829993 6.917648-1.543561 10.030276-2.169498 5.108417-1.026537 10.229354-2.021777 15.485514-1.248119 1.344716.197796 2.872232.322983 3.356781 1.846515.52211 1.641207-.634796 2.815465-1.74788 3.739348-3.825052 3.173502-8.438904 4.977452-12.920037 6.901583-6.125092 2.630188-12.426724 4.853517-18.660746 7.234582-1.669.638456-3.414375.831245-5.198565.978966-8.957258.739857-11.834498-5.660976-9.981445-12.979433 1.397302-5.512003 4.769107-9.917349 8.236069-14.243826 6.713562-8.377543 13.447156-16.740064 20.179498-25.103836.787548-.977714 1.696546-1.889079 1.434864-3.309956-1.923168-10.484447-.518354-20.997688-.270445-31.500914.017529-.717324.002504-1.434647.002504-2.119423-1.229526-.455682-1.653975.456934-2.152296 1.012767-13.271867 14.797154-27.765747 28.241032-44.111428 39.604296-4.640146 3.22608-9.598315 5.876298-15.27642 6.897827-5.368846.965195-10.765237-2.106904-12.700926-7.208292-2.623072-6.914102-1.488703-13.750588.256673-20.599592 1.108075-4.342752 2.164817-8.698023 3.242843-13.048286"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="326.277344" y="344">Contextual ligatures</tspan></text><use mask="url(#b)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#a"></use><use mask="url(#d)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#c"></use><use mask="url(#f)" stroke="#e6594c" stroke-dasharray="2" stroke-width="2" xlink:href="#e"></use></g></svg></figure></p>
<p>These are alternate ligatures that are affected by their surrounding context. They often harmonize the shapes of grouped glyphs. These are enabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: contextual; /* enable */
font-variant-ligatures: no-contextual; /* disable */

font-feature-settings: &#x27;calt&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;calt&#x27; 0; /* low-level disable */
</code></pre>
<h3>historical-ligatures</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;sb&#x27; text with historical ligatures off (left) and historical ligatures on (right). In the ligatured version, an archaic &#x27;long s&#x27; character appears, with stylistic connections highlighted by circles." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(149 104)"><path d="m73.8 144.6c0 9.76-3.84 17.96-11.52 24.6s-16.96 9.96-27.84 9.96c-3.84 0-9.76-.84-17.76-2.52-6-1.2-10.08-1.8-12.24-1.8-.64-5.6-2.12-14.12-4.44-25.56 0-1.2 1.16-1.8 3.48-1.8 1.92 0 3.08.64 3.48 1.92 1.84 5.92 5.48 11.08 10.92 15.48s11.04 6.6 16.8 6.6c6 0 10.66-1.64 13.98-4.92s4.98-7.88 4.98-13.8c0-3.76-1.38-7.08-4.14-9.96s-8.74-6.44-17.94-10.68c-12.08-5.52-20.06-10.72-23.94-15.6s-5.82-10.72-5.82-17.52c0-8.4 3.64-15.62 10.92-21.66s15.88-9.06 25.8-9.06c4.16 0 10 .72 17.52 2.16 4.16.8 6.88 1.2 8.16 1.2.24 9.44.76 17.48 1.56 24.12 0 1.2-1.16 1.8-3.48 1.8-2 0-3.12-.64-3.36-1.92-.88-5.84-3.08-10.58-6.6-14.22s-7.72-5.46-12.6-5.46c-12.48 0-18.72 5.44-18.72 16.32 0 3.68 1.48 7.08 4.44 10.2s9.4 7.16 19.32 12.12c11.84 5.92 19.64 11.04 23.4 15.36s5.64 9.2 5.64 14.64z"></path><path d="m203.28 123.24c0 14.72-5.2 27.72-15.6 39s-22.44 16.92-36.12 16.92c-7.6 0-14.96-1.6-22.08-4.8-4.88-2.24-9.2-3.36-12.96-3.36-6 0-9.96 2.56-11.88 7.68-.4.96-1.4 1.44-3 1.44-2.08 0-3.12-.64-3.12-1.92.64-6.72.96-14.8.96-24.24v-117c0-6.48-.82-10.72-2.46-12.72s-5.22-3.28-10.74-3.84c-1.28 0-1.92-.96-1.92-2.88 0-2.24.64-3.36 1.92-3.36 14.24-3.68 24.36-7.92 30.36-12.72 1.2-.96 2.2-1.44 3-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.44-1.92 31.44-1.92 42v35.88c7.52-7.52 16.72-11.28 27.6-11.28 16.24 0 29.4 4.92 39.48 14.76s15.12 23.16 15.12 39.96zm-24.12.96c0-14.72-2.92-26.24-8.76-34.56s-14.04-12.48-24.6-12.48c-5.68 0-11.22 2.14-16.62 6.42s-8.1 8.54-8.1 12.78v55.44c0 4.24 3.22 8.54 9.66 12.9s12.42 6.54 17.94 6.54c9.6 0 17.08-4.28 22.44-12.84s8.04-19.96 8.04-34.2z"></path></g><path d="m194.28 123c0 14.8-5.22 27.82-15.66 39.06s-22.58 16.86-36.42 16.86c-7.52 0-14.8-1.56-21.84-4.68-4.96-2.16-9.28-3.24-12.96-3.24-5.92 0-9.92 2.48-12 7.44-.4.96-1.4 1.44-3 1.44-1.92 0-2.88-.64-2.88-1.92.64-6.72.96-14.8.96-24.24v-117c0-14.24-7.52-21.36-22.56-21.36-18.72 0-28.08 12-28.08 36v96.84c0 8.08.84 13.3 2.52 15.66s5.88 3.94 12.6 4.74c1.28 0 1.92 1.12 1.92 3.36s-.64 3.36-1.92 3.36c-3.28 0-7.32-.24-12.12-.72-5.28-.48-9.88-.72-13.8-.72s-8.72.24-14.4.72c-5.12.48-9.36.72-12.72.72-1.28 0-1.92-1.12-1.92-3.36s.64-3.36 1.92-3.36c6.96-.8 11.42-2.4 13.38-4.8s2.94-7.6 2.94-15.6v-57.12c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12 0-2 .72-3.2 2.16-3.6 10.24-2.72 15.36-4.96 15.36-6.72 0-12.16 2.96-24.1 8.88-35.82s13.74-20.9 23.46-27.54 20.38-9.96 31.98-9.96c7.36 0 13.6 1.52 18.72 4.56 2.48-1.44 4.6-2.84 6.36-4.2 1.12-.88 2.08-1.32 2.88-1.32 2.24 0 3.36.64 3.36 1.92-1.28 13.12-1.92 27.04-1.92 41.76v35.88c7.52-7.52 16.64-11.28 27.36-11.28 16.4 0 29.66 4.92 39.78 14.76s15.18 23.16 15.18 39.96zm-24.48.96c0-14.8-2.9-26.34-8.7-34.62s-14.02-12.42-24.66-12.42c-5.52 0-10.98 2.16-16.38 6.48s-8.1 8.56-8.1 12.72v55.44c0 4.32 3.2 8.64 9.6 12.96s12.4 6.48 18 6.48c9.6 0 17.04-4.24 22.32-12.72s7.92-19.92 7.92-34.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.36 104.24)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="470.565625" y="332.12">Historical ligatures on</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="165.444531" y="332.12">Historical ligatures off</tspan></text><path d="m552.834697 139.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.9547468c-.468072.474945-.916901.9689068-1.345221 1.4806208l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m469.167334 203.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m508.167334 290.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>These are ligatures which could be considered a subset of discretionary, but are specifically used to achieve a historical effect. These are disabled by default.</p>
<pre><code class="language-css">font-variant-ligatures: historical-ligatures; /* enable */
font-variant-ligatures: no-historical-ligatures; /* disable */

font-feature-settings: &#x27;hlig&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;hlig&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-position</h2>
<p>The proper markup for subscripts and superscripts uses the <code>sub</code> and <code>sup</code> elements. By default, browsers take a regular numeral character, make it smaller using <code>font-size</code>, and raise or lower it with <code>vertical-align</code>. These are not true subscript and superscript characters and typically appear quite ugly, not to mention they can mess up line height.</p>
<p>Thankfully, there is now a way to enable true subscripts and superscripts with <code>font-variant-position</code>. Note that currently only Firefox supports this.</p>
<h3>sub</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Chemical formula &#x27;C2H3O2&#x27; demonstrating true subscript positioning. The numerals are lowered and resized relative to the main letters, with horizontal lines showing their vertical alignment." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <g stroke="#e6594c">
            <path d="m106 147.6 524.781432.5" stroke-linecap="square"></path>
            <path d="m106 260.6 524.781432.5" stroke-linecap="square"></path>
            <path d="m106 293.6 524.781432.5" stroke-linecap="square"></path>
        </g>
        <g fill="#f5f5f5" fill-rule="nonzero" transform="translate(106 145)">
            <path d="m92 98.5216802c-9.2 8.3848238-20.9824561 13.7059618-35.9929825 13.7059618-29.5368421 0-48.42105259-22.8970187-48.42105259-52.727642 0-28.8631436 20.49824559-52.72764228 50.35789469-52.72764228 11.9438597 0 22.2736843 3.54742548 30.5052632 9.35230348l2.2596491-6.77235768c-8.7157894-5.80487805-20.1754386-9.35230352-32.2807017-9.35230352-34.3789474 0-58.4280702 27.0894309-58.4280702 61.2737127 0 30.798103 21.7894737 57.7262873 55.6842105 57.7262873 14.3649123 0 26.4701755-4.676152 35.9929825-11.932249z"></path>
            <path d="m111.017986 100.401042c5.989208-5.166667 11.654676-7.7500003 18.129496-7.7500003 8.579137 0 13.758993 4.5208333 13.758993 11.4635413 0 5.651042-3.23741 10.817709-11.978417 19.052084-5.827339 5.489583-14.082734 12.270833-24.928058 21.473958l.971223 4.359375c6.636691-.161458 13.920863-.322917 21.690648-.322917 8.417266 0 15.053956.161459 21.852517.322917 0-2.098958.323741-4.036458.485612-6.135417-11.007194.322917-24.442446.484375-35.773381.484375 6.960431-5.8125 13.920863-11.625 19.42446-16.630208 9.71223-9.203125 14.568345-14.854167 14.568345-23.25 0-10.171875-8.093525-16.46875-19.748201-16.46875-8.093525 0-15.539568 3.5520833-21.205036 8.5572917z"></path>
            <path d="m264 116c-.159851-4.514851-.159851-17.0919378-.159851-23.2192362v-67.0777935c0-6.2885431 0-19.02687412.159851-23.7029703-2.237918.48373409-5.434944.64497878-7.992565.64497878.319703 7.73974542.479554 28.54031122.479554 38.85997172v12.2545969h-70.654275v-28.0565771c0-6.2885431 0-19.02687412.159851-23.7029703-2.237918.48373409-5.434944.64497878-7.992565.64497878.319703 7.73974542.479554 28.54031122.479554 38.85997172v35.6350778c0 10.4809052-.159851 31.1202267-.479554 38.8599717h7.992565c-.159851-4.514851-.159851-17.0919378-.159851-23.2192362v-32.5714286h70.654275v16.9306931c0 10.4809052-.159851 31.1202267-.479554 38.8599717z"></path>
            <path d="m290.802239 147.253846c5.776119 1.776923 11.391791 2.746154 17.328358 2.746154 14.440299 0 24.869403-7.269231 24.869403-17.284615 0-8.4-7.220149-14.053847-21.339552-15.669231 12.675373-2.907692 20.05597-8.238462 20.05597-16.153846 0-7.9153849-7.701493-13.892308-20.05597-13.892308-8.022388 0-15.08209 2.5846154-20.697761 5.6538462l1.925373 4.8461538c5.294776-3.0692308 11.712686-5.0076923 18.291044-5.0076923 9.305971 0 14.279851 4.0384615 14.279851 9.0461543 0 6.623076-7.380597 11.953846-24.869403 14.538461l.962687 4.038462c16.044776.484615 25.190298 4.523077 25.190298 12.6 0 6.784615-7.541044 11.792307-19.093283 11.792307-6.417911 0-12.19403-1.292307-17.649254-3.230769z"></path>
            <path d="m406.794835 112.550136c-27.959828 0-47.242468-22.7357729-47.242468-51.4376699 0-29.9918699 20.246772-54.6626016 49.652798-54.6626016 27.959828 0 47.242468 22.5745257 47.242468 51.4376694 0 29.9918699-20.086084 54.6626021-49.652798 54.6626021zm-.321377 6.449864c33.905308 0 57.526542-27.5731707 57.526542-62.402439 0-30.4756098-22.014347-56.597561-54.312769-56.597561-34.065997 0-57.687231 27.5731707-57.687231 62.402439 0 30.3143632 22.175036 56.597561 54.473458 56.597561z"></path>
            <path d="m485.017986 100.401042c5.989208-5.166667 11.654676-7.7500003 18.129496-7.7500003 8.579137 0 13.758993 4.5208333 13.758993 11.4635413 0 5.651042-3.23741 10.817709-11.978417 19.052084-5.827339 5.489583-14.082734 12.270833-24.928058 21.473958l.971223 4.359375c6.636691-.161458 13.920863-.322917 21.690648-.322917 8.417266 0 15.053956.161459 21.852517.322917 0-2.098958.323741-4.036458.485612-6.135417-11.007194.322917-24.442446.484375-35.773381.484375 6.960431-5.8125 13.920863-11.625 19.42446-16.630208 9.71223-9.203125 14.568345-14.854167 14.568345-23.25 0-10.171875-8.093525-16.46875-19.748201-16.46875-8.093525 0-15.539568 3.5520833-21.205036 8.5572917z"></path>
        </g>
        <text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16">
            <tspan x="667.230469" y="269">sub</tspan>
        </text>
        <path d="m643.5 232.5v62" stroke="#525252" stroke-linecap="square"></path>
    </g>
</svg></figure></p>
<p>This enables true subscript characters, which are positioned specifically for use in footnotes and scientific formulas.</p>
<pre><code class="language-css">font-variant-position: sub; /* enable */
font-variant-position: normal; /* disable both variants */

font-feature-settings: &#x27;subs&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;subs&#x27; 0; /* low-level disable */
</code></pre>
<h3>super</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Mathematical expression &#x27;f(x) = z²&#x27; demonstrating true superscript positioning. The &#x27;2&#x27; is raised and resized in relation to the main text, shown against baseline and cap-height guides." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd" transform="translate(106 141)">
        <g stroke="#e6594c" stroke-linecap="square">
            <path d="m0 23.5 524.781432.5"></path>
            <path d="m0 136.6 524.781432.5"></path>
            <path d="m0 .6 524.781432.5"></path>
        </g>
        <text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16">
            <tspan x="561" y="37">sup</tspan>
        </text>
        <path d="m537.5.5v62" stroke="#525252" stroke-linecap="square"></path>
        <g fill="#f5f5f5" fill-rule="nonzero" transform="translate(41 1)">
            <path d="m42.020371 19.7109228c-1.7846489-.814501-3.7315387-1.3032015-6.976355-1.3032015-14.6016733 0-22.2269916 12.0546139-22.2269916 32.2542373v12.2175141h-10.70789381l-2.10913059 6.1902071h12.8170244v39.5847462c0 9.448211-.1622408 20.362523-.6489633 27.367231h7.9497999c-.3244816-4.235405-.3244816-10.751412-.3244816-16.452919v-50.4990582h21.4157876c0-2.4435028.1622408-4.5612052.4867224-6.1902071h-21.90251v-12.8691149c0-15.8013183 5.0294653-24.9237288 15.8995999-24.9237288 2.595853 0 4.8672244.6516008 6.976355 1.4661017z"></path>
            <path d="m103.185158 173 3.082576-4.887006c-23.3626776-12.217514-44.6162244-38.933145-44.6162244-72.1647831 0-33.2316384 20.7668243-59.9472693 44.6162244-72.4905838l-3.082576-5.0499058c-26.4452526 14.0094162-48.5100034 43.1685499-48.5100034 77.86629 0 34.5348397 22.7137141 63.2052727 48.5100034 76.7259887z"></path>
            <path d="m118.111313 62.2278719-7.625318 1.1403014c1.622408 2.4435028 18.495453 25.086629 20.442343 28.3446327l4.867224 6.6789077-29.85231 37.6299433h8.436522c.973445-1.466101 20.117862-26.55273 25.471808-33.231638l24.336123 34.53484 7.463077-1.629002c-1.622408-2.443503-17.197526-23.457627-19.144416-26.552731l-8.274282-11.2401128 27.256457-35.3493409c-2.271371.1629002-5.516187.3258004-8.274281.1629002l-23.038196 30.6252354z"></path>
            <path d="m176.518007 173c26.120771-13.520716 48.672244-42.516949 48.672244-77.2146893 0-34.5348399-22.226992-63.5310734-48.672244-77.3775894l-2.920335 5.0499058c23.687159 12.3804143 44.616224 39.0960452 44.616224 72.4905838 0 33.0687381-21.253547 59.7843691-44.616224 72.0018831z"></path>
            <path d="m308.58203 76.2372881c-9.085486.3258004-19.631139.4887006-28.716624.4887006-11.84358 0-20.442343-.3258004-28.392143-.4887006 0 1.7919021-.162241 4.8870057-.486722 6.5160076 6.976355 0 13.628228-.1629002 22.389232-.1629002h11.356857c7.787559 0 15.412877.1629002 23.200437.1629002.16224-2.1177025.324481-4.7241055.648963-6.5160076zm0 26.3898309c-9.085486.3258-19.631139.4887-28.716624.4887-11.84358 0-20.442343-.1629-28.392143-.4887 0 1.954802-.162241 5.049905-.486722 6.516007 6.976355 0 13.628228-.1629 22.389232-.1629h11.356857c7.787559 0 15.412877.1629 23.200437.1629.16224-1.954802.324481-4.724105.648963-6.516007z"></path>
            <path d="m387.917788 62.5536723c-9.409967.3258004-18.819934.4887006-29.365587.4887006-10.058931 0-18.333212-.1629002-26.769735-.4887006 0 2.606403-.324481 4.3983051-.648963 6.6789077 15.575118-.3258003 30.663514-.1629002 46.563114-.1629002l-51.105857 65.4858762 1.460168 1.954802c9.247726-.488701 18.982175-.651601 29.85231-.651601 10.870134 0 20.117861.1629 29.203346.488701 0-2.443503.324482-4.561206.973445-7.004708-16.386322.4887-35.044016.3258-49.970171.3258l51.105857-65.3229756z"></path>
            <path d="m405.926519 13.5207156c6.00291-5.212806 11.681338-7.81920901 18.170971-7.81920901 8.598763 0 13.790469 4.56120531 13.790469 11.56591341 0 5.7015066-3.244816 10.9143126-12.00582 19.2222222-5.840669 5.5386064-14.114951 12.3804143-24.985086 21.665725l.973445 4.3983051c6.651874-.1629002 13.95271-.3258004 21.74027-.3258004 8.436522 0 15.088395.1629002 21.90251.3258004 0-2.1177024.324481-4.0725047.486722-6.1902071-11.032375.3258003-24.498363.4887005-35.85522.4887005 6.976355-5.8644068 13.95271-11.7288135 19.468898-16.7787194 9.734449-9.2853107 14.601673-14.9868173 14.601673-23.4576271 0-10.26271186-8.112041-16.6158192-19.793379-16.6158192-8.112041 0-15.575119 3.58380414-21.253547 8.63370998z"></path>
        </g>
    </g>
</svg></figure></p>
<p>This enables true superscript characters, which are sized and positioned specifically for use in mathematical expressions and scientific formulas.</p>
<pre><code class="language-css">font-variant-position: super; /* enable */
font-variant-position: normal; /* disable both variants */

font-feature-settings: &#x27;sups&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;sups&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-caps</h2>
<p>A capital is not a capital is not a capital. The most significant use of <code>font-variant-caps</code> is to enable small caps, although there are several other options available.</p>
<h3>small-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;Ab&#x27; with small caps off (left) and small caps on (right). In the right example, the &#x27;b&#x27; is resized to match the x-height and resembles a miniature uppercase letter." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd" transform="translate(105 125)"><path d="m0 6.62 589.754371.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m-.49957592 62.1195763-.00084781 1 3 .002543.00084674-.9999996zm4.99999821.004239-.00084781 1 3 .0025431.00084673-.9999996zm4.9999982.0042391-.00084781 1 3.00000002.002543.0008467-.9999996zm4.99999821.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008467-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008467-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008468-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008468-.9999997zm4.9999982.004239-.0008478 1 3 .0025431.0008468-.9999996zm4.9999982.0042391-.0008478 1 3 .0025431.0008468-.9999997zm4.9999982.0042391-.0008478 1 3 .002543.0008468-.9999996zm4.9999982.004239-.0008478 1 2.9999997.0025431.000847-.9999997zm4.9999979.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000846-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000846-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000846-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000846-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000846-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000846-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000847 1 3 .0025431.000846-.9999997zm4.999999.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999997zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .002543.000846-.9999996zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .002543.000847-.9999996zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000847 1 3 .0025431.000846-.9999996zm4.999999.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997zm4.999998.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000847 1 3 .0025431.000846-.9999997zm4.999999.004239-.000848 1 3 .0025431.000847-.9999996zm4.999998.0042391-.000848 1 3 .0025431.000847-.9999997z" fill="#e6594c" fill-rule="nonzero"></path><path d="m0 155.62 589.754371.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><path d="m158.475238 154.876749c0 2.014657-.57575 3.021985-1.727251 3.021985-4.965845 0-10.579409-.215856-16.840693-.647568-5.397658-.431712-10.003659-.647568-13.818004-.647568-4.390095 0-9.823737.215856-16.300927.647568-6.837033.431712-12.666504.647568-17.4884118.647568-1.1515004 0-1.7272505-1.007328-1.7272505-3.021985s.4318126-3.021986 1.2954379-3.021986c6.4052208-.287808 11.0112224-1.133244 13.8180044-2.536309 2.806782-1.403064 4.210173-3.579613 4.210173-6.529647 0-1.870752-.719688-4.856762-2.159063-8.958028l-12.198707-36.1558956h-44.4767016l-12.3066602 33.4576946c-1.583313 4.461026-2.3749695 7.914724-2.3749695 10.361093 0 6.331779 5.8294706 9.785476 17.4884118 10.361092.8636253 0 1.2954379 1.007329 1.2954379 3.021986s-.5757502 3.021985-1.7272505 3.021985c-4.3181264 0-9.1040498-.215856-14.3577702-.647568-4.9658454-.431712-9.3919249-.647568-13.2782386-.647568-3.0946573 0-6.980971.215856-11.6589412.647568-4.89387659.431712-9.06806541.647568-12.52256651.647568-1.07953159 0-1.61929739-.8994-1.61929739-2.698201 0-2.014657.82764089-3.093937 2.48292266-3.237841 5.97340815-.575617 10.70535494-2.230513 14.19584044-4.964691 3.4904855-2.734177 7.1069163-8.310459 10.8492925-16.728847l50.5220786-124.00932722c.4318126-1.15123251 1.4393754-1.72684877 3.0226884-1.72684877 1.7272506 0 2.8067822.53964024 3.2385948 1.61892072l44.5846546 124.11725527c2.518907 6.979347 5.919432 12.123917 10.201574 15.433711 4.282142 3.309793 10.021651 5.396402 17.218529 6.259827 1.439375.143904 2.159063 1.115256 2.159063 2.914057zm-65.3116615-64.1092607-18.9997561-55.1512325-20.5111002 55.1512325z"></path><path d="m268.371554 110.842105c0 13.239174-4.67797 24.931379-14.033911 35.076616-9.35594 10.145236-20.18724 15.217855-32.493901 15.217855-6.837033 0-13.45816-1.439041-19.863381-4.317122-4.390095-2.014657-8.276409-3.021986-11.658941-3.021986-5.397658 0-8.960112 2.302465-10.687363 6.907395-.359844.863425-1.259453 1.295137-2.698829 1.295137-1.871188 0-2.806782-.575616-2.806782-1.726849.57575-6.04397.863625-13.311126.863625-21.801465v-105.2298472c0-5.8281146-.73768-9.6415723-2.21304-11.4403731-1.475359-1.7988008-4.695962-2.9500333-9.661807-3.4536975-1.151501 0-1.727251-.8634244-1.727251-2.5902732 0-2.0146569.57575-3.0219853 1.727251-3.0219853 12.810441-3.30979351 21.914491-7.12325121 27.312149-11.44037312 1.079532-.86342439 1.979141-1.29513658 2.698829-1.29513658 2.015126 0 3.022688.57561626 3.022688 1.72684877-1.1515 15.68554293-1.72725 28.27714853-1.72725 37.77481683v32.2704863c6.765065-6.763491 15.041473-10.1452365 24.829227-10.1452365 14.60966 0 26.448524 4.42505 35.516589 13.2751499s13.602098 20.8301132 13.602098 35.9400397zm-21.698585.863425c0-13.2391742-2.62686-23.6002668-7.880581-31.0832782-5.25372-7.4830113-12.630519-11.224517-22.130397-11.224517-5.109783 0-10.093621 1.9247169-14.951513 5.7741506s-7.286838 7.6808794-7.286838 11.4943371v49.8627585c0 3.813457 2.896743 7.680879 8.690229 11.602265s11.173152 5.882078 16.138998 5.882078c8.636252 0 15.365333-3.849433 20.18724-11.548301 4.821908-7.698867 7.232862-17.952032 7.232862-30.759493z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(330 4)"><path d="m158.475238 150.343771c0 2.014657-.57575 3.021985-1.727251 3.021985-4.965845 0-10.579409-.215856-16.840693-.647568-5.397658-.431712-10.003659-.647568-13.818004-.647568-4.390095 0-9.823737.215856-16.300927.647568-6.837033.431712-12.666504.647568-17.4884118.647568-1.1515004 0-1.7272505-1.007328-1.7272505-3.021985s.4318126-3.021986 1.2954379-3.021986c6.4052208-.287808 11.0112224-1.133244 13.8180044-2.536309 2.806782-1.403064 4.210173-3.579613 4.210173-6.529647 0-1.870752-.719688-4.856762-2.159063-8.958028l-12.198707-36.1558956h-44.4767016l-12.3066602 33.4576946c-1.583313 4.461026-2.3749695 7.914724-2.3749695 10.361093 0 6.331779 5.8294706 9.785476 17.4884118 10.361092.8636253 0 1.2954379 1.007329 1.2954379 3.021986s-.5757502 3.021985-1.7272505 3.021985c-4.3181264 0-9.1040498-.215856-14.3577702-.647568-4.9658454-.431712-9.3919249-.647568-13.2782386-.647568-3.0946573 0-6.980971.215856-11.6589412.647568-4.89387659.431712-9.06806541.647568-12.52256651.647568-1.07953159 0-1.61929739-.8994-1.61929739-2.698201 0-2.014657.82764089-3.093937 2.48292266-3.237841 5.97340815-.575617 10.70535494-2.230513 14.19584044-4.964691 3.4904855-2.734177 7.1069163-8.310459 10.8492925-16.728847l50.5220786-124.00932723c.4318126-1.15123251 1.4393754-1.72684877 3.0226884-1.72684877 1.7272506 0 2.8067822.53964024 3.2385948 1.61892072l44.5846546 124.11725528c2.518907 6.979347 5.919432 12.123917 10.201574 15.433711 4.282142 3.309793 10.021651 5.396402 17.218529 6.259827 1.439375.143904 2.159063 1.115256 2.159063 2.914057zm-65.3116615-64.1092607-18.9997561-55.1512325-20.5111002 55.1512325z"></path><path d="m259.843254 124.009327c0 8.706196-3.076665 15.703531-9.229995 20.992005-6.15333 5.288475-14.303793 7.932712-24.45139 7.932712-3.814345 0-7.376799-.071952-10.687363-.215856-10.003659-.431712-15.653208-.647568-16.948646-.647568-4.534033 0-8.636253.107928-12.30666.323784-11.011222.647568-16.768724.971352-17.272506.971352-.863625 0-1.295438-.935376-1.295438-2.806129 0-1.726849.431813-2.590273 1.295438-2.590273 5.829471-.863425 9.913699-2.230513 12.252684-4.101266s3.508478-5.900067 3.508478-12.087941v-56.7701537c0-6.1159227-1.187485-10.1092605-3.562455-11.9800133-2.374969-1.8707528-6.441205-3.2738174-12.198707-4.2091939-.863625-.143904-1.295438-.9353764-1.295438-2.374417 0-1.8707528.431813-2.8061293 1.295438-2.8061293 2.878751 0 6.117346.1079281 9.715785.3237842 8.348377.5036642 14.465723.7554963 18.352037.7554963 2.950719 0 7.286838-.143904 13.008355-.4317122 5.721518-.2878081 9.661808-.4317122 11.820871-.4317122 9.355941 0 16.876678 2.122585 22.562211 6.3677549s8.528299 9.8214523 8.528299 16.7288474c0 4.8927382-2.123079 9.4257162-6.369236 13.598934-4.246158 4.1732179-9.463894 6.9073951-15.653208 8.2025317 8.78019 1.6548971 15.797145 4.7308461 21.050866 9.2278481 5.25372 4.497002 7.88058 9.83944 7.88058 16.027315zm-27.851915-47.0566288c0-5.9000666-1.367406-10.1812125-4.10222-12.8434377-2.734813-2.6622252-7.124908-3.9933378-13.170285-3.9933378h-2.590876c-5.325689 0-7.988534 2.5183211-7.988534 7.5549634v28.9247168h9.283972c6.693096 0 11.461027-1.5289806 14.303794-4.586942 2.842766-3.0579614 4.264149-8.0766156 4.264149-15.0559627zm6.909003 47.0566288c0-6.763491-1.763235-11.980013-5.289705-15.649567-3.52647-3.669553-8.5283-5.50433-15.005489-5.50433h-14.465724v32.810126c0 4.389074 1.187485 7.357096 3.562455 8.904064 2.374969 1.546969 6.225298 2.320453 11.550988 2.320453 5.685533 0 10.381495-2.014657 14.087887-6.04397 3.706392-4.029314 5.559588-9.641573 5.559588-16.836776z"></path></g><g fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><text><tspan x="407.625" y="206">Small caps on</tspan></text><text><tspan x="80.503906" y="206">Small caps off</tspan></text></g></g></svg></figure></p>
<p>Small caps are designed to be the same height as lowercase letters and are used to capitalize words within running text. They make for a more cohesive and readable paragraph.</p>
<pre><code class="language-css">font-variant-caps: small-caps;  /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;smcp&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;smcp&#x27; 0; /* low-level disable */
</code></pre>
<h3>all-small-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;Ab&#x27; with all-small-caps off (left) and all-small-caps on (right). In the right example, both &#x27;A&#x27; and &#x27;B&#x27; are set to uniform small caps height, suitable for consistent text styling." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129 131.62 540.774771.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m128.500463 187.119538-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000923-.999999zm4.999997.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000924 1 3 .002773.000923-.999999zm4.999998.004623-.000925 1 3 .002773.000924-.999999zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999997.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000924 1 3 .002773.000923-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000924-1zm4.999998.004623-.000925 1 3 .002773.000923-1zm4.999998.004622-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000923-1zm4.999997.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000924 1 3 .002774.000923-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 3 .002774.000924-1zm4.999998.004623-.000925 1 1.775002.001641.000924-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129 280.62 540.774771.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="501.847656" y="331">All small caps on</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="198.726562" y="331">All small caps off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 125)"><path d="m158.552206 154.876749c0 2.014657-.57603 3.021985-1.728089 3.021985-4.968258 0-10.584548-.215856-16.848872-.647568-5.40028-.431712-10.008518-.647568-13.824716-.647568-4.392227 0-9.828509.215856-16.308844.647568-6.840354.431712-12.6726559.647568-17.4969056.647568-1.1520596 0-1.7280894-1.007328-1.7280894-3.021985s.4320223-3.021986 1.296067-3.021986c6.4083317-.287808 11.01657-1.133244 13.824716-2.536309 2.808145-1.403064 4.212218-3.579613 4.212218-6.529647 0-1.870752-.720038-4.856762-2.160112-8.958028l-12.2046319-36.1558956h-44.4983031l-12.3126372 33.4576946c-1.584082 4.461026-2.376123 7.914724-2.376123 10.361093 0 6.331779 5.8323019 9.785476 17.4969056 10.361092.8640447 0 1.2960671 1.007329 1.2960671 3.021986s-.5760299 3.021985-1.7280895 3.021985c-4.3202236 0-9.1084714-.215856-14.3647434-.647568-4.9682572-.431712-9.3964864-.647568-13.2846876-.647568-3.0961602 0-6.9843615.215856-11.6646037.647568-4.89625343.431712-9.07246957.647568-12.52864845.647568-1.0800559 0-1.62008385-.8994-1.62008385-2.698201 0-2.014657.82804286-3.093937 2.48412857-3.237841 5.97630931-.575617 10.71055433-2.230513 14.20273503-4.964691 3.4921808-2.734177 7.110368-8.310459 10.8545618-16.728847l50.5466161-124.00932722c.4320224-1.15123251 1.4400746-1.72684877 3.0241565-1.72684877 1.7280895 0 2.8081454.53964024 3.2401677 1.61892072l44.6063083 124.11725527c2.520131 6.979347 5.922307 12.123917 10.206529 15.433711 4.284221 3.309793 10.026519 5.396402 17.226891 6.259827 1.440075.143904 2.160112 1.115256 2.160112 2.914057zm-65.3433819-64.1092607-19.0089838-55.1512325-20.5210621 55.1512325z"></path><path d="m268.501897 110.842105c0 13.239174-4.680243 24.931379-14.040727 35.076616-9.360485 10.145236-20.197045 15.217855-32.509683 15.217855-6.840354 0-13.464697-1.439041-19.873028-4.317122-4.392228-2.014657-8.280429-3.021986-11.664604-3.021986-5.400279 0-8.964464 2.302465-10.692553 6.907395-.360019.863425-1.260066 1.295137-2.70014 1.295137-1.872097 0-2.808145-.575616-2.808145-1.726849.576029-6.04397.864044-13.311126.864044-21.801465v-105.2298472c0-5.8281146-.738038-9.6415723-2.214114-11.4403731-1.476077-1.7988008-4.698243-2.9500333-9.666501-3.4536975-1.152059 0-1.728089-.8634244-1.728089-2.5902732 0-2.0146569.57603-3.0219853 1.728089-3.0219853 12.816664-3.30979351 21.925135-7.12325121 27.325415-11.44037312 1.080056-.86342439 1.980102-1.29513658 2.700139-1.29513658 2.016105 0 3.024157.57561626 3.024157 1.72684877-1.15206 15.68554293-1.72809 28.27714853-1.72809 37.77481683v32.2704863c6.768351-6.763491 15.048779-10.1452365 24.841286-10.1452365 14.616757 0 26.46137 4.42505 35.533839 13.2751499 9.07247 8.8500999 13.608705 20.8301132 13.608705 35.9400397zm-21.709124.863425c0-13.2391742-2.628136-23.6002668-7.884408-31.0832782-5.256272-7.4830113-12.636654-11.224517-22.141146-11.224517-5.112265 0-10.098523 1.9247169-14.958774 5.7741506-4.860252 3.8494337-7.290378 7.6808794-7.290378 11.4943371v49.8627585c0 3.813457 2.89815 7.680879 8.69445 11.602265s11.178579 5.882078 16.146836 5.882078c8.640447 0 15.372796-3.849433 20.197045-11.548301 4.82425-7.698867 7.236375-17.952032 7.236375-30.759493z"></path></g><g transform="translate(460 180)"><path d="m107.789579 99.7255163c0 1.8707527-.432023 2.8061297-1.296067 2.8061297-3.600187 0-6.6243432-.107928-9.0724699-.323785-7.4163838-.647568-11.5926-.971352-12.5286484-.971352-3.3841752 0-6.4083317.107928-9.0724696.323784-8.0644173.647568-13.0326745.971353-14.9047714.971353-.7200372 0-1.0800559-.935377-1.0800559-2.8061297 0-1.7268487.2880149-2.5902731.8640447-2.5902731 3.4561789 0 5.9763094-.5576283 7.5603913-1.6728848 1.584082-1.1152565 2.376123-3.2198534 2.376123-6.3137908 0-2.374417-.6120317-5.1085942-1.836095-8.2025316l-5.0762627-13.383078h-30.4575764l-4.5362348 11.224517c-1.4400745 4.0293138-2.1601118 7.0512992-2.1601118 9.065956 0 3.3817455.8640447 5.7741506 2.5921342 7.1772152 1.7280894 1.4030647 4.3922273 2.104597 7.9924136 2.104597.5760299 0 .8640448.8634244.8640448 2.5902731 0 1.8707527-.4320224 2.8061297-1.2960671 2.8061297-3.168164 0-6.6243429-.215857-10.3685367-.647569-3.7441937-.431712-6.4803354-.647568-8.2084248-.647568-2.376123 0-4.5362348.107928-6.4803354.323784-5.76029812.647568-9.28848072.971353-10.5845478.971353-.72003727 0-1.0800559-.935377-1.0800559-2.8061297 0-1.7268487.57602981-2.5902731 1.72808944-2.5902731 3.5281826-.4317122 6.46233446-1.6189207 8.80245556-3.5616256s5.3462767-7.1592272 9.0184668-15.649567l33.1577161-76.41305793c.2160112-1.00732845 1.0800559-1.51099267 2.5921341-1.51099267 1.4400746 0 2.3401212.50366422 2.7001398 1.51099267l29.485526 76.41305793c2.8081454 7.4830114 5.5982898 12.4117255 8.3704333 14.7861426 2.7721434 2.3744171 6.2463229 3.8494337 10.4225389 4.42505 1.008053 0 1.512079.8634244 1.512079 2.5902731zm-46.2263927-38.206529-12.5286485-33.2418387-13.1766819 33.2418387z"></path><path d="m209.746856 73.1752165c0 8.7061959-3.07816 15.703531-9.234478 20.9920054-6.156319 5.2884743-14.310741 7.9327111-24.463266 7.9327111-3.816198 0-7.380382-.071952-10.692554-.215856-10.008518-.431712-15.66081-.647568-16.956877-.647568-4.536235 0-8.640448.107928-12.312638.323784-11.01657.647568-16.776868.971353-17.280894.971353-.864045 0-1.296067-.935377-1.296067-2.8061297 0-1.7268487.432022-2.5902731 1.296067-2.5902731 5.832302-.8634244 9.918513-2.230513 12.258634-4.1012659 2.340122-1.8707528 3.510182-5.9000666 3.510182-12.0879413v-56.7701533c0-6.1159227-1.188061-10.1092604-3.564184-11.9800133-2.376123-1.8707528-6.444334-3.27381743-12.204632-4.20919385-.864045-.14390406-1.296067-.93537642-1.296067-2.37441706 0-1.87075283.432022-2.80612924 1.296067-2.80612924 2.880149 0 6.120317.10792805 9.720503.32378414 8.352432.50366422 14.472749.75549634 18.36095.75549634 2.952153 0 7.290378-.14390407 13.014674-.4317122 5.724296-.28780812 9.6665-.43171219 11.826612-.43171219 9.360484 0 16.884874 2.12258495 22.573168 6.36775483 5.688295 4.24516993 8.532442 9.82145233 8.532442 16.72884743 0 4.8927382-2.12411 9.4257162-6.37233 13.5989341-4.24822 4.1732178-9.46849 6.907395-15.66081 8.2025316 8.784454 1.6548967 15.804818 4.7308461 21.06109 9.2278481s7.884408 9.8394404 7.884408 16.0273151zm-27.865443-47.0566289c0-5.9000666-1.36807-10.1812125-4.104212-12.8434377s-7.128369-3.99333777-13.176682-3.99333777h-2.592134c-5.328276 0-7.992414 2.51832107-7.992414 7.55496337v28.9247168h9.288481c6.696347 0 11.466593-1.5289806 14.310741-4.586942 2.844147-3.0579614 4.26622-8.0766156 4.26622-15.0559627zm6.912358 47.0566289c0-6.763491-1.764091-11.9800133-5.292274-15.6495669-3.528182-3.6695537-8.532441-5.5043305-15.012777-5.5043305h-14.472749v32.8101266c0 4.389074 1.188062 7.3570953 3.564185 8.904064 2.376123 1.5469686 6.228322 2.320453 11.556598 2.320453 5.688294 0 10.386537-2.0146569 14.094729-6.0439707s5.562288-9.6415723 5.562288-16.8367755z"></path></g></g></g></svg></figure></p>
<p>The <code>small-caps</code> value will only replace lowercase letters with small caps. To replace all letters with small caps (which is probably what you want) you need to use <code>all-small-caps</code>.</p>
<pre><code class="language-css">font-variant-caps: all-small-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;smcp&#x27; 1, &#x27;c2sc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;smcp&#x27; 1, &#x27;c2sc&#x27; 0; /* low-level disable */
</code></pre>
<h3>petite-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of small caps versus petite caps using &#x27;AB&#x27;. The left pair shows traditional small caps with slightly larger size, while the right pair uses petite caps that more closely match the font’s x-height." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129 135.62 541.774355.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m128.500462 195.119539-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999997.004614-.000922 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999997.004614-.000922 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000921-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999997.004615-.000922 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999998.004614-.000923 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000922-1zm4.999998.004615-.000923 1 3 .002768.000922-.999999zm4.999998.004614-.000923 1 3 .002769.000921-1zm4.999998.004615-.000923 1 3 .002768.000921-1zm4.999997.004614-.000922 1 3 .002768.000921-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 3 .002768.000922-.999999zm4.999998.004615-.000923 1 3 .002768.000922-1zm4.999998.004614-.000923 1 2.774584.00256.000923-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129 280.62 541.774355.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="509.777344" y="331">Petite caps</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="212.269531" y="331">Small caps</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m160.656574 148.568741c-.719788 0-1.619522-.21563-2.699203-.646889-1.079682-.431259-1.619522-1.078147-1.619522-1.940665 0-1.150024.57583-1.976604 1.72749-2.47974 1.15166-.503135 2.30332-.82658 3.45498-.970333 3.742895-.718765 7.053917-1.868789 9.933067-3.450072 2.879151-1.581283 4.318726-4.31259 4.318726-8.193922v-58.8668595c0-4.4563435-.935724-7.9064158-2.807172-10.3502171-1.871447-2.4438012-5.110491-4.0250844-9.717131-4.7438495-1.295618-.287506-2.483267-.7906416-3.562948-1.5094066-1.079682-.7187651-1.619522-1.5812832-1.619522-2.5875543 0-.8625181.53984-1.5094067 1.619522-1.9406657 1.079681-.4312591 1.979415-.6468886 2.699203-.6468886 2.87915 0 5.326427.0718765 7.341832.2156295 2.015405.1437531 4.030811.3234443 6.046216.5390739 2.015405.2156295 4.246746.3234442 6.694023.3234442 3.023108 0 6.442099-.1796912 10.256973-.5390738 3.814873-.3593825 7.953652-.5390738 12.416334-.5390738 10.796813 0 19.650199 1.7250362 26.56016 5.1751086 6.90996 3.4500723 10.36494 9.2001929 10.36494 17.2503618 0 6.1813796-1.223639 10.8533526-3.670917 14.0159189-2.447277 3.1625663-5.7583 5.5344911-9.933067 7.1157743-.287915.143753-.467862.3953207-.539841.7547033-.071979.3593825.107968.6109503.539841.7547033 3.023107.8625181 6.118194 2.0844187 9.285259 3.6657019s5.830279 3.9532082 7.989641 7.1157742c2.159363 3.162566 3.239044 7.61891 3.239044 13.36903 0 6.756392-2.015405 12.290883-6.046215 16.603474-4.03081 4.31259-9.357238 7.475156-15.979283 9.487699-6.622045 2.012542-13.963878 3.018813-22.025498 3.018813-1.007703 0-2.951129-.107815-5.830279-.323444-2.87915-.21563-5.938247-.431259-9.177291-.646889-3.239044-.215629-5.938247-.323444-8.097609-.323444-3.886853 0-7.881674.107815-11.984462.323444-4.102789.21563-7.161886.431259-9.177291.646889-2.015405.215629-2.015405.323444 0 .323444zm46.426295-6.468886c7.341832 0 12.920185-2.156295 16.735059-6.468885 3.814874-4.312591 5.722311-9.487699 5.722311-15.525326 0-5.750121-1.223639-10.134588-3.670916-13.153401-2.447278-3.018813-5.866269-5.067294-10.256972-6.145441-4.390704-1.0781479-9.537185-1.6172217-15.439443-1.6172217-1.439575 0-2.807171.2515678-4.102788.7547033-1.295618.5031354-2.303321 1.2219004-3.023108 2.1562954-.719788.934394-1.079681 2.120357-1.079681 3.557887v23.719247c0 3.593826 1.511553 6.612639 4.534661 9.05644 3.023108 2.443802 6.550066 3.665702 10.580877 3.665702zm-7.989642-49.3791604c3.742895 0 7.593758-.3593825 11.55259-1.0781476 3.958831-.718765 7.305843-2.3719247 10.041036-4.959479 2.735192-2.5875543 4.102788-6.6126387 4.102788-12.0752532 0-2.8750603-.467861-5.6423059-1.403585-8.3017367-.935724-2.6594307-2.807172-4.8516642-5.614343-6.5767004s-7.017928-2.5875543-12.632271-2.5875543c-4.03081 0-7.233864.5031356-9.609163 1.5094067s-3.562948 2.7313073-3.562948 5.1751085v23.503618c0 2.1562952.683798 3.5938254 2.051394 4.3125904 1.367596.7187651 3.059097 1.0781476 5.074502 1.0781476z"></path></g><g transform="translate(433 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m163.463745 148.568741c-.863745 0-1.907437-.071877-3.131076-.21563-1.223638-.143753-1.835458-.718765-1.835458-1.725036 0-1.150024.539841-1.976604 1.619522-2.479739 1.079681-.503136 2.195352-.970333 3.347012-1.401592 2.159363-.718765 4.246746-1.401592 6.262151-2.048481 2.015405-.646888 3.023108-2.479739 3.023108-5.498552v-58.435601c0-3.3063194-.791766-5.7141824-2.375299-7.223589-1.583532-1.5094067-3.45498-2.551616-5.614342-3.1266281-1.15166-.431259-2.267331-.9343946-3.347012-1.5094066-1.079682-.5750121-1.619522-1.3656537-1.619522-2.3719248 0-1.1500241.683798-1.7609744 2.051394-1.8328509s2.33931-.1078148 2.91514-.1078148c2.87915 0 4.966533.0359383 6.262151.1078148 1.295617.0718765 2.519256.1796912 3.670916.3234442 1.15166.1437531 2.807172.2156296 4.966534.2156296 2.015405 0 3.814874-.0718765 5.398407-.2156296 1.583532-.143753 3.383001-.287506 5.398406-.431259s4.462682-.2156295 7.341833-.2156295c10.94077 0 19.794156 1.6172214 26.560159 4.8516642 6.766003 3.2344429 10.149004 8.4454897 10.149004 15.6331404 0 5.7501206-1.583533 10.3142788-4.750598 13.6924747-3.167065 3.3781958-7.053917 5.6423054-11.660557 6.7923304-.57583.143753-.935724.287506-1.079682.431259-.143957.143753.215937.359382 1.079682.646888 2.735192.431259 5.686321 1.43753 8.853386 3.018813 3.167065 1.581284 5.866268 3.773517 8.09761 6.576701 2.231341 2.803184 3.347011 6.289194 3.347011 10.458032 0 6.756391-1.799468 12.039315-5.398406 15.84877-3.598937 3.809455-8.457503 6.468885-14.575697 7.978292s-13.064144 2.26411-20.837849 2.26411c-1.439575 0-3.886852-.21563-7.341832-.646889s-6.837982-.646888-10.149004-.646888c-3.167065 0-6.514077.107815-10.041036.323444-3.526959.21563-6.082205.431259-7.665737.646889-1.583533.215629-1.223639.323444 1.079681.323444zm36.277291-7.115774c7.197875 0 12.776228-1.473469 16.73506-4.420405 3.958831-2.946937 5.938247-7.367343 5.938247-13.261216 0-7.331404-2.447278-12.219006-7.341833-14.662808-4.894555-2.443801-11.156707-3.665702-18.786454-3.665702-2.30332 0-4.282736.359383-5.938247 1.078148-1.655512.718765-2.483267 2.156295-2.483267 4.312591v19.837916c0 3.593825.971713 6.289194 2.915139 8.086107 1.943427 1.796912 4.930545 2.695369 8.961355 2.695369zm-5.614343-42.4790162c9.069323 0 15.5834-1.6172214 19.542231-4.8516643 3.958832-3.2344428 5.938247-7.0079594 5.938247-11.3205499 0-4.1688374-1.475564-7.7267245-4.426693-10.6736613-2.951129-2.9469369-8.745418-4.4204053-17.382868-4.4204053-4.030811 0-6.694024.6109504-7.989642 1.832851-1.295617 1.2219006-1.943426 2.982875-1.943426 5.2829233v18.7597684c0 2.7313073.827755 4.3125905 2.483267 4.7438495 1.655511.4312591 2.915139.6468886 3.778884.6468886z"></path></g></g></g></svg></figure></p>
<p>Standard small caps will typically appear slightly larger than the x-height of the font. Some typefaces have additional small caps that match the x-height. These are called <code>petite-caps</code>.</p>
<pre><code class="language-css">font-variant-caps: petite-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;pcap&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pcap&#x27; 0; /* low-level disable */
</code></pre>
<h3>all-petite-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of &#x27;AB&#x27; using small caps (left) and all petite caps (right). In the petite caps version, both letters are scaled down uniformly to better match lowercase rhythm." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m137 135.62 526.7806.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m136.500475 195.119526-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.00095 1 3 .002848.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004745-.000949 1 3 .002848.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-.999999zm4.999998.004746-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004745-.00095 1 3 .002847.000948-.999999zm4.999997.004746-.000949 1 3 .002847.000948-.999999zm4.999998.004746-.000949 1 3 .002847.000948-1zm4.999998.004746-.000949 1 3 .002847.000947-1zm4.999998.004746-.00095 1 3 .002847.000948-1zm4.999997.004745-.000949 1 2.780836.002639.000949-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m137 280.62 526.7806.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="517.289062" y="331">All petite caps</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="220.269531" y="331">Small caps</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(137 134)"><path d="m6.26215139 149c-1.87144754 0-3.38300132-.251568-4.53466135-.754703-1.15166003-.503136-1.72749004-1.185963-1.72749004-2.048481 0-1.006271.61181939-1.904727 1.83545817-2.695369 1.22363878-.790641 2.98711819-1.545345 5.29043824-2.26411 3.74289509-1.150024 7.19787519-2.87506 10.36494029-5.175108 3.167065-2.300049 5.9022576-6.109503 8.2055776-11.428365 4.0308101-9.200193 7.7377158-17.825374 11.1207172-25.8755427 3.3830013-8.0501689 6.5860558-15.9565847 9.6091633-23.7192475 3.0231076-7.7626628 6.1541833-15.8487699 9.3932271-24.2583213 3.2390438-8.4095513 6.6580345-17.573806 10.2569721-27.4927641.7197875-2.0125422 1.3675963-4.0250844 1.9434263-6.0376266s.9357238-4.1688374 1.0796813-6.4688857c1.2956175-.431259 2.5912351-.86251807 3.8868526-1.29377711 1.2956175-.43125905 2.591235-1.07814762 3.8868526-1.9406657 1.2956175-.86251809 2.1953519-2.15629523 2.6992032-3.88133141.5038512-1.72503618.9717131-2.8750603 1.4035856-3.45007236.1439575-.14375301.3239044-.21562952.5398407-.21562952.2159362 0 .3958831.14375302.5398406.43125905.287915.57501205.5398406 1.29377713.7557769 2.15629522.2159362.86251809.4678619 1.72503618.7557769 2.58755427 3.4549801 10.92522916 7.0539176 22.06608776 10.7968127 33.42257596s7.3778216 22.3176556 10.9047806 32.8835022 6.766003 20.0535456 9.717132 28.4630969c2.951129 8.4095514 5.290438 15.2018814 7.017928 20.3769904 2.015405 5.75012 4.174768 10.062711 6.478088 12.937771s4.714608 4.887602 7.233864 6.037626c2.519257 1.150025 5.21846 2.012543 8.09761 2.587555 2.447277.431259 4.246746 1.114086 5.398406 2.04848 1.15166.934395 1.72749 1.904728 1.72749 2.910999 0 .862518-.57583 1.43753-1.72749 1.725036s-2.663214.431259-4.534661.431259c-2.015405 0-4.750598-.107815-8.205578-.323444-3.45498-.21563-7.125896-.431259-11.012749-.646889-3.886852-.215629-7.48579-.323444-10.796813-.323444-2.735192 0-5.542363 0-8.421514 0-2.87915 0-5.542363.035938-7.989641.107815-2.4472775.071876-4.5346613.107814-6.2621514.107814-1.8714475 0-3.3830013-.215629-4.5346613-.646888-1.1516601-.431259-1.7274901-1.078148-1.7274901-1.940666 0-1.006271.7197875-1.868789 2.1593626-2.587554 1.439575-.718765 3.0950863-1.221901 4.9665338-1.509407 4.7505977-.718765 8.1335994-1.940666 10.1490044-3.665702s3.023107-3.737578 3.023107-6.037626c0-2.156296-.467862-5.282924-1.403585-9.379885-.935724-4.09696-2.051395-8.481427-3.347012-13.1534-1.2956179-4.671973-2.5192567-8.804873-3.6709167-12.398698-.2879151-1.1500241-.8277557-1.8328509-1.619522-2.0484804-.7917662-.2156295-2.1953519-.3234443-4.2107569-.3234443h-40.8119522c-.57583 0-1.1876494.2515678-1.8354582.7547033-.6478088.5031356-1.2596281 1.5453449-1.8354582 3.1266281-.4318725 1.4375302-1.15166 3.7016403-2.1593625 6.7923303-1.0077025 3.090689-2.0154051 6.361071-3.0231076 9.811143s-1.8714475 6.540762-2.591235 9.272069c-.7197876 2.731308-1.0796813 4.456344-1.0796813 5.175109 0 3.162566 1.2236388 5.786059 3.6709163 7.870478 2.4472776 2.084418 5.3984064 3.557887 8.8533865 4.420405 4.7505976 1.293777 7.1258964 2.731307 7.1258964 4.31259 0 .862518-.57583 1.473469-1.7274901 1.832851-1.15166.359383-2.6632138.539074-4.5346613.539074s-4.6066401-.071877-8.2055777-.21563-7.4138114-.215629-11.4446215-.215629c-4.7505976 0-9.3572377.215629-13.8199203.646888s-8.49349272.646889-12.09243031.646889zm50.52908371-61.8856729h33.4701195c2.015405 0 3.0231076-.3593826 3.0231076-1.0781476 0-.2875061-.0359894-.6109504-.1079682-.9703329-.0719787-.3593825-.1799469-.7547033-.3239044-1.1859624l-16.8430278-52.6136034c-.8637451-2.5875543-1.5115538-3.8813315-1.9434263-3.8813315-.287915 0-.8637451 1.2219007-1.7274901 3.6657019l-19.6501992 52.829233c-.287915.8625181-.4318725 1.4375302-.4318725 1.7250362 0 .7187651.3958831 1.1500241 1.1876494 1.2937771.7917663.1437531 1.9074369.2156296 3.347012.2156296z"></path><path d="m160.656574 148.568741c-.719788 0-1.619522-.21563-2.699203-.646889-1.079682-.431259-1.619522-1.078147-1.619522-1.940665 0-1.150024.57583-1.976604 1.72749-2.47974 1.15166-.503135 2.30332-.82658 3.45498-.970333 3.742895-.718765 7.053917-1.868789 9.933067-3.450072 2.879151-1.581283 4.318726-4.31259 4.318726-8.193922v-58.8668595c0-4.4563435-.935724-7.9064158-2.807172-10.3502171-1.871447-2.4438012-5.110491-4.0250844-9.717131-4.7438495-1.295618-.287506-2.483267-.7906416-3.562948-1.5094066-1.079682-.7187651-1.619522-1.5812832-1.619522-2.5875543 0-.8625181.53984-1.5094067 1.619522-1.9406657 1.079681-.4312591 1.979415-.6468886 2.699203-.6468886 2.87915 0 5.326427.0718765 7.341832.2156295 2.015405.1437531 4.030811.3234443 6.046216.5390739 2.015405.2156295 4.246746.3234442 6.694023.3234442 3.023108 0 6.442099-.1796912 10.256973-.5390738 3.814873-.3593825 7.953652-.5390738 12.416334-.5390738 10.796813 0 19.650199 1.7250362 26.56016 5.1751086 6.90996 3.4500723 10.36494 9.2001929 10.36494 17.2503618 0 6.1813796-1.223639 10.8533526-3.670917 14.0159189-2.447277 3.1625663-5.7583 5.5344911-9.933067 7.1157743-.287915.143753-.467862.3953207-.539841.7547033-.071979.3593825.107968.6109503.539841.7547033 3.023107.8625181 6.118194 2.0844187 9.285259 3.6657019s5.830279 3.9532082 7.989641 7.1157742c2.159363 3.162566 3.239044 7.61891 3.239044 13.36903 0 6.756392-2.015405 12.290883-6.046215 16.603474-4.03081 4.31259-9.357238 7.475156-15.979283 9.487699-6.622045 2.012542-13.963878 3.018813-22.025498 3.018813-1.007703 0-2.951129-.107815-5.830279-.323444-2.87915-.21563-5.938247-.431259-9.177291-.646889-3.239044-.215629-5.938247-.323444-8.097609-.323444-3.886853 0-7.881674.107815-11.984462.323444-4.102789.21563-7.161886.431259-9.177291.646889-2.015405.215629-2.015405.323444 0 .323444zm46.426295-6.468886c7.341832 0 12.920185-2.156295 16.735059-6.468885 3.814874-4.312591 5.722311-9.487699 5.722311-15.525326 0-5.750121-1.223639-10.134588-3.670916-13.153401-2.447278-3.018813-5.866269-5.067294-10.256972-6.145441-4.390704-1.0781479-9.537185-1.6172217-15.439443-1.6172217-1.439575 0-2.807171.2515678-4.102788.7547033-1.295618.5031354-2.303321 1.2219004-3.023108 2.1562954-.719788.934394-1.079681 2.120357-1.079681 3.557887v23.719247c0 3.593826 1.511553 6.612639 4.534661 9.05644 3.023108 2.443802 6.550066 3.665702 10.580877 3.665702zm-7.989642-49.3791604c3.742895 0 7.593758-.3593825 11.55259-1.0781476 3.958831-.718765 7.305843-2.3719247 10.041036-4.959479 2.735192-2.5875543 4.102788-6.6126387 4.102788-12.0752532 0-2.8750603-.467861-5.6423059-1.403585-8.3017367-.935724-2.6594307-2.807172-4.8516642-5.614343-6.5767004s-7.017928-2.5875543-12.632271-2.5875543c-4.03081 0-7.233864.5031356-9.609163 1.5094067s-3.562948 2.7313073-3.562948 5.1751085v23.503618c0 2.1562952.683798 3.5938254 2.051394 4.3125904 1.367596.7187651 3.059097 1.0781476 5.074502 1.0781476z"></path></g><g transform="translate(478 192)"><path d="m4.31054461 91c-.7184241 0-1.61645423-.1084071-2.69409038-.3252212-1.07763615-.2168142-1.61645423-.7588496-1.61645423-1.6261062 0-1.1563422.53881808-1.9874632 1.61645423-2.4933629s2.19119351-.9756637 3.34067207-1.409292c3.44843569-1.0117994 6.0347625-2.0235988 7.7589803-3.0353982s3.1251448-2.2765487 4.202781-3.7942478 2.1193511-3.649705 3.1251448-6.3960177l19.1819236-49.8672567c.7184241-2.3126843 1.2572421-4.4446902 1.6164542-6.3960177.359212-1.9513274.6825029-4.0110619.9698725-6.17920349 1.0057938-.28908555 2.3348784-1.30088496 3.9872538-3.03539823 1.6523754-1.73451328 2.7659328-2.96312685 3.3406721-3.68584071 1.2931634-1.5899705 2.2630359-2.49336283 2.9096176-2.71017699s1.1853998.32522124 1.6164542 1.62610619l23.4924682 65.47787613c1.580533 4.4808259 3.340672 8.3112094 5.2804171 11.4911504s4.9930475 5.3480826 9.1599073 6.5044248c1.1494786.2890855 2.2630359.7227139 3.3406721 1.300885 1.0776361.578171 1.6164542 1.4454277 1.6164542 2.6017699 0 .8672566-.5388181 1.409292-1.6164542 1.6261062-1.0776362.2168141-1.9756663.3252212-2.6940904.3252212-2.8736964 0-5.1008111-.1084071-6.6813442-.3252212-1.580533-.2168142-3.0892236-.3974927-4.5260718-.5420354-1.4368482-.1445428-3.4484357-.2168142-6.0347625-.2168142-2.2989571 0-4.0231749.0722714-5.1726535.2168142-1.1494786.1445427-2.3707995.3252212-3.6639629.5420354-1.2931634.2168141-3.4484357.3252212-6.4658169.3252212-.7184241 0-1.6164543-.1084071-2.6940904-.3252212-1.0776362-.2168142-1.6164542-.7588496-1.6164542-1.6261062 0-1.1563422.538818-2.0235989 1.6164542-2.6017699 1.0776361-.5781711 2.1911935-1.0117995 3.3406721-1.300885 2.0115875-.5781711 3.4125144-1.4454277 4.202781-2.6017699.7902665-1.1563422.6825029-3.3244838-.3232909-6.5044248l-3.8794901-12.1415929h-28.8806489l-3.0173813 8.238938c-1.0057937 3.0353983-1.0417149 5.3842183-.1077636 7.0464602.9339514 1.6622419 2.4067208 2.9269912 4.4183082 3.7942478 2.0115875.8672566 3.9513326 1.5899705 5.8192353 2.1681416 1.1494785.4336283 2.2630359.9033923 3.340672 1.409292 1.0776362.5058997 1.6164543 1.3370207 1.6164543 2.4933629 0 .8672566-.5388181 1.409292-1.6164543 1.6261062-1.0776361.2168141-1.9756662.3252212-2.6940903.3252212-2.8736964 0-5.1726536-.1084071-6.8968714-.3252212-1.7242179-.2168142-3.3047509-.3974927-4.7415991-.5420354-1.4368482-.1445428-3.3765933-.2168142-5.8192352-.2168142-2.2989571 0-4.202781.0722714-5.7114716.2168142-1.5086906.1445427-3.0892237.3252212-4.7415991.5420354-1.65237543.2168141-3.98725376.3252212-7.00463499.3252212zm30.17381229-35.5575221h23.2769409l-9.6987254-30.3539823c-.5747393-1.5899705-1.0057937-2.3849558-1.2931634-2.3849558-.2873696 0-.7184241.7949853-1.2931633 2.3849558z"></path><path d="m111.212051 91c-.862109 0-1.903824-.0722714-3.125145-.2168142-1.221321-.1445427-1.831981-.7227138-1.831981-1.7345132 0-1.1563422.538818-1.9874632 1.616454-2.4933629s2.191193-.9756637 3.340672-1.409292c2.155272-.7227139 4.238702-1.409292 6.25029-2.0597345 2.011587-.6504425 3.017381-2.4933628 3.017381-5.5287611v-58.7566371c0-3.3244838-.790267-5.7455753-2.3708-7.2632744s-3.448435-2.5656342-5.603708-3.14380529c-1.149478-.43362832-2.263036-.93952802-3.340672-1.51769912-1.077636-.57817109-1.616454-1.37315634-1.616454-2.38495575 0-1.15634218.682503-1.77064897 2.047509-1.84292035 1.365006-.07227139 2.334878-.10840708 2.909617-.10840708 2.873697 0 4.957127.03613569 6.25029.10840708 1.293163.07227138 2.514484.18067846 3.663963.32522124 1.149479.14454277 2.801854.21681416 4.957126.21681416 2.011588 0 3.807648-.07227139 5.388181-.21681416 1.580533-.14454278 3.376593-.28908555 5.388181-.43362832 2.011587-.14454277 4.454229-.21681416 7.327926-.21681416 10.920046 0 19.756662 1.62610619 26.509849 4.87831858 6.753187 3.25221237 10.12978 8.49188787 10.12978 15.71902657 0 5.7817109-1.580533 10.3709439-4.741599 13.7676991s-7.040556 5.6733038-11.638471 6.829646c-.574739.1445428-.933951.2890856-1.077636.4336283-.143685.1445428.215527.361357 1.077636.6504425 2.730012.4336283 5.675551 1.4454277 8.836617 3.0353982s5.855156 3.7942478 8.082271 6.6128319 3.340672 6.3237463 3.340672 10.5154867c0 6.7935104-1.79606 12.1054573-5.388181 15.9358407-3.59212 3.8303835-8.441483 6.5044248-14.548088 8.0221239s-13.039397 2.2765487-20.798378 2.2765487c-1.436848 0-3.87949-.2168142-7.327925-.6504425-3.448436-.4336283-6.825029-.6504425-10.12978-.6504425-3.161066 0-6.501738.1084071-10.022016.3252213-3.520279.2168141-6.070684.4336283-7.651217.6504425-1.580533.2168141-1.221321.3252212 1.077636.3252212zm36.208575-7.1548673c7.184241 0 12.752028-1.4815634 16.70336-4.4446902 3.951333-2.9631269 5.926999-7.4078171 5.926999-13.3340708 0-7.3716814-2.442642-12.2861357-7.327926-14.7433629-4.885284-2.4572271-11.135573-3.6858407-18.750869-3.6858407-2.298957 0-4.274623.361357-5.926999 1.0840708-1.652375.7227139-2.478563 2.1681416-2.478563 4.3362832v19.9469027c0 3.6135693.969873 6.3237463 2.909618 8.130531 1.939745 1.8067846 4.921205 2.7101769 8.94438 2.7101769zm-5.603708-42.7123893c9.052143 0 15.553882-1.6261062 19.505214-4.8783186 3.951333-3.2522124 5.926999-7.0464602 5.926999-11.3827434 0-4.1917404-1.472769-7.769174-4.418308-10.7323009-2.945539-2.9631268-8.728853-4.44469023-17.349942-4.44469023-4.023175 0-6.681344.61430683-7.974508 1.84292033-1.293163 1.2286136-1.939745 2.9992626-1.939745 5.3119469v18.8628319c0 2.7463127.826188 4.3362832 2.478563 4.7699115 1.652376.4336283 2.909618.6504425 3.771727.6504425z"></path></g></g></g></svg></figure></p>
<p>Similarly to <code>all-small-caps</code>, this converts all letters, both lower and uppercase, to petite caps.</p>
<pre><code class="language-css">font-variant-caps: all-petite-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;pcap&#x27; 1, &#x27;c2pc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pcap&#x27; 1, &#x27;c2pc&#x27; 0; /* low-level disable */
</code></pre>
<h3>unicase</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of text with Unicase off and Unicase on. The left shows a standard uppercase &#x27;A&#x27; and lowercase &#x27;a&#x27; at different heights; the right shows &#x27;A&#x27; and &#x27;a&#x27; adjusted to a more unified height, blending uppercase and lowercase characteristics." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129.218452 133.5 539.973982.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m129.718915 186.999537-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129.218452 273.5 539.973982.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="497.382514" y="324">Unicase on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(407.218452 132)"><path d="m46.4349112 98.8930163h45.7869823l13.1745565 36.6270427h-1.511835c-7.7751475 0-12.7426032-.215453-16.6301771-.215453-1.5118343 0-3.0236687 1.508173-3.0236687 3.878158s1.5118344 3.662704 3.0236687 3.662704c4.1035503 0 9.0710059-1.077266 29.1568051-1.077266h1.079881c20.517752 0 25.053255 1.077266 29.156805 1.077266 1.727811 0 3.239645-1.292719 3.239645-3.662704s-1.511834-3.878158-3.239645-3.878158c-3.671598 0-6.047337.215453-16.630178.215453h-.647929l-48.5946741-133.15007386c-.4319526-1.50817236-1.295858-2.36998514-3.6715976-2.36998514s-3.0236686.64635958-3.6715976 2.36998514l-49.0266273 133.15007386c-14.47041416 0-17.4940828-.215453-21.38165676-.215453-1.72781065 0-3.02366864 1.508173-3.02366864 3.878158s1.29585799 3.662704 3.02366864 3.662704c4.10355029 0 6.26331361-1.077266 25.48520706-1.077266h1.0798817c19.2218935 0 21.5976331 1.077266 25.7011834 1.077266 1.5118343 0 3.239645-1.292719 3.239645-3.662704s-1.7278107-3.878158-3.239645-3.878158c-3.6715976 0-6.9112426.215453-22.4615384.215453zm42.5473373-7.9717682h-39.7396449l20.0857988-54.294205z"></path><path d="m218.568047 117.421991c-14.470414 15.51263-23.109467 15.51263-29.588757 15.51263-8.207101 0-16.630178-5.601783-16.630178-21.545319 0-26.2852901 24.18935-35.1188711 46.218935-35.1188711zm-40.171597-99.754829c2.375739-4.3090639 9.502958-8.18722144 20.517751-8.18722144 12.95858 0 19.653846 7.54086184 19.653846 22.62258544v37.2734027c-28.508875 0-69.760355 10.5572065-69.760355 45.8915303 0 19.175334 14.470415 29.732541 30.02071 29.732541 12.310651 0 25.053255-4.955423 40.387574-18.528975 1.943787 10.77266 9.071006 18.098069 20.085799 18.098069 4.967456 0 13.822485-.64636 21.381657-8.402675 1.079882-1.077266 2.159763-3.016345 2.159763-4.73997 0-2.369985-2.159763-4.093611-4.751479-4.093611-.863905 0-1.511834.430906-2.159763 1.292719-2.807693 2.369985-4.103551 8.618128-9.502959 8.618128-3.455621 0-5.399408-2.154532-5.399408-10.1263v-82.9494801c0-29.7325409-15.33432-42.65973254-42.115385-42.65973254-18.789941 0-39.739645 12.92719164-39.739645 27.79346214 0 7.3254086 5.615385 13.1426448 12.95858 13.1426448 7.127219 0 12.95858-5.8172362 12.95858-13.1426448 0-4.7399703-2.591716-9.4799406-6.695266-11.6344725z"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="196.261421" y="324">Unicase off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(129.218452 132)"><path d="m90.0621302 90.9212481h-47.0828403l23.9733728-63.5586924zm34.3402368 44.5988109-48.810651-133.15007386c-.647929-1.50817236-1.295858-2.36998514-3.6715977-2.36998514-2.5917159 0-3.2396449.64635958-3.8875739 2.36998514l-50.7544379 133.15007386h-1.295858c-9.71893489 0-10.58284022-.215453-12.74260353-.215453-1.51183432 0-3.23964497 1.508173-3.23964497 3.878158s1.72781065 3.662704 3.23964497 3.662704c2.15976331 0 3.02366864-1.077266 18.35798813-1.077266h1.0798817c15.1183432 0 15.9822485 1.077266 18.1420118 1.077266 1.5118343 0 3.239645-1.292719 3.239645-3.662704s-1.7278107-3.878158-3.239645-3.878158c-2.1597633 0-3.0236686.215453-13.3905325.215453h-1.5118343l14.0384615-36.8424958h52.9142012l13.3905325 36.8424958c-9.9349112 0-12.0946745-.215453-14.2544378-.215453-1.5118344 0-3.239645 1.508173-3.239645 3.878158s1.7278106 3.662704 3.239645 3.662704c2.1597633 0 4.3195266-1.077266 22.0295858-1.077266h2.591716c17.710059 0 19.869822 1.077266 22.029586 1.077266 1.72781 0 3.239645-1.292719 3.239645-3.662704s-1.511835-3.878158-3.239645-3.878158c-2.159764 0-4.319527.215453-14.254438.215453z"></path><path d="m190.491124 125.178306c-9.934911 8.833581-16.414201 10.341753-20.949704 10.341753-6.263313 0-11.662722-5.170876-11.662722-13.142644 0-12.711739 9.071006-19.821694 32.612426-19.821694zm-27.860946-59.2496284c1.72781-2.3699852 6.047337-5.1708767 13.822485-5.1708767 8.855029 0 14.038461 4.0936107 14.038461 14.435364v21.1144131c-24.837278 0-48.810651 8.402675-48.810651 28.870728 0 12.927192 9.502959 19.821694 20.949705 19.821694 8.423076 0 17.926035-3.447251 28.292899-12.927192 1.295858 7.325409 6.263314 12.496286 13.606509 12.496286 4.535503 0 8.855029-.430907 14.68639-4.955424 1.295858-1.077266 2.37574-3.878157 1.079882-5.38633-1.727811-1.508172-3.455621-1.723625-4.967456-.430906-2.375739 1.939079-2.591716 4.524517-5.399408 4.524517s-4.10355-1.723626-4.10355-7.756315v-47.1842497c0-20.4680535-11.014793-29.0861812-29.372781-29.0861812-12.95858 0-27.644971 8.6181277-27.644971 18.9598811 0 4.9554235 3.671598 9.0490342 8.85503 9.0490342 4.967456 0 8.855029-4.0936107 8.855029-9.0490342 0-3.2317979-1.511834-5.8172363-3.887573-7.3254086z"></path></g></g></svg></figure></p>
<p>This feature maps upper and lowercase letters to a mixed set of lowercase and small capital forms, creating a single case alphabet. Sometimes the small capitals used are actual small cap glyphs and sometimes they are specially designed unicase forms. The implementation of this feature varies greatly from font to font.</p>
<pre><code class="language-css">font-variant-caps: unicase; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;unic&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;unic&#x27; 0; /* low-level disable */
</code></pre>
<h3>titling-caps</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of text with Titling Caps off and Titling Caps on. The left shows regular capital &#x27;A&#x27; and lowercase &#x27;a&#x27;; the right shows a lighter, more refined capital &#x27;A&#x27; for use in titling, matching better with the lowercase &#x27;a&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m129.513957 123.62 540.972086.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m129.718915 180.999537-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999997.004629-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000924-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000925-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1zm4.999997.00463-.000925 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-.999999zm4.999998.00463-.000926 1 3 .002777.000925-1zm4.999998.004629-.000926 1 3 .002778.000924-1zm4.999998.00463-.000926 1 3 .002778.000924-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m129.513957 273.62 540.972086.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="493.648438" y="324">Titling caps on</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="201.527344" y="324">Titling caps off</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 122)"><path d="m158.560889 150.646238c0-1.729081-1.2958-2.809757-2.159667-3.025892-17.27733-1.945217-23.540363-10.590626-27.427762-21.613521l-44.9210599-124.27774335c-.2159666-.86454083-1.2957998-1.72908165-3.0235328-1.72908165-1.5117665 0-2.5915996.64840562-3.0235329 1.72908165l-50.5361923 124.27774335c-5.6151325 12.751977-9.9344652 20.316709-25.05212955 21.613521-.86386654.216135-2.37563297 1.296811-2.37563297 3.025892-.21596664 1.729082.43193326 3.025893 1.51176643 3.025893 10.15043179 0 14.68573109-1.296811 24.18826299-1.296811 11.8781649 0 14.9016977 1.296811 27.6437291 1.296811.8638666 0 1.7277331-1.296811 1.7277331-3.025893 0-1.729081-.4319333-3.025892-1.2957998-3.025892-13.6058979-.648406-17.4932973-4.53884-17.4932973-10.37449 0-3.025893 1.0798331-6.700192 2.3756329-10.37449l12.3100982-33.5009571h44.4891265l12.5260643 36.0945791c1.079834 3.458164 1.9437 6.484056 1.9437 9.077679 0 5.40338-4.103366 8.429273-18.141197 9.077679-.8638666 0-1.2957998 1.296811-1.2957998 3.025892 0 1.729082.8638665 3.025893 1.727733 3.025893 14.2537978 0 20.5168298-1.296811 33.9067618-1.296811 11.878165 0 16.413464 1.296811 30.667262 1.296811.863866 0 1.727733-1.296811 1.727733-3.025893zm-65.4378902-64.1921557h-39.521894l20.5168302-55.3306127z"></path><path d="m256.609741 144.162182c0-2.593622-2.159667-4.538839-3.2395-3.674298-2.5916 2.377487-5.399166 4.322704-8.422699 4.322704-3.239499 0-7.558832-1.729082-7.342865-12.103572l1.511766-48.8465561c.6479-17.9392221-11.662198-26.8007656-26.131962-26.8007656-16.629431 0-43.193327 15.1294644-43.193327 26.5846304 0 4.7549745 3.455466 7.5647322 7.774799 7.5647322 6.910932 0 12.742031-4.5388394 12.957998-14.697194.215966-6.7001914 7.558832-10.8067603 15.333631-10.8067603 8.206732 0 14.253797 6.2679209 14.037831 17.5069516l-.6479 16.8585458c-14.037831 3.674299-52.479892 14.264924-52.479892 35.878444 0 11.239031 8.422699 20.965115 22.028597 20.965115 12.310098 0 23.108429-4.538839 30.235328-11.887436 2.159667 6.700191 8.638666 11.022896 16.629431 11.022896 8.422699 0 15.117664-4.106569 20.084897-9.94222.6479-.648405.6479-1.080676.863867-1.945217zm-37.578195-36.742985-.863866 28.962118c-2.807566 6.051786-11.878165 9.942219-18.789097 9.942219-7.558833 0-11.878165-5.619515-11.878165-15.345599 0-13.616518 15.333631-19.884439 31.531128-23.558738z"></path></g><path d="m582.578511 275.325702c1.2958 0 1.727733-2.377488-.215967-2.809758-5.183199-1.296811-12.742031-1.945217-15.549598-3.458163-5.831099-3.458164-11.446231-17.290817-58.526957-151.078509-.431934-1.080676-5.615133-1.512947-6.263033 0-30.019362 82.563648-50.536192 137.678126-57.015191 146.539669-3.2395 4.53884-5.831099 6.700192-16.845397 7.997003-1.727734.216135-1.2958 2.809758-.215967 2.809758 5.831099-.648406 10.798332-.864541 22.244563-.864541 11.662198 0 13.821865.216135 19.86893.864541 1.079834 0 1.511767-2.593623-.431933-2.809758-12.310098-1.945217-14.037831-3.890434-14.037831-7.780868 0-4.322704 7.342866-26.152359 17.493297-53.817666 5.399166-.216135 15.117665-.43227 33.474829-.43227h17.27733c3.671433 10.37449 7.342866 20.74898 10.798332 30.258929 8.854632 25.287819 7.126899 27.665306 4.319333 29.394388-2.807567 1.512946-10.150432 1.080676-15.333631 2.377487-1.727733.43227-1.511767 2.809758-.215967 2.809758 5.831099-.648406 22.028597-.864541 33.690795-.864541 11.446232 0 19.652964.216135 25.484063.864541zm-60.686624-69.595537c-4.319333 0-9.286566 0-15.333631 0-16.197498 0-25.70003 0-31.531129-.216135 6.910932-19.452169 15.117664-41.065689 22.892463-61.598534.215967-.648405 1.079833-.86454 1.2958 0 6.910932 18.371493 14.901698 40.201149 22.676497 61.814669z"></path><path d="m670.908864 266.680293c.431933-.648405-.6479-1.729081-1.511766-1.080676-2.5916 2.161352-4.103367 2.809758-7.774799 2.809758-4.5353 0-7.126899-3.890434-7.126899-9.726084 0-16.426276 1.943699-33.717092 1.943699-50.359503 0-18.155358-9.718498-27.016901-26.995829-27.016901-16.845397 0-36.498361 15.77787-36.930294 26.800765-.215967 4.322705 2.591599 7.132462 6.910932 7.132462 6.047066 0 9.502532-3.025893 10.150432-12.968112.6479-9.726084 6.047066-16.210141 14.901698-16.210141 11.014298 0 16.413464 6.051786 16.413464 22.261927v11.23903c-.215967 3.242028-.431933 4.106569-2.375633 4.754975-30.667262 10.590625-49.672326 16.642411-49.672326 35.446174 0 9.293814 9.502532 17.506951 20.300864 17.506951 12.094131 0 22.028596-6.700191 28.507595-12.319706.6479-.648406 1.511767-.432271 1.9437.216135 2.375633 6.051786 6.263032 11.887436 12.957998 11.887436 7.558832 0 15.981531-5.40338 18.357164-10.37449zm-30.667262-37.175255c0 5.187245-.431933 21.18125-1.2958 27.881441-.215966 2.377488-10.150432 11.022896-20.300863 11.022896-9.070599 0-14.037832-3.890434-14.037832-14.048788 0-12.103572 11.446232-19.668304 33.906762-26.15236 1.079833-.216136 1.727733.43227 1.727733 1.296811z"></path></g></g></svg></figure></p>
<p>Standard uppercase letters are designed for use alongside lowercase letters and when they are used in strings of all uppercase letters they can appear too strong. Some fonts include titling capitals specifically for this situation.</p>
<pre><code class="language-css">font-variant-caps: titling-caps; /* enable */
font-variant-caps: normal; /* disable all variants */

font-feature-settings: &#x27;titl&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;titl&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-numeric</h2>
<p>The proper display of numerals varies greatly depending on context. Here are some general rules:</p>
<ul>
<li>In running/body text, use <em>proportional old-style</em> numerals</li>
<li>For headings, use <em>proportional lining</em> numerals</li>
<li>Within numeric tables, use <em>tabular lining</em> numerals</li>
</ul>
<p>You can combine values to achieve, for example, tabular lining numerals like this:</p>
<pre><code class="language-css">font-variant-numeric: lining-nums tabular-nums;
</code></pre>
<h3>lining-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sample showing uppercase &#x27;A&#x27;, lowercase &#x27;a&#x27;, and lining numerals &#x27;7&#x27;, &#x27;8&#x27;, and &#x27;9&#x27; aligned along the same cap height and baseline." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m110.500432 146.5 578.758951.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m110.000864 195.999568-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000863 1 3 .002591.000862-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000863 1 3 .002591.000862-.999999zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999999.00432-.000864 1 3 .002591.000862-1zm4.999998.004319-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000863 1 3 .002591.000862-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002592.000862-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000863 1 3 .002592.000862-1zm4.999999.00432-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999999.004319-.000864 1 3 .002591.000862-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.004319-.000864 1 3 .002592.000863-1zm4.999998.00432-.000864 1 3 .002591.000863-.999999zm4.999998.00432-.000864 1 3 .002591.000863-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m110.500432 294.06 578.758951.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(110.500432 140)"><path d="m0 154.941495h11.4468138c1.5118433-3.878924 9.2870376-23.920036 16.1983214-39.651231l6.0473733-14.43822h70.8406595l24.40547 55.382426 10.798881-1.292975c-1.943798-3.878924-9.718992-20.903094-17.278209-37.711768l-52.0506062-117.229727-3.2396643.64648746c-4.1035748 11.20578274-9.7189929 23.70454034-19.6539633 46.76259314zm69.112838-135.7623669 31.532732 73.0530833h-63.0654643z"></path><path d="m181.565185 157.311949c15.766366 0 29.372956-9.481816 34.556419-22.411565-.86391 17.670657 5.831396 21.549582 12.958657 21.549582 4.103575 0 7.559217-1.292975 10.150948-3.016941l.647933-7.111362c-2.375754 1.292974-5.39944 2.585949-8.207149 2.585949-4.967486 0-7.559217-2.801445-7.34324-12.929749l1.295866-42.6681725c.647933-24.9975152-12.742679-37.280777-33.692508-37.280777-11.446814 0-21.81374 3.4479331-31.964688 9.2663203l2.375754 8.6198328c7.775194-5.1718997 18.14212-9.4818161 28.509046-9.4818161 17.278209 0 25.917314 10.1283036 25.485359 30.8159024l-.215978 5.1719001c-4.751508-.430992-9.503015-.8619837-15.334411-.8619837-35.636307 0-48.594964 14.4382197-48.594964 31.0313987 0 14.869211 10.150948 26.721481 29.372956 26.721481zm1.943799-7.973345c-15.334411 0-21.81374-9.050824-21.81374-19.394624 0-11.85227 8.639105-23.489044 38.875971-23.489044 4.751508 0 10.150949.215495 15.334411.861983l-.431955 9.481816c-.647933 18.748136-14.686478 32.539869-31.964687 32.539869z"></path></g><g transform="translate(380.580444 142.334538)"><path d="m1.29586571 3.66342896c-.21597762 3.01694149-.64793285 7.11136214-1.29586571 9.69731194 11.6627914-.2154958 27.4291576-.2154958 42.7635685-.2154958 11.8787691 0 25.2693815 0 35.6363072.2154958l-47.5150762 99.3435731c-5.8313957 12.283262-15.1184333 30.600407-19.4379857 38.358257l11.2308362 1.50847c1.9437986-5.171899 7.7751943-17.239665 12.9586571-28.014456l44.9233447-94.1716742c3.8875972-8.1888412 7.5592167-16.5931782 10.3669258-21.76507796l-3.2396643-4.95640388c-13.3906124.43099164-28.0770905.64648746-43.627479.64648746-15.5503886 0-29.8049115-.21549582-42.76356859-.64648746z"></path><path d="m101.761455 116.798735c0 21.980574 19.437985 38.789248 46.435188 38.789248 28.293068 0 47.947031-18.101649 47.947031-41.375198 0-17.886153-14.4705-31.2468939-36.716195-39.8667267 19.869941-7.3268579 33.044576-18.5326406 33.044576-36.8497854 0-20.2566072-17.27821-37.4962729-42.115636-37.4962729-25.701337 0-43.195524 17.6706573-43.195524 38.3582562 0 18.7481364 14.470501 29.7384233 31.964688 36.6342895-22.893628 7.5423538-37.364128 20.472103-37.364128 41.8061893zm84.663226-2.154958c0 18.101649-15.118433 32.539869-37.580105 32.539869-21.381785 0-37.364128-13.360741-37.364128-31.031398 0-19.3946243 14.686478-30.600407 37.580105-37.2807775 23.109606 7.5423538 37.364128 19.1791281 37.364128 35.7723065zm-69.544793-76.7165125c0-15.9466907 12.74268-29.30743166 32.828598-29.30743166 19.222008 0 32.828598 13.14524506 32.828598 29.52292746 0 15.731195-12.526702 26.505986-32.180665 32.3243732-19.653963-6.4648746-33.476531-15.5156991-33.476531-32.539869z"></path><path d="m225.336649 148.261125 2.159776 8.404337c49.89083-9.697312 81.423563-50.857014 81.423563-100.2055569 0-34.6948272-19.006031-56.24440928-47.083121-56.24440928-28.293068 0-47.731054 22.62706118-47.731054 50.64151798 0 25.213011 18.358097 44.6076349 43.627479 44.6076349 17.494187 0 33.476531-9.4818161 41.251725-25.4285068-5.183463 39.0047431-31.964688 70.0361421-73.648368 78.2249831zm-1.511843-97.8351029c0-23.0580528 15.118433-41.37519761 37.580105-41.37519761 22.67765 0 36.500218 18.53264061 36.500218 37.92726451 0 20.9030946-16.198321 39.8667269-38.012061 39.8667269-21.813739 0-36.068262-15.7311949-36.068262-36.4187938z"></path></g></g></g></svg></figure></p>
<p>Lining numerals approximate capital letters and are uniform in height. They should be used in headings or numeric tables. Usually numbers are lining figures by default.</p>
<pre><code class="language-css">font-variant-numeric: lining-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;lnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;lnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>oldstyle-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sample showing uppercase &#x27;A&#x27;, lowercase &#x27;a&#x27;, and old-style numerals &#x27;7&#x27;, &#x27;8&#x27;, and &#x27;9&#x27;, where the numerals vary in height to better match the rhythm of lowercase text." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m120 125.5 557.767694.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m120.000952 181-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000951-.999999zm5.147608.004623-.000952 1 3.088564.002773.000952-.999999zm5.147607.004623-.000951 1 3.088564.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-.999999zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000951-1zm5.147608.004623-.000952 1 3.088564.002773.000952-1zm5.147607.004623-.000951 1 3.088564.002773.000952-1zm5.147608.004623-.000952 1 3.088565.002773.000952-1zm5.147608.004622-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000951-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147607.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147608.004623-.000952 1 3.088564.002774.000952-1zm5.147607.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 3.088565.002774.000952-1zm5.147608.004623-.000952 1 1.827403.001641.000952-.999999z" fill="#e6594c" fill-rule="nonzero"></path><path d="m120 279.06 557.767694.5" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(120 124)"><path d="m0 155.554842h11.4546511c1.5128784-3.894279 9.2933962-24.014725 16.2094119-39.808193l6.0515138-14.495375h70.8891612l24.422181 55.601662 10.806274-1.298094c-1.945129-3.894279-9.725647-20.985841-17.290039-37.861053l-52.0862435-117.693789-3.2418824.64904663c-4.1063844 11.25014157-9.7256472 23.79837647-19.6674198 46.94770627zm69.1601575-136.299792 31.5543215 73.3422692h-63.1086434z"></path><path d="m181.689497 157.93468c15.777161 0 29.393067-9.519351 34.580079-22.500283-.864502 17.740608 5.835388 21.634888 12.967529 21.634888 4.106385 0 7.564393-1.298094 10.157899-3.028885l.648376-7.139513c-2.37738 1.298094-5.403137 2.596187-8.212769 2.596187-4.970886 0-7.564392-2.812536-7.348266-12.980933l1.296753-42.8370774c.648376-25.0964697-12.751405-37.4283557-33.715577-37.4283557-11.454651 0-21.828675 3.4615821-31.986573 9.3030017l2.37738 8.6539551c7.780518-5.192373 18.154542-9.5193506 28.528565-9.5193506 17.29004 0 25.935059 10.1683972 25.502808 30.9378894l-.216125 5.1923735c-4.754761-.432698-9.509522-.865396-15.34491-.865396-35.660706 0-48.628236 14.495375-48.628236 31.154238 0 14.928073 10.157898 26.827261 29.393067 26.827261zm1.94513-8.004908c-15.34491 0-21.828675-9.086653-21.828675-19.471399 0-11.899189 8.64502-23.582028 38.902588-23.582028 4.754761 0 10.157899.216349 15.34491.865396l-.432251 9.51935c-.648376 18.822352-14.696533 32.668681-31.986572 32.668681z"></path></g><g transform="translate(389.184301 134.565037)"><path d="m81.9115616 40.6735888c-12.5352786.4326978-26.1511846.6490467-40.6315926.6490467s-27.664063-.2163489-40.19934154-.6490467c0 2.8125354-.43225098 6.4904663-1.08062746 9.3030017 11.0224001-.2163489 25.5028081-.2163489 39.9832161-.2163489 11.2385256 0 22.6931766 0 32.2026983.2163489l-43.008973 89.7847835c-5.1870118 10.817444-14.2642824 28.558052-18.3706668 35.481216l9.2933962 4.759675c1.5128784-4.326977 7.3482667-16.442514 11.886902-25.745516l42.7928475-88.9193882c3.4580079-7.3558618 7.1321413-15.3607703 9.9417727-20.3367944z"></path><path d="m96.6441159 110.554276c0 20.985841 18.1545411 36.779309 42.5767221 36.779309 25.935059 0 44.305726-17.30791 44.305726-39.808193 0-16.226166-13.399781-29.6397964-33.0672-37.2120071 17.506164-6.923164 29.176941-17.3079101 29.176941-34.8321691 0-19.25505-15.993286-35.4812158-38.254212-35.4812158-23.341553 0-39.550965 16.6588635-39.550965 36.3466113 0 17.7406079 12.751404 28.3417028 28.312439 34.8321691-20.315796 6.9231641-33.4994511 19.6877478-33.4994511 39.3754956zm77.1568011-2.163489c0 17.091561-13.399781 30.505192-33.931703 30.505192-19.019043 0-33.715576-11.899188-33.715576-28.99075 0-17.9569564 12.967529-28.7744002 33.931702-35.0485177 20.964173 6.4904663 33.715577 18.1733057 33.715577 33.5340757zm-62.676393-72.2605246c0-15.5771191 11.670776-27.90900508 29.825318-27.90900508 17.073914 0 29.393067 12.11553708 29.393067 27.69265618 0 15.1444214-11.238526 25.0964697-29.176942 30.9378894-17.72229-6.4904663-30.041443-14.9280725-30.041443-30.7215405z"></path><path d="m209.281518 172.430055 3.241883 8.004908c47.115357-10.817444 76.292298-44.567868 76.292298-89.5684348 0-30.5051916-15.993286-52.572777-44.521851-52.572777-26.583436 0-45.386353 21.4185388-45.386353 46.9477062 0 23.1493296 17.073914 41.9716826 41.063843 41.9716826 13.615906 0 26.36731-5.625071 36.741334-13.62998-7.996643 29.639796-32.634949 51.058335-67.431154 58.846895zm33.067201-53.654522c-20.315797 0-33.715577-15.144421-33.715577-34.1831222 0-20.3367944 14.264282-37.6447046 35.228455-37.6447046 24.422181 0 35.660706 19.9040967 35.660706 44.3515198 0 4.3269775-.432251 8.4376062-.864502 12.548235-10.157898 9.086653-23.773804 14.928072-36.309082 14.928072z"></path></g></g></g></svg></figure></p>
<p>Old-style numerals have varying heights and alignments and are therefore more similar to lowercase letters. They should be used in running text.</p>
<pre><code class="language-css">font-variant-numeric: oldstyle-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;onum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;onum&#x27; 0; /* low-level disable */
</code></pre>
<h3>proportional-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Proportional numerals &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, and &#x27;5&#x27; displayed inside separate brown background boxes, each number having varying width for natural text flow." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#e6594c" fill-opacity="0.25"><path d="m152 143h52v155h-52z"></path><path d="m212 143h102v155h-102z"></path><path d="m322 143h98v155h-98z"></path><path d="m428 143h117v155h-117z"></path><path d="m553 143h95v155h-95z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(156 143)"><path d="m39.0577526.21648045-11.2210118 3.89664804-27.8367408 8.65921791 2.15788688 8.6592178 28.69989552-9.0921787v93.0865925c0 12.339385 0 37.018156-.4315774 46.326815h10.3578571c-.2157887-5.412011-.4315774-20.349162-.4315774-27.709497v-96.3337988c0-2.3812849.2157887-24.67877094.4315774-26.41061452z"></path><path d="m75.4882853 142.877095c14.2420535-14.28771 27.4051637-28.142458 37.5472317-39.399441 23.08939-26.1941344 35.173556-43.9455311 35.173556-64.2946931 0-23.1634078-16.39994-39.1829609-41.647217-39.1829609-14.242053 0-28.9156838 6.49441341-41.4314277 16.452514l4.5315624 8.0097765c11.6525892-9.9581006 24.5999105-15.37011173 36.2524993-15.37011173 20.284137 0 32.368304 13.20530723 32.368304 31.17318433 0 24.8952514-22.226235 49.7905028-77.8997168 105.2094969l1.7263095 6.927375c13.5946873-.649442 28.4841068-.865922 44.6682583-.865922 16.831518 0 31.28936.21648 45.099836.649441 0-3.463687.431577-6.710894 1.078943-9.9581-24.59991.865921-53.0840169.649441-77.4681387.649441z"></path><path d="m171.687062 148.722067c11.652589 4.329609 22.873601 6.277933 34.741978 6.277933 30.857783 0 52.436652-16.885475 52.436652-42.213687 0-19.6997208-14.457842-33.9874303-43.373527-38.9664806 21.794658-5.6284916 40.136696-17.9678771 40.136696-40.2653631 0-18.400838-16.184151-33.5544693-41.215639-33.5544693-13.16311 0-27.620952 4.97905028-39.705119 13.6382682l4.099985 8.2262569c10.573646-8.0097765 23.952545-12.77234633 34.957768-12.77234633 20.068348 0 31.936726 11.90642463 31.936726 25.76117323 0 19.4832402-21.147292 32.9050279-55.457693 38.1005586l1.726309 6.7108939c35.820923.2164804 56.968214 12.5558659 56.968214 33.7709495 0 20.132682-17.263095 32.472067-43.589315 32.472067-11.652589 0-23.305178-2.597765-34.957767-6.927374z"></path><path d="m350.275034 151.752793h10.142068c-.215789-5.412011-.431577-17.318435-.431577-24.895251v-20.998603c8.19997 0 16.184151.21648 22.873601.43296.215788-3.680167.431577-5.628491 1.294732-9.3086588-7.121027.2164805-15.536786.4329609-24.168333.4329609v-66.0265363c0-2.1648045.215788-28.1424581.431577-30.09078212l-6.689449-.86592179c-1.294733 1.94832403-14.026265 18.40083801-15.968363 20.78212291l-61.499776 78.7988822 2.805252 6.494414c14.457843-.649441 34.526191-.865922 51.14192-.865922h20.715714v5.844972c0 12.772347-.215789 30.740224-.647366 40.265363zm-61.283988-54.3365919 61.715565-79.2318436.215789 79.2318436c-3.452619.2164805-7.552604.2164805-10.142069.2164805-9.710491 0-42.078794 0-51.789285-.2164805z"></path><path d="m487 109.322626c0-27.925978-21.147291-43.2960897-56.968214-43.2960897-3.23683 0-7.984181.4329609-10.789434.6494414l2.373675-53.9036313c7.552605 0 21.363081-.2164805 28.484107-.2164805 12.731533 0 22.010447.4329609 31.936726.4329609.431578-2.5977653.863155-6.71089384 1.72631-9.7416201-11.436801.4329609-20.284137.4329609-34.310402.4329609-14.242053 0-23.305178 0-35.605133-.21648045l-1.72631 1.51536313c.215789 7.36033522 0 17.31843572-.431577 25.97765362l-1.078944 21.2150838c-.215788 9.0921788-.863154 17.1019553-1.294732 22.9469274l1.294732 1.0824022c6.905238-.8659218 12.515744-1.2988827 17.047307-1.2988827 30.426205 0 49.415609 10.6075419 49.415609 34.8533524 0 22.297486-18.557827 36.152234-43.589315 36.152234-11.221011 0-21.578869-1.948324-31.289359-5.628491l1.294732 9.74162c9.063125 3.247206 18.989404 4.97905 30.426205 4.97905 30.426205 0 53.084017-17.751397 53.084017-45.677374z"></path></g></g></svg></figure></p>
<p>Proportional numerals have variable spacing and blend in with horizontal text. They should be used in most situations, other than numeric tables where vertical alignment is important. Usually numbers are proportional figures by default.</p>
<pre><code class="language-css">font-variant-numeric: proportional-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;pnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;pnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>tabular-nums</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Tabular numerals &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, and &#x27;5&#x27; displayed inside separate brown background boxes, all aligned with equal width for consistent stacking in tables." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#e6594c" fill-opacity="0.25"><path d="m118 143h104v155h-104z"></path><path d="m230 143h104v155h-104z"></path><path d="m342 143h104v155h-104z"></path><path d="m454 143h117v155h-117z"></path><path d="m579 143h104v155h-104z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(122 143)"><path d="m96.9102299 142.444134c-7.1225781.432961-17.0510204.649441-24.8211056.649441h-16.8351847v-19.050279-96.3337988c0-2.3812849.2158357-24.67877094.4316714-26.41061452l-1.7266857-1.08240223-11.2234564 3.89664804c-7.985921 2.38128492-31.5120124 11.25698321-42.0879618 14.28770951l1.94252132 8.8756983 43.16714028-14.9371508v93.0865925c0 9.525139 0 26.194134-.2158357 37.667597h-20.7202273c-10.144278 0-15.10849914-.21648-24.8211057-.649441.4316714 2.814246.6475071 6.710894.86334281 9.74162 11.65512789-.21648 20.72022729-.432961 33.02286229-.432961h27.1952984c12.5184707 0 25.6844485 0 35.6128907.432961.2158357-2.381285.2158357-7.793296.2158357-9.74162z"></path><path d="m125.141501 142.877095c17.482692-15.803073 33.022862-30.523743 44.246319-41.997207 25.468612-26.1941338 36.476233-41.9972064 36.476233-61.6969271 0-24.0293296-18.130199-39.1829609-44.462154-39.1829609-17.698528 0-32.807027 8.22625698-46.836347 20.9986034l4.316714 8.0097765c13.597649-12.7723464 26.547791-19.91620113 42.087961-19.91620113 21.367735 0 34.965384 12.33938543 34.965384 31.17318433 0 24.2458101-21.799406 47.4092179-85.902609 105.2094969l1.726685 6.927375c14.892664-.649442 31.080341-.865922 48.347198-.865922 18.56187 0 34.317876.21648 49.210539.649441 0-3.463687.647508-6.710894 1.079179-9.9581-26.979463.865921-58.275639.649441-85.255102.649441z"></path><path d="m223.994446 148.072626c12.734306 4.76257 24.173598 6.927374 39.929605 6.927374 33.454533 0 56.980625-17.751397 56.980625-42.213687 0-20.9986035-18.561871-35.286313-51.153061-38.5335197 30.001162-6.0614525 47.915525-20.7821229 47.915525-40.698324 0-18.6173185-17.914363-33.5544693-45.109661-33.5544693-17.914364 0-33.454534 6.49441341-45.973005 14.9371508l4.100879 8.0097766c11.870963-8.226257 25.252777-13.85474863 41.224619-13.85474863 22.446913 0 35.828726 11.25698323 35.828726 25.32821233 0 17.3184357-17.266856 31.1731843-58.923146 38.3170391l1.510849 7.1438547c37.123741.6494414 60.433997 11.9064246 60.433997 33.5544691 0 18.833799-18.346035 32.472067-47.268019 32.472067-16.835184 0-28.274477-2.814246-40.792947-7.793296z"></path><path d="m409.001615 151.752793h10.144278c-.215836-5.412011-.431672-17.318435-.431672-24.895251v-14.28771c9.0651 0 17.698528.216481 25.684449.432961.215835-3.680167.431671-5.412011 1.295014-9.308659-8.633428.216481-17.266856.432961-26.979463.432961v-72.7374302c0-2.1648045.215836-28.1424581.431672-30.09078212l-6.906743-.86592179c-1.295014 1.94832403-14.02932 19.26675981-15.756006 21.43156421l-62.160682 85.0768159 2.590028 6.277933c15.540171-.649442 36.476234-.649442 54.390597-.649442h18.346035v6.494414c0 10.391061 0 25.111732-.647507 32.688547zm-7.122579-47.409218c-11.00762 0-44.462154 0-55.253939-.21648l63.024025-86.3756984v86.3756984c-2.590029.21648-5.395893.21648-7.770086.21648z"></path><path d="m462.816456 148.505587c10.791785 4.113128 22.662748 6.494413 36.907905 6.494413 33.238698 0 58.275639-17.751397 58.275639-45.677374 0-27.925978-22.878584-43.2960897-62.160682-43.2960897-5.180057 0-12.734306.8659218-17.482692 1.5153631l2.590029-54.769553c9.280935 0 25.900284-.2164805 34.749548-.2164805 15.54017 0 26.979462.4329609 39.066261.4329609 0-2.5977653.863343-6.71089384 1.51085-9.7416201-13.597649.4329609-24.389434.4329609-41.008783.4329609-16.835185 0-27.842805 0-42.303797-.21648045l-1.726686 1.51536313c0 7.36033522 0 17.31843572-.431671 25.97765362l-.863343 21.2150838c-.431672 9.5251397-1.295014 17.7513967-1.51085 23.8128492l1.295014 1.0824022c9.496771-1.5153631 17.266856-2.1648045 23.310256-2.1648045 33.886205 0 55.253939 10.6075419 55.253939 34.8533524 0 22.297486-21.367734 36.152234-48.994704 36.152234-13.597649 0-26.11612-2.597765-37.771248-7.143855z"></path></g></g></svg></figure></p>
<p>Tabular numerals have the same width and should be used in numeric tables to allow vertical alignment of numbers.</p>
<pre><code class="language-css">font-variant-numeric: tabular-nums; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;tnum&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;tnum&#x27; 0; /* low-level disable */
</code></pre>
<h3>diagonal-fractions</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of diagonal fractions with feature off and on. Left side shows full-size &#x27;1/2&#x27; characters; right side shows properly formatted diagonal fraction where numerator and denominator are adjusted for better alignment." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m106.500424 98.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m105.000849 148.119576-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m106.500424 262.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="177.952859" y="369">Diagonal fractions off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="503.920859" y="369">Diagonal fractions on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(132.664859 87)"><path d="m37.68 177.12c-.24-5.76-.48-16.8-.48-24.72v-60.48c0-2.64.24-28.08.48-30l-2.16-1.2-10.08 2.88c-6.24 1.68-17.28 4.8-25.44 6.72l1.92 9.84 24.72-6.72v62.64c0 12.96 0 31.44-.72 41.04z"></path><path d="m135.36 0c-3.84.48-7.92.72-10.8.72-3.12 12.96-6 23.76-12.24 45.12l-37.68 132.48c-6.24 21.84-11.52 40.32-16.8 57.12l10.56-.96 9.36-34.08 47.76-167.52c3.36-12 8.88-30.24 9.84-32.88z"></path><path d="m236.16 166.8c-23.52.96-48.24.72-71.52.72 12-8.64 30.24-22.08 43.2-34.32 13.68-12.48 22.08-25.2 22.08-39.6 0-21.12-16.8-34.08-38.64-34.08-13.44 0-27.12 5.28-38.16 13.92l3.6 9.36c10.56-8.88 22.56-13.68 33.84-13.68 17.04 0 28.8 9.36 28.8 25.44 0 17.52-12.96 32.4-73.44 75.6l2.16 7.68c13.92-.72 29.04-.96 45.12-.96 15.6 0 28.56.24 41.52.72 0-3.84.48-6.96 1.44-10.8z"></path></g><path d="m503.904859 267.36c6.96-9.6 12-15.84 17.28-23.28l84.96-115.92c5.52-7.92 14.64-20.64 20.64-28.08-1.44-.72-6.24-3.12-7.68-4.08-4.56 7.2-11.04 16.32-26.64 37.68l-66.96 91.44c-8.16 11.28-12.96 17.76-28.56 37.92zm9.84-159.84v53.52c0 7.44-.24 22.08-.48 27.6h9.6c-.24-3.36-.24-12.24-.24-16.56v-58.56c0-2.16.24-14.16.24-16.08l-1.92-.72-8.16 2.64c-6.24 1.92-13.2 4.32-21.12 6.48l1.92 7.68zm85.68 84.96c8.88-7.68 17.28-11.52 26.88-11.52 12.72 0 20.4 6.72 20.4 17.04 0 8.4-4.8 16.08-17.76 28.32-8.64 8.16-20.88 18.24-36.96 31.92l1.44 6.48c9.84-.24 20.64-.48 32.16-.48 12.48 0 22.32.24 32.4.48 0-3.12.48-6 .72-9.12-16.32.48-36.24.72-53.04.72 10.32-8.64 20.64-17.28 28.8-24.72 14.4-13.68 21.6-22.08 21.6-34.56 0-15.12-12-24.48-29.28-24.48-12 0-23.04 5.28-31.44 12.72z"></path></g></g></svg></figure></p>
<p>By default, fractions will display as lowercase letters with a slash. Proper fractions will be formatted to match the height of a lining figure and can be either diagonal or stacked.</p>
<pre><code class="language-css">font-variant-numeric: diagonal-fractions; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;frac&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;frac&#x27; 0; /* low-level disable */
</code></pre>
<h3>stacked-fractions</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of stacked fractions with feature off and on. Left side shows large &#x27;1/2&#x27; separated by a slash; right side shows a neatly stacked fraction with &#x27;1&#x27; above &#x27;2&#x27; separated by a horizontal line." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m107.000849 192-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-1zm4.999999.004243-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000848 1 3 .002545.000847-.999999zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999999.004244-.000849 1 3 .002545.000848-.999999zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000848 1 3 .002546.000847-1zm4.999998.004244-.000848 1 3 .002545.000847-.999999zm4.999999.004243-.000849 1 3 .002546.000848-1zm4.999998.004243-.000849 1 3 .002546.000848-1zm4.999998.004244-.000849 1 3 .002545.000848-1z" fill="#e6594c" fill-rule="nonzero"></path><path d="m106 124.5 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><path d="m105.835565 258.62 589.169298.5" stroke="#e6594c" stroke-linecap="square"></path><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="212.069142" y="358">Stacked fractions off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="524.037142" y="358">Stacked fractions on</tspan></text><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(135.789142 107)"><path d="m80.1131105 152.895038.8637533-8.410305h-33.6863754v-130.4675574l-9.5012853.8625954v14.879771l-36.06169667 4.9599236.2159383 6.9007634 35.84575837-2.5877863v105.4522903h-37.7892031v8.410305z"></path><path d="m189.485861 0-101.922879 188.26145 8.6375321 2.372138 101.2750639-186.96755747z"></path><path d="m291.51671 152.895038v-8.625954h-74.282777c44.699229-37.091603 69.100257-61.2442748 69.100257-88.8473283 0-21.7805343-16.411311-38.601145-75.362468-37.9541984l-.863753 9.0572519c52.688946 0 66.940874 12.5076335 66.940874 30.6221374 0 24.7996183-24.832905 48.0896944-71.043702 87.5534354l.863754 8.194656z"></path></g><path d="m625.822561 168.062977.647815-7.332061h-25.912596v-81.730916l-8.205656.6469466v13.1545801l-27.856041 4.0973283.215938 6.038168 27.640103-2.372138v60.166031h-28.935733v7.332061zm-79.033419 29.543893h91.557841v-7.116412h-91.557841zm77.305913 107.39313v-7.54771h-51.177378c31.095115-22.427481 47.938303-37.522901 47.938303-54.774809 0-14.017176-12.308483-25.015267-55.280206-24.58397l-.647815 7.332062c37.357327.431297 47.722366 7.763358 47.722366 19.192748 0 14.879771-17.706941 29.328244-50.745502 53.265267l.863753 7.116412z"></path></g></g></svg></figure></p>
<p>Stacked fractions are not as common of a feature in most web fonts as diagonal fractions, but should prove useful with heavily scientific or mathematical content.</p>
<pre><code class="language-css">font-variant-numeric: stacked-fractions; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;afrc&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;afrc&#x27; 0; /* low-level disable */
</code></pre>
<h3>ordinal</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of ordinal formatting with feature off and on. Left side shows &#x27;1st&#x27; at normal size; right side shows &#x27;st&#x27; as smaller, raised text next to the &#x27;1&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m106 113.450058 588.754788.450058" stroke="#e6594c" stroke-linecap="square"></path><path d="m106 179.450058 588.754788.450058" stroke="#e6594c" stroke-dasharray="2 3" stroke-linecap="square"></path><path d="m106 296.569686 588.754788.450058" stroke="#e6594c" stroke-linecap="square"></path><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(129 154.396051)"><path d="m30.456 142.146341h12.528v-120.9756093l-42.984 1.2961673v9.2891986h30.456z"></path><path d="m113.4 144.522648c19.224 0 42.12-6.912892 42.12-32.836237 0-38.0209058-58.968-29.3797908-58.968-60.2717769 0-11.0174216 8.424-19.8745644 23.976-19.8745644 13.176 0 22.032 3.2404181 25.704 4.3205575l2.376-10.1533101c-2.376-.6480837-12.96-4.5365854-25.704-4.5365854-22.248 0-37.8 11.0174216-37.8 31.1080139 0 39.749129 59.4 30.2439025 59.4 61.1358884 0 13.1777-13.608 20.954704-31.968 20.954704-11.448 0-22.896-3.672474-28.728-5.400697l-2.592 10.585366c5.4 1.728223 16.632 4.968641 32.184 4.968641z"></path><path d="m230.04 144.522648c7.128 0 16.2-2.808362 19.008-3.888502l-3.024-10.585366c-3.24 1.08014-10.368 3.456446-16.632 3.456446-19.872 0-25.056-3.672473-25.056-23.33101v-74.7456446h36.936v-11.2334494h-37.152v-24.195122h-11.448v24.195122h-17.28v11.2334494h17.28v74.9616726c0 33.052265 15.768 34.132404 37.368 34.132404z"></path></g><path d="m504.456 297.019744h12.528v-120.975609l-42.984 1.296167v9.289199h30.456z"></path><path d="m576.816 208.664344c12.744 0 30.672-4.968641 30.672-22.898955 0-25.275261-43.416-19.010453-43.416-38.020906 0-6.696864 6.696-11.017421 16.416-11.017421 8.856 0 16.848 1.94425 20.088 2.808362l2.16-8.857143c-2.376-.864111-12.096-3.02439-20.952-3.02439-14.904 0-28.512 7.344948-28.512 21.818815 0 27.219512 43.416 19.010453 43.416 37.804878 0 7.560976-9.72 11.665505-21.816 11.665505-5.832 0-18.36-2.160278-22.464-3.240418l-1.728 9.505227c2.16 1.080139 15.768 3.456446 26.136 3.456446z"></path><path d="m658.032 208.664344c4.968 0 11.664-1.728223 13.608-2.376307l-1.944-8.857143c-1.08.216028-2.376.648084-3.672.864112-2.376.648083-4.968.864111-8.208.864111-12.096 0-15.12-1.728223-15.12-13.393728v-47.094077h24.192v-9.289198h-24.192v-15.986063h-10.8v15.986063h-11.448v9.289198h11.448v47.310105c0 22.682927 11.664 22.682927 26.136 22.682927z"></path></g><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="213.672" y="343.396051">Ordinals off</tspan></text><text fill="#e6594c" font-family="IdealSans-Book, Ideal Sans" font-size="16"><tspan x="532.64" y="343.396051">Ordinals on</tspan></text></g></svg></figure></p>
<p>Ordinals like st, nd, rd, and th will appear as standard lowercase letters by default. However, these should ideally appear as smaller raised numbers following the numeral. The <code>ordinal</code> value enables that.</p>
<pre><code class="language-css">font-variant-numeric: ordinal; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;ordn&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;ordn&#x27; 0; /* low-level disable */
</code></pre>
<h3>slashed-zero</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of a standard zero and a slashed zero. Left side shows &#x27;0&#x27; and &#x27;1&#x27; in normal form; right side shows &#x27;0&#x27; with a diagonal slash across it to distinguish it from the letter &#x27;O&#x27;." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(451 125)"><path d="m49.2 157.2c31.92 0 52.32-31.44 52.32-78.96 0-47.04-18-75.12-49.2-75.12-31.92 0-52.32 31.2-52.32 78.96 0 46.8 18 75.12 49.2 75.12zm-38.64-77.04c0-42.48 14.4-67.68 40.8-67.68 20.64 0 33.12 16.08 37.68 43.68l-77.76 40.32c-.48-5.04-.72-10.56-.72-16.32zm39.84 67.68c-20.4 0-33.36-15.6-37.92-42.72l77.52-40.32c.48 4.8.72 9.84.72 15.36 0 42.48-13.68 67.68-40.32 67.68z"></path><path d="m215.4 154.56.96-9.36h-37.44v-145.2l-10.56.96v16.56l-40.08 5.52.24 7.68 39.84-2.88v117.36h-42v9.36z"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(132 125)"><path d="m49.2 157.2c31.92 0 52.32-31.44 52.32-78.96 0-47.04-18-75.12-49.2-75.12-31.92 0-52.32 31.2-52.32 78.96 0 46.8 18 75.12 49.2 75.12zm2.16-144.72c25.92 0 39.36 25.44 39.36 67.68 0 42.48-13.68 67.68-40.32 67.68-25.92 0-39.84-25.44-39.84-67.68 0-42.48 14.4-67.68 40.8-67.68z"></path><path d="m215.4 154.56.96-9.36h-37.44v-145.2l-10.56.96v16.56l-40.08 5.52.24 7.68 39.84-2.88v117.36h-42v9.36z"></path></g><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="510.179688" y="331">Slashed zero</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="186.71875" y="331">Standard zero</tspan></text><path d="m462.167334 243.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m547.167334 201.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>This enables an alternate zero character with a slash through it.</p>
<pre><code class="language-css">font-variant-numeric: slashed-zero; /* enable */
font-variant-numeric: normal; /* disable all variants */

font-feature-settings: &#x27;zero&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;zero&#x27; 0; /* low-level disable */
</code></pre>
<h2>font-variant-alternates</h2>
<p>Fonts can provide a variety of alternates for any character. The <code>font-variant-alternates</code> property provides many ways of controlling this character substitution.</p>
<h3>historical-forms</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard form and historical form characters. On the left, regular &#x27;s&#x27; and &#x27;b&#x27; characters; on the right, &#x27;long s&#x27; and historical &#x27;b&#x27; with ornate flourishes, highlighting historical typographic forms." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(149 104)"><path d="m73.8 144.6c0 9.76-3.84 17.96-11.52 24.6s-16.96 9.96-27.84 9.96c-3.84 0-9.76-.84-17.76-2.52-6-1.2-10.08-1.8-12.24-1.8-.64-5.6-2.12-14.12-4.44-25.56 0-1.2 1.16-1.8 3.48-1.8 1.92 0 3.08.64 3.48 1.92 1.84 5.92 5.48 11.08 10.92 15.48s11.04 6.6 16.8 6.6c6 0 10.66-1.64 13.98-4.92s4.98-7.88 4.98-13.8c0-3.76-1.38-7.08-4.14-9.96s-8.74-6.44-17.94-10.68c-12.08-5.52-20.06-10.72-23.94-15.6s-5.82-10.72-5.82-17.52c0-8.4 3.64-15.62 10.92-21.66s15.88-9.06 25.8-9.06c4.16 0 10 .72 17.52 2.16 4.16.8 6.88 1.2 8.16 1.2.24 9.44.76 17.48 1.56 24.12 0 1.2-1.16 1.8-3.48 1.8-2 0-3.12-.64-3.36-1.92-.88-5.84-3.08-10.58-6.6-14.22s-7.72-5.46-12.6-5.46c-12.48 0-18.72 5.44-18.72 16.32 0 3.68 1.48 7.08 4.44 10.2s9.4 7.16 19.32 12.12c11.84 5.92 19.64 11.04 23.4 15.36s5.64 9.2 5.64 14.64z"></path><path d="m203.28 123.24c0 14.72-5.2 27.72-15.6 39s-22.44 16.92-36.12 16.92c-7.6 0-14.96-1.6-22.08-4.8-4.88-2.24-9.2-3.36-12.96-3.36-6 0-9.96 2.56-11.88 7.68-.4.96-1.4 1.44-3 1.44-2.08 0-3.12-.64-3.12-1.92.64-6.72.96-14.8.96-24.24v-117c0-6.48-.82-10.72-2.46-12.72s-5.22-3.28-10.74-3.84c-1.28 0-1.92-.96-1.92-2.88 0-2.24.64-3.36 1.92-3.36 14.24-3.68 24.36-7.92 30.36-12.72 1.2-.96 2.2-1.44 3-1.44 2.24 0 3.36.64 3.36 1.92-1.28 17.44-1.92 31.44-1.92 42v35.88c7.52-7.52 16.72-11.28 27.6-11.28 16.24 0 29.4 4.92 39.48 14.76s15.12 23.16 15.12 39.96zm-24.12.96c0-14.72-2.92-26.24-8.76-34.56s-14.04-12.48-24.6-12.48c-5.68 0-11.22 2.14-16.62 6.42s-8.1 8.54-8.1 12.78v55.44c0 4.24 3.22 8.54 9.66 12.9s12.42 6.54 17.94 6.54c9.6 0 17.08-4.28 22.44-12.84s8.04-19.96 8.04-34.2z"></path></g><path d="m194.28 123c0 14.8-5.22 27.82-15.66 39.06s-22.58 16.86-36.42 16.86c-7.52 0-14.8-1.56-21.84-4.68-4.96-2.16-9.28-3.24-12.96-3.24-5.92 0-9.92 2.48-12 7.44-.4.96-1.4 1.44-3 1.44-1.92 0-2.88-.64-2.88-1.92.64-6.72.96-14.8.96-24.24v-117c0-14.24-7.52-21.36-22.56-21.36-18.72 0-28.08 12-28.08 36v96.84c0 8.08.84 13.3 2.52 15.66s5.88 3.94 12.6 4.74c1.28 0 1.92 1.12 1.92 3.36s-.64 3.36-1.92 3.36c-3.28 0-7.32-.24-12.12-.72-5.28-.48-9.88-.72-13.8-.72s-8.72.24-14.4.72c-5.12.48-9.36.72-12.72.72-1.28 0-1.92-1.12-1.92-3.36s.64-3.36 1.92-3.36c6.96-.8 11.42-2.4 13.38-4.8s2.94-7.6 2.94-15.6v-57.12c0-2.24-.96-3.36-2.88-3.36h-12.24c-1.6 0-2.4-1.04-2.4-3.12 0-2 .72-3.2 2.16-3.6 10.24-2.72 15.36-4.96 15.36-6.72 0-12.16 2.96-24.1 8.88-35.82s13.74-20.9 23.46-27.54 20.38-9.96 31.98-9.96c7.36 0 13.6 1.52 18.72 4.56 2.48-1.44 4.6-2.84 6.36-4.2 1.12-.88 2.08-1.32 2.88-1.32 2.24 0 3.36.64 3.36 1.92-1.28 13.12-1.92 27.04-1.92 41.76v35.88c7.52-7.52 16.64-11.28 27.36-11.28 16.4 0 29.66 4.92 39.78 14.76s15.18 23.16 15.18 39.96zm-24.48.96c0-14.8-2.9-26.34-8.7-34.62s-14.02-12.42-24.66-12.42c-5.52 0-10.98 2.16-16.38 6.48s-8.1 8.56-8.1 12.72v55.44c0 4.32 3.2 8.64 9.6 12.96s12.4 6.48 18 6.48c9.6 0 17.04-4.24 22.32-12.72s7.92-19.92 7.92-34.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.36 104.24)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="497.249219" y="332.12">Historical form</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="194.546094" y="332.12">Standard form</tspan></text><path d="m552.834697 139.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.9547468c-.468072.474945-.916901.9689068-1.345221 1.4806208l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.9378393c-.492844-.4479899-1.004025-.8761637-1.532283-1.2832627l-.610577.7919571c.506641.3904327.997286.8013633 1.470652 1.2316682zm-30.935672-1.6443071c-.538538.3944271-1.060369.8103178-1.564232 1.2464125l.654476.7560827c.483818-.4187427.984443-.8176716 1.500576-1.1956912zm27.736817-.81636c-.558958-.3610418-1.133554-.6999483-1.722548-1.0154793l-.472217.8814823c.563867.3020702 1.115124.6270935 1.652432.9741608zm-24.307127-1.286625c-.596493.3013166-1.17899.6263061-1.746255.9737335l.522236.8528012c.545358-.3340119 1.104161-.6456493 1.675072-.9340376zm20.791783-.5970695c-.609171-.264861-1.231207-.5056848-1.864912-.7212742l-.322644.9465204c.606001.2061471 1.202752.4369993 1.788961.6918808zm-17.053825-.9171646c-.639511.1991574-1.267781.4238132-1.88362.6727777l.37459.9271907c.592446-.2395142 1.194898-.4547624 1.806076-.6451053zm13.238572-.3778261c-.643229-.1603237-1.296515-.2952261-1.958731-.4035785l-.161429.9868843c.63255.1034998 1.259058.2326591 1.87836.3870203zm-9.287976-.5000097c-.665068.0907456-1.321642.208181-1.968607.3511915l.216094.9763727c.623064-.1377199 1.252824-.25013 1.888139-.336804zm3.343187-.2261979c-.431638 0-.860669.0111622-1.28682.0332137l.052027.9986457.616313-.0238855.61848-.0079739c.642738 0 1.282242.0257794 1.917527.0770524l.079895-.9968035c-.658791-.0531552-1.324943-.0802489-1.997422-.0802489z" fill-rule="nonzero"></path><path d="m469.167334 203.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m508.167334 290.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Historical alternates can be used for a “period” effect. Note the difference between this and historical ligatures. Historical ligatures are historical character combinations, whereas historical forms are substitutions for individual characters.</p>
<pre><code class="language-css">font-variant-alternates: historical-forms; /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: &#x27;hist&#x27; 1; /* low-level enable */
font-feature-settings: &#x27;hist&#x27; 0; /* low-level disable */
</code></pre>
<h3>stylistic(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard character and stylistic alternate for the letter &#x27;G&#x27;. Left side shows a traditional &#x27;G&#x27;; right side shows an alternate &#x27;G&#x27; with a straight vertical bar instead of a horizontal crossbar." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m146.64 159.36v-18.72c0-15.36.48-48.72 1.68-58.08-14.16.72-21.12.96-37.92.96-10.8 0-18-.24-32.64-.72.48 5.76.48 13.44 0 21.6 13.68-.48 20.64-.72 32.64-.72 7.44 0 5.52 0 12.72.24.48 4.32.48 10.8.48 14.4v30c-10.08 5.28-20.64 7.68-34.08 7.68-35.52 0-65.28-24.48-65.28-67.2 0-38.88 25.92-67.44 64.8-67.44 16.32 0 36.96 5.76 48.96 15.36l6.72-21.6c-13.2-8.64-35.28-15.12-53.28-15.12-52.32 0-91.44 40.32-91.44 90.72 0 48.24 37.68 86.4 86.88 86.4 29.04 0 46.32-8.88 59.76-17.76z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(171 105)"></path><path d="m146.64 140.88c0-15.6 1.44-53.52 1.44-53.52h-25.2s.72 27.6.72 31.2v29.76c-10.08 5.28-20.64 7.68-34.08 7.68-35.52 0-65.28-24.48-65.28-67.2 0-38.88 25.92-67.44 64.8-67.44 16.32 0 36.96 5.76 48.96 15.36l6.72-21.6c-13.2-8.64-35.28-15.12-53.28-15.12-52.32 0-91.44 40.32-91.44 90.72 0 48.24 37.68 86.4 86.88 86.4 29.04 0 46.32-8.88 59.76-17.76z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(475 105)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="483.335938" y="330">Stylistic alternate</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="172.316406" y="330">Standard character</tspan></text><path d="m608.834697 219.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use this to select stylistic features on an individual basis. In order to use this and several of the following <code>font-variant-alternates</code> functions, you must define a <code>font-feature-value</code> using the <code>@font-feature-values</code> rule. For example, if you wanted to select stylistic feature number 1 in the font you are using, you would first define the feature value, and then use it within the <code>font-variant-alternates: stylistic()</code> function.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @stylistic { inscriptional-g: 1 }
}

font-variant-alternates: stylistic(inscriptional-g); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: salt 1; /* low-level enable */
font-feature-settings: salt 0; /* low-level disable */
</code></pre>
<h3>styleset(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard and alternate stylesets for the letter &#x27;w&#x27;. Left side shows a simple cursive &#x27;w&#x27;; right side shows an alternate &#x27;w&#x27; with an extended decorative leading stroke." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="482.558594" y="309">Alternate styleset</tspan></text><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="178.679688" y="309">Standard styleset</tspan></text><g fill-rule="nonzero"><path d="m171.24 18.96c0 12-3.8 25.58-11.4 40.74s-16.82 27.48-27.66 36.96-21.46 14.22-31.86 14.22c-9.76 0-16.64-5.6-20.64-16.8-13.6 11.2-24.88 16.8-33.84 16.8-7.28 0-13.02-2.4-17.22-7.2s-6.3-11.2-6.3-19.2c0-9.6 3.62-21.1 10.86-34.5s15.3-24.06 24.18-31.98c-3.2 1.28-6.24 1.92-9.12 1.92-2.48 0-5.88-.64-10.2-1.92-3.84-1.28-6.76-1.92-8.76-1.92-5.2 0-9.26.92-12.18 2.76s-4.38 4.28-4.38 7.32c0 1.44.8 3.2 2.4 5.28 2.24 2.88 3.36 5.68 3.36 8.4 0 5.44-2.8 8.16-8.4 8.16-2.8 0-5.18-1.16-7.14-3.48s-2.94-5.48-2.94-9.48c0-6.88 3.84-14.44 11.52-22.68s14.72-12.36 21.12-12.36c3.44 0 7.76.72 12.96 2.16 4.16 1.12 7.36 1.68 9.6 1.68 2.8 0 6.08-.48 9.84-1.44 1.52-.48 2.56-.72 3.12-.72 1.04 0 1.98.44 2.82 1.32s1.26 1.8 1.26 2.76c0 1.84-2.36 5.8-7.08 11.88-8.8 11.2-14.82 21.14-18.06 29.82s-4.86 17.74-4.86 27.18c0 11.04 4.64 16.56 13.92 16.56 7.44 0 14.4-2.24 20.88-6.72-.48-3.36-.72-6.96-.72-10.8 0-17.36 3.96-33.98 11.88-49.86s16.4-23.82 25.44-23.82c7.84 0 11.76 5.68 11.76 17.04 0 19.76-10.36 40.88-31.08 63.36 2.4 7.2 7.88 10.8 16.44 10.8 11.68 0 21.8-5.78 30.36-17.34s12.84-24.58 12.84-39.06c0-4.96-1.24-9.8-3.72-14.52-1.68-3.12-2.52-5.8-2.52-8.04 0-3.6 1.06-6.54 3.18-8.82s4.98-3.42 8.58-3.42c3.52 0 6.36 1.74 8.52 5.22s3.24 8.06 3.24 13.74zm-54.96 1.68c0-4.32-1.68-6.48-5.04-6.48-5.68 0-10.56 3.98-14.64 11.94s-6.12 17.98-6.12 30.06c0 5.44.56 10.4 1.68 14.88 7.44-8.64 13.32-17.44 17.64-26.4s6.48-16.96 6.48-24z" fill="#f5f5f5" transform="translate(148 149.92)"></path><path d="m221.04 20.88c0 11.44-3.5 24.44-10.5 39s-15.74 26.76-26.22 36.6c-11.6 10.88-22.96 16.32-34.08 16.32-4.96 0-9.18-1.46-12.66-4.38s-6.22-7.06-8.22-12.42c-6.4 5.28-12.52 9.4-18.36 12.36s-11 4.44-15.48 4.44c-7.52 0-13.4-2.56-17.64-7.68-3.92-4.72-5.88-10.96-5.88-18.72 0-9.92 3.88-21.88 11.64-35.88 7.12-12.88 14.92-23.08 23.4-30.6-4.56 2-9.12 3.46-13.68 4.38s-10.08 1.38-16.56 1.38c-3.76 0-8.34-.86-13.74-2.58s-10.66-3.42-15.78-5.1c-6.48-1.76-12.8-2.64-18.96-2.64-5.04 0-8.86.78-11.46 2.34s-3.9 3.98-3.9 7.26c0 1.28.92 3.2 2.76 5.76s2.76 5.12 2.76 7.68c0 2.72-.72 4.8-2.16 6.24s-3.44 2.16-6 2.16c-2.48 0-4.68-.92-6.6-2.76-2.48-2.4-3.72-5.8-3.72-10.2 0-8.32 3.8-16.04 11.4-23.16s15.4-10.68 23.4-10.68c5.44 0 11.76.92 18.96 2.76 15.92 4.08 25.04 6.12 27.36 6.12 6.72 0 13.28-.52 19.68-1.56 5.68-1.2 11.36-2.44 17.04-3.72 1.04 0 1.98.42 2.82 1.26s1.26 1.78 1.26 2.82c0 1.84-2.56 6.04-7.68 12.6-6.72 8.56-11.56 15.96-14.52 22.2-5.2 10.8-7.8 22.16-7.8 34.08 0 5.36 1.22 9.46 3.66 12.3s5.94 4.26 10.5 4.26c3.68 0 7.32-.6 10.92-1.8s6.92-2.84 9.96-4.92c-.32-1.36-.56-3.04-.72-5.04s-.24-3.92-.24-5.76c0-17.2 3.94-33.74 11.82-49.62s16.42-23.82 25.62-23.82c3.68 0 6.6 1.42 8.76 4.26s3.24 7.02 3.24 12.54c0 10.08-3.04 20.92-9.12 32.52-5.36 10.32-12.8 20.6-22.32 30.84 1.2 3.52 3.24 6.2 6.12 8.04s6.36 2.76 10.44 2.76c12 0 22.36-6.04 31.08-18.12 8.24-11.44 12.36-24.2 12.36-38.28 0-4.32-.64-7.96-1.92-10.92-3.04-7.04-4.56-10.92-4.56-11.64 0-3.44 1-6.3 3-8.58s4.92-3.42 8.76-3.42c3.6 0 6.46 1.62 8.58 4.86s3.18 7.86 3.18 13.86zm-54.72 1.92c0-2.08-.42-3.72-1.26-4.92s-2.18-1.8-4.02-1.8c-5.36 0-10.08 3.64-14.16 10.92-4.48 8-6.72 18.36-6.72 31.08 0 2.4.16 5 .48 7.8s.72 5.16 1.2 7.08c7.52-8.48 13.48-17.16 17.88-26.04s6.6-16.92 6.6-24.12z" fill="#f5f5f5" transform="translate(430 147)"></path><path d="m478.834697 179.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill="#e6594c"></path></g></g></svg></figure></p>
<p>Use this to select an entire set of alternative glyphs. The glyphs in a set are often designed to work together. Select a particular set by defining a <code>font-feature-values</code> rule using the set’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @styleset { special-styleset: 1 }
}

font-variant-alternates: styleset(special-styleset); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: ss01; /* low-level enable */
</code></pre>
<h3>character-variant(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of standard character and character variant for the letter &#x27;k&#x27;. Left side shows a regular cursive &#x27;k&#x27;; right side shows an alternate &#x27;k&#x27; with an exaggerated extended lower stroke." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m108.725106 91.8c0 6.16-2.66 12.34-7.98 18.54-5.3199996 6.2-12.2599996 11.02-20.8199996 14.46s-18 5.16-28.32 5.16c4.08 8.48 9.76 17 17.04 25.56s12.96 12.84 17.04 12.84c3.84 0 5.76-1.92 5.76-5.76 0-1.92-1.12-3.88-3.36-5.88l-1.2-1.56c0-1.12.38-2.08 1.14-2.88s1.66-1.2 2.7-1.2c1.92 0 3.96 1.42 6.12 4.26s3.2399996 5.58 3.2399996 8.22c0 10.4-6.7999996 15.6-20.3999996 15.6-8.4 0-17.04-4.36-25.92-13.08s-16-19.64-21.36-32.76l-13.44 38.88c-.32 1.12-1.6 2.08-3.84 2.88s-4.48 1.2-6.72000002 1.2c-2.08 0-4.02-.34-5.82-1.02s-2.66-1.7-2.58-3.06l44.40000002-135.24c1.44-4.32 2.16-7.92 2.16-10.8 0-3.12-3.52-5.08-10.56-5.88-1.44-.16-2.16-1.16-2.16-3 0-1.92.56-2.88 1.68-2.88 5.12-.96 11.2-2.76 18.24-5.4s12.4-5.12 16.08-7.44c1.6-1.04 2.96-1.56 4.08-1.56 1.6 0 2.4.88 2.4 2.64 0 1.92-.4 4-1.2 6.24l-29.28 85.32c8.16-9.76 15.34-16.52 21.54-20.28s12.86-5.64 19.98-5.64c6.4 0 11.56 2.2 15.4799996 6.6 3.92 4.4 5.88 10.04 5.88 16.92zm-20.8799996 3.12c0-7.68-3.44-11.52-10.32-11.52-4.4 0-9.5 1.94-15.3 5.82s-11.1 8.76-15.9 14.64-7.2 10.34-7.2 13.38c0 3.52 2.64 5.28 7.92 5.28 27.2 0 40.8-9.2 40.8-27.6z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(184 81)"></path><path d="m171.191111 211.68c0 6.24-2.48 11.2-7.44 14.88-5.36 4-12.96 6-22.8 6-13.76 0-28.68-6.08-44.7599999-18.24-13.52-10.24-26.64-23.72-39.36-40.44-11.2-14.72-19.32-28.2-24.36-40.44l-13.44 38.88c-.32 1.2-1.64 2.18-3.96 2.94s-4.52 1.14-6.59999999 1.14c-2.24 0-4.28-.36-6.12-1.08-1.84-.72-2.6-1.72-2.28-3l44.39999999-135.36c.72-2.24 1.26-4.26 1.62-6.06s.54-3.38.54-4.74c0-3.12-3.52-5.04-10.56-5.76-1.44 0-2.16-1.04-2.16-3.12 0-1.68.56-2.64 1.68-2.88 5.44-.96 11.56-2.72 18.36-5.28s12.12-5.04 15.96-7.44c.64-.48 1.28-.88 1.92-1.2s1.36-.48 2.16-.48c1.6 0 2.4.96 2.4 2.88 0 .88-.1 1.82-.3 2.82s-.5 2.06-.9 3.18l-29.28 85.44c7.44-8.8 13.92-15.04 19.44-18.72 6.88-4.64 14.24-6.96 22.08-6.96 6.64 0 11.92 2.24 15.8399999 6.72 3.68 4.24 5.52 9.76 5.52 16.56 0 8.88-4.84 17.16-14.5199999 24.84-11.2 8.88-25.4 13.32-42.6 13.32 5.04 10.32 12.4 22 22.08 35.04 11.76 15.84 23.44 28.48 35.0399999 37.92 14.48 11.84 27.68 17.76 39.6 17.76 4.8 0 8.56-.86 11.28-2.58s4.08-4.22 4.08-7.5c0-1.84-1-3.72-3-5.64l-1.56-1.8c0-1.12.36-2.08 1.08-2.88s1.56-1.2 2.52-1.2c1.92 0 3.8 1.4 5.64 4.2s2.76 5.56 2.76 8.28zm-83.2799999-116.64c0-3.6-.9-6.42-2.7-8.46s-4.34-3.06-7.62-3.06c-7.2 0-15.52 4.56-24.96 13.68-8.96 8.64-13.44 15.36-13.44 20.16 0 1.68.62 2.98 1.86 3.9s3.26 1.38 6.06 1.38c15.68 0 26.84-3.04 33.48-9.12 4.88-4.48 7.32-10.64 7.32-18.48z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(454 81)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="473.679688" y="355">Character variant</tspan></text><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="165.316406" y="355">Standard character</tspan></text><path d="m558.834697 313.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use this to select specific character variants. Select a particular variant by defining a <code>font-feature-values</code> rule using the variant’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @character-variant { special-variant: 1 }
}

font-variant-alternates: character-variant(special-variant); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: cv01; /* low-level enable */
</code></pre>
<h3>swash(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Comparison of swash flourish off and on for the letter &#x27;M&#x27;. Left side shows a plain &#x27;M&#x27;; right side shows an ornate &#x27;M&#x27; with decorative swashes and curled endings." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="446.273438" y="325">Swash flourish on</tspan></text><path d="m194.784 1.92c0 2.304-.704 3.456-2.112 3.456-8 .896-13.616 2.368-16.848 4.416s-5.424 6.016-6.576 11.904l-12.48 90.336c-.32 2.56-.48 4.448-.48 5.664 0 3.264 1.296 5.648 3.888 7.152s7.216 2.64 13.872 3.408c.768.064 1.152.608 1.152 1.632 0 .896-.24 1.728-.72 2.496s-1.008 1.152-1.584 1.152c-4.288 0-9.408-.192-15.36-.576-5.696-.384-10.496-.576-14.4-.576s-8.736.192-14.496.576c-6.016.384-11.168.576-15.456.576-.768 0-1.152-.576-1.152-1.728 0-.832.24-1.616.72-2.352s1.008-1.136 1.584-1.2c8-.96 13.488-2.48 16.464-4.56s4.848-5.968 5.616-11.664l13.44-92.064-64.032 115.104c-.64 1.024-1.664 1.536-3.072 1.536-1.536 0-2.304-.512-2.304-1.536l-15.552-111.456-27.84 88.416c-.96 2.752-1.44 4.96-1.44 6.624 0 2.752 1.376 4.848 4.128 6.288s7.424 2.544 14.016 3.312c.64.128.96.672.96 1.632 0 .896-.24 1.728-.72 2.496s-1.008 1.152-1.584 1.152c-3.328 0-7.744-.192-13.248-.576-5.312-.384-9.472-.576-12.48-.576-3.2 0-7.616.192-13.248.576-5.44.384-9.6.576-12.48.576-.64 0-.96-.576-.96-1.728 0-2.24.768-3.456 2.304-3.648 8-.896 13.744-2.368 17.232-4.416s6.192-5.952 8.112-11.712l31.488-90.336c.768-2.56 1.152-4.64 1.152-6.24 0-3.008-1.424-5.264-4.272-6.768s-7.632-2.608-14.352-3.312c-.64 0-.96-.512-.96-1.536 0-.96.224-1.84.672-2.64s.992-1.2 1.632-1.2c1.536 0 4.48.192 8.832.576 4.8.384 8.128.576 9.984.576 2.176 0 5.344-.192 9.504-.576 4.224-.384 7.52-.576 9.888-.576l13.92 104.544 58.944-104.544c2.56 0 5.92.192 10.08.576 3.776.384 6.752.576 8.928.576 2.56 0 5.888-.192 9.984-.576 4.288-.384 7.872-.576 10.752-.576.64 0 .96.64.96 1.92z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(132 131)"></path><path d="m310.848 17.28c0 3.648-.816 6.288-2.448 7.92s-4.08 2.448-7.344 2.448c-3.328 0-6.528-3.2-9.6-9.6s-7.36-9.6-12.864-9.6c-8 0-14.016 4.032-18.048 12.096-4.544 9.024-8.576 26.496-12.096 52.416l-8.064 57.984c-.32 2.176-.48 3.536-.48 4.08v1.392c0 3.2 1.184 5.584 3.552 7.152s7.168 2.736 14.4 3.504c.64.192.96.768.96 1.728s-.208 1.808-.624 2.544-.976 1.104-1.68 1.104c-4.288 0-9.344-.16-15.168-.48s-10.624-.48-14.4-.48c-3.904 0-8.832.16-14.784.48s-11.072.48-15.36.48c-.64 0-.96-.576-.96-1.728 0-.832.208-1.616.624-2.352s.976-1.168 1.68-1.296c8.256-.96 13.808-2.512 16.656-4.656s4.656-5.968 5.424-11.472l6.72-47.232c1.408-9.408 2.304-15.424 2.688-18.048.896-5.888 1.68-10.512 2.352-13.872s1.488-6.608 2.448-9.744c-2.304 3.008-5.488 7.552-9.552 13.632s-8.048 12.192-11.952 18.336c-4.096 6.464-7.616 12.128-10.56 16.992l-37.632 62.976c-.64 1.024-1.664 1.536-3.072 1.536-1.28 0-2.048-.512-2.304-1.536l-9.792-101.184c-4.032 16.448-10.976 32.576-20.832 48.384-10.624 16.96-22.656 30.464-36.096 40.512-15.104 11.264-30.496 16.896-46.176 16.896-13.376 0-24.416-3.744-33.12-11.232-8.896-7.68-13.344-17.632-13.344-29.856 0-9.024 3.6-17.264 10.8-24.72s15.12-11.184 23.76-11.184c7.936 0 14.624 2.528 20.064 7.584s8.16 11.232 8.16 18.528c0 5.696-1.408 10.88-4.224 15.552-3.392 5.632-7.872 8.448-13.44 8.448-2.816 0-5.024-.976-6.624-2.928s-2.4-4.176-2.4-6.672c0-3.776 2.08-7.648 6.24-11.616s6.24-7.264 6.24-9.888c0-3.392-1.424-6.384-4.272-8.976s-6.096-3.888-9.744-3.888c-5.568 0-10.464 2.56-14.688 7.68-4.544 5.504-6.816 12.288-6.816 20.352 0 8.576 3.328 15.808 9.984 21.696s14.464 8.832 23.424 8.832c17.024 0 33.504-6.496 49.44-19.488 14.4-11.712 26.176-26.736 35.328-45.072s13.728-35.6 13.728-51.792c-3.712 0-7.872-.448-12.48-1.344-10.56-2.048-17.344-3.072-20.352-3.072-10.112 0-17.952 1.408-23.52 4.224s-8.352 7.104-8.352 12.864c0 2.368 1.248 4.352 3.744 5.952 5.44 3.456 8.16 6.528 8.16 9.216 0 3.008-.896 5.424-2.688 7.248s-4.48 2.736-8.064 2.736c-3.84 0-7.104-1.6-9.792-4.8s-4.032-7.36-4.032-12.48c0-9.152 3.936-17.056 11.808-23.712 8.512-7.232 19.424-10.848 32.736-10.848 4.544 0 10.4.64 17.568 1.92s12.64 1.92 16.416 1.92c2.112 0 4.128-.096 6.048-.288 5.824-.576 9.12-.864 9.888-.864 1.024 0 1.792.288 2.304.864s.768 1.568.768 2.976l9.024 100.992 25.536-41.28c12.352-20.352 22.72-35.968 31.104-46.848 9.536-12.352 18.528-21.28 26.976-26.784 8.704-5.696 18.016-8.544 27.936-8.544 6.08 0 11.792 1.808 17.136 5.424s8.016 7.568 8.016 11.856z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(358 112)"></path><g fill="#e6594c"><text font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="161.152344" y="325">Swash flourish off</tspan></text><path d="m404.834697 251.886543-.053573.998564c.43669.023164.876413.034893 1.318876.034893.211862 0 .423096-.002689.63367-.008035l-.025459-.999676c-.202403.005138-.40515.007711-.608211.007711-.423243 0-.845103-.011179-1.265303-.033457zm5.900204.595652-.188552-.982063c-.626577.119959-1.259315.214518-1.897105.283284l.107615.994193c.667754-.072008 1.327468-.170846 1.978042-.295414zm-9.701336-1.109508-.214382.97675c.647332.142207 1.304257.258817 1.969659.348714l.13445-.990921c-.635828-.085886-1.266117-.197542-1.889727-.334543zm13.601487.019662-.348609-.937268c-.5988.222557-1.207024.420613-1.823412.593567l.270358.96276c.645047-.181002 1.279328-.387748 1.901663-.619059zm-17.284466-1.154839-.372182.928159c.615932.247233 1.244234.470173 1.883718.667634l.29568-.955288c-.611504-.188802-1.214335-.402515-1.807216-.640505zm20.93716-.559284-.49791-.867229c-.554494.318598-1.12185.614444-1.700734.886701l.425882.904779c.604857-.284483 1.196187-.592976 1.772762-.924251zm-24.362783-1.153812-.518969.854794c.568713.345181 1.152594.667868 1.750407.966825l.447226-.89442c-.572022-.286062-1.132023-.595417-1.678664-.927199zm27.67608-1.130639-.632494-.774566c-.49524.405108-1.006731.789926-1.533159 1.153395l.568061.822986c.54919-.379179 1.082139-.780203 1.597592-1.201815zm-30.808484-1.142549-.650975.759099c.505087.43398 1.028059.847729 1.567659 1.239991l.587646-.809119c-.517303-.376067-1.01918-.773088-1.50433-1.189971zm33.651924-1.591041-.748264-.663401c-.42429.478924-.8679.940487-1.329633 1.383456l.691933.721962c.481216-.461641.943625-.942735 1.385964-1.442017zm-36.355534-1.144522-.766404.642359c.429069.511393.878642 1.005003 1.347454 1.479563l.711268-.702921c-.449799-.455321-.880962-.928741-1.292318-1.419001zm38.781591-2.095889-.847128-.531389c-.340021.54213-.702073 1.070221-1.085154 1.582942l.800998.598666c.398756-.533693.776268-1.084184 1.131284-1.650219zm-40.987705-1.012471-.859193.511652c.341186.574086.70516 1.133043 1.090675 1.675625l.814991-.579473c-.370534-.521513-.719682-1.057892-1.046473-1.607804zm42.838351-2.561538-.922931-.384964c-.246281.59037-.516624 1.170131-.810258 1.73796l.888173.45951c.305396-.590563.587475-1.195138.845016-1.812506zm-44.532059-.912652-.931972.362532c.242614.623958.510056 1.235517.801112 1.833462l.898847-.438262c-.279826-.574915-.536067-1.161265-.767987-1.757732zm45.76287-2.891479-.97363-.228135c-.146459.623754-.3183 1.240172-.514981 1.848025l.951226.308493c.204496-.631944.384012-1.275126.537385-1.928383zm-46.861861-.822939-.979108.203341c.136207.656594.298692 1.303565.486305 1.939764l.959143-.282924c-.180601-.612424-.336218-1.232886-.46634-1.860181zm47.454653-3.140781-.99775-.067045c-.04281.64081-.111476 1.277274-.205648 1.908324l.989021.147769c.097738-.654907.169555-1.318282.214377-1.989048zm-47.926526-.722466-.999222.03944c.026299.672072.079671 1.337191.159054 1.994298l.992665-.120898c-.07645-.633048-.12739-1.271006-.152497-1.91284zm47.98013-1.21902c-.007631-.672797-.04238-1.33908-.103207-1.997806l-.995773.091839c.058624.634851.091736 1.274121.099038 1.91681zm-48.820056-2.687615c-.079399.65678-.132811 1.321565-.159178 1.993298l.999225.039359c.025184-.641678.076189-1.279479.152692-1.912371zm48.441635-1.35094c-.117605-.660735-.261694-1.312305-.431132-1.953575l-.966707.255887c.163065.617198.30099 1.241875.4133 1.872854zm-47.636728-2.571714c-.186299.636561-.347453 1.283859-.482316 1.940747l.979508.201404c.128803-.627412.283096-1.248034.462373-1.860663zm46.599791-1.337239c-.224879-.630591-.474864-1.249262-.748752-1.85481l-.911108.412167c.263442.582457.503003 1.17576.717985 1.778607zm-45.147112-2.432002c-.289862.598681-.556076 1.210945-.797428 1.835579l.932936.360043c.230647-.5969.485631-1.183726.764218-1.759165zm43.483734-1.239288c-.325312-.584185-.673829-1.153676-1.044305-1.707228l-.830835.556519c.355823.531677.689834 1.077644 1.0011 1.636564zm-41.461825-2.192376c-.38351.544336-.745406 1.104995-1.084439 1.68073l.861555.507664c.324709-.551425.671849-1.089391 1.040452-1.612562zm39.225035-1.147108c-.41549-.522226-.851856-1.0271-1.307837-1.51336l-.730049.683395c.437837.466878.85656.951356 1.255023 1.452159zm-36.633572-1.954747c-.468072.474945-.916901.968907-1.345221 1.480621l.76679.641898c.410782-.490764.841394-.964709 1.290665-1.420577zm33.924946-.937839c-.492844-.44799-1.004025-.876164-1.532283-1.283263l-.610577.791957c.506641.390433.997286.801364 1.470652 1.231669zm-30.935672-1.644307c-.538538.394427-1.060369.810318-1.564232 1.246412l.654476.756083c.483818-.418743.984443-.817672 1.500576-1.195691zm27.736817-.81636c-.558958-.361042-1.133554-.699948-1.722548-1.015479l-.472217.881482c.563867.30207 1.115124.627093 1.652432.974161zm-24.307127-1.286625c-.596493.301316-1.17899.626306-1.746255.973733l.522236.852802c.545358-.334012 1.104161-.64565 1.675072-.934038zm20.791783-.59707c-.609171-.264861-1.231207-.505685-1.864912-.721274l-.322644.94652c.606001.206148 1.202752.437 1.788961.691881zm-17.053825-.917164c-.639511.199157-1.267781.423813-1.88362.672777l.37459.927191c.592446-.239514 1.194898-.454762 1.806076-.645105zm13.238572-.377826c-.643229-.160324-1.296515-.295227-1.958731-.403579l-.161429.986884c.63255.1035 1.259058.232659 1.87836.387021zm-9.287976-.50001c-.665068.090745-1.321642.208181-1.968607.351191l.216094.976373c.623064-.13772 1.252824-.25013 1.888139-.336804zm3.343187-.226198c-.431638 0-.860669.011162-1.28682.033214l.052027.998645.616313-.023885.61848-.007974c.642738 0 1.282242.025779 1.917527.077052l.079895-.996803c-.658791-.053155-1.324943-.080249-1.997422-.080249z" fill-rule="nonzero"></path><path d="m663.167334 149.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path><path d="m444.167334 190.798016-.1509-.988549c-.619161.094699-1.245785.15439-1.877862.178417l.03759.999294c.674191-.025614 1.338614-.089366 1.991172-.189162zm-5.825076-1.099663-.189966.981791c.64842.125612 1.30961.215428 1.981431.267308l.076862-.997041c-.629829-.048643-1.253302-.132906-1.868327-.252058zm9.727036.026827-.37555-.926802c-.582015.235881-1.177707.438348-1.78464.606213l.26634.963879c.647106-.178966 1.279163-.39417 1.89385-.64329zm-13.332764-1.17034-.410667.911786c.605439.272458 1.229169.511492 1.86884.714751l.302385-.953186c-.599949-.190656-1.18763-.415536-1.760558-.673351zm16.865547-.763305-.578274-.815843c-.513482.363599-1.047287.697626-1.598834 1.000256l.480871.876791c.586683-.3219 1.15291-.67645 1.696237-1.061204zm-20.102504-1.166293-.606459.795114c.529138.403804 1.081983.778123 1.656084 1.120506l.512277-.85882c-.540255-.322195-1.061744-.675101-1.561902-1.0568zm23.055578-1.471097-.745538-.666463c-.419259.469353-.864956.91459-1.334741 1.333362l.665279.746595c.498036-.443946.970529-.915937 1.415-1.413494zm-25.802542-1.177-.772108.635492c.423912.515129.876692 1.005607 1.355866 1.46896l.69547-.718556c-.452311-.437353-.879478-.900123-1.279228-1.385896zm28.129539-2.125127-.878603-.477555c-.300645.552502-.632739 1.087368-.994468 1.602019l.817905.575353c.382801-.544606.735338-1.112026 1.055166-1.699817zm-30.159257-1.002573-.894828.446411c.298381.598674.630056 1.177844.992601 1.735085l.838404-.54505c-.342988-.527156-.655618-1.073499-.936177-1.636446zm31.654913-2.707885-.96451-.264044c-.166696.607436-.36803 1.203681-.60282 1.786297l.927719.373278c.247934-.615287.461912-1.247905.639611-1.895531zm-32.94393-.865399-.973792.227443c.153147.654352.343012 1.294575.567303 1.918375l.941009-.338384c-.212393-.590712-.390928-1.193983-.53452-1.807434zm33.553035-3.092968-.999306-.037253c-.024305.632022-.084268 1.258581-.179235 1.877668l.988572.150748c.100066-.652546.164088-1.316966.189969-1.991163zm-33.986837-.732462-1.000072-.003731v.053c0 .669305.037574 1.329834.110727 1.979593l.993704-.112041c-.051172-.454559-.083642-.912594-.09718-1.373353zm33.947148-1.320018c-.052023-.672171-.142022-1.333696-.267854-1.982431l-.981784.189998c.119336.615163.203766 1.238785.252555 1.868772zm-34.483861-2.648294c-.151202.643646-.266871 1.300988-.344825 1.969843l.993317.115421c.073081-.626934.181703-1.246578.325051-1.856758zm33.70785-1.319608c-.20454-.639429-.444848-1.262863-.718571-1.86795l-.910695.413081c.258926.572471.484941 1.159752.676749 1.759355zm-32.341151-2.462668c-.296496.59451-.560155 1.208266-.788602 1.838891l.940321.34029c.214348-.59167.462453-1.169973.742917-1.732384zm30.705438-1.159938c-.342872-.574137-.717695-1.126987-1.122015-1.656095l-.794188.607672c.381979.499911.735182 1.02117 1.057686 1.561209zm-28.526149-2.187803c-.424449.513081-.82019 1.050779-1.184762 1.610634l.837872.545867c.3432-.52705.716309-1.034217 1.117307-1.51896zm26.084823-1.003019c-.463157-.479958-.953497-.93351-1.468539-1.358178l-.635889.771781c.485486.400315.947931.828035 1.384922 1.280883zm-23.158979-1.80175c-.531945.403418-1.040109.836559-1.522018 1.296949l.691165.722696c.454991-.434644.934359-.843125 1.435634-1.223253zm20.090753-.730219c-.55788-.36269-1.137721-.694447-1.737092-.99284l-.445793.895137c.563217.280387 1.109833.592871 1.637264.935736zm-16.699081-1.28449c-.610629.274748-1.202656.583495-1.773668.923831l.512288.858814c.540121-.321908 1.098294-.612715 1.671945-.870813zm13.066184-.515912c-.623868-.22307-1.264101-.411727-1.91841-.563683l-.226376.97404c.613699.142518 1.217265.319991 1.808321.531339zm-9.219694-.701222c-.660204.127052-1.307205.291206-1.938748.490207l.300227.953868c.598409-.188574 1.208278-.342921 1.82729-.462054zm3.326647-.31579v1c.633159 0 1.261717.035616 1.88375.106263l.112887-.993608c-.655251-.074421-1.321479-.112655-1.996637-.112655zm-.024032.000016c-.424413.000571-.845286.016249-1.262109.046527l.072071.9974c.395227-.028719.792733-.043408 1.192045-.043927z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Swashes can be used to provide typographic interest to headings or more artistic settings of text. They are typically exaggerated alternative character designs, or have some sort of typographic flourish. Select a particular swash by defining a <code>font-feature-values</code> rule using the set’s number.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @swash { flourish: 1 }
}

font-variant-alternates: swash(flourish); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: swsh 1; /* low-level enable */
font-feature-settings: swsh 0; /* low-level disable */
</code></pre>
<h3>ornaments(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two ornamental glyphs shown side-by-side. The left ornament resembles a curving floral motif; the right ornament is a stylized leaf or vine flourish, demonstrating decorative glyph options." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(118 128)"><path d="m289.536 75.936c0 11.712-3.376 22.608-10.128 32.688s-15.952 18.032-27.6 23.856-24.32 8.736-38.016 8.736c-16.64 0-32.08-3.904-46.32-11.712s-24.528-18.4-30.864-31.776c2.048 4.352 3.072 8.928 3.072 13.728 0 8.192-2.912 15.2-8.736 21.024s-12.832 8.736-21.024 8.736c-8.768 0-16.24-3.104-22.416-9.312s-9.264-13.664-9.264-22.368c0-9.728 2.816-17.984 8.448-24.768s13.76-11.776 24.384-14.976c-5.696-4.032-12.8-7.408-21.312-10.128s-16.288-4.08-23.328-4.08c-14.144 0-26.384 4.608-36.72 13.824s-15.504 20.672-15.504 34.368c2.368-1.28 5.248-1.92 8.64-1.92 5.376 0 9.984 1.92 13.824 5.76s5.76 8.448 5.76 13.824-1.92 10.016-5.76 13.92-8.448 5.856-13.824 5.856c-6.592 0-12.048-2.784-16.368-8.352s-6.48-13.024-6.48-22.368c0-10.624 3.056-20.656 9.168-30.096s14.336-16.976 24.672-22.608 21.2-8.448 32.592-8.448c6.464 0 14.672 1.328 24.624 3.984s17.52 5.712 22.704 9.168c-2.688-4.224-5.056-9.28-7.104-15.168s-3.072-10.848-3.072-14.88c0-8.192 3.072-15.36 9.216-21.504s13.312-9.216 21.504-9.216 15.2 2.912 21.024 8.736 8.736 12.832 8.736 21.024c0 5.696-1.536 11.008-4.608 15.936 2.56-.768 4.16-1.152 4.8-1.152 7.104 0 13.456 2.176 19.056 6.528s12.464 13.696 20.592 28.032c8 14.208 14.848 23.536 20.544 27.984s12.064 6.672 19.104 6.672c7.104 0 13.584-1.824 19.44-5.472s10.656-8.784 14.4-15.408 5.616-12.848 5.616-18.672c0-5.888-1.568-10.688-4.704-14.4s-7.136-5.568-12-5.568c-3.072 0-5.6.976-7.584 2.928s-2.976 4.432-2.976 7.44c0 1.92.256 3.712.768 5.376-4.096 0-7.376-1.248-9.84-3.744s-3.696-5.728-3.696-9.696c0-4.352 1.712-8.08 5.136-11.184s7.504-4.656 12.24-4.656c8.768 0 15.824 3.104 21.168 9.312s8.016 14.272 8.016 24.192zm-45.984 45.888c-5.696 0-10.944-1.12-15.744-3.36s-9.328-5.68-13.584-10.32-9.648-12.752-16.176-24.336c-7.36-12.992-13.408-21.456-18.144-25.392s-9.952-5.904-15.648-5.904c-.768 0-2.048.128-3.84.384-1.984.256-3.392.384-4.224.384-2.048 0-3.072-1.024-3.072-3.072 0-.448.096-.896.288-1.344 2.88-5.952 4.32-11.744 4.32-17.376 0-6.784-2.128-12.384-6.384-16.8s-9.936-6.624-17.04-6.624c-6.848 0-12.656 2.336-17.424 7.008s-7.152 10.464-7.152 17.376c0 4.352 1.424 10.288 4.272 17.808s5.712 13.264 8.592 17.232c7.872 0 15.824 2.112 23.856 6.336s19.088 12.928 33.168 26.112c11.712 11.008 20.496 18.176 26.352 21.504s11.472 4.992 16.848 4.992c9.472 0 16.384-1.536 20.736-4.608z"></path><path d="m564.672 88.032c-3.264.192-8.64 1.152-16.128 2.88-11.392 2.56-20.448 3.84-27.168 3.84s-13.376-.896-19.968-2.688c4.736 4.736 7.104 11.136 7.104 19.2 0 6.72-2.336 12.4-7.008 17.04s-10.336 6.96-16.992 6.96c-6.464 0-12.016-2.4-16.656-7.2s-6.96-10.784-6.96-17.952c0-2.176.192-4.416.576-6.72 4.288 5.76 8.96 8.64 14.016 8.64 7.04 0 10.56-3.776 10.56-11.328 0-5.632-2.88-11.44-8.64-17.424s-13.216-10.656-22.368-14.016-19.168-5.04-30.048-5.04c-15.488 0-27.968 3.408-37.44 10.224s-14.816 16.08-16.032 27.792c1.216-.384 3.072-1.024 5.568-1.92 12.096-4.224 23.84-6.336 35.232-6.336 10.816 0 19.152 2.368 25.008 7.104s8.784 11.456 8.784 20.16c0 8.256-3.776 15.408-11.328 21.456s-16.96 9.072-28.224 9.072c-13.376 0-24.112-3.472-32.208-10.416s-12.816-16.72-14.16-29.328c-2.56.512-5.888.768-9.984.768-24.32 0-36.48-9.28-36.48-27.84 0-6.208 1.456-12.096 4.368-17.664s7.088-10.496 12.528-14.784 9.28-6.432 11.52-6.432c1.984 0 3.76 2 5.328 6s2.352 8.112 2.352 12.336-.768 6.4-2.304 6.528c-16.64 1.6-24.96 7.168-24.96 16.704 0 12.672 9.216 19.008 27.648 19.008 3.456 0 6.656-.448 9.6-1.344 0-12.928 3.424-24.736 10.272-35.424s16.368-19.184 28.56-25.488 25.008-9.456 38.448-9.456c10.24 0 23.104.8 38.592 2.4 9.024.96 15.232 1.44 18.624 1.44 12.032 0 18.048-4.032 18.048-12.096 0-3.392-1.168-6.064-3.504-8.016s-5.392-2.928-9.168-2.928c-2.432 0-5.184.512-8.256 1.536 6.72-11.52 14.528-17.28 23.424-17.28 6.72 0 12.304 2.192 16.752 6.576s6.672 9.872 6.672 16.464c0 6.72-2.208 12.592-6.624 17.616s-10.336 8.208-17.76 9.552c6.528 2.112 12.656 5.056 18.384 8.832s12.688 9.856 20.88 18.24c5.184 5.312 9.024 8.896 11.52 10.752zm-32.544-64.992c0-5.056-1.6-9.136-4.8-12.24s-7.36-4.656-12.48-4.656c-4.16 0-7.936 1.6-11.328 4.8 4.032 0 7.536 1.584 10.512 4.752s4.464 6.832 4.464 10.992c0 8.96-3.392 15.36-10.176 19.2 15.872-2.432 23.808-10.048 23.808-22.848zm19.2 60.96c-10.944-11.2-19.712-18.688-26.304-22.464 2.56 2.56 3.84 5.824 3.84 9.792 0 3.456-1.008 6.8-3.024 10.032s-4.656 5.648-7.92 7.248h3.456c7.36 0 17.344-1.536 29.952-4.608zm-48.96 27.264c0-8.192-2.88-14.464-8.64-18.816.256 2.56.384 4.352.384 5.376 0 6.272-1.744 11.264-5.232 14.976s-7.952 5.568-13.392 5.568c-2.624 0-5.184-.832-7.68-2.496.96 3.904 2.992 7.088 6.096 9.552s6.64 3.696 10.608 3.696c5.056 0 9.296-1.696 12.72-5.088s5.136-7.648 5.136-12.768zm-63.168 9.984c0-6.656-2.32-11.84-6.96-15.552s-11.28-5.568-19.92-5.568c-9.344 0-20.096 2.048-32.256 6.144-3.968 1.344-6.88 2.24-8.736 2.688.384 24.448 12.128 36.672 35.232 36.672 9.344 0 17.12-2.448 23.328-7.344s9.312-10.576 9.312-17.04z"></path></g><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="360.40625" y="328">Ornaments</tspan></text></g></svg></figure></p>
<p>This replaces default glyphs with ornaments, if they are provided in the font.</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @ornaments { fleurons: 1 }
}

font-variant-alternates: ornaments(fleurons); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: ornm 1; /* low-level enable */
font-feature-settings: ornm 0; /* low-level disable */
</code></pre>
<h3>annotation(feature-value-name)</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Examples of annotation characters: the number &#x27;1&#x27; inside a circle, the number &#x27;2&#x27; inside a filled circle, and the letter &#x27;B&#x27; inside a square, demonstrating typographic annotations." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><text fill="#e6594c" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="356.761719" y="331">Annotations</tspan></text><g fill="#f5f5f5"><g transform="translate(135 125)"><path d="m96.2851658 149.786822c-5.8728125 1.392886-11.8359644 2.013304-17.871995 2.004236-15.6613395-.100957-30.2052049-4.051924-42.9202692-13.450657-17.1629455-12.686493-26.19991038-30.10559-28.3642574-51.2578961-1.33231464-13.0188608.17005041-25.7145232 5.2996515-37.7882388 9.6670625-22.7545451 26.7024701-36.6016497 50.7570123-41.56041528 15.608958-3.21746717 30.931715-1.80853593 45.533276 4.58208278 19.415354 8.497139 32.254161 23.2435451 38.168727 43.6631153 6.729138 23.229792 4.157884 45.4571341-9.291282 65.7949491-9.871274 14.928253-24.035563 23.915157-41.3108632 28.012824m-17.793043-149.78681688c-44.5038637.01528638-78.55797763 34.32704078-78.49202717 79.08429358.06690142 44.7381513 33.97070287 78.8367323 78.46545677 78.9155663 44.5334706.078563 78.5435536-34.126987 78.5344456-78.98586-.009112-44.8718622-33.947075-79.029276-78.5078752-79.01399988"></path><path d="m84.9950732 73.4206697c0 9.9612311.0464499 19.9224623-.0418809 29.8821703-.0167524 1.807187.5718657 2.232138 2.2646186 2.19863 4.9465242-.096719 9.8968558.03427 14.8426181-.071587 1.577771-.034271 2.139738.534616 2.247105 2.002908.097469 1.323595.252048 2.664705.586334 3.944891.370837 1.421836-.259662 1.605373-1.430807 1.593188-3.6154701-.03884-7.2317022-.012947-10.8471728-.012947-11.7997751 0-23.5995501-.040362-35.3985638.042077-1.7970746.011994-2.2372056-.557654-2.2166459-2.257461.0647252-5.273817.0038074-5.273817 5.2891868-5.273817 4.9480471 0 9.8960942-.035031 14.8433799.021324 1.2960259.015231 1.7650928-.362503 1.7628084-1.717322-.0380736-17.447386-.0357892-34.8947718-.0030459-52.3421576.0022845-1.41879-.3731214-1.603088-1.6204131-1.0418168-5.665354 2.5497096-11.3748735 5.0011777-17.0318514 7.5676417-1.3280077.6023956-1.9090111.6671284-2.1427831-1.0600943-.7340593-5.4147059-.7987844-5.4078519 4.2345476-7.6773067 5.6036748-2.5276243 11.2187717-5.0308787 16.8117859-7.5821114 2.3240135-1.0600944 4.7454955-.4622682 7.1235736-.5239547.948033-.02437.7081692.8994047.7119766 1.4736225.0243671 3.806287.014468 7.6133355.0152294 11.4196225z"></path></g><path d="m103.982569 114.119306c-16.9549887-.038983-33.9099778-.045096-50.8657264-.018353-1.333675.002292-1.8683602-.468369-1.6860812-1.779495.0174684-.124542 0-.253668.0022785-.381266.0394938-2.668096-.66304-5.669321.3326593-7.908016.9615219-2.161524 3.6524163-3.558989 5.6187515-5.2513807 8.7007864-7.4877833 17.4342311-14.9365994 26.1099541-22.4526529 2.6453247-2.2906504 5.0377371-4.8555981 6.5741976-8.0677043 3.2840607-6.8704232-.2544312-14.0739762-7.8091381-15.9703719-4.8865974-1.2263156-9.6623083-.6853614-14.3658672.9481978-3.9653287 1.3775993-7.712682 3.2136343-11.2056042 5.5424877-1.1802568.7869813-1.5683593.5294933-1.7384864-.8053187-.3440517-2.7124113-.7830404-5.4125976-1.1787378-8.1188964-.1048105-.7159237-.107089-1.361554.6326601-1.8291585 10.972439-6.9422447 22.7036145-10.4347607 35.3818815-6.0024515 15.7967577 5.5210941 19.6853777 23.353479 8.1980001 35.8435598-5.53065 6.0131484-12.1549743 10.7403846-18.404867 15.9084831-3.8058346 3.1479252-7.6671123 6.2263205-11.6916817 9.4888555.9584839.478301 1.6579798.309444 2.3286147.310208 10.502311.012989 21.0046219.049664 31.5054136-.033619 1.623803-.012225 2.212412.478301 2.398489 2.053028.275697 2.33191.75266 4.641662 1.194687 6.951413.221013 1.152202-.093418 1.575491-1.331397 1.572451m-25.5623571-114.11924338c-44.4996312.05354693-78.28884951 34.06871228-78.41984839 78.94269148-.12874876 44.7402689 33.95819199 79.0709909 78.49655749 79.0572419 44.611277-.015285 78.537205-34.172566 78.503053-79.0389045-.034203-44.8793276-34.004941-79.01445029-78.5797621-78.96102888" transform="translate(327 125)"></path><g transform="translate(519 130)"><path d="m132.611253 131.327999c.002299 1.828575-.361673 2.477399-2.394549 2.473613-37.7273586-.067714-75.4554838-.049458-113.1828428-.05098-2.4504853-.00076-2.4589141-.007606-2.4596804-2.542813-.0015325-19.200032-.0015325-38.4008232-.0015325-57.6016149 0-19.2639246 0-38.5278493.0015325-57.7925346 0-2.6165956.0068963-2.6219201 2.5799825-2.6219201 37.664526-.0007606 75.3275195.0144521 112.9912797-.0433715 1.915639-.0030274 2.476538.4533555 2.473485 2.4043927-.057482 38.5917429-.054417 77.1834858-.007675 115.7752284m14.388747-128.50603104c0-2.80143073-.003065-2.80675519-2.769248-2.80675519-47.2373564-.00608511-94.4754794-.01140958-141.71360247-.01521277-2.51178574 0-2.51714953.00608511-2.51714953 2.51999457.00383128 47.27214683.00842881 94.54353293.01532511 141.81567943 0 2.662234.00536379 2.664326 2.69645333 2.664326h141.71360256c2.570021 0 2.574619-.002852 2.574619-2.553272 0-23.635313 0-47.2713867 0-70.90746 0-23.5721798 0-47.1451203 0-70.71730004"></path><path d="m85.4049476 89.4742556c-.8535663 2.7932875-2.8207817 4.4974212-5.5489522 5.3399742-5.0071768 1.545822-10.183369 1.0214146-15.3086251 1.0754537-1.1244538.0114167-.9284269-.8410307-.9322857-1.498633-.0185222-2.7247873-.0084893-5.4495745-.0077176-8.1743618 0-2.7247873.0077176-5.4495745-.0047635-8.1751229-.0029541-.822764.0379492-1.5077664 1.1870994-1.4796051 4.1049897.1027503 8.2285017-.2793288 12.3064799.4734127 6.7675607 1.2489877 10.1694774 6.3522555 8.3087648 12.4388822m-20.3759992-40.3161959c1.6044883.0380557 3.211292.0106556 4.8165521.0091333 2.309105.0167445 4.6205253-.0829614 6.9087927.3904514 4.1906551.8676697 6.51288 3.472201 6.7374621 7.6217932.2029728 3.7758854-1.9209099 6.7609735-5.7874259 7.9856056-4.2508523 1.3456491-8.648339.8707141-13.0018354.9026809-.8335005.0060889-1.0943552-.4718905-1.0928117-1.2208265.0077176-4.8140445.0208375-9.6280891-.0116607-14.4413725-.0076333-1.0541425.514848-1.2695377 1.4309268-1.2474654m29.1061447 23.724677c-1.5659004-.9491088-3.2938703-1.639439-4.9608712-2.455353.3225955-.63553.9438621-.7101191 1.4223531-.9734645 9.508079-5.2395071 11.351813-18.8596379 3.4582551-26.2622303-4.2076338-3.9448526-9.5520696-5.3978188-15.158132-5.8171925-9.5621025-.7154469-19.1519883-.1461338-28.726439-.3562012-1.7001865-.0372946-2.1694164.4528627-2.1655576 2.1273129.0540231 22.2557275.0571102 44.511455-.0046663 66.7671829-.0053666 1.752845.6020083 2.102196 2.2126707 2.086727 7.392686-.074343 14.7876873-.022587 22.1811451-.05227 4.9593278-.019789 9.8970462-.298357 14.6811845-1.75589 7.5053629-2.286385 13.0404235-6.4763167 14.5106255-14.6088173 1.494899-8.2649343-1.070431-14.8303016-7.4505679-18.699804"></path></g></g></g></svg></figure></p>
<p>Annotations are notational forms of glyphs (for example, glyphs placed in open or solid circles, squares, parentheses, diamonds, rounded boxes. etc.).</p>
<pre><code class="language-css">@font-feature-values &#x27;typeface-name&#x27; {
  @ornaments { circles: 1 }
}

font-variant-alternates: annotation(circles); /* enable */
font-variant-alternates: normal; /* disable all variants */

font-feature-settings: nalt 1; /* low-level enable */
font-feature-settings: nalt 0; /* low-level disable */
</code></pre>
<h2>Further Resources</h2>
<p>There is a huge amount to learn about typography on the web including font variants and much more. Check out the following excellent resources for more information:</p>
<ul>
<li><a href="https://www.w3.org/TR/css-fonts-4/" target="_blank" rel="noreferrer">CSS Fonts Module Level 4 Spec</a></li>
<li><a href="http://book.webtypography.net/" target="_blank" rel="noreferrer">Web Typography, by Richard Rutter</a></li>
<li><a href="https://helpx.adobe.com/typekit/using/open-type-syntax.html" target="_blank" rel="noreferrer">Guide to OpenType Syntax in CSS, from Adobe</a></li>
<li><a href="https://www.microsoft.com/typography/otspec/features_ae.htm" target="_blank" rel="noreferrer">OpenType Layout Tag Registry, from Microsoft</a></li>
</ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Component Reusability in React & Vue]]></title>
            <link>https://www.jonathanharrell.com/blog/component-reusability-in-react-vue</link>
            <guid>https://www.jonathanharrell.com/blog/component-reusability-in-react-vue</guid>
            <pubDate>Mon, 06 Aug 2018 19:55:00 GMT</pubDate>
            <description><![CDATA[Learn how to use render props in React and scoped slots in Vue to create components that are flexible and reusable.]]></description>
            <content:encoded><![CDATA[<p>One of the issues all front-end developers face is how to make UI components reusable. How do we craft components in such a way that satisfies the narrow use case that is clear to us now, while also making them reusable enough to work in a variety of circumstances? Render props and scoped slots provide a solution.</p>
<p>Let’s say we are building an autocomplete component:</p>

<p>Take a look at the initial React component code:</p>
<pre><code class="language-jsx">class Autocomplete extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      results: props.options
    }
  }

  searchList(event) {
    const results = this.props.options
      .filter(option =&gt;
        option.toLowerCase().includes(
          event.target.value.toLowerCase()
        )
      )
    this.setState({ results })
  }

  render() {
    return (
      &lt;div className=&quot;autocomplete&quot;&gt;
        &lt;input
          type=&quot;text&quot;
          placeholder=&quot;Type to search list&quot;
          onChange={searchList}
        /&gt;
        &lt;div className=&quot;autocomplete-dropdown&quot;&gt;
          &lt;ul className=&quot;autocomplete-search-results&quot;&gt;
            {this.state.results.map(option =&gt; (
              &lt;li class=&quot;autocomplete-search-result&quot;&gt;
                {option}
              &lt;/li&gt;
            ))}
          &lt;/ul&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<p>In this component, we have some logic that controls the core search behavior, but we also specify how the input and search results will be rendered. In this instance, we render a div that serves as a dropdown container and an unordered list containing a list item for each result within it.</p>
<p>Think about how you would reuse this component. Sure, you could use this very same component if you want to reproduce exactly the same behavioral and visual result. But what if you want to reuse the same behavior, but visualize the component slightly differently? What if you want to reuse the core search behavior but add a few modifications for a slightly different use case?</p>
<p>Imagine that instead of a dropdown containing the search results, you want a tag-like list of search results that always display:</p>

<p>At their core, the functionality of these two components is very similar: type into an input to filter a list.</p>
<p>This is a perfect use case for some relatively new tools that modern JavaScript frameworks now provide. These are <em>render props</em> in React and <em>scoped slots</em> in Vue. They work very similarly and provide a way to separate the <strong>behavior</strong> of a component from its <strong>presentation</strong>.</p>
<h2>Render props in React</h2>
<p>First, let’s look at how we would restructure our autocomplete component using render props in React. We will now have two components — one for our Autocomplete component and one for a core SearchSelect component.</p>
<p>Let’s look at the SearchSelect component first:</p>
<pre><code class="language-jsx">class SearchSelect extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      results: props.options
    }
  }

  searchList(event) {
    const results = this.props
      .filterMethod(
        this.props.options,
        event.target.value
      )
    this.setState({ results })
  }

  render() {
    return this.props.render({
      results: this.state.results,
      searchList: (event) =&gt; this.searchList(event)
    })
  }
}
</code></pre>
<p>This is a <em>renderless</em> component (one that doesn’t render any markup of its own). Rather, it returns the result of a special prop called a <em>render prop</em>. This render prop accepts an object, into which you can pass any data that you would like the parent component to have access to.</p>
<p>Our <code>SearchSelect</code> component is handling the lowest level functionality — filtering a list of options based on a query string. It is then using the special render prop to render an element.</p>
<p>In the parent, we pass a function to the render prop of the <code>SearchSelect</code> component. This function returns a React element, which we can hydrate with state and behavior from the <code>SearchSelect</code> component itself. Basically, this means we are able to access data from the child component in the parent.</p>
<pre><code class="language-jsx">import SearchSelect from &#x27;./search-select&#x27;

class Autocomplete extends React.Component {
  constructor(props) {
    super(props)
  }

  filterMethod (options, query) {
    return options.filter(option =&gt;
      option.toLowerCase().includes(
        query.toLowerCase()
      )
    )
  }

  render() {
    return (
      &lt;SearchSelect
        options={this.props.options}
        filterMethod={this.filterMethod}
        render={({results, searchList}) =&gt; (
          &lt;div&gt;
            &lt;input
              type=&quot;text&quot;
              placeholder=&quot;Type to search list&quot;
              onChange={searchList}
            /&gt;
            &lt;ul&gt;
              {results.map(option =&gt; (
                &lt;li&gt;{option}&lt;/li&gt;
              ))}
            &lt;/ul&gt;
          &lt;/div&gt;
        )}
      /&gt;
    )
  }
}
</code></pre>
<p>The key to making this work is the arguments we pass to the render prop function. See how we are destructuring a single object and using those destructured properties inside our markup? This object should be passed as an argument when you call <code>this.props.render()</code> in the child component.</p>
<p>All this means that we can write whatever markup we want, as long as we properly hydrate it with the data and behavior exposed by the <code>SearchSelect</code> component.</p>
<p>Also, note how we are passing the method for filtering our list in as a prop. This will allow us to change the way our list of options is filtered, while still using the <code>SearchSelect</code> component.</p>
<h2>Implementing the Tag List Variant</h2>
<p>Let’s look at how we would implement our tag-like list component. We use the same SearchSelect core component and just change the markup rendered by the render prop:</p>
<pre><code class="language-jsx">import SearchSelect from &#x27;./search-select&#x27;

class TagListSearch extends React.Component {
  constructor(props) {
    super(props)
  }

  filterMethod(options, query) {
    return options.filter(option =&gt;
      option.toLowerCase().includes(
        query.toLowerCase()
      )
    )
  }

  render() {
    return (
      &lt;SearchSelect
        options={this.props.options}
        filterMethod={this.filterMethod}
        render={({ results, searchList }) =&gt; (
          &lt;div className=&quot;tag-list-search&quot;&gt;
            &lt;input
              type=&quot;text&quot;
              placeholder=&quot;Type to search list&quot;
              onChange={searchList}
            /&gt;
            &lt;ul className=&quot;tag-list&quot;&gt;
              {results.map(result =&gt; (
                &lt;li className=&quot;tag&quot; key={result}&gt;
                  {result}
                &lt;/li&gt;
              ))}
            &lt;/ul&gt;
          &lt;/div&gt;
        )}
      /&gt;
    )
  }
}
</code></pre>
<h2>Scoped slots in Vue</h2>
<p>Now let’s look at how we would implement this in Vue using scoped slots. First, here’s our search select component (for this example I am using globally registered components but you should probably use single file components in a real project):</p>
<pre><code class="language-javascript">Vue.component(&#x27;search-select&#x27;, {
  props: [
    &#x27;options&#x27;,
    &#x27;filterMethod&#x27;
  ],

  data() {
    return {
      query: &#x27;&#x27;
    }
  },

  computed: {
    results() {
      return this.filterMethod(
        this.options,
        this.query
      )
    }
  },

  methods: {
    setQuery(event) {
      this.query = event.target.value
    }
  },

  render() {
    return this.$scopedSlots.default({
      results: this.results,
      searchList: (event) =&gt; {
        this.setQuery(event)
      }
    })
  }
})
</code></pre>
<p>As you can see, this looks very similar to the render prop in our React component. Here, we are returning a default <em>scoped slot</em>, which passes along an object with whatever we want. Here, we give it the results and our search method.</p>
<p>In our <code>autocomplete</code> component, we use the <code>slot-scope</code> attribute to get access to the data from the child component. We can destructure the properties that come through for easier access, in much the same way as in our React render prop argument:</p>
<pre><code class="language-javascript">Vue.component(&#x27;autocomplete&#x27;, {
  data() {
    return {
      dropdownVisible: false
    }
  },

  methods: {
    filterMethod(options, query) {
      return options.filter(option =&gt;
        option.toLowerCase().includes(
          query.toLowerCase()
        )
      )
    },

    showDropdown() {
      this.dropdownVisible = true
    },

    hideDropdown() {
      this.dropdownVisible = false
    }
  },

  template: html`
    &lt;search-select
      :options=&quot;options&quot;
      :filterMethod=&quot;filterMethod&quot;
    &gt;
      &lt;div slot-scope=&quot;{ results, searchList }&quot;&gt;
        &lt;div class=&quot;autocomplete&quot;&gt;
          &lt;input
            type=&quot;text&quot;
            placeholder=&quot;Type to search list&quot;
            @input=&quot;searchList&quot;
            @focus=&quot;showDropdown&quot;
            @blur=&quot;hideDropdown&quot;
          /&gt;
          &lt;div
            v-if=&quot;dropdownVisible&quot;
            class=&quot;autocomplete-dropdown&quot;
          &gt;
            &lt;ul class=&quot;autocomplete-search-results-list&quot;&gt;
              &lt;li
                class=&quot;autocomplete-search-result&quot;
                v-for=&quot;result in results&quot;
                :key=&quot;result&quot;
              &gt;
                {{ result }}
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/search-select&gt;
  `
})
</code></pre>
<h2>Other uses for render props &amp; scoped slots</h2>
<p>Creating reusable interface components isn’t the only use for render props and scoped slots. Here are some other ideas for how you can use them to encapsulate reusable behavior in a component that can then be exposed to its parent.</p>
<h3>Data provider components</h3>
<p>You can use render props/scoped slots to create a component that handles asynchronously fetching data and exposing that data to its parent. This allows you to hide the logic for hitting an endpoint, getting the result and handling possible errors, as well as displaying a loading state to users while the data fetch is in progress.</p>
<p>Here’s what the base component could look like:</p>
<pre><code class="language-jsx">class FetchData extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      loading: false,
      results: [],
      error: false
    }
  }

  componentDidMount() {
    this.fetchData(this.props.url)
  }

  fetchData(url) {
    this.setState({ loading: true })

    fetch(url)
      .then(data =&gt; data.json())
      .then(json =&gt; {
        this.setState({
          loading: false,
          results: json
        })
      })
      .catch(error =&gt; {
        this.setState({
          loading: false,
          error: true
        })
      })
  }

  render() {
    return this.props.render({
      loading: this.state.loading,
      results: this.state.results,
      error: this.state.error
    })
  }
}
</code></pre>
<p>It accepts a URL as a prop and handles the actual fetching logic. Then, we use it in a parent component:</p>
<pre><code class="language-jsx">class App extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    return (
      &lt;div className=&quot;wrapper&quot;&gt;
        &lt;FetchData
          url=&quot;https://...&quot;
          render={({ loading, results, error }) =&gt; (
            &lt;div&gt;
              {loading &amp;&amp; (
                &lt;p&gt;Loading...&lt;/p&gt;
              )}
              {results.length &gt; 0 &amp;&amp; (
                &lt;div className=&quot;results&quot;&gt;
                  {results.map(result =&gt; (
                    &lt;p key={result.id}&gt;
                      {result.title}
                    &lt;/p&gt;
                  ))}
                &lt;/div&gt;
              )}
              {error &amp;&amp; (
                &lt;p&gt;There was a problem loading.&lt;/p&gt;
              )}
            &lt;/div&gt;
          )}
        /&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<h2>Observers (resize, intersection, etc.)</h2>
<p>You can also use render props/scoped slots to create a component that acts as a wrapper around resize or intersection observers. This component can simply expose the current size or intersection point of an element to a parent component. You can then perform whatever logic you need based on that data in the parent, preserving a nice separation of concerns.</p>
<p>Here is a base component that observes its own size and exposes its height and width to its parent:</p>
<pre><code class="language-jsx">class ObserveDimensions extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      width: null,
      height: null
    }
    this.elementToObserve = React.createRef()
  }

  componentDidMount(nextProps) {
    const erd = elementResizeDetectorMaker({
      strategy: &#x27;scroll&#x27;
    })

    erd.listenTo(
      this.elementToObserve.current,
        element =&gt; {
        this.setState({
          width: element.offsetWidth,
          height: element.offsetHeight
        })
      }
    )
  }

  render() {
    return (
      &lt;div
        className=&quot;observed-element&quot;
        ref={this.elementToObserve}
      &gt;
        {this.props.render({
          width: this.state.width,
          height: this.state.height
        })}
      &lt;/div&gt;
    )
  }
}
</code></pre>
<p>We are using the <a href="https://github.com/wnr/element-resize-detector" target="_blank" rel="noreferrer">Element Resize Detector</a> library to listen to changes in our element size, and a React ref to get a reference to the actual DOM node.</p>
<p>We can then use this component quite easily in our app:</p>
<pre><code class="language-jsx">class App extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    return (
      &lt;div className=&quot;wrapper&quot;&gt;
        &lt;ObserveDimensions
          render={({ width, height }) =&gt; (
            &lt;div&gt;
              Width: {width}px
              Height: {height}px
            &lt;/div&gt;
          )}
        /&gt;
      &lt;/div&gt;
    )
  }
}
</code></pre>
<h2>Conclusion</h2>
<p>The key to successfully creating reusable components using both render props and scoped slots is being able to correctly separate <strong>behavior</strong> from <strong>presentation</strong>. Each time you create a new UI component, think “What is the core behavior of this component? Can I use this anywhere else?”</p>
<p>Having a core set of renderless components that use render props or scoped slots can help you cut down on code duplication in your app and think more carefully about your core interface behaviors.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Component Variants with Scoped CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/component-variants-with-scoped-css-variables</link>
            <guid>https://www.jonathanharrell.com/blog/component-variants-with-scoped-css-variables</guid>
            <pubDate>Thu, 12 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Scoped CSS variables provide an incredibly easy and clean way to create variants of common interface components like buttons.]]></description>
            <content:encoded><![CDATA[<p>Generating variants of common interface components like buttons, inputs, cards, etc., has typically involved multiple class names, pre-processor mixins, or repeated code. Now, component variants can be created in a clean and straightforward manner using CSS variables.</p>
<p>Let’s take buttons as an example. I want to create a set of different buttons, including common variants like “primary” and “secondary”.</p>
<h2>Base Styling</h2>
<p>I’m going to start by giving these buttons some base styling. I can give the <code>button</code> a base class and then add additional classes for each variant.</p>
<pre><code class="language-html">&lt;button class=&quot;button is-primary&quot;&gt;Primary&lt;/button&gt;
&lt;button class=&quot;button is-secondary&quot;&gt;Secondary&lt;/button&gt;
</code></pre>
<pre><code class="language-css">.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  height: 2.5rem;
  padding: 0 1rem;
  border-radius: 4px;
}
</code></pre>
<h2>Defining Variables</h2>
<p>Next, I’m going to define some variables on the <code>:root</code>. These will be the properties that need to change with each variant.</p>
<pre><code class="language-css">:root {
  --button-background-color: gray;
  --button-border-color: gray;
  --button-text-color: black;
}
</code></pre>
<p>I will use these to add color to my base styling:</p>
<pre><code class="language-css">.button {
  /* ... */
  background-color: var(--button-background-color);
  border: 1px solid var(--button-border-color);
  color: var(--button-text-color);
}
</code></pre>
<h2>Overriding Variables for Component Variants</h2>
<p>Finally, I will override these variable values within each variant selector.</p>
<pre><code class="language-css">.button.is-primary {
  --button-background-color: orange;
  --button-border-color: orange;
  --button-text-color: white;
}

.button.is-secondary {
  --button-background-color: black;
  --button-border-color: black;
  --button-text-color: white;
}
</code></pre>
<h2>Alternate Selector Scheme</h2>
<p>If I wanted to simplify my classes further, I could use only one class to define both the base styling and the variants.</p>
<pre><code class="language-html">&lt;button class=&quot;button-primary&quot;&gt;Primary&lt;/button&gt;
&lt;button class=&quot;button-secondary&quot;&gt;Secondary&lt;/button&gt;
</code></pre>
<p>Here I’m nesting variant selectors with PostCSS:</p>
<pre><code class="language-css">[class^=&#x27;button&#x27;] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  height: 2.5rem;
  padding: 0 1rem;
  background-color: var(--button-background-color);
  border: 1px solid var(--button-border-color);
  border-radius: 4px;
  color: var(--button-text-color);

  &amp;[class*=&#x27;primary&#x27;] {
    --button-background-color: orange;
    --button-border-color: orange;
    --button-text-color: white;
  }

  &amp;[class*=&#x27;secondary&#x27;] {
    --button-background-color: black;
    --button-border-color: black;
    --button-text-color: white;
  }
}
</code></pre>
<h2>Browser Support for CSS Variables</h2>
<p>For browsers that do not support custom properties, you can use the <a href="https://github.com/postcss/postcss-custom-properties" target="_blank" rel="noreferrer">PostCSS custom properties</a> plugin. This will compile the CSS variables as static values.</p>
<p>Keep in mind, however, that this will not allow you to override the variable values, as the variables will no longer exist in the browser, having already been evaluated during the CSS build.</p>
<p>The technique for component variants described in this article is future-looking and, as more and more browsers fully support custom properties, will be able to be used in production sites.</p>
<aside><p>You can learn more about CSS variables in <a href="https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties" target="_blank" rel="noreferrer">my article here</a>.</p></aside>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Contextual Callouts with CSS Grid]]></title>
            <link>https://www.jonathanharrell.com/blog/contextual-callouts-with-css-grid</link>
            <guid>https://www.jonathanharrell.com/blog/contextual-callouts-with-css-grid</guid>
            <pubDate>Thu, 10 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Using the power of CSS grid, it is now easier than ever before to create callouts — small paragraphs that sit next to the primary text and offer additional information.]]></description>
            <content:encoded><![CDATA[<p>At long last, contextual callouts are possible with CSS grid. <dfn>Contextual callouts</dfn> are small paragraphs that sit beside primary text and offer secondary information to a reader. They have long been a feature of books, magazines and other printed materials. I enjoy coming across these small asides while reading, as they add texture and interest to the content.</p>
<p>I&#x27;ve been searching for a while now for a way to bring these to the web with pure CSS. The solutions in the past have typically been fairly messy, requiring complex floats and clearing, or manual absolute positioning. That is changing now, thanks to CSS grid.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="CSS grid layout showing white horizontal content blocks arranged in a 13-column structure. Two content groupings are present—one near the top and one near the bottom—each spanning columns 3 to 9. A nested grid figure with a centered dark gray block spans across the middle columns." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path>
        <path d="m400-139.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 269.5 530.5)"></path>
        <path d="m400-46.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 176.5 623.5)"></path>
        <path d="m400 43.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 86.5 713.5)"></path>
        <path d="m400 56.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 73.5 726.5)"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 165 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 211 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 533 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 579 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 625 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path>
        <g fill="#f5f5f5">
            <path d="m314 131h173v3h-173z"></path>
            <path d="m314 141h173v3h-173z"></path>
            <path d="m314 151h173v3h-173z"></path>
            <path d="m314 161h173v3h-173z"></path>
            <path d="m314 171h173v3h-173z"></path>
            <path d="m314 181h173v3h-173z"></path>
            <path d="m314 191h173v3h-173z"></path>
            <path d="m314 201h173v3h-173z"></path>
            <path d="m314 211h115v3h-115z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 131h81v3h-81z"></path>
            <path d="m222 141h81v3h-81z"></path>
            <path d="m241 151h62v3h-62z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 327h81v3h-81z"></path>
            <path d="m222 337h81v3h-81z"></path>
            <path d="m241 347h62v3h-62z"></path>
        </g>
        <path d="m314 314h113v3h-113z" fill="#f5f5f5"></path>
        <g fill="#f5f5f5">
            <path d="m314 327h173v3h-173z"></path>
            <path d="m314 337h173v3h-173z"></path>
            <path d="m314 347h173v3h-173z"></path>
            <path d="m314 357h173v3h-173z"></path>
            <path d="m314 367h173v3h-173z"></path>
            <path d="m314 377h115v3h-115z"></path>
        </g>
        <path d="m314 224h173v81h-173z" fill="#525252"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 257 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 303 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 349 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 395 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 441 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 487 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g fill="#e6594c" fill-opacity="0.5">
            <path d="m626 95h9v317h-9z" opacity=".25"></path>
            <path d="m258 95h9v317h-9z" opacity=".25"></path>
            <path d="m304 95h9v317h-9z" opacity=".25"></path>
            <path d="m350 95h9v317h-9z" opacity=".25"></path>
            <path d="m396 95h9v317h-9z" opacity=".25"></path>
            <path d="m442 95h9v317h-9z" opacity=".25"></path>
            <path d="m488 95h9v317h-9z" opacity=".25"></path>
            <path d="m534 95h9v317h-9z" opacity=".25"></path>
            <path d="m580 95h9v317h-9z" opacity=".25"></path>
            <path d="m166 95h9v317h-9z" opacity=".25"></path>
            <path d="m212 95h9v317h-9z" opacity=".25"></path>
        </g>
    </g>
</svg></figure></p>
<h2>The Grid Markup</h2>
<p>Say I’m building a blog post template. First, I’ll need a <code>header</code> to contain the title. Then I’ll need the primary blog content, consisting of headings, paragraphs, images, and callouts. First let’s write some semantic markup:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post&quot;&gt;
  &lt;header&gt;
    &lt;h1&gt;Article Heading&lt;/h1&gt;
  &lt;/header&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
  &lt;figure&gt;
    &lt;img src=&quot;image.jpg&quot; alt=&quot;Alt text&quot;/&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Section Heading&lt;/h2&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
  &lt;aside&gt;
    &lt;p&gt;Callout text&lt;/p&gt;
  &lt;/aside&gt;
  &lt;p&gt;Paragraph text&lt;/p&gt;
&lt;/article&gt;
</code></pre>
<p>The <code>article</code> element contains the header and all post content as direct children. This will be important as we apply CSS grid styles to the post. Callouts are written using <code>aside</code> elements, perfect for content that is connected tangentially to the rest of the document, and appear in the document directly before the paragraph they are connected to. Note that each <code>aside</code> contains a child paragraph of its own.</p>
<h2>Fallback Styling</h2>
<p>Next, we’ll apply some basic styles for browsers that don’t yet support CSS grid. We’ll set a max-width of 70 characters using the <code>ch</code> unit:</p>
<pre><code class="language-css">.blog-post {
  max-width: 70ch;
}
</code></pre>
<h2>Using CSS Grid</h2>
<p>Now, let’s progressively enhance for browsers that <em>do</em> support CSS grid using a <code>@supports</code> query:</p>
<pre><code class="language-css">@supports(display: grid) {
  .blog-post {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-column-gap: 2rem;
  }
}
</code></pre>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Expanded CSS grid layout with 13 columns and two vertical groupings of white horizontal content lines. The upper group spans columns 3 to 9, and the lower group begins at column 3 and spans to column 9 as well. A dark gray rectangular block centered between columns 6 and 9 indicates a figure or figcaption." style="width:100%;height:auto">
    <g fill="none" fill-rule="evenodd">
        <g stroke="#e6594c">
            <path d="m130.5 95.5h539v316h-539z"></path>
            <path d="m400-139.5v540" transform="matrix(0 -1 1 0 269.5 530.5)"></path>
            <path d="m400-46.5v540" transform="matrix(0 -1 1 0 176.5 623.5)"></path>
            <path d="m400 43.5v540" transform="matrix(0 -1 1 0 86.5 713.5)"></path>
            <path d="m400 56.5v540" transform="matrix(0 -1 1 0 73.5 726.5)"></path>
            <g transform="matrix(0 -1 1 0 165 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 211 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 533 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 579 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
            <g transform="matrix(0 -1 1 0 625 412)">
                <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
                <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
            </g>
        </g>
        <path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path>
        <g fill="#f5f5f5">
            <path d="m314 131h173v3h-173z"></path>
            <path d="m314 141h173v3h-173z"></path>
            <path d="m314 151h173v3h-173z"></path>
            <path d="m314 161h173v3h-173z"></path>
            <path d="m314 171h173v3h-173z"></path>
            <path d="m314 181h173v3h-173z"></path>
            <path d="m314 191h173v3h-173z"></path>
            <path d="m314 201h173v3h-173z"></path>
            <path d="m314 211h115v3h-115z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 131h81v3h-81z"></path>
            <path d="m222 141h81v3h-81z"></path>
            <path d="m241 151h62v3h-62z"></path>
        </g>
        <g fill="#f5f5f5">
            <path d="m222 327h81v3h-81z"></path>
            <path d="m222 337h81v3h-81z"></path>
            <path d="m241 347h62v3h-62z"></path>
        </g>
        <path d="m314 314h113v3h-113z" fill="#f5f5f5"></path>
        <g fill="#f5f5f5">
            <path d="m314 327h173v3h-173z"></path>
            <path d="m314 337h173v3h-173z"></path>
            <path d="m314 347h173v3h-173z"></path>
            <path d="m314 357h173v3h-173z"></path>
            <path d="m314 367h173v3h-173z"></path>
            <path d="m314 377h115v3h-115z"></path>
        </g>
        <path d="m314 224h173v81h-173z" fill="#525252"></path>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 257 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 303 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 349 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 395 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 441 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g stroke="#e6594c" transform="matrix(0 -1 1 0 487 412)">
            <path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path>
            <path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path>
        </g>
        <g fill="#e6594c">
            <path d="m626 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m258 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m304 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m350 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m396 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m442 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m488 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m534 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m580 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m166 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <path d="m212 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path>
            <g fill-rule="nonzero">
                <path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z" transform="translate(128.320312 81.291016)"></path>
                <path d="m.07324219 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273438-1.66015625c.83496094-.87890625 1.13769531-1.43066407 1.13769531-2.09960938 0-1.09863281-.92773437-1.89453125-2.21679687-1.89453125-1.31835938 0-2.25585938.85449219-2.25585938 1.73339844 0 .32714844.22460938.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042969-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195312 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199219.62988282-.54199219.87890626z" transform="translate(167.736816 81.208008)"></path>
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z" transform="translate(213.626953 81.208008)"></path>
                <path d="m3.23730469 6.14746094c0 .41503906.22949219.66894531.61523437.66894531.38574219 0 .62011719-.25390625.62011719-.66894531v-.625h.32714844c.35644531 0 .56640625-.20019532.56640625-.52734375 0-.33203125-.21484375-.546875-.56640625-.546875h-.32714844v-3.515625c0-.58105469-.39550781-.93261719-1.0546875-.93261719-.5078125 0-.8203125.20507813-1.23046875.80078125-.86914062 1.28417969-1.39160156 2.17285156-1.94824219 3.22753906-.18066406.36621094-.23925781.55664063-.23925781.77148438 0 .45410156.30273438.72265625.80078125.72265625h2.43652344zm-2.03125-1.69921875v-.03417969c.4296875-.77636719 1.37695312-2.39257812 1.96289062-3.28125h.06835938v3.31542969z" transform="translate(259.397461 81.242188)"></path>
                <path d="m0 5.31738281c0 .74707031.9375 1.49414063 2.26074219 1.49414063 1.51367187 0 2.53417969-.95214844 2.53417969-2.37304688 0-1.2890625-.87402344-2.16796875-2.14355469-2.16796875-.57128907 0-1.11328125.21484375-1.34277344.52734375h-.06835937l.13671874-1.72363281h2.52441407c.39550781 0 .62011719-.19042969.62011719-.53222656 0-.34179688-.22949219-.54199219-.62011719-.54199219h-2.76367188c-.53710937 0-.81542968.22460938-.84960937.68847656l-.18066406 2.50976563c-.02929688.44921875.24414062.73730468.64453125.73730468.18066406 0 .32226562-.05859375.61035156-.30273437.28808594-.22460938.62011719-.34667969.94726562-.34667969.703125 0 1.20605469.48828125 1.20605469 1.20117188 0 .73730469-.52246094 1.25-1.25976562 1.25-.49804688 0-.88867188-.22949219-1.19628907-.68847657-.16113281-.22949218-.31738281-.31738281-.52246093-.31738281-.32714844 0-.53710938.25878907-.53710938.5859375z" transform="translate(305.67334 81.330078)"></path>
                <path d="m0 3.56445312c0 1.03027344.20019531 1.84570313.60058594 2.40722657.43945312.625 1.12304687.95703125 1.97265625.95703125 1.4453125 0 2.41699219-.93261719 2.41699219-2.32421875 0-1.27441407-.859375-2.15820313-2.08496094-2.15820313-.73242188 0-1.39160156.39550782-1.62109375.9765625h-.04394531c.00976562-1.54785156.5078125-2.37792968 1.45996093-2.37792968.37597657 0 .67871094.12695312 1.015625.41503906.22949219.18066406.36621094.23925781.546875.23925781.30273438 0 .51269531-.20019531.51269531-.49316406 0-.25878906-.20507812-.56152344-.546875-.79101563-.40039062-.26367187-.94238281-.41503906-1.5234375-.41503906-1.73339843 0-2.70507812 1.27929688-2.70507812 3.56445312zm1.39648438 1.08398438c0-.71289062.48828124-1.21582031 1.171875-1.21582031.69824218 0 1.16699218.48828125 1.16699218 1.22070312 0 .7421875-.46386718 1.23535157-1.14746094 1.23535157-.69335937 0-1.19140624-.51269532-1.19140624-1.24023438z" transform="translate(351.521973 81.212891)"></path>
                <path d="m.96679688 6.15234375c0 .3515625.26367187.59082031.61035156.59082031.2734375 0 .44921875-.14648437.59082031-.41992187l2.29980469-4.765625c.18554687-.36621094.26855468-.64453125.26855468-.8984375 0-.40039063-.28808593-.65917969-.67871093-.65917969h-3.41796875c-.41015625 0-.63964844.21972656-.63964844.54199219 0 .31738281.22949219.53222656.63964844.53222656h2.734375v.0390625l-2.29003906 4.63867187c-.07324219.14160157-.1171875.26855469-.1171875.40039063z" transform="translate(397.583008 81.334961)"></path>
                <path d="m2.56835938 6.93359375c1.54296874 0 2.59277343-.79589844 2.59277343-1.96289063 0-.8203125-.56152343-1.484375-1.39648437-1.65527343v-.07324219c.71289062-.21972656 1.1328125-.77636719 1.1328125-1.47949219 0-1.03515625-.95214844-1.76269531-2.31445313-1.76269531s-2.31445312.72753906-2.31445312 1.76269531c0 .70800781.41503906 1.25976563 1.12792969 1.47949219v.07324219c-.83984375.17089843-1.39648438.83496093-1.39648438 1.66015625 0 1.171875 1.03027344 1.95800781 2.56835938 1.95800781zm.01464843-4.06738281c-.61523437 0-1.0546875-.40527344-1.0546875-.96191406 0-.55175782.43945313-.94726563 1.0546875-.94726563.61523438 0 1.0546875.39550781 1.0546875.94726563 0 .56152343-.43945312.96191406-1.0546875.96191406zm0 3.11523437c-.7421875 0-1.26953125-.45898437-1.26953125-1.09375 0-.63964843.52734375-1.10351562 1.26953125-1.10351562.73730469 0 1.26953125.46386719 1.26953125 1.10351562 0 .63476563-.53222656 1.09375-1.26953125 1.09375z" transform="translate(443.419434 81.208008)"></path>
                <path d="m.20996094 5.75195312c0 .29296876.21972656.5859375.57617187.80566407.39550781.24414062.91796875.38085937 1.48925781.38085937 1.74316407 0 2.70507813-1.23535156 2.70507813-3.52050781 0-2.17773437-.92773437-3.41796875-2.55371094-3.41796875-1.45507812 0-2.42675781.92773438-2.42675781 2.30957031 0 1.29882813.85449219 2.20214844 2.08496094 2.20214844.75195312 0 1.3671875-.38085937 1.61132812-1.00097656h.04394532c0 1.50878906-.5078125 2.37792969-1.46972657 2.37792969-.43457031 0-.7421875-.14648438-1.06445312-.4296875-.20019531-.16113282-.32714844-.21484376-.48828125-.21484376-.28808594 0-.5078125.20019532-.5078125.5078125zm3.34472656-3.46191406c0 .72265625-.46875 1.21582032-1.15234375 1.21582032s-1.14746094-.49316407-1.14746094-1.22070313c0-.73242187.46875-1.24023437 1.14257813-1.24023437.68359375 0 1.15722656.51269531 1.15722656 1.24511718z" transform="translate(489.536621 81.198242)"></path>
                <g transform="translate(533.412598 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                </g>
                <g transform="translate(580.269531 81.291016)">
                    <path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path>
                    <path d="m5.7421875 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902344.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path>
                </g>
                <g transform="translate(625.534668 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.32617188 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273437-1.66015625c.83496094-.87890625 1.13769532-1.43066407 1.13769532-2.09960938 0-1.09863281-.92773438-1.89453125-2.21679688-1.89453125-1.31835937 0-2.25585937.85449219-2.25585937 1.73339844 0 .32714844.22460937.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042968-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195313 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199218.62988282-.54199218.87890626z"></path>
                </g>
                <g transform="translate(665.478516 81.208008)">
                    <path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path>
                    <path d="m4.19921875 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972657 0 2.50488281-.81542969 2.50488281-1.98242187 0-.84472657-.61035156-1.53808594-1.42089843-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726562-1.76757812-2.29492188-1.76757812-1.27441406 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460938.53710937.53710938.53710937.22949219 0 .40039062-.10253906.546875-.34667969.25878906-.43945312.63476562-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945313.92773437-1.04003906.92773437h-.45410157c-.29785156 0-.5078125.21972657-.5078125.51269531 0 .30273438.21484376.52246094.5078125.52246094h.47851563c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179688-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                </g>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>Now it’s time to start placing content on the grid:</p>
<pre><code class="language-css">.blog-post header {
  grid-column-start: 3;
  grid-column-end: span 2;
}

.blog-post h2,
.blog-post p,
.blog-post figure {
  grid-column-start: 5;
  grid-column-end: span 4;
}
</code></pre>
<p>The post header and content now sit next to each other in a row. The callouts are up next:</p>
<pre><code class="language-css">.blog-post aside {
  position: relative;
  grid-column-start: 3;
  grid-column-end: 5;
}

.blog-post aside p {
  position: absolute;
}
</code></pre>
<p>The asides are now pulled to the left of the paragraph immediately following them, looking exactly like callouts. The paragraphs within each callout have absolute positioning applied so that they don’t force the proceeding paragraph down if they are taller than the adjacent content.</p>
<div class="warning"><p>Since setting up asides requires using absolute positioning, you need to be careful that one aside does not overlap the proceeding one.</p></div>
<h2>Bonus: Full-Width Figures</h2>
<p>I can easily style figures within the post so that they stretch across the full width of the grid container. The rest of the content remains at a narrower width.</p>
<pre><code class="language-css">.blog-post figure {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-column-gap: 2rem;
  grid-column-start: 1;
  grid-column-end: -1;
}

.blog-post figure img {
  grid-column-start: 1;
  grid-column-end: -1;
}

.blog-post figure figcaption {
  grid-column-start: 5;
  grid-column-end: span 4;
}
</code></pre>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Grid layout with 13 columns and white content blocks aligned between columns 3 to 9. The top section contains staggered horizontal bars, suggesting header and paragraph placement. A gray area spans the lower portion, representing a full-width figure." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m131 194h539v162h-539z" fill="#525252"></path><path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path><path d="m400-139.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 269.5 530.5)"></path><path d="m400-76.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 206.5 593.5)"></path><path d="m400 95.5v540" stroke="#e6594c" transform="matrix(0 -1 1 0 34.5 765.5)"></path><path d="m314 366h173v3h-173z" fill="#f5f5f5"></path><g stroke="#e6594c" transform="matrix(0 -1 1 0 165 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 211 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 533 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 579 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g stroke="#e6594c" transform="matrix(0 -1 1 0 625 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#f5f5f5"><path d="m314 131h173v3h-173z"></path><path d="m314 141h173v3h-173z"></path><path d="m314 151h173v3h-173z"></path><path d="m314 161h173v3h-173z"></path><path d="m314 171h173v3h-173z"></path><path d="m314 181h115v3h-115z"></path></g><g fill="#f5f5f5"><path d="m222 131h81v3h-81z"></path><path d="m222 141h81v3h-81z"></path><path d="m241 151h62v3h-62z"></path></g><g stroke="#e6594c"><g transform="matrix(0 -1 1 0 257 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 303 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 349 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 395 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 441 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g><g transform="matrix(0 -1 1 0 487 412)"><path d="m158.5-158v317" transform="matrix(0 -1 1 0 158 159)"></path><path d="m158.5-148v317" transform="matrix(0 -1 1 0 148 169)"></path></g></g><g fill="#e6594c"><path d="m626 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m258 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m304 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m350 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m396 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m442 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m488 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m534 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m580 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m166 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><path d="m212 95h9v317h-9z" fill-opacity="0.5" opacity=".25"></path><g fill-rule="nonzero"><path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z" transform="translate(128.320312 81.291016)"></path><path d="m.07324219 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273438-1.66015625c.83496094-.87890625 1.13769531-1.43066407 1.13769531-2.09960938 0-1.09863281-.92773437-1.89453125-2.21679687-1.89453125-1.31835938 0-2.25585938.85449219-2.25585938 1.73339844 0 .32714844.22460938.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042969-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195312 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199219.62988282-.54199219.87890626z" transform="translate(167.736816 81.208008)"></path><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z" transform="translate(213.626953 81.208008)"></path><path d="m3.23730469 6.14746094c0 .41503906.22949219.66894531.61523437.66894531.38574219 0 .62011719-.25390625.62011719-.66894531v-.625h.32714844c.35644531 0 .56640625-.20019532.56640625-.52734375 0-.33203125-.21484375-.546875-.56640625-.546875h-.32714844v-3.515625c0-.58105469-.39550781-.93261719-1.0546875-.93261719-.5078125 0-.8203125.20507813-1.23046875.80078125-.86914062 1.28417969-1.39160156 2.17285156-1.94824219 3.22753906-.18066406.36621094-.23925781.55664063-.23925781.77148438 0 .45410156.30273438.72265625.80078125.72265625h2.43652344zm-2.03125-1.69921875v-.03417969c.4296875-.77636719 1.37695312-2.39257812 1.96289062-3.28125h.06835938v3.31542969z" transform="translate(259.397461 81.242188)"></path><path d="m0 5.31738281c0 .74707031.9375 1.49414063 2.26074219 1.49414063 1.51367187 0 2.53417969-.95214844 2.53417969-2.37304688 0-1.2890625-.87402344-2.16796875-2.14355469-2.16796875-.57128907 0-1.11328125.21484375-1.34277344.52734375h-.06835937l.13671874-1.72363281h2.52441407c.39550781 0 .62011719-.19042969.62011719-.53222656 0-.34179688-.22949219-.54199219-.62011719-.54199219h-2.76367188c-.53710937 0-.81542968.22460938-.84960937.68847656l-.18066406 2.50976563c-.02929688.44921875.24414062.73730468.64453125.73730468.18066406 0 .32226562-.05859375.61035156-.30273437.28808594-.22460938.62011719-.34667969.94726562-.34667969.703125 0 1.20605469.48828125 1.20605469 1.20117188 0 .73730469-.52246094 1.25-1.25976562 1.25-.49804688 0-.88867188-.22949219-1.19628907-.68847657-.16113281-.22949218-.31738281-.31738281-.52246093-.31738281-.32714844 0-.53710938.25878907-.53710938.5859375z" transform="translate(305.67334 81.330078)"></path><path d="m0 3.56445312c0 1.03027344.20019531 1.84570313.60058594 2.40722657.43945312.625 1.12304687.95703125 1.97265625.95703125 1.4453125 0 2.41699219-.93261719 2.41699219-2.32421875 0-1.27441407-.859375-2.15820313-2.08496094-2.15820313-.73242188 0-1.39160156.39550782-1.62109375.9765625h-.04394531c.00976562-1.54785156.5078125-2.37792968 1.45996093-2.37792968.37597657 0 .67871094.12695312 1.015625.41503906.22949219.18066406.36621094.23925781.546875.23925781.30273438 0 .51269531-.20019531.51269531-.49316406 0-.25878906-.20507812-.56152344-.546875-.79101563-.40039062-.26367187-.94238281-.41503906-1.5234375-.41503906-1.73339843 0-2.70507812 1.27929688-2.70507812 3.56445312zm1.39648438 1.08398438c0-.71289062.48828124-1.21582031 1.171875-1.21582031.69824218 0 1.16699218.48828125 1.16699218 1.22070312 0 .7421875-.46386718 1.23535157-1.14746094 1.23535157-.69335937 0-1.19140624-.51269532-1.19140624-1.24023438z" transform="translate(351.521973 81.212891)"></path><path d="m.96679688 6.15234375c0 .3515625.26367187.59082031.61035156.59082031.2734375 0 .44921875-.14648437.59082031-.41992187l2.29980469-4.765625c.18554687-.36621094.26855468-.64453125.26855468-.8984375 0-.40039063-.28808593-.65917969-.67871093-.65917969h-3.41796875c-.41015625 0-.63964844.21972656-.63964844.54199219 0 .31738281.22949219.53222656.63964844.53222656h2.734375v.0390625l-2.29003906 4.63867187c-.07324219.14160157-.1171875.26855469-.1171875.40039063z" transform="translate(397.583008 81.334961)"></path><path d="m2.56835938 6.93359375c1.54296874 0 2.59277343-.79589844 2.59277343-1.96289063 0-.8203125-.56152343-1.484375-1.39648437-1.65527343v-.07324219c.71289062-.21972656 1.1328125-.77636719 1.1328125-1.47949219 0-1.03515625-.95214844-1.76269531-2.31445313-1.76269531s-2.31445312.72753906-2.31445312 1.76269531c0 .70800781.41503906 1.25976563 1.12792969 1.47949219v.07324219c-.83984375.17089843-1.39648438.83496093-1.39648438 1.66015625 0 1.171875 1.03027344 1.95800781 2.56835938 1.95800781zm.01464843-4.06738281c-.61523437 0-1.0546875-.40527344-1.0546875-.96191406 0-.55175782.43945313-.94726563 1.0546875-.94726563.61523438 0 1.0546875.39550781 1.0546875.94726563 0 .56152343-.43945312.96191406-1.0546875.96191406zm0 3.11523437c-.7421875 0-1.26953125-.45898437-1.26953125-1.09375 0-.63964843.52734375-1.10351562 1.26953125-1.10351562.73730469 0 1.26953125.46386719 1.26953125 1.10351562 0 .63476563-.53222656 1.09375-1.26953125 1.09375z" transform="translate(443.419434 81.208008)"></path><path d="m.20996094 5.75195312c0 .29296876.21972656.5859375.57617187.80566407.39550781.24414062.91796875.38085937 1.48925781.38085937 1.74316407 0 2.70507813-1.23535156 2.70507813-3.52050781 0-2.17773437-.92773437-3.41796875-2.55371094-3.41796875-1.45507812 0-2.42675781.92773438-2.42675781 2.30957031 0 1.29882813.85449219 2.20214844 2.08496094 2.20214844.75195312 0 1.3671875-.38085937 1.61132812-1.00097656h.04394532c0 1.50878906-.5078125 2.37792969-1.46972657 2.37792969-.43457031 0-.7421875-.14648438-1.06445312-.4296875-.20019531-.16113282-.32714844-.21484376-.48828125-.21484376-.28808594 0-.5078125.20019532-.5078125.5078125zm3.34472656-3.46191406c0 .72265625-.46875 1.21582032-1.15234375 1.21582032s-1.14746094-.49316407-1.14746094-1.22070313c0-.73242187.46875-1.24023437 1.14257813-1.24023437.68359375 0 1.15722656.51269531 1.15722656 1.24511718z" transform="translate(489.536621 81.198242)"></path><g transform="translate(533.412598 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path></g><g transform="translate(580.269531 81.291016)"><path d="m1.640625 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path><path d="m5.7421875 6.05957031c0 .44433594.23925781.70800781.64941406.70800781.41503906 0 .65429688-.25878906.65429688-.70800781v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691406l-.87402344.61035157c-.24902344.16601562-.37597656.34667968-.37597656.55175781 0 .26855468.20019531.46875.46875.46875.14160156 0 .26367188-.04394532.47363281-.18066406l.66894531-.47363282h.02929688z"></path></g><g transform="translate(625.534668 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.32617188 6.20117188c0 .35644531.27832031.59082031.70800781.59082031h3.29101562c.38574219 0 .61523438-.20019531.61523438-.53222657 0-.33691406-.234375-.54199218-.61523438-.54199218h-2.29003906v-.06347656l1.55273437-1.66015625c.83496094-.87890625 1.13769532-1.43066407 1.13769532-2.09960938 0-1.09863281-.92773438-1.89453125-2.21679688-1.89453125-1.31835937 0-2.25585937.85449219-2.25585937 1.73339844 0 .32714844.22460937.56152344.55175781.56152344.25390625 0 .41992188-.13183594.57617188-.43457032.19042968-.51269531.55664062-.78613281 1.0546875-.78613281.60058593 0 1.00585937.37597656 1.00585937.93261719 0 .41015625-.21484375.78125-.75195313 1.35253906l-1.82128906 1.96289062c-.41015625.41992188-.54199218.62988282-.54199218.87890626z"></path></g><g transform="translate(665.478516 81.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.19921875 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972657 0 2.50488281-.81542969 2.50488281-1.98242187 0-.84472657-.61035156-1.53808594-1.42089843-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726562-1.76757812-2.29492188-1.76757812-1.27441406 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460938.53710937.53710938.53710937.22949219 0 .40039062-.10253906.546875-.34667969.25878906-.43945312.63476562-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945313.92773437-1.04003906.92773437h-.45410157c-.29785156 0-.5078125.21972657-.5078125.51269531 0 .30273438.21484376.52246094.5078125.52246094h.47851563c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179688-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path></g></g></g></g></svg></figure></p>
<p>The <code>figure</code> now spans all 12 columns of the parent grid. I set up a nested grid within the <code>figure</code> with the same number of columns and spacing as the parent. This allows me to have the <code>img</code> element span the full width, while the <code>figcaption</code> is aligned with the narrower post content.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Controlling Element Visibility with the Intersection Observer API]]></title>
            <link>https://www.jonathanharrell.com/blog/controlling-element-visibility-with-the-intersection-observer-api</link>
            <guid>https://www.jonathanharrell.com/blog/controlling-element-visibility-with-the-intersection-observer-api</guid>
            <pubDate>Wed, 18 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use the new IntersectionObserver API to control the visibility of elements relative to the viewport.]]></description>
            <content:encoded><![CDATA[<p>Controlling the display of elements based on their visibility within the viewport has typically been a rather messy affair, involving calculations using window height and <code>getBoundingClientRect()</code>. There is now a new API that makes this much simpler called Intersection Observer. It is now <a href="https://caniuse.com/#feat=intersectionobserver" target="_blank" rel="noreferrer">supported</a> in Chrome, Firefox, Opera and Edge.</p>
<p>I decided to experiment and push IntersectionObserver to its limits.</p>

<h2>The HTML and CSS</h2>
<p>I have a simple grid of cards that is styled using CSS grid:</p>
<pre><code class="language-html">&lt;section class=&quot;card-grid&quot;&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;&lt;/div&gt;
  ...
&lt;/section&gt;
</code></pre>
<pre><code class="language-css">.card-grid {
  display: grid;
  grid-template-columns: repeat(
      auto-fill,
      minmax(100px, 1fr)
  );
  grid-gap: 45px;
}
</code></pre>
<h2>Creating the Observers</h2>
<p>I loop over each card and create an observer. The observer accepts a callback and an options object. Note that in options I am setting the <code>rootMargin</code> to a negative value. This insets the intersection point in from the viewport on all sides by 100px. So a card can be up to 100px in the viewport before the observer will read it as intersected.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram showing a large container with 100px of margin on all sides, marked in dark red. This illustrates the rootMargin option in the Intersection Observer API, visually indicating how the observer’s area of interest is inset from the edges of the viewport." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m700 65v377h-600v-377zm-29.761273 30h-540v317h540z" fill="#e6594c" fill-opacity="0.5" opacity=".25"></path><path d="m130.5 95.5h539v316h-539z" stroke="#e6594c"></path><path d="m101 66h598v375h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m665 96.0166667v-1l4-.0006667v-27.033l-4 .0003333v-1h9v1l-4-.0003333v27.033l4 .0006667v1z"></path><path d="m669.983333 100h-1v-9h1l-.000333 3.999h27.033l.000667-3.999h1v9h-1l-.000667-4.001h-27.033z"></path><g transform="translate(633.023926 77.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m9.91210938 3.62304688c0 2.01171874.94238282 3.31054687 2.52441402 3.31054687 1.5820313 0 2.5488282-1.31347656 2.5488282-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.5292969-3.31054688-1.5869141 0-2.54394532 1.30859375-2.54394532 3.31054688zm1.31835942-.30761719c0-1.40625.4589843-2.24121094 1.2158203-2.24121094.7568359 0 1.2158203.83984375 1.2158203 2.24121094v.29785156c0 1.40625-.4589844 2.24609375-1.2158203 2.24609375-.756836 0-1.2158203-.83984375-1.2158203-2.24609375z"></path><path d="m17.2900391 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.928711-2.3046875-.727539 0-1.2988281.34667969-1.508789.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888671-1.32324219.6884766 0 1.0791016.5078125 1.0791016 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m21.5380859 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033203-1.38671875h.0634766l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634766l-.9277343-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859376.24902344-.5859376.5859375 0 .16113281.0683594.33203125.1708985.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></g></svg></figure></p>
<p>I have also set the <code>threshold</code> option as an array with two numeric values. These are essentially the percentages of intersection at which the observer will respond. So, when a card is 50% in the viewport and when it is 100% in, the observer will fire the callback.</p>
<pre><code class="language-javascript">const options = {
  rootMargin: &#x27;-100px&#x27;,
  threshold: [0.5, 1]
}
</code></pre>
<pre><code class="language-javascript">const observer = new IntersectionObserver(callback, options);

const targets = document.querySelectorAll(&#x27;.card&#x27;);
targets.forEach(target =&gt; observer.observe(target));
</code></pre>
<h2>Setup the Callback</h2>
<p>The callback function gives me an array of entries—each entry is essentially an intersection change. I can check the <code>intersectionRatio</code> on each entry and apply some styling appropriately.</p>
<p><figure><svg height="565" viewBox="0 0 800 565" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Visual showing multiple boxes at different positions within and outside the margin-adjusted viewport. Labels on the boxes indicate intersection ratios: 0%, 50%, and 100%, demonstrating how the threshold values of 0.5 and 1 control when the Intersection Observer triggers based on how much of an element is visible." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m100.5 565v-214m599 0v214" stroke="#979797" stroke-dasharray="2"></path><path d="m700 65v285h-600v-285zm-29.761273 30h-540v225h540z" fill="#e6594c" fill-opacity="0.5" opacity=".25"></path><path d="m130.5 95.5h539v225h-539z" stroke="#e6594c"></path><path d="m101 66h598v284h-598z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m665 96.0166667v-1l4-.0006667v-27.033l-4 .0003333v-1h9v1l-4-.0003333v27.033l4 .0006667v1z"></path><path d="m669.983333 100h-1v-9h1l-.000333 3.999h27.033l.000667-3.999h1v9h-1l-.000667-4.001h-27.033z"></path><g transform="translate(633.023926 77.208008)"><path d="m1.640625 6.14257812c0 .44433594.23925781.70800782.64941406.70800782.41503906 0 .65429688-.25878906.65429688-.70800782v-5.23925781c0-.49316406-.31738282-.8203125-.79101563-.8203125-.2734375 0-.55175781.09765625-.90332031.33691407l-.87402344.61035156c-.24902343.16601562-.37597656.34667968-.37597656.55175781 0 .26855469.20019531.46875.46875.46875.14160156 0 .26367188-.04394531.47363281-.18066406l.66894531-.47363281h.02929688z"></path><path d="m4.09667969 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m9.91210938 3.62304688c0 2.01171874.94238282 3.31054687 2.52441402 3.31054687 1.5820313 0 2.5488282-1.31347656 2.5488282-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.5292969-3.31054688-1.5869141 0-2.54394532 1.30859375-2.54394532 3.31054688zm1.31835942-.30761719c0-1.40625.4589843-2.24121094 1.2158203-2.24121094.7568359 0 1.2158203.83984375 1.2158203 2.24121094v.29785156c0 1.40625-.4589844 2.24609375-1.2158203 2.24609375-.756836 0-1.2158203-.83984375-1.2158203-2.24609375z"></path><path d="m17.2900391 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.928711-2.3046875-.727539 0-1.2988281.34667969-1.508789.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888671-1.32324219.6884766 0 1.0791016.5078125 1.0791016 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m21.5380859 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033203-1.38671875h.0634766l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634766l-.9277343-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859376.24902344-.5859376.5859375 0 .16113281.0683594.33203125.1708985.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g stroke="#f5f5f5" stroke-width="2"><path d="m176 381h118v118h-118z"></path><path d="m341 261h118v118h-118z"></path><path d="m506 141h118v118h-118z"></path></g><path d="m507.5 200.5h115" stroke="#e6594c" stroke-dasharray="2" stroke-linecap="square"></path><path d="m177.5 440.5h116" stroke="#f5f5f5" stroke-dasharray="2" stroke-linecap="square"></path><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="14" x="558.5" y="134.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(561.733887 137.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="14" x="393.5" y="254.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(396.733887 257.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="14" x="228.5" y="374.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(231.733887 377.883789)"><path d="m0 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m3.42773438 1.0546875c0 .5625.30761718.94335938.81738281.94335938.52734375 0 .83496093-.40429688.83496093-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203124.38085938-.83203124.94042969zm.48339843 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589844-.08496093l1.44140624-1.88085938 1.35644532-1.75195312c.04980468-.06445313.07617187-.12890625.07324218-.19335938-.00292968-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.20507812-.03222656-.29296874.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.52441406 0 .83203125-.40722656.83203125-.94628906v-.11425781c0-.56542969-.30175781-.94042969-.81738281-.94042969s-.83496094.38085938-.83496094.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246093-.49804688.16699219 0 .27246094.16992188.27246094.49804688v.08496093c0 .33105469-.10839844.50390626-.27246094.50390626s-.27246093-.17285157-.27246093-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="18" x="556.5" y="195.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(559.618164 198.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="18" x="391.5" y="315.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(394.618164 318.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="18" x="226.5" y="435.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(229.618164 438.883789)"><path d="m0 3.3046875c0 .44824219.5625.89648438 1.35644531.89648438.90820313 0 1.52050781-.57128907 1.52050781-1.42382813 0-.7734375-.52441406-1.30078125-1.28613281-1.30078125-.34277343 0-.66796875.12890625-.80566406.31640625h-.04101562l.08203125-1.03417969h1.51464843c.23730469 0 .37207031-.11425781.37207031-.31933593 0-.20507813-.13769531-.32519532-.37207031-.32519532h-1.65820312c-.32226563 0-.48925781.13476563-.50976563.41308594l-.10839843 1.50585937c-.01757813.26953126.14648437.44238282.38671875.44238282.10839843 0 .19335937-.03515625.36621093-.18164063.17285157-.13476562.37207031-.20800781.56835938-.20800781.421875 0 .72363281.29296875.72363281.72070312 0 .44238282-.31347656.75-.75585938.75-.29882812 0-.53320312-.13769531-.71777343-.41308593-.09667969-.13769531-.19042969-.19042969-.31347656-.19042969-.19628907 0-.32226563.15527344-.32226563.3515625z"></path><path d="m3.38671875 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656s.72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539063 1.34765624-.72949219 1.34765624s-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m6.81445312 1.0546875c0 .5625.30761719.94335938.81738282.94335938.52734375 0 .83496094-.40429688.83496094-.94335938v-.11425781c0-.56542969-.3046875-.94042969-.8203125-.94042969s-.83203126.38085938-.83203126.94042969zm.48339844 2.74804688c-.05273437.0703125-.07617187.14355468-.0703125.20800781.00292969.08789062.07617188.1640625.15820313.18164062.09082031.04101563.20507812.03515625.29589843-.08496093l1.44140626-1.88085938 1.35644532-1.75195312c.0498047-.06445313.0761719-.12890625.0732422-.19335938-.0029297-.09667969-.0703125-.17578125-.1640625-.19628906-.09375-.04394531-.2050781-.03222656-.2929688.08789062l-1.35937498 1.77832031zm.0703125-2.84765625c0-.33105469.10546875-.49804688.27246094-.49804688.1640625 0 .26953125.16699219.26953125.49804688v.08496093c0 .33105469-.10546875.50097656-.26953125.50097656-.16699219 0-.27246094-.16992187-.27246094-.50097656zm1.95996094 2.26464843c0 .5625.30761719.94628906.8203125.94628906.5244141 0 .8320313-.40722656.8320313-.94628906v-.11425781c0-.56542969-.3017579-.94042969-.8173829-.94042969-.51562496 0-.8349609.38085938-.8349609.94042969zm.55371094-.09960937c0-.33105469.10546875-.49804688.27246096-.49804688.1669922 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083984.50390626-.2724609.50390626-.16406252 0-.27246096-.17285157-.27246096-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#e6594c" width="20" x="555.5" y="254.5"></rect><g fill="#e6594c" fill-rule="nonzero" transform="translate(558.261719 257.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="20" x="390.5" y="374.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(393.261719 377.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g><rect fill="#27272a" height="11" rx="2" stroke="#f5f5f5" width="20" x="225.5" y="494.5"></rect><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(228.261719 497.883789)"><path d="m.984375 3.7265625c0 .26660156.14355469.42480469.38964844.42480469.24902344 0 .39257812-.15527344.39257812-.42480469v-3.14355469c0-.29589843-.19042968-.4921875-.47460937-.4921875-.1640625 0-.33105469.05859375-.54199219.20214844l-.52441406.36621094c-.14941406.09960937-.22558594.20800781-.22558594.33105469 0 .16113281.12011719.28125.28125.28125.08496094 0 .15820313-.02636719.28417969-.10839844l.40136719-.28417969h.01757812z"></path><path d="m2.45800781 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929687-.78808594 1.52929687-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757812-1.98632812-.95214844 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539062-1.34472656.72949218-1.34472656.45410157 0 .72949219.50390624.72949219 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949219 1.34765624-.45410156 0-.72949218-.50390624-.72949218-1.34765624z"></path><path d="m5.94726562 2.21484375c0 1.20703125.56542969 1.98632813 1.51464844 1.98632813s1.52929688-.78808594 1.52929688-1.98632813v-.1875c0-1.20996094-.5625-1.98632812-1.51757813-1.98632812-.95214843 0-1.52636719.78515625-1.52636719 1.98632812zm.79101563-.18457031c0-.84375.27539063-1.34472656.72949219-1.34472656s.72949218.50390624.72949218 1.34472656v.17871094c0 .84375-.27539062 1.34765624-.72949218 1.34765624s-.72949219-.50390624-.72949219-1.34765624z"></path><path d="m9.375 1.0546875c0 .5625.30761719.94335938.8173828.94335938.5273438 0 .834961-.40429688.834961-.94335938v-.11425781c0-.56542969-.3046876-.94042969-.8203126-.94042969-.51562495 0-.8320312.38085938-.8320312.94042969zm.48339844 2.74804688c-.05273438.0703125-.07617188.14355468-.0703125.20800781.00292968.08789062.07617187.1640625.15820312.18164062.09082034.04101563.20507814.03515625.29589844-.08496093l1.4414063-1.88085938 1.3564453-1.75195312c.0498047-.06445313.0761718-.12890625.0732421-.19335938-.0029296-.09667969-.0703124-.17578125-.1640624-.19628906-.09375-.04394531-.2050782-.03222656-.2929688.08789062l-1.359375 1.77832031zm.0703125-2.84765625c0-.33105469.10546876-.49804688.27246096-.49804688.1640625 0 .2695312.16699219.2695312.49804688v.08496093c0 .33105469-.1054687.50097656-.2695312.50097656-.1669922 0-.27246096-.16992187-.27246096-.50097656zm1.95996096 2.26464843c0 .5625.3076172.94628906.8203125.94628906.524414 0 .8320312-.40722656.8320312-.94628906v-.11425781c0-.56542969-.3017578-.94042969-.8173828-.94042969s-.8349609.38085938-.8349609.94042969zm.5537109-.09960937c0-.33105469.1054688-.49804688.272461-.49804688.1669921 0 .2724609.16992188.2724609.49804688v.08496093c0 .33105469-.1083985.50390626-.2724609.50390626-.1640626 0-.272461-.17285157-.272461-.50390626z"></path></g></g></svg></figure></p>
<pre><code class="language-javascript">const callback = entries =&gt; {
  entries.forEach(entry =&gt; {
    const ratio = entry.intersectionRatio;

    // look at the ratio and do stuff to each element
  });
}
</code></pre>
<p>I use a switch statement to apply different styling for different ratios:</p>
<pre><code class="language-javascript">switch (true) {
  case (ratio === 1):
    entry.target.style.opacity = 1;
    entry.target.style.transform = &#x27;scale(1.25)&#x27;;
    return;

  case (ratio &lt; 1 &amp;&amp; ratio &gt;= 0.5):
    entry.target.style.opacity = 0.5;
    entry.target.style.transform = &#x27;scale(1.1)&#x27;;
    return;

  case (ratio &lt; 0.5):
    entry.target.style.opacity = 0.15;
    entry.target.style.transform = &#x27;scale(1.0)&#x27;;
    return;

  default:
    return;
}
</code></pre>
<h2>Conclusion</h2>
<p>The Intersection Observer API provides a more straightforward and powerful method for checking element visibility relative to the viewport. Hopefully browser support continues to improve and we’ll be able to use it soon in production sites without needing a polyfill.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implicit State Sharing in React & Vue]]></title>
            <link>https://www.jonathanharrell.com/blog/implicit-state-sharing-in-react-vue</link>
            <guid>https://www.jonathanharrell.com/blog/implicit-state-sharing-in-react-vue</guid>
            <pubDate>Mon, 05 Nov 2018 22:14:59 GMT</pubDate>
            <description><![CDATA[Learn to use React’s Context API and provide/inject in Vue to share state between related components without resorting to a global data store.]]></description>
            <content:encoded><![CDATA[<p>Imagine you are creating an accordion component that you want to distribute publicly through an npm package. You would like the users of this accordion to be able to use the component in a very flexible way, by composing multiple components together. React Context and provide/inject in Vue provide a solution.</p>

<p>Imagine this is your ideal API:</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem&gt;
    &lt;AccordionHeader&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  &lt;/AccordionItem&gt;
&lt;/Accordion&gt;
</code></pre>
<p><code>AccordionItem</code> will contain each section of the accordion that can be expanded or collapsed, <code>AccordionHeader</code> will be the place where the user can click to expand or collapse, and <code>AccordionPanel</code> will contain the content to be shown or hidden.</p>
<p>Each <code>AccordionItem</code> will need to maintain some state — whether it is expanded or not. But <code>AccordionHeader</code> will also need access to this value, so that it can show the appropriate toggle button. And <code>AccordionPanel</code> may also need to access this, since it is the thing being expanded and collapsed.</p>
<p>One possibility is exposing the expanded value to your user through render props and making sure your documentation lets them know that they need to pass that down to the header and panel components.</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem render={({ expanded }) =&gt; (
    &lt;AccordionHeader expanded={expanded}&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel expanded={expanded}&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  )} /&gt;
&lt;/Accordion&gt;
</code></pre>
<p>While this may seem like a decent solution at first, it’s not ideal that the consumer of our component has to worry about the component internals. The fact that <code>AccordionHeader</code> and <code>AccordionPanel</code> need access to the expanded state should not be something our user has to be concerned about.</p>
<p>It should also be noted that while this is a trivial example, your component may be far more complex, with multiple levels of nested components, in which case prop drilling may become quite tedious.</p>
<p>What we really need is a way to <em>implicitly</em> pass down props.</p>
<h2>Using React Context</h2>
<p>There is a better solution for cases like this: React Context. We can use the Context API to create some state and provide it where needed behind the scenes, removing this concern from our public-facing API.</p>
<p>First, we will create a context and define the <em>shape</em> of that context. We will start with an <code>expanded</code> value and a <code>toggleExpansion</code> method. We are defining this context as specifically relevant to our accordion item:</p>
<pre><code class="language-jsx">const AccordionItemContext = React.createContext({
  expanded: false,
  toggleExpansion: () =&gt; {}
})
</code></pre>
<p>Now, inside our <code>AccordionItem</code> component, we will define the <code>expanded</code> and <code>toggleExpansion</code> values and feed them in as the value of the <code>Provider</code> component.</p>
<pre><code class="language-jsx">class AccordionItem extends React.Component {
  constructor(props) {
    super(props)

    this.toggleExpansion = () =&gt; {
      this.setState({
        expanded: !this.state.expanded
      });
    }

    this.state = {
      expanded: false,
      toggleExpansion: this.toggleExpansion
    }
  }

  render() {
    return (
      &lt;AccordionItemContext.Provider value={this.state}&gt;
        &lt;div className=&quot;accordion-item&quot;&gt;
          {this.props.children}
        &lt;/div&gt;
      &lt;/AccordionItemContext.Provider&gt;
    )
  }
}
</code></pre>
<p>The <code>Provider</code> is one half of the React Context equation. The other half is the <code>Consumer</code>. The <code>Provider</code> allows the <code>Consumer</code> to subscribe to context changes, as we will see soon.</p>
<p>Next, we need to set up <code>AccordionHeader</code> and <code>AccordionPanel</code> as consumers of this context:</p>
<pre><code class="language-jsx">const AccordionHeader = props =&gt; {
  return (
    &lt;AccordionItemContext.Consumer&gt;
      {({ expanded, toggleExpansion }) =&gt; (
        &lt;h2 className=&quot;accordion-header&quot;&gt;
          &lt;button onClick={toggleExpansion}&gt;
            {expanded ? &#x27;→ &#x27; : &#x27;↓ &#x27;}
            {props.children}
          &lt;/button&gt;
        &lt;/h2&gt;
      )}
    &lt;/AccordionItemContext.Consumer&gt;
  )
}
</code></pre>
<p>The <code>Consumer</code> component requires a function as its child. This function will receive the context value, which we are destructuring into <code>expanded</code> and <code>toggleExpansion</code>. Our component is then able to use these values in its template.</p>
<p>We will similarly use <code>Consumer</code> to give <code>AccordionPanel</code> access to the context value:</p>
<pre><code class="language-jsx">const AccordionPanel = props =&gt; {
  return (
    &lt;AccordionItemContext.Consumer&gt;
      {({ expanded }) =&gt;
        &lt;div className={
          &#x27;accordion-panel &#x27; +
          (expanded ? &#x27;expanded&#x27; : &#x27;&#x27;)
        }&gt;
          {props.children}
        &lt;/div&gt;
      }
    &lt;/AccordionItemContext.Consumer&gt;
  )
}
</code></pre>
<p>Now, we really can achieve our ideal API for the accordion component. Users of our component won’t have to worry about passing state up or down the component tree. Those component internals are hidden from them:</p>
<pre><code class="language-jsx">&lt;Accordion&gt;
  &lt;AccordionItem&gt;
    &lt;AccordionHeader&gt;
      Header content
    &lt;/AccordionHeader&gt;
    &lt;AccordionPanel&gt;
      Panel content
    &lt;/AccordionPanel&gt;
  &lt;/AccordionItem&gt;
&lt;/Accordion&gt;
</code></pre>
<h2>Provide/Inject in Vue</h2>
<p>Vue provides a similar tool to React’s Context API, called provide/inject. To use this, we will use the <code>provide</code> method on our <code>accordion-item</code> Vue component:</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-item&#x27;, {
  data() {
    return {
      sharedState: {
        expanded: false
      }
    }
  },

  provide() {
    return {
      accordionItemState: this.sharedState
    }
  },

  render(createElement) {
    return createElement(
      &#x27;div&#x27;,
      { class: &#x27;accordion-item&#x27; },
      this.$slots.default
    )
  }
})
</code></pre>
<p>We return an object from <code>provide()</code> that contains the state we want to provide to other components. Note that we are passing an object to <code>accordionItemState</code>, rather than simply passing the <code>expanded</code> value. In order to be reactive, provide must pass an object.</p>
<p>Note that we are using a render function here to create this component, but this is not necessary to use provide/inject.</p>
<p>Now, we will inject this state into our child components. We will simply use the <code>inject</code> property, which accepts an array of strings corresponding to the properties of the object we defined in <code>provide</code>.</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-header&#x27;, {
  inject: [&#x27;accordionItemState&#x27;],

  template: html`
    &lt;h2 class=&quot;accordion-header&quot;&gt;
      &lt;button @click=&quot;accordionItemState.expanded = !accordionItemState.expanded&quot;&gt;
        {{ accordionItemState.expanded ? &#x27;→&#x27; : &#x27;→&#x27; }}
        &lt;slot&gt;&lt;/slot&gt;
      &lt;/button&gt;
    &lt;/h2&gt;
  `
})
</code></pre>
<p>Once we include the property name in <code>inject</code>, we have access to those values in our template.</p>
<pre><code class="language-javascript">Vue.component(&#x27;accordion-panel&#x27;, {
  inject: [&#x27;accordionItemState&#x27;],

  template: html`
    &lt;div
      class=&quot;accordion-panel&quot;
      :class=&quot;{ expanded: accordionItemState.expanded }&quot;
    &gt;
      &lt;slot&gt;&lt;/slot&gt;
    &lt;/div&gt;
  `
})
</code></pre>
<h2>Use with Caution</h2>
<p>It’s worth noting that you should only implicitly pass down props when it really makes sense. Doing this too much can obfuscate the real behavior of your components and cause confusion for other developers who may be working on your project.</p>
<p>A component library that is packaged up and distributed for use in other applications is a perfect use case for this, since the internal props of the components really don’t need to be exposed to the end user.</p>
<p>React Context and Vue’s provide/inject feature both make it possible to do this through implicit state sharing.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Input Types Cheat Sheet]]></title>
            <link>https://www.jonathanharrell.com/blog/input-types-cheat-sheet</link>
            <guid>https://www.jonathanharrell.com/blog/input-types-cheat-sheet</guid>
            <pubDate>Fri, 20 Jun 2025 19:59:00 GMT</pubDate>
            <description><![CDATA[Reference all the different text and temporal input types in HTML—like text, email, search, date, time and more, so you can choose the right ones to use in your forms.]]></description>
            <content:encoded><![CDATA[<p>The humble input field. Or maybe not so humble… This handy cheat sheet will help you quickly reference all the different text and temporal input types available in HTML. The next time you need to collect information from your users, make sure you are using the right input for the job.</p>
<h2>Text Inputs</h2>
<table><thead><tr><th>Name</th><th>Code</th><th>Example</th></tr></thead><tbody><tr><td>Text input</td><td><code>&lt;input type=&quot;text&quot; /&gt;</code></td><td><input type="text" placeholder="Enter text"/></td></tr><tr><td>Search input</td><td><code>&lt;input type=&quot;search&quot; /&gt;</code></td><td><input type="search" placeholder="Enter search term"/></td></tr><tr><td>Number input</td><td><code>&lt;input type=&quot;number&quot; /&gt;</code></td><td><input type="search" placeholder="1234"/></td></tr><tr><td>Email input</td><td><code>&lt;input type=&quot;email&quot; /&gt;</code></td><td><input type="email" placeholder="name@email.com" autoComplete="off"/></td></tr><tr><td>Password input</td><td><code>&lt;input type=&quot;password&quot; /&gt;</code></td><td><input type="password" placeholder="••••••••••" autoComplete="off"/></td></tr><tr><td>Telephone input</td><td><code>&lt;input type=&quot;tel&quot; /&gt;</code></td><td><input type="url" placeholder="999-999-9999"/></td></tr><tr><td>URL input</td><td><code>&lt;input type=&quot;url&quot; /&gt;</code></td><td><input type="url" placeholder="https://yoursite.com"/></td></tr></tbody></table>
<h2>Temporal Inputs</h2>
<table><thead><tr><th>Name</th><th>Code</th><th>Example</th></tr></thead><tbody><tr><td>Date input</td><td><code>&lt;input type=&quot;date&quot; /&gt;</code></td><td><input type="date"/></td></tr><tr><td>Time input</td><td><code>&lt;input type=&quot;time&quot; /&gt;</code></td><td><input type="time"/></td></tr><tr><td>Month input (Chrome/Edge only)</td><td><code>&lt;input type=&quot;month&quot; /&gt;</code></td><td><input type="month"/></td></tr><tr><td>Week input (Chrome/Edge only)</td><td><code>&lt;input type=&quot;week&quot; /&gt;</code></td><td><input type="week"/></td></tr><tr><td>Datetime input</td><td><code>&lt;input type=&quot;datetime-local&quot; /&gt;</code></td><td><input type="datetime-local"/></td></tr></tbody></table>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Dynamic SVGs in Light & Dark Mode]]></title>
            <link>https://www.jonathanharrell.com/blog/light-dark-mode-svgs</link>
            <guid>https://www.jonathanharrell.com/blog/light-dark-mode-svgs</guid>
            <pubDate>Sun, 25 May 2025 12:55:00 GMT</pubDate>
            <description><![CDATA[Learn how to make your SVG illustrations respond to light and dark mode using CSS variables—plus, a script to automate replacing hex values.]]></description>
            <content:encoded><![CDATA[<p>When supporting light and dark mode, you likely want your images to respond accordingly, showing both a light and dark version. The easiest way to do this is by providing two image sources and using the <code>picture</code> element to switch between them.</p>
<pre><code class="language-html">&lt;picture&gt;
  &lt;source
    media=&quot;(prefers-color-scheme: dark)&quot;
    srcset=&quot;./dark-mode-image.png&quot;
  &gt;
  &lt;source
    media=&quot;(prefers-color-scheme: light)&quot;
    srcset=&quot;./light-mode-image.png&quot;
  &gt;
  &lt;img src=&quot;./default-image.png&quot; alt=&quot;Image&quot;&gt;
&lt;/picture&gt;
</code></pre>
<p>However, this requires exporting and maintaining two versions of the image. When the image needs an update, you need to update and export two files. Additionally, if you ever decide to change your color scheme, you will need to update all of your image source files and export them again.</p>
<p>For SVGs in particular, there is a better way to respond to theme changes using CSS variables. The SVG must be loaded inline within your page’s HTML.</p>
<p>Here is an SVG I’ve exported from a graphics program (I’m using Sketch):</p>

<p>I want to replace the hex codes in this SVG with CSS variables that can respond to theme changes. However, I may need to re-export this image in the future, so I don’t want to do this manually. I need a repeatable way to easily replace the hex codes.</p>
<p>I’ve written a script to be run via the command line that will go through at all the SVGs in a particular directory, look for certain hex codes, and replace those with references to CSS variables.</p>
<pre><code class="language-javascript">const fs = require(&quot;fs&quot;);
const path = require(&quot;path&quot;);

const hexToCssVariables = {
  &quot;#fafafa&quot;: &quot;#27272a&quot;,
  &quot;#262626&quot;: &quot;#f5f5f5&quot;,
  &quot;#d4d4d4&quot;: &quot;#525252&quot;,
  &quot;#e6594c&quot;: &quot;#e6594c&quot;
};

const inputDir = path.join(
  __dirname,
  &quot;../content/illustrations&quot;
);
const outputDir = path.join(
  __dirname,
  &quot;../public/assets/illustrations&quot;
);

// Ensure output directory exists
if (!fs.existsSync(outputDir)) {
  fs.mkdirSync(outputDir, { recursive: true });
}

// Read all images from the input directory
fs.readdirSync(inputDir).forEach((file) =&gt; {
  const inputFile = path.join(inputDir, file);
  const outputFile = path.join(outputDir, file);

  if (inputFile.endsWith(&quot;.svg&quot;)) {
    fs.readFile(
      inputFile,
      &quot;utf-8&quot;,
      function (err, data) {
        if (err) throw err;

        let svgContent = data;

        // replace each hex code with a CSS variable reference
        Object.keys(hexToCssVariables).forEach((hex) =&gt; {
          const cssVar = hexToCssVariables[hex];
          const regex = new RegExp(hex, &quot;gi&quot;);
          svgContent = svgContent.replace(regex, cssVar);
        });

        // generate the new SVG file
        fs.writeFile(
          outputFile,
          svgContent,
          &quot;utf-8&quot;,
          function (err) {
            if (err) throw err;
          }
        );
      }
    );
  }
});
</code></pre>
<p>I have the CSS variables defined in my styles and have set them up to change based on the presence of a <code>dark</code> class on my root element.</p>
<pre><code class="language-css">:root {
  --accent: #ff6354;

  --illustration-accent: var(--accent);
  --illustration-background: #fafafa;
  --illustration-black: #262626;
  --illustration-gray: #d4d4d4;
}

.dark {
  --accent: #e6594c;

  --illustration-background: #27272a;
  --illustration-black: #f5f5f5;
  --illustration-gray: #525252;
}
</code></pre>
<p>Now, the SVG will respond perfectly to changes in my theme, and I only have to maintain a single file for each image. I export all my SVGs to a <code>content</code> directory, then run my script to generate the final files in the <code>public</code> directory. If I decide to drastically update my theme in the future, I don’t have to manually update all the source files; just a quick change of a few variables, and I’m good to go!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Live Theming with CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/live-theming-with-css-variables</link>
            <guid>https://www.jonathanharrell.com/blog/live-theming-with-css-variables</guid>
            <pubDate>Sat, 19 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[CSS variables are opening up exciting new possibilities, like creating a very performant live theme editor that dynamically updates CSS values.]]></description>
            <content:encoded><![CDATA[<p>CSS variables, now enjoying fairly good <a href="https://caniuse.com/#search=css%20variables" target="_blank" rel="noreferrer">browser support</a>, are opening up exciting possibilities for more dynamic styling. Having true CSS variables means that we can get and set their values using JavaScript, allowing us to build exciting features like live theming.</p>
<p>The process is fairly simple—set up initial variable values in CSS, mark up some inputs, add event listeners and set the values in JavaScript. Let’s get started!</p>
<h2>Set Up Initial Values</h2>
<p>First we’ll set up the variables and their initial values in the <code>:root</code> pseudo-class. In HTML, <code>:root</code> represents the <code>html</code> element.</p>
<pre><code class="language-css">:root {
  --background-color: #FFFFFF;
  --text-color: #101727;
}
</code></pre>
<p>Now we can write some styles using these variables. Think about using these values as a base and generating other values in your styles from them. This will let you create fewer variables while still giving the user the power to affect the entire document.</p>
<pre><code class="language-css">body {
  background-color: var(--background-color);
  color: var(--text-color);
}
</code></pre>
<p>You may also want to add some transitions for the properties that will be changing to smooth out the theme editing experience.</p>
<h2>Create Some Inputs</h2>
<p>Now it’s time to create the form that the user will be interacting with to customize their theme. I’m using color inputs for the color options and range inputs for the font size and line height.</p>
<pre><code class="language-html">&lt;input type=&quot;color&quot; id=&quot;background-color&quot; value=&quot;#FFFFFF&quot;&gt;
&lt;input type=&quot;color&quot; id=&quot;text-color&quot; value=&quot;#OOOOO&quot;&gt;
</code></pre>
<p>Set your initial input values to match the starting values of your CSS variables. You could also set these through JavaScript on page load to remain DRY.</p>
<h2>Set up Event Listeners</h2>
<p>I’m setting up listeners for the “change” event for color inputs, and the “input” event for range inputs. I’ve extracted the logic to a separate function called <code>handleInputChange</code> so that I can reuse it for all the inputs.</p>
<pre><code class="language-javascript">const handleInputChange = (event, property) =&gt; {
  document.documentElement.style.setProperty(
    `--${property}`,
    event.target.value
  );
};

document.getElementById(&#x27;background-color&#x27;)
  .addEventListener(&#x27;change&#x27;, event =&gt; {
    handleInputChange(&#x27;background-color&#x27;);
  });
</code></pre>
<p>That’s all it takes to set up basic interactive theming with CSS variables. We can go a step further and keep these values in localStorage so the theme settings will persist on refresh.</p>
<h2>Store Values in localStorage</h2>
<p>I’ll edit my <code>handleInputChange</code> function to store values in <code>localStorage</code>:</p>
<pre><code class="language-javascript">const handleInputChange = (event, property) =&gt; {
  document.documentElement.style.setProperty(
    `--${property}`,
    event.target.value
  );

  localStorage.setItem(property, newValue);
};
</code></pre>
<p>Next, I’ll need to add some functionality to grab the values from <code>localStorage</code> and set them on page load. I will need to set both the CSS variable and the input value so that everything is consistent. Once again, I’ve extracted the logic to a separate function.</p>
<pre><code class="language-javascript">const setValueFromLocalStorage = property =&gt; {
  const value = localStorage.getItem(property);
  document.documentElement.style.setProperty(
    `--${property}`,
    value
  );

  const input = document.getElementById(property);
  input.value = value;
}

document.addEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; {
  setValueFromLocalStorage(&#x27;background-color&#x27;);
});
</code></pre>
<p>Now, refresh your page to see a persistent theme!</p>
<h2>Bonus: Pre-Defined Themes</h2>
<p>If you want to offer some pre-defined themes, in addition to the free-form inputs, simply create a method that sets all the variables to pre-defined values and hook it up to an event listener.</p>
<p>I’ve created a <code>setTheme</code> function that accepts an options object, loops through the object keys, and sets the values. I’ve reworked the function that actually sets the values a bit so it’s more generic.</p>
<p>Now, I just need to call this function with the values I want to set on the appropriate trigger:</p>
<pre><code class="language-javascript">setTheme({
  &#x27;background-color&#x27;: &#x27;#FFFFFF&#x27;,
  &#x27;text-color&#x27;: &#x27;#101727&#x27;
});
</code></pre>
<p>CSS variables make live theming easy. Hopefully this gets you started playing around with the fun things that CSS variables make possible. You can learn more about CSS variables in <a href="https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties/" target="_blank" rel="noreferrer">my article here</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Semantic Image Overlays With Object-Fit]]></title>
            <link>https://www.jonathanharrell.com/blog/semantic-image-overlays-with-object-fit</link>
            <guid>https://www.jonathanharrell.com/blog/semantic-image-overlays-with-object-fit</guid>
            <pubDate>Sun, 27 Aug 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn how to use CSS grid and the object-fit property to create an image grid with overlays that is semantic and great for SEO.]]></description>
            <content:encoded><![CDATA[<p>Think of how many times you have coded a grid of images with an overlay that appears on hover and displays some sort of text. With the <code>object-fit</code> property getting wider support, there is now a clean, semantic way to do this.</p>

<h2>Without object-fit</h2>
<p>Here’s how I used to accomplish this:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post-teaser&quot;&gt;
  &lt;div
    class=&quot;image&quot;
    style=&quot;background-image: url(...)&quot;
  &gt;&lt;/div&gt;
  &lt;div class=&quot;overlay&quot;&gt;
    &lt;h2&gt;
      &lt;a href=&quot;...&quot;&gt;
        Article Title
      &lt;/a&gt;
    &lt;/h2&gt;
  &lt;/div&gt;
&lt;/article&gt;
</code></pre>
<p>The markup involved an <code>article</code> containing a <code>div</code> with a background image applied, and an overlay <code>div</code> that contained the text that needed to sit on top of the image. I would then absolutely position both the image and the overlay. The size of the <code>div</code> would be determined by a percentage padding trick on the article:</p>
<pre><code class="language-css">.blog-post-teaser {
  position: relative;
  padding: 30% 0;
}

.blog-post-teaser .image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.blog-post-teaser .overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
</code></pre>
<p>The key downside with this approach is that it’s not as semantic as it could be. The image for each article seems like a pretty important piece of content, and the browser doesn’t know that it’s an image. And we can’t feed in <code>alt</code> tags to help with SEO.</p>
<p>How do we improve semantics while retaining control of the image sizing? Enter <code>object-fit</code>.</p>
<h2>With object-fit</h2>
<p>Here’s what my markup looks like now:</p>
<pre><code class="language-html">&lt;article class=&quot;blog-post-teaser&quot;&gt;
  &lt;figure&gt;
    &lt;img src=&quot;...&quot; alt=&quot;...&quot;&gt;
    &lt;figcaption&gt;
      &lt;h2&gt;
        &lt;a href=&quot;...&quot;&gt;
          Article Title
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/article&gt;
</code></pre>
<p>Now the browser knows we’re serving up an image. It even knows that the article title is both a heading for the article and a caption for the image. Search engines can now access alt text. Let’s look at the styling:</p>
<pre><code class="language-css">.blog-post-teaser figure {
  position: relative;
  padding: 30% 0;
}

.blog-post-teaser figcaption {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.blog-post-teaser img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
</code></pre>
<p>It’s almost identical, only that now we’re using the <code>img</code> element and applying the <code>object-fit</code> property. This works the exact same way as setting <code>background-size: cover</code>. The image will fill the specified space.</p>
<p>Now the browser knows we’re serving up an image. Search engines can properly access alternative text.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[System-Based Theming with Styled Components]]></title>
            <link>https://www.jonathanharrell.com/blog/system-based-theming-with-styled-components</link>
            <guid>https://www.jonathanharrell.com/blog/system-based-theming-with-styled-components</guid>
            <pubDate>Thu, 09 Apr 2020 20:18:26 GMT</pubDate>
            <description><![CDATA[Learn how to support system-based theming in Styled Components, while allowing a user to select their preferred theme and persist that choice.]]></description>
            <content:encoded><![CDATA[<p>Most operating systems these days support a system-wide light/dark mode toggle, and we may want our web sites and applications to take on a corresponding mode, essentially inheriting their color scheme from the system on which they are being viewed. Let’s take a look at how to implement this, and how it would integrate with a CSS-in-JS theming system such as Styled Components.</p>
<p>Detecting a user’s system theme involves either using the <code>prefers-color-scheme</code> media query in CSS, or checking the media feature in JavaScript. <a href="https://caniuse.com/#search=prefers-color-scheme" target="_blank" rel="noreferrer">Browser support for these features</a> is fairly good.</p>
<h2>Basic System Theming</h2>
<p>Let’s look at a basic implementation where we swap the <code>theme</code> object passed to Styled Component’s <code>ThemeProvider</code> component based on the detected system theme.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
const { ThemeProvider } from &quot;styled-components&quot;;

// set up theme colors
const themes = {
  light: {
    colors: {
      text: &quot;black&quot;,
      background: &quot;white&quot;
    }
  },
  dark: {
    colors: {
      text: &quot;white&quot;,
      background: &quot;black&quot;
    }
  }
};

// set up styled components to use theme colors
const Wrap = styled.div`
  background-color: ${({ theme }) =&gt; theme.colors.background};
`;

const Heading = styled.h1`
  color: ${({ theme }) =&gt; theme.colors.text};
`;

const P = styled.p`
  color: ${({ theme }) =&gt; theme.colors.text};
`;

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(
  &quot;(prefers-color-scheme: dark)&quot;
);

const App = () =&gt; {
  // perform an initial detection of system theme
  const [theme, setTheme] = useState(
    darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );


  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setTheme(event.matches ? &quot;dark&quot; : &quot;light&quot;);
    });
  });

  // pass the correct theme object to the provider
  return (
    &lt;ThemeProvider theme={themes[theme]}&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;P&gt;Change your system theme to see this page respond&lt;/P&gt;
      &lt;/Wrap&gt;
    &lt;/ThemeProvider&gt;
  );
};

export default App;
</code></pre>
<p>This approach is straightforward and feels very natural to Styled Components. However, if our app is server-side rendered but a user has JavaScript disabled, the app will not respond to system theme changes.</p>
<h2>Supporting Disabled JavaScript with CSS Variables</h2>
<p>We can enable our app to respond to the system theme even without JavaScript enabled (in cases where the app is server-side rendered) by taking a slightly different approach. Instead of storing our light and dark theme as separate styled component themes, we will use CSS variables, and override them with a media query.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { createGlobalStyle, ThemeProvider, css } from &quot;styled-components&quot;;

// set up color values that will be used across both light and dark themes
const theme = {
  colors: {
    black: &quot;black&quot;,
    white: &quot;white&quot;
  }
};

// set up light theme CSS variables
const lightValues = css`
  --text: ${({ theme }) =&gt; theme.colors.black};
  --background: ${({ theme }) =&gt; theme.colors.white};
`;

// set up dark theme CSS variables
const darkValues = css`
  --text: ${({ theme }) =&gt; theme.colors.white};
  --background: ${({ theme }) =&gt; theme.colors.black};
`;

const GlobalStyle = createGlobalStyle`
  :root {
    /* define light theme values as the defaults within the root selector */
    ${lightValues}

    /* override with dark theme values within media query */
    @media (prefers-color-scheme: dark) {
      ${darkValues}
    }
  }
`;

// set up styled components to use CSS variables
const Wrap = styled.div`
  background-color: var(--background);
`;

const Heading = styled.h1`
  color: var(--text);
`;

const P = styled.p`
  color: var(--text);
`;

const App = () =&gt; (
  &lt;ThemeProvider theme={theme}&gt;
    &lt;&gt;
      &lt;GlobalStyle /&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;P&gt;Change your system theme to see this page respond&lt;/P&gt;
      &lt;/Wrap&gt;
    &lt;/&gt;
  &lt;/ThemeProvider&gt;
);

export default App;
</code></pre>
<p>Now, when server-side rendered, our theme will change even without JavaScript enabled, since a CSS media query is now controlling the theme values.</p>
<h2>Custom Theme Overrides</h2>
<p>There are some cases where you may want to allow a user to manually change the theme, overriding what the app inherited from the system by default. Let’s look at how we might achieve this using our initial simpler example. We will need to add a theme toggle method that will update our theme state.</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { ThemeProvider } from &quot;styled-components&quot;;

// ...set up themes and styled components

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(&quot;(prefers-color-scheme: dark)&quot;);

const App = () =&gt; {
  // perform an initial detection of system theme
  const [activeTheme, setActiveTheme] = useState(
    darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );

  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setActiveTheme(
        event.matches ? &quot;dark&quot; : &quot;light&quot;
      );
    });
  });

  // set up a theme toggle method that will update our state when a user clicks the button
  const toggleTheme = () =&gt; {
    setActiveTheme(
      activeTheme === &quot;dark&quot; ? &quot;light&quot; : &quot;dark&quot;
    )
  }

  // pass the correct theme object to the provider
  return (
    &lt;ThemeProvider theme={themes[activeTheme]}&gt;
      &lt;Wrap&gt;
        &lt;Heading&gt;System Theming&lt;/Heading&gt;
        &lt;Button onClick={toggleTheme}&gt;
          Change theme to {activeTheme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;}
        &lt;/Button&gt;
      &lt;/Wrap&gt;
    &lt;/ThemeProvider&gt;
  );
};

export default App;
</code></pre>
<h2>Persistent Custom Theme Overrides</h2>
<p>What if we want the user’s custom theme override to be persisted between sessions? We’ll need to bring in some logic to interact with <code>localStorage</code> in order to set and retrieve the user’s preference.</p>
<p>Let’s look at a full example that uses CSS variables, supports custom overrides, and persists those overrides between sessions:</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;
import { createGlobalStyle, ThemeProvider, css } from &quot;styled-components&quot;;

// set up color values that will be used across both light and dark themes
const theme = {
  colors: {
    black: &quot;black&quot;,
    white: &quot;white&quot;
  }
};

// set up light theme CSS variables
const lightValues = css`
  --text: ${({ theme }) =&gt; theme.colors.black};
  --background: ${({ theme }) =&gt; theme.colors.white};
`;

// set up dark theme CSS variables
const darkValues = css`
  --text: ${({ theme }) =&gt; theme.colors.white};
  --background: ${({ theme }) =&gt; theme.colors.black};
`;

const GlobalStyle = createGlobalStyle`
  :root {
    /* define light theme values as the defaults within the root selector */
    ${lightValues}

    /* override with dark theme values if theme data attribute is set to dark */
    [data-theme=&quot;dark&quot;] {
      ${darkValues}
    }

    /* support no JavaScript scenario by using media query */
    &amp;.no-js {
      @media (prefers-color-scheme: dark) {
        ${darkValues}
      }
    }
  }
`;

// set up styled components to use CSS variables
const Wrap = styled.div`background-color: var(--background);`;

const Heading = styled.h1`
  color: var(--text);
`;

const P = styled.p`
  color: var(--text);
`;

// set up detection of system dark mode
const darkModeQuery = window.matchMedia(
  &quot;(prefers-color-scheme: dark)&quot;
);

// find saved theme
const savedTheme = localStorage.getItem(&quot;theme&quot;);

const App = () =&gt; {
  // set active theme to saved theme, if there is one
  // otherwise, set to system theme
  const [activeTheme, setActiveTheme] = useState(
    savedTheme
      ? savedTheme
      : darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;
  );

  // set up a listener to respond to future changes of system theme
  useEffect(() =&gt; {
    darkModeQuery.addListener((event) =&gt; {
      setActiveTheme(
        event.matches ? &quot;dark&quot; : &quot;light&quot;
      );
    });
  }, []);

  // every time the active theme changes, set the theme data attribute
  useEffect(() =&gt; {
    document.body.setAttribute(
      &quot;data-theme&quot;,
      activeTheme
    );
  }, [activeTheme]);

  // set up a theme toggle method that will update our state when a user clicks the button
  // and save the new theme in localStorage
  const toggleTheme = () =&gt; {
    const newTheme = activeTheme === &quot;light&quot;
      ? &quot;dark&quot;
      : &quot;light&quot;;

    setActiveTheme(newTheme);
    localStorage.setItem(&quot;theme&quot;, newTheme);
  };

  return (
    &lt;ThemeProvider theme={theme}&gt;
      &lt;&gt;
        &lt;GlobalStyle /&gt;
        &lt;Wrap&gt;
          &lt;Heading&gt;System Theming&lt;/Heading&gt;
          &lt;Button onClick={toggleTheme}&gt;
            Change theme to {activeTheme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;}
          &lt;/Button&gt;
          &lt;P&gt;Refresh to see the persisted preference&lt;/P&gt;
        &lt;/Wrap&gt;
      &lt;/&gt;
    &lt;/ThemeProvider&gt;
  );
};
</code></pre>
<p>Now, instead of using a media query to override CSS variable values, we use a data attribute set on the document body. This allows theme overrides to work.</p>
<p>Note that we support responding to system theme changes without JavaScript by using a <code>no-js</code> class and falling back to a media query. Of course, this won’t support custom overrides of the theme.</p>
<h2>Preventing the Default Theme Flash</h2>
<p>There is one remaining problem with this implementation when used with server-side rendering. Since we are no longer using a media query, but rather a data attribute to set the theme, we get an initial default themed flash of content, before our app has a chance to actually detect and set the theme. We will need to relocate our theme-setting code to the <code>head</code> of the document, before the HTML has actually rendered.</p>
<p>We can store the theme and the theme toggle method on the window so that our React app will then have access to it. This code looks a bit messier, but it supports all of our use cases and prevents the annoying default themed flash.</p>
<p>In <code>head</code>:</p>
<pre><code class="language-javascript">(function () {
  // set up method to set theme value on window, set data attribute,
  // and dispatch a custom event indicating the theme change
  function setTheme(newTheme) {
    window.__theme = newTheme;
    preferredTheme = newTheme;

    document.body.setAttribute(
      &quot;data-theme&quot;,
      newTheme
    );

    window.dispatchEvent(
      new CustomEvent(&quot;themeChange&quot;, {
        detail: newTheme
      })
    );
  }

  // grab the saved theme
  var preferredTheme = localStorage.getItem(&quot;theme&quot;);

  // set up method to set the active theme to the user’s preferred theme
  // and save that theme for persistence
  window.__setPreferredTheme = function (newTheme) {
    setTheme(newTheme);
    localStorage.setItem(&quot;theme&quot;, newTheme);
  };

  // set up detection of system dark mode
  var darkModeQuery = window.matchMedia(
    &quot;(prefers-color-scheme: dark)&quot;
  );

  // set up a listener to respond to future changes of system theme
  darkModeQuery.addListener(function (event) {
    window.__setPreferredTheme(
      event.matches ? &quot;dark&quot; : &quot;light&quot;
    );
  });

  // set active theme to saved theme, if there is one, or the system theme
  setTheme(
    preferredTheme ||
    (darkModeQuery.matches ? &quot;dark&quot; : &quot;light&quot;)
  );
})();
</code></pre>
<p>In our app:</p>
<pre><code class="language-jsx">import { useState, useEffect } from &quot;react&quot;;

// ...set up CSS variables and styled components

const App = () =&gt; {
  const [activeTheme, setActiveTheme] = useState();

  useEffect(() =&gt; {
    // set initial theme based on value set on window
    setActiveTheme(window.__theme);

    // set up listener for custom theme change event
    window.addEventListener(&quot;themeChange&quot;, (event) =&gt; {
      setActiveTheme(event.detail);
    });
  }, []);

  // allow user to manually change their theme
  const toggleTheme = (theme) =&gt; {
    window.__setPreferredTheme(theme);
  };

  // ...render content
});

export default App;
</code></pre>
<h2>Conclusion</h2>
<p>Thanks to improving browser support for the detection of system themes, it has never been easier to implement a theme for your application or website that responds to your users’ operating system themes. With a bit of extra code, you can also enable user-chosen theme overrides. This will go a long way in creating a more customizable and comfortable experience for your users.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Typographic Details - Using Correct Spaces and Punctuation]]></title>
            <link>https://www.jonathanharrell.com/blog/typographic-details-cheat-sheet</link>
            <guid>https://www.jonathanharrell.com/blog/typographic-details-cheat-sheet</guid>
            <pubDate>Sun, 20 Apr 2025 11:57:00 GMT</pubDate>
            <description><![CDATA[Learn how to use the correct spaces, punctuation, and special characters to create precise, elegant web typography.]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>One of the principles of durable typography is always legibility; another is something more than legibility: some earned or unearned interest that gives its living energy to the page. It takes various forms and goes by various names, including serenity, liveliness, laughter, grace and joy.
<cite>Robert Bringhurst</cite></p>
</blockquote>
<p>Welcome to this quick cheat sheet that will you help you know which spaces, punctuation and characters to use to make your web typography great! Much of this content has been adapted from Richard Rutter&#x27;s excellent handbook <a href="https://book.webtypography.net/" target="_blank" rel="noreferrer">Web Typography</a>.</p>
<h2>Use the right spaces</h2>
<h3>Non-breaking space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The text “Page 2” using a non-breaking space between the word and the number. The space is emphasized with a tall red rectangle and spacing marker." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(115.5 132.013889)"><path d="m112.64 41.1461111c0-18.26-11.88-33.21999999-31.02-38.27999999-8.58-2.2-13.86-2.86-29.26-2.86-17.16 0-33-.22-50.6 1.98-1.32 0-1.76 1.98-1.76 3.74.22 1.54.88 3.3 1.76 3.08l11-.22c8.8-.22 10.56 3.73999999 10.56 17.81999999v101.4199999c0 8.36-3.08 9.02-13.42 9.02-3.3 0-6.38.66-6.6 4.84 0 1.1.22 1.98.66 2.86.44.66.88 1.32 3.96 1.32 15.62-.44 44-.44 61.16.22 3.08.66 3.96-8.14.22-9.24-2.86-.66-4.84 0-7.7 0-13.2.22-16.94-1.76-16.94-13.64v-33.6599999c.22-1.98.88-5.06 2.2-4.84 4.18.66 5.72 1.1 11 1.1 34.54 0 54.78-17.16 54.78-44.66zm-23.32-.66c0 22.88-10.34 38.28-33 38.28-3.74 0-5.06-.22-8.58-.88-1.54-.44-3.08-1.76-3.08-3.74v-62.04c0-1.76.44-4.83999999 2.2-5.05999999 9.68-1.32 18.7-1.1 27.5 3.73999999 9.24 4.84 14.96 15.62 14.96 29.7z"></path><path d="m208.78 134.866111c.66-1.76.88-5.06-1.54-5.5-1.1 0-1.32.22-1.98.66-2.2 1.98-3.96 2.86-5.28 3.3-1.32.66-2.42.66-3.96.66-3.08 0-4.84-1.54-4.84-10.78v-40.0399999c0-13.86-.22-15.62-3.74-20.46-5.06-7.26-15.18-12.54-24.64-12.54-7.04 0-12.54 2.42-20.68 9.02-8.58 6.6-13.86 13.2-13.86 18.7 0 4.18 1.32 4.62 5.06 3.3 1.54-.44 11.66-4.84 13.2-6.6-.88-1.98-.66-3.3-.66-5.28 0-5.06 7.92-9.9 12.54-9.9 9.24 0 14.74 7.04 14.96 19.8l.22 14.08c0 2.2-1.76 3.52-2.42 3.96-7.48 3.5199999-12.98 5.9399999-20.9 8.1399999-15.18 3.96-23.32 11.22-23.32 22.44 0 11.66 8.8 19.8 21.34 19.8 8.36 0 12.98-2.2 22.44-10.34.66-.44 2.86-3.08 3.3-1.1 1.32 7.7 5.06 11.44 11.44 11.44 5.5 0 14.3-4.84 23.32-12.76zm-35.42-9.46c-1.76 5.06-12.98 11.66-17.38 11.66-6.82 0-12.1-5.28-12.1-12.1 0-5.94 3.08-9.9 11.88-13.42 5.28-2.2 10.56-4.4 15.62-6.82 1.98-1.1 1.98 3.52 1.98 4.4z"></path><path d="m311.74 160.386111c0-9.46-3.3-16.72-11.22-20.24-10.12-4.62-21.56-4.84-34.76-5.06-27.28-.22-27.28-3.96-27.28-6.16 0-1.98 1.76-3.74 4.18-5.72 1.98-1.76 4.62-3.52 6.16-5.72 3.08.88 5.94 1.32 9.02 1.32 21.34 0 37.18-13.64 37.18-33.4399999 0-4.18-.22-6.6-1.98-11-.22-.66 1.54-1.98 2.2-1.76 4.62.66 12.32 1.54 13.64 1.54 1.76 0 1.98-1.54 2.2-2.86.22-3.74-.22-7.04-.66-10.78-.22-3.3-1.1-3.52-4.18-3.08-5.72.88-18.7 2.42-20.02 2.42h-1.76c-5.72-6.16-13.86-9.24-23.32-9.24-20.68 0-36.96 15.84-36.96 36.74 0 12.32 6.38 21.7799999 17.38 27.2799999 1.1.66-2.2 2.42-2.64 2.86-2.2 1.1-3.3 1.98-6.82 3.96-4.84 2.64-9.24 5.5-9.24 9.46 0 6.16 3.52 12.1 15.4 16.28 1.1.44.22 2.64-1.1 3.74-1.76 1.1-3.52 1.98-5.28 3.3-7.92 5.28-13.42 10.78-13.42 21.56 0 15.18 20.68 24.2 35.42 24.2 31.46 0 57.86-17.16 57.86-39.6zm-33-73.6999999c0 15.6199999-7.7 24.4199999-18.48 24.4199999-11 0-19.8-10.56-19.8-28.5999999 0-14.08 7.7-24.64 18.04-24.64 11.44 0 20.24 11.88 20.24 28.82zm20.02 79.6399999c0 11.22-18.7 22.44-32.78 22.44-16.06 0-31.68-7.48-31.46-18.92 0-5.72 7.48-12.98 11.44-16.94 1.32-1.32 2.42-2.42 2.86-3.3 9.68.44 15.84 0 25.52.66 18.7 1.54 24.42 6.16 24.42 16.06z"></path><path d="m407.66 84.2661111c.22-1.54.22-2.2-.22-3.52-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.9399999 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.1599999 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.7c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m563.42 111.986111c.22-1.32-1.1-1.98-2.42-2.2s-2.86 0-3.74.88c-2.42 6.38-4.62 10.78-6.38 13.86-2.42 4.4-3.96 4.84-9.46 5.06-12.1.44-24.2.22-36.08.22-.88 0-1.76-.44-1.98-.88-.44-.66-.44-1.1 0-1.54 17.82-12.54 47.74-33.8799999 47.74-56.7599999 0-14.52-13.64-25.74-30.36-25.74-14.74 0-25.52 5.94-38.94 21.12-1.76 3.74 3.96 4.84 4.84 3.96 9.68-8.8 16.94-12.1 25.52-12.1 12.54 0 21.56 8.8 21.56 21.34 0 9.24-5.06 17.6-18.7 29.6999999-11.22 9.9-21.78 18.04-40.26 30.8-.88 1.1-1.32 5.28.44 6.16h72.82 1.98c2.2 0 5.28-.44 5.94-3.08z"></path></g><g fill="#e6594c"><path d="m524 133h64v145h-64z" fill-opacity="0.25"></path><path d="m524 316h-1v-9h1v4h64v-4h1v9h-1v-4h-64z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a non-breaking space to keep words together on the same line. This prevents awkward line breaks between closely related elements, such as labels and numbers.</p>
<pre><code class="language-html">Page&amp;nbsp;2.
</code></pre>
<h3>Thin space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The word “you” followed by a closing single and double quotation mark, with a thin space placed between them, highlighted in red." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(133.862966 132.32)"><path d="m102.857034 62.48c-.44-2.42-2.42-1.98-4.18-1.98-6.82-.44-23.76-.22-31.68.22-.66 0-1.32-.22-1.76 0-2.86.22-1.98 5.72-.66 6.38 11.22.22 13.42 2.42 13.42 7.92 0 2.2-.88 5.72-1.98 9.02-1.1 3.52-2.42 6.82-3.3 9.02l-13.2 33.66c-.22.66-2.86 4.4-3.52 2.86-6.6-16.5-12.98-33.22-20.24-49.28-1.98-4.4-2.42-6.16-2.42-7.7 0-3.3 1.54-5.28 11.44-5.5 1.1-.22 1.76-3.3 1.32-5.28-.66-2.2-2.42-1.76-4.18-1.76-10.56.22-28.16 1.1-37.40000002.44-1.98-.22-3.74-.44-4.4 1.98-.44 1.76.44 4.4 1.32 4.62 10.34000002.88 11.44000002 1.54 19.58000002 20.9l27.94 66.44-3.08 10.12c-5.5 17.82-11 24.42-19.8 26.84-7.04 1.76-11 4.4-11 9.46 0 5.28 4.84 9.9 10.34 9.9 3.74 0 7.7-1.54 10.12-4.62 3.08-3.74 5.5-7.7 7.92-13.42 2.64-5.94 5.28-13.2 9.24-23.54l27.28-73.48c9.02-23.98 12.76-27.5 21.56-28.6.88 0 1.76-2.86 1.32-4.62z"></path><path d="m210.657034 107.36c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z"></path><path d="m329.017034 145.86c2.64-.44 2.42-7.48-.22-7.04-1.32.44-3.08.88-4.62 1.32-4.4 1.1-9.46 1.98-9.46-4.84v-6.82-69.96c0-2.86-1.98-3.74-4.4-3.52-7.92.88-22.44 3.96-31.46 5.94-1.76.44-2.2 4.62-.44 5.72 4.4.66 6.16.88 7.26 1.1 1.32.44 1.98.22 4.84.88 3.74.66 5.72 3.52 6.6 7.04.88 4.18.66 8.58.66 12.98v38.06c0 1.76-.88 3.96-.88 4.18-8.58 6.82-17.82 11-24.64 11-14.74 0-19.36-5.94-19.36-29.7v-52.8c0-1.76-.88-4.62-3.52-4.18-7.7 1.54-20.68 5.06-27.5 6.6-2.64.66-1.1 5.28 0 5.5 2.86.88 5.94 1.54 8.8 2.42 4.4 1.32 4.84 3.74 4.84 8.14v46.64c0 18.7 7.7 30.36 24.86 30.36 13.64 0 24.86-8.36 35.42-16.06.88-.88 1.54 2.64 1.54 3.3l.44 8.58c.22 4.18 2.86 3.74 6.16 3.08 7.48-1.54 18.48-5.06 25.08-7.92z"></path><path d="m378.737034 19.36c0-11.22-7.04-19.36-16.72-19.36-7.04 0-12.76 5.28-12.76 12.32 0 6.38 4.4 11.22 10.56 11.22 1.76 0 3.3-.44 4.84-.88 2.2-.44 2.42 1.76 2.42 3.52 0 7.04-5.5 14.52-16.5 20.9-1.98 1.32-1.32 3.96 0 5.5 1.1 1.32 3.52.44 4.84-.22 13.86-6.6 23.32-19.8 23.32-33z"></path><path d="m520.452268 19.36c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22 1.32 0 2.64-.44 4.18-.66.22-.22.66-.22 1.1-.22 1.32-.22 2.2.44 2.2 3.52 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.54 3.96-.22 5.5 1.1 1.54 3.52.66 5.06 0 14.3-6.6 23.98-20.02 23.98-33.22zm-49.5 0c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22.88 0 1.98-.22 3.08-.44.66-.22 1.76-.66 2.64-.66.66 0 1.76.88 1.76 3.74 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.32 3.52-.22 5.06 1.32 1.76 4.18.66 4.84.44 14.3-6.6 24.2-20.02 24.2-33.22z"></path></g><g fill="#e6594c"><path d="m513 132h61v154h-61z" fill-opacity="0.25"></path><path d="m514 324h-1v-9h1v4h61v-4h1v9h-1v-4h-61z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a thin space to separate characters when a regular space is too big. This maintains typographic rhythm by creating subtle breathing room but avoiding excessive spacing.</p>
<pre><code class="language-html">Looking up he said, “She mouthed ‘I love you’&amp;thinsp;” and then returned to his book.
</code></pre>
<h3>Hair space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The initials “D. H. L.” spaced with thin hair spaces between each letter and period. Each space is marked with a dark vertical bar and a red spacing indicator." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(116 140)"><path d="m155.976399 68.86c0-22-9.24-40.7-26.62-53.24-15.62-11.22-32.5600004-15.62-61.3800004-15.62-21.78 0-42.9.88-64.68000004 1.76l-1.54.44c-1.76.22-2.86 6.82 0 6.82h1.98c18.70000004 0 18.92000004 4.18 18.92000004 22.66v83.82c0 9.68 1.1 20.46-11.88 21.56-2.86000004.22-5.28000004 0-8.14000004.44-2.86.88-2.64 4.4-1.76 6.38.66 1.98 3.3 1.98 4.84 1.98l52.80000004-.22c16.5 0 27.28 0 43.3400004-4.62 31.9-9.24 54.12-39.16 54.12-72.16zm-23.76 3.52c0 46.86-29.7 66-71.0600004 66-14.74 0-17.16-5.5-17.16-15.84v-109.78c0-3.08 2.42-4.84 4.84-5.06 9.68-.44 15.62-.44 25.3.44 17.38 1.76 25.74 4.84 35.4200004 12.32 14.08 10.78 22.66 30.14 22.66 51.92z"></path><path d="m187.896399 136.18c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m376.617727 139.48c-.66-1.76-3.3-1.76-4.84-1.76-12.98 0-16.72-4.18-16.72-14.52 0-21.34-.88-65.56 0-99 .22-10.56 3.74-14.08 14.52-14.96.88 0 2.64 0 3.08-1.1 1.1-2.2.44-6.38-2.86-6.16-13.2.44-39.16-1.1-55.22-.66-3.08 0-3.52 1.1-3.96 1.98-.66 1.98-.66 5.28 1.54 5.72h4.4c13.42 0 16.94 4.84 16.94 15.18 0 13.2.22 26.62 0 40.04 0 1.98-4.84 3.52-6.6 3.52-24.42.44-49.94.44-67.98 0-2.86 0-3.96-2.2-3.96-3.3v-40.26c0-10.56 3.74-15.18 16.72-15.18 1.76-.22 2.42-.22 2.64-1.32.44-1.76.88-3.74-.22-4.84-.66-.44-1.32-.88-2.2-.88-12.54.66-38.72.66-53.02 0-2.2-.22-2.2 6.16-.44 7.04 11.22.66 14.96 3.3 14.96 15.18v99c0 10.78-3.3 13.86-13.42 14.52-1.98 0-3.3-.22-5.5.22-1.98 1.32-1.76 4.18-1.1 6.16.66 1.54 2.2 1.54 3.52 1.54 13.86 0 41.8-.44 55.88 0 4.4-.66 3.08-8.36 0-7.92h-1.1-1.1c-12.1 0-15.62-2.86-15.62-14.52v-39.6c0-3.52 2.86-5.5 3.96-5.5 20.46.66 48.84.88 70.4 0 2.42 0 3.96 1.76 4.18 3.96v41.14c0 11.22-5.28 14.74-16.94 14.74h-5.28c-2.42 0-3.52 3.08-2.64 5.72.22 1.32 1.1 1.98 2.86 1.98 29.7 0 47.08-.44 62.48 0 2.64 0 3.74-3.74 2.64-6.16z"></path><path d="m421.497727 136.18c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m567.099055 112.42c.22-.44.44-1.98-.88-2.64-1.1-.88-2.86-.66-4.62 0l-7.7 10.12c-10.78 14.3-14.3 14.74-30.8 14.74h-20.68c-9.02 0-12.54-2.64-12.54-11.88v-100.76c0-11.44.88-11.66 17.38-12.1 2.42 0 4.84-.22 7.04-.44 3.08-.22 3.74-2.64 2.86-5.94-.44-1.76-1.76-1.98-3.08-1.98-25.52.44-40.92.66-62.92.22-.88-.22-2.64-.22-3.3 1.1-1.1 1.54-1.1 5.94 1.1 6.16h2.64c12.98 0 16.94 3.3 16.94 15.18v90.42c0 9.02-.22 13.2-.44 15.62-1.54 7.7-12.76 7.26-18.48 7.26-.66.22-1.1.22-1.76.44-1.76.66-2.2 4.18-1.54 5.72.22 1.1 1.54 2.2 3.08 1.98 6.6-.22 56.76-.44 96.8.22 3.52 0 5.28-1.98 6.82-4.18 2.86-4.62 8.8-16.72 14.08-29.26z"></path></g><g fill="#e6594c"><path d="m304.356399 141.98h23v92.046749 51.953251h-23z" fill-opacity="0.25"></path><path d="m538.356399 141.98h23v144h-23z" fill-opacity="0.25"></path><path d="m305.356399 323.98h-1v-9h1l-.000399 3.999h22l.000399-3.999h1v9h-1l-.000399-4.001h-22z" fill-rule="nonzero"></path><path d="m539.356399 323.98h-1v-9h1l-.000399 3.999h22l.000399-3.999h1v9h-1l-.000399-4.001h-22z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a hair space to prevent adjacent characters touching. This adds just enough separation to avoid visual collisions between initials without disrupting flow.</p>
<pre><code class="language-html">D.&amp;hairsp;H.&amp;hairsp;Lawrence.
</code></pre>
<h3>Narrow no-break space</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The expression “1⁄2 em” with a narrow no-break space between the number and the unit, highlighted by a vertical block and measurement bar beneath it." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(116 136.06)"><path d="m61.7785054 141.02c-2.42-.44-4.62 0-7.04-.22-2.64-.22-4.62-.22-6.16-.66-1.76-.22-2.86-.44-3.74-1.1-1.54-1.32-1.76-3.96-1.76-9.02v-77.44c0-2.86-8.58-1.54-9.46-.88-5.72 7.92-15.84 16.72-23.75999997 22.22-3.3 2.2-5.5 3.52-9.46 6.16-1.32 1.1.88 6.82 3.08 5.72 4.4-2.2 7.91999997-3.52 12.53999997-5.94 3.08-1.54 5.94-3.08 8.8-5.28.66-.44 1.1 0 1.32 1.32.22 1.1.22 2.64.44 3.74v51.04c0 5.28-1.76 7.7-4.62 9.02-1.32.66-3.08.88-4.84.88-1.98.44-4.18.22-6.38.22-.87999997-.22-2.63999997-.22-3.95999997.44-2.42 1.32-1.98 9.02.66 8.58 13.63999997-.44 36.29999997-.22 54.11999997 0 2.86 0 2.64-8.14.22-8.8z"></path><path d="m172.438505 6.38c2.42-3.52.66-5.94-.88-5.94l-11-.44c-1.76 0-3.08 2.42-3.74 3.52-25.3 48.62-49.28 95.7-74.5799996 144.32-3.74 7.26 8.8 5.5 11.22 5.72 2.64.22 3.74-1.98 4.84-4.18z"></path><path d="m255.398505 115.94c.22-1.32-1.1-1.98-2.42-2.2s-2.86 0-3.74.88c-2.42 6.38-4.62 10.78-6.38 13.86-2.42 4.4-3.96 4.84-9.46 5.06-12.1.44-24.2.22-36.08.22-.88 0-1.76-.44-1.98-.88-.44-.66-.44-1.1 0-1.54 17.82-12.54 47.74-33.88 47.74-56.76 0-14.52-13.64-25.74-30.36-25.74-14.74 0-25.52 5.94-38.94 21.12-1.76 3.74 3.96 4.84 4.84 3.96 9.68-8.8 16.94-12.1 25.52-12.1 12.54 0 21.56 8.8 21.56 21.34 0 9.24-5.06 17.6-18.7 29.7-11.22 9.9-21.78 18.04-40.26 30.8-.88 1.1-1.32 5.28.44 6.16h72.82 1.98c2.2 0 5.28-.44 5.94-3.08z"></path><path d="m385.89374 88.22c.22-1.54.22-2.2-.22-3.52-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.94 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.16 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.7c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m567.61374 146.3c.22-1.54.22-3.74-.88-4.18-.88-.66-3.08-.66-4.18-.44-12.76 0-14.74-1.32-14.74-8.36 0-11.66.88-23.1.88-34.76 0-17.82-.44-24.2-3.3-30.8-3.52-8.14-11-13.2-20.24-13.2-12.98 0-24.86 8.8-35.2 16.06-1.1.88-2.2.88-2.42 0-3.08-9.9-11-16.06-21.12-16.06-12.54 0-24.86 8.14-34.54 14.96-1.1.88-2.64 1.54-2.86-.22v-12.98c0-2.42-.44-4.62-3.3-3.96-10.12 2.64-22.66 6.6-28.82 9.46-1.1.44-1.76 5.72 0 5.94l5.06.66c6.16.88 8.14 1.76 9.02 3.52.66.88.66 4.84.66 16.5v31.46c0 18.92-1.98 21.78-11.66 22.22-1.54 0-4.18 0-4.84 1.54-.44 1.1-.66 3.3-.22 4.4.44 1.32 1.32 1.54 1.98 1.54 12.76-.44 35.64-.44 46.64 0 .88.22 1.98-1.54 2.2-3.08 0-1.76-.66-3.74-1.54-3.96-.22-.22-1.1-.22-1.98 0-11.22 0-13.2-1.98-13.2-13.2v-50.82c7.48-5.06 18.26-12.76 27.72-12.76 9.02 0 14.74 6.6 14.74 18.26v35.86c0 20.02-1.76 22.44-13.2 22.44-.88 0-2.2-.22-2.86.22-2.64 1.1-2.2 6.82.44 6.82 12.1-.22 34.76 0 45.76.22 1.1 0 2.2-1.98 2.2-3.74-.22-2.64-.66-3.3-3.08-3.3-9.68 0-12.1-2.42-12.1-13.2v-50.82c11.22-7.7 20.46-12.76 26.84-12.76 11.66 0 15.62 6.6 15.62 34.54 0 13.2-.44 21.78-1.1 30.8-.88 9.24-3.08 11.44-12.54 11.44h-2.2c-2.64 0-2.2 4.18-1.54 5.72s1.54 1.32 2.86 1.32c14.96-.22 33.66-.66 48.84 0 1.1.22 2.2-1.54 2.2-3.3z"></path></g><g fill="#e6594c"><path d="m372.518505 136h45v150h-45z" fill-opacity="0.25"></path><path d="m373.518505 324h-1v-9h1l-.000505 4h44l.000505-4h1v9h-1l-.000505-4h-44z" fill-rule="nonzero"></path></g></g></svg></figure></p>
<p>Use a narrow no-break space to prevent initials or numbers and their units from wrapping across two lines.</p>
<pre><code class="language-html">A hair space is 1/24&amp;#8239;em wide.
</code></pre>
<h2>Use the right punctuation marks</h2>
<h3>Hyphen</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The word “op–ed” shown with a hyphen between “op” and “ed” to illustrate compound word formation." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(143.5 115.212983)"><path d="m99.66 116.467017c.22-27.9399999-21.78-49.2799999-50.16-49.2799999-28.16 0-49.5 20.9-49.5 49.0599999 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.7999999 11.88-34.0999999 27.28-34.0999999 18.04 0 33.66 21.12 33.66 46.6399999z"></path><path d="m209.66 112.287017c0-23.0999999-15.62-43.7799999-34.32-43.7799999-8.58 0-16.94 3.96-31.24 14.08-1.76 1.32-2.2-3.08-2.2-3.96v-13.64c0-3.52-2.42-3.96-5.94-1.76l-24.2 15.18c-.44.44-.88.66-1.32 1.54-.66.88-1.1 4.18.88 4.62 2.64.66 5.06 1.76 7.7 2.42 5.06 1.32 5.72 1.98 5.72 7.48v5.28 91.0799999c0 21.34-1.76 24.64-14.08 24.64h-1.98c-2.42 0-2.64 4.4-1.54 6.38.66 1.32 2.2 1.1 3.52 1.1 9.24.44 34.1-.66 49.5 0 .88 0 2.42-.44 2.86-1.32.66-1.1.66-3.52.22-5.06-.44-1.1-2.2-1.76-3.96-1.76h-3.08c-12.32 0-14.3-2.64-14.3-23.98v-26.18c0-4.18 1.1-3.96 2.64-3.52 6.38 1.98 11.22 3.08 16.5 3.08 26.18 0 48.62-24.2 48.62-51.92zm-17.16 8.58c0 19.8-10.78 34.1-25.3 34.1-8.14 0-17.38-4.4-25.3-11.88v-47.9599999c0-1.98.88-3.52 1.32-3.96 7.48-5.94 14.74-9.46 21.12-9.46 15.84 0 28.16 16.72 28.16 39.1599999z"></path><path d="m302.94 106.347017c0-1.54-1.54-3.52-3.08-3.52-23.1-.66-53.68.44-70.18 0-1.54 0-4.18 1.1-4.18 3.74v8.8c.22.88.66 2.64 2.2 2.64 26.84.44 36.74-.88 71.06 0 1.32-.22 3.3-1.1 3.74-3.08z"></path><path d="m400.4 101.067017c.22-1.5399999.22-2.1999999-.22-3.5199999-1.98-2.42-3.3-4.4-4.4-7.04l-1.76-3.74c-6.38-13.2-16.28-19.36-31.68-19.36-25.96 0-45.1 21.34-45.1 49.9399999 0 26.62 17.38 47.74 40.7 47.74 8.8 0 18.48-3.74 25.96-9.46 5.72-4.62 11.44-10.34 15.62-15.18.88-1.54-.44-4.18-2.2-4.62-1.1-.22-2.64.22-3.3 1.1-8.58 10.12-16.72 14.08-27.28 14.08-18.7 0-33-16.5-33-39.16 0-2.86 0-4.18.44-6.6.22-1.54 2.42-2.2 4.18-2.2 14.08.22 42.02.66 58.96 0 1.32 0 2.86-.44 3.08-1.98zm-22.44-7.6999999c.44 1.98-3.52 2.64-5.28 2.64h-33c-.88 0-3.96-.66-3.52-1.76 4.18-13.2 11.88-20.02 21.34-20.02s17.16 7.04 20.46 19.14z"></path><path d="m515.24 148.147017c-.88-2.86-4.18-1.32-6.16-.88-1.32.44-3.52 1.32-4.84 1.32-4.62 0-5.94-.22-5.94-12.54v-131.77999986c0-3.08-1.1-5.06-3.74-3.96-8.8 3.3-20.02 7.04-27.72 9.46-1.32.22-1.98.87999996-2.2 1.97999996s0 1.98.22 3.08c.22 1.54 1.1 1.32 2.42 1.54 3.52.44 9.02 0 11.88 1.76 1.54.88 1.32 2.2 1.76 3.52.22 11.22.66 27.94 0 44.22 0 3.08-1.32 5.72-2.42 5.5-5.94-1.98-12.76-3.52-18.26-3.52-28.16 0-49.5 22.66-49.5 51.9199999 0 24.86 16.06 45.32 36.74 45.32 8.58 0 17.6-4.4 31.02-13.64 1.54-1.1 2.42 1.76 2.42 3.3s-1.54 11.44 3.96 9.46c7.7-1.98 22.44-7.48 29.7-11 1.1-.44 1.32-3.08.66-5.06zm-34.54-9.68c-.22 2.42-1.32 4.62-2.2 5.06-8.8 5.94-16.94 9.02-22.88 9.02-15.4 0-27.28-16.94-27.28-39.6 0-21.5599999 10.78-36.2999999 27.06-36.2999999 9.9 0 17.16 5.06 25.3 16.72z"></path></g><path d="m371 340h-1v-9h1v4h74v-4h1v9h-1v-4h-74z" fill="#e6594c"></path></g></svg></figure></p>
<p>Use a hyphen for one of the following:</p>
<ul>
<li>joining words to indicate they have a combined meaning</li>
<li>indicating missing words shared by a series of compounds</li>
<li>indicating stuttering speech</li>
<li>splitting words when breaking them across lines</li>
</ul>
<p><em>Example:</em> She wore a well-tailored jacket.</p>
<h3>Figure dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The numbers 55 and 12 separated by a figure dash, illustrating the precise punctuation used for numeric identifiers." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><path d="m371.690859 321.8h-1v-9h1l-.000859 4h54l.000859-4h1v9h-1l-.000859-4h-54z" fill="#e6594c"></path><g fill="#f5f5f5" transform="translate(160 142)"><path d="m80.74 95.92c0-25.3-18.48-45.1-43.56-45.1-6.16 0-9.9.66-14.74 2.42-1.76.88-3.52.22-3.3-1.76l1.54-27.5c.66-2.42 3.08-3.52 4.62-3.96l37.84.66c5.5-.44 6.38-1.54 7.48-4.18l1.76-12.32c.44-2.42-.22-3.3-1.54-4.18h-2.42c-.88 0-2.2.44-2.86 1.32-2.2 2.64-5.72 1.98-11.66 1.98l-31.46-.44c-3.3 0-9.46.66-9.9 5.28l-4.62 62.04c-.22 3.08 0 3.74 1.98 5.06 1.54 1.1 3.3-.22 4.4-.88 6.16-4.18 12.32-5.94 18.92-5.94 17.38 0 28.16 13.2 28.16 32.56s-10.78 35.2-25.52 35.2c-3.52 0-5.5-.66-8.36-3.08-5.06-4.4-11.44-12.1-18.7-12.1-4.84 0-8.8 3.96-8.8 8.8 0 9.24 13.86 14.96 31.02 14.96 29.26 0 49.72-21.56 49.72-48.84z"></path><path d="m188.32 95.92c0-25.3-18.48-45.1-43.56-45.1-6.16 0-9.9.66-14.74 2.42-1.76.88-3.52.22-3.3-1.76l1.54-27.5c.66-2.42 3.08-3.52 4.62-3.96l37.84.66c5.5-.44 6.38-1.54 7.48-4.18l1.76-12.32c.44-2.42-.22-3.3-1.54-4.18h-2.42c-.88 0-2.2.44-2.86 1.32-2.2 2.64-5.72 1.98-11.66 1.98l-31.46-.44c-3.3 0-9.46.66-9.9 5.28l-4.62 62.04c-.22 3.08 0 3.74 1.98 5.06 1.54 1.1 3.3-.22 4.4-.88 6.16-4.18 12.32-5.94 18.92-5.94 17.38 0 28.16 13.2 28.16 32.56s-10.78 35.2-25.52 35.2c-3.52 0-5.5-.66-8.36-3.08-5.06-4.4-11.44-12.1-18.7-12.1-4.84 0-8.8 3.96-8.8 8.8 0 9.24 13.86 14.96 31.02 14.96 29.26 0 49.72-21.56 49.72-48.84z"></path><path d="m212.190859 69.5792969h53.925782v19.8730469h-53.925782z"></path><path d="m361.241719 136.84c-.44-2.64-1.54-4.4-3.74-4.4-1.98.22-5.72 0-8.8 0-6.82-.22-7.48-3.08-7.48-8.14v-2.64l-.22-117.26c-.22-1.98-2.2-4.4-4.62-4.4h-2.64c-1.98.44-4.18 2.42-4.84 3.52-1.98 2.42-3.96 4.62-10.34 10.34-8.58 8.14-14.74 12.98-22.22 18.26-.66.44-.88 1.54-.88 2.64l1.1 1.98c1.1 1.1 2.64 1.32 3.52.88 6.38-3.08 13.42-7.04 19.36-11.44 1.54-1.1 3.96.88 4.4 3.3l-.22 93.06c0 5.28-.22 9.46-6.6 9.68-1.98.88-4.84.22-8.14.22-2.64 0-4.18 1.54-5.28 3.74-.22 1.1 0 2.64.22 3.96.66 1.32 2.64 1.54 3.96 1.32 13.86-.44 36.08-.66 49.28.22 4.84.44 4.18-3.96 4.18-4.84z"></path><path d="m481.581719 111.98c0-2.64-.44-3.3-1.76-3.3l-1.1-.44c-1.98.44-3.52 2.42-3.74 3.52-2.42 12.32-7.48 14.08-23.32 13.2-6.6-.44-21.34-.44-29.7 0-7.04-.66-6.38-3.08-5.06-4.4 16.06-16.72 33-31.46 47.3-49.94 7.04-9.02 13.42-18.26 13.42-30.58 0-22.88-13.2-40.04-36.96-40.04-23.54 0-41.36 16.5-45.1 42.24-.22 1.1 0 2.86 2.42 2.86 1.54 0 3.74-.66 4.4-2.64 5.5-16.72 18.26-26.84 31.9-26.84 15.18 0 22.88 11.66 22.88 27.5 0 27.28-18.7 43.78-35.86 61.38-13.2 13.64-21.12 22.44-26.62 28.82-.44.88-2.64 2.64-2.42 4.4l.22 1.76c.88 1.54 4.18 2.2 5.94 2.2 29.04-1.76 55.44 0 72.38 0 3.08 0 6.82-1.76 7.48-4.18.88-5.72 3.52-18.7 3.3-25.52z"></path></g></g></svg></figure></p>
<p>A figure dash has the same width as a numerical digit and is used within numbers to maintain alignment.</p>
<p><em>Example:</em> (800‒555‒1212)</p>
<h3>En dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The numbers 4 and 5 separated by an en dash, demonstrating correct punctuation for numeric ranges." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(233.717354 176.426063)"><path d="m94.8226464 97.9339375c0-1.76 0-7.04-.22-8.36-.66-2.86-2.64-1.98-4.62-2.42l-18.04.44c-1.98-.88-2.64-1.54-3.08-3.74v-81.62000004c0-1.32-1.1-1.76-2.2-2.2-1.76-.22-3.74.66-4.62 1.76l-61.37999999 92.84000004c-1.32 1.98-.44 5.7199995.66 5.9399995 11.87999999.44 35.41999999.66 47.29999999 0 1.98-.22 1.98 2.64 2.2 4.18-.66 9.68-.22 22 .22 31.24 0 1.1 1.32 3.96 3.08 3.74h11.22c3.08 0 3.52-2.2 3.52-4.18.22-7.04.44-20.9 0-32.12 0-1.1 2.2-2.86 3.08-2.86l19.14.22c.66.22 3.74-1.0999995 3.74-2.8599995zm-43.78-12.54c-1.76 2.42-1.1 1.98-4.18 2.2-8.36.22-21.56.22-28.82 0-1.32 0-1.98-1.76-1.1-3.3l32.56-49.94c1.1-1.76 1.76 2.2 1.54 2.86-.66 14.3-.22 35.86 0 48.18z"></path><path d="m232.562646 51.9539375v-8.14c0-1.1-1.32-2.86-3.08-2.86-23.98-.44-78.1-1.1-111.98 0-1.1.22-2.42 1.32-2.64 2.42l-.22 7.7c0 1.32 1.32 2.86 2.2 2.86 38.28-.44 65.56-.44 112.2 0 1.98 0 3.3-.44 3.52-1.98z"></path><path d="m323.642646 7.29393746c.22-1.76.44-3.3-3.74-3.74l-25.08-2.86c-1.54-.22-1.98 0-3.08 1.32-8.58 9.24000004-23.98 28.60000004-31.24 38.72000004-.44.66-1.98 3.08 0 4.4 18.7 11.66 44.66 29.7 44.66 53.46 0 15.8399995-11 29.0399995-23.1 29.0399995-2.86 0-6.82-1.1-16.28-4.4-2.2-.88-4.18-1.32-5.72-1.32-4.4 0-7.92 3.96-7.92 8.58 0 5.72 4.84 9.02 11.66 9.02 11.22 0 23.76-3.96 34.32-10.78 14.3-9.24 22.22-22.44 22.22-37.1799995 0-13.42-7.26-27.94-20.02-40.04-7.26-6.82-9.68-9.24-20.68-16.06-3.74-2.2-2.42-3.08-.22-5.94l8.58-10.56c1.32-1.76 1.98-1.76 3.96-1.54l20.68 2.64c1.76 0 2.42-.22 3.74-1.54 1.1-1.1 6.6-8.36 7.26-11.22000004z"></path></g><path d="m349 340h-1v-9h1v4h116v-4h1v9h-1v-4h-116z" fill="#e6594c"></path></g></svg></figure></p>
<p>An en dash indicates range with spacing that visually balances the digits it connects.</p>
<p><em>Example:</em> 4–5 minutes.</p>
<h3>Em dash</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The phrase “I—no” with an em dash between words, highlighting punctuation for interruptions or emphasis." style="width:100%;height:auto"><g fill="none" fill-rule="nonzero"><g fill="#f5f5f5" transform="translate(165.44 133.7712)"><path d="m58.3 2.4288c-.22-2.2-1.54-2.42-3.52-2.42-26.84 1.32-32.56 0-50.6 0-1.54 0-2.42-.22-3.08 1.54-1.32 4.18.66 5.28 2.42 5.5 11.88 1.32 13.64 3.96 13.86 15.4l.22 7.7v83.6l-.22 7.7c-.44 11.88-1.54 13.64-15.4 14.96-1.1 0-1.98 2.42-1.98 4.18 0 2.2 1.32 3.3 2.64 3.3 13.86-.44 40.7-.44 54.56 0 1.76 0 3.08-5.94.22-7.7-.88-.22-1.98-.22-3.3-.22-11.88-.22-15.18-3.08-15.18-14.52v-91.3c0-20.24 1.76-22.44 15.18-22.66 1.1 0 2.2-.44 3.08-.44 1.32 0 1.32-2.86 1.1-4.62z"></path><path d="m236.28 88.2288c-.22-1.32-2.2-1.98-3.74-2.42-34.32-.66-104.06-.66-141.02 0-3.74 0-4.84 2.86-4.84 4.18-.22 3.08.44 3.96.44 6.16-.22 2.2 1.98 3.08 3.52 2.86 36.08-.66 95.48-.66 142.12 0 1.54.22 2.64-1.54 3.08-2.42.22-3.74 1.54-5.06.44-8.36z"></path><path d="m366.74 141.6888c.44-1.54.22-3.52-.44-4.62-.88-1.1-2.42-1.32-3.52-.66-10.34 0-11-1.54-11-7.92 0-13.42 1.76-26.62 1.76-39.82 0-16.06-2.42-39.6-24.42-39.6-4.62 0-9.46 1.54-15.4 4.4-7.04 3.52-11.66 6.6-18.26 11.22-1.32.88-2.42-2.2-2.42-2.64v-12.1c0-2.64-1.54-4.62-5.06-3.74-8.14 1.76-18.92 8.36-25.96 9.46-1.54.66-1.54 5.72 0 5.94l4.4.88c6.82 1.32 7.92 1.98 8.58 3.52.66 1.32.88 5.06.88 17.82v30.14c0 19.8-2.42 22.88-12.54 22.88h-1.32c-2.2 0-2.42 3.74-1.76 5.72.44 1.1 2.2 1.1 3.08 1.1 11.66.66 30.8-.22 42.02.22 2.42-.22 3.08-1.1 3.08-3.74-.22-1.54-.88-3.74-1.98-3.74-11 0-13.42-1.32-13.42-12.76v-49.72c9.68-7.48 20.9-12.98 27.06-12.98 10.56 0 16.06 7.48 16.06 24.42 0 12.98 0 25.96-1.32 38.72-.88 9.02-3.74 11.44-13.42 12.32h-1.54c-1.32 0-1.76 2.2-1.76 3.74.22 2.86.66 3.52 3.52 3.52 11.44-.44 30.8.22 41.8 0 2.42 0 2.86.22 3.3-1.98z"></path><path d="m475.2 97.9088c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z"></path></g><path d="m254 340h-1v-9h1v4h146v-4h1v9h-1v-4h-146z" fill="#e6594c"></path></g></svg></figure></p>
<p>Use an em dash to set off phrases. Separate em dashes from phrases with hair spaces. You can also use to indicate attribution after a quote, followed by a full space.</p>
<p><em>Example:</em> this and that — that and this.</p>
<h3>Minus symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two horizontal dashes side by side: a shorter hyphen labeled with a red “X,” and a longer minus sign labeled with a green checkmark." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m77.44 3.73671287c0-1.54-1.54-3.52-3.08-3.52-23.1-.66-53.68.44-70.18 0-1.54 0-4.18 1.1-4.18 3.74v8.80000003c.22.88.66 2.64 2.2 2.64 26.84.44 36.74-.88 71.06 0 1.32-.22 3.3-1.1 3.74-3.08z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(184.68 179.823287)"></path><g transform="translate(195 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".121094" y="53">hyphen</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(17)"></path></g><path d="m122.98 9.26067903v-4.84c0-3.08-.44-4.62-4.4-4.4-7.26.66-75.68.88-114.18 0-3.52 0-4.4.66-4.4 4.18v5.72c0 4.61999997 3.08 4.61999997 7.48 4.61999997 34.54-.66 80.08-.66 109.56.22 2.86 0 4.4-.22 5.06-1.1.44-.44.66-.88.66-1.76.22-.66.22-1.54.22-2.63999997z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(486.62 168.139321)"></path><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="492.132812" y="355">minus symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(530 296)"></path></g></svg></figure></p>
<p>The minus symbol is longer and sits at the mathematical midpoint—unlike the shorter hyphen.</p>
<h3>Multiplication symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="The lowercase letter “x” on the left labeled as incorrect, contrasted with a typographic multiplication symbol on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m110.88 89.6441365c0-1.54-.66-3.3-1.76-3.96-9.46-.66-13.64-2.86-19.8-10.78-8.8-11.22-3.74-4.84-26.62-34.1l10.34-11.88 8.36-9.24c9.24-10.34 12.32-12.32 25.52-13.2 1.54 0 2.64.44 3.3-1.32.44-1.1.22-2.86-.22-3.96-.66-1.1-1.32-1.32-2.64-1.1-9.02.44-25.08.22-41.8 0-1.1-.22-2.42-.22-2.64 1.32-.22 1.1-.22 2.86.22 3.96.66 1.54 1.32.88 2.64 1.1 8.14.22 9.68 1.98 9.68 5.06 0 2.86-2.64 7.26-5.94 11.22-3.08 3.96-6.82 7.92-8.58 9.68-2.2 2.64-3.08 2.42-4.84 0-.22-.22-4.62-5.28-8.58-10.56-4.18-5.5-7.92-11.22-7.92-12.98 0-2.64 5.72-2.64 7.48-2.64h1.98c1.1 0 1.54-3.96.22-5.72-.44-.66-1.76-.44-2.42-.44-10.34.22-31.02.66-42.68 0-3.3-.22-2.64 5.94-1.1 6.38 12.54.66 15.18 2.64 25.74 16.72l18.26 24.42-19.58 22.22c-11.88 13.64-15.18 15.84-25.74 16.06-1.32 0-1.76 1.54-1.76 3.3.22 1.54.88 3.08 1.76 3.08 10.56-.22 30.58-.22 42.02.22 2.2.44 2.2-6.16 0-6.38h-1.76c-9.46-.88-11.88-2.64-11.88-6.38 0-4.18 16.28-20.9 19.8-24.86 1.32-1.54 3.52.22 5.06 2.2l12.54 16.72c1.54 2.2 5.72 6.16 5.72 8.8 0 1.98-1.1 3.52-7.7 3.52h-1.98c-2.64 0-2.64 6.38 0 6.38 12.98-.44 34.1-.44 45.32-.22 1.1.22 1.98-1.1 1.98-2.64z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(164.12 147.155863)"></path><g transform="translate(193 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".53125" y="53">x letter</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(16)"></path></g><path d="m109.302904 5.96613481-5.72-5.06c-.88-.66-5.2799999 0-7.0399999 2.2-10.34 11.65999999-26.4 28.81999999-36.74 38.27999999-3.74 3.3-5.06 3.52-8.14.44-12.76-13.64-29.04-30.36-39.82-40.69999999-2.42000001-2.42-5.50000001-.22-5.72000001 0l-4.62 4.62c-2.64 2.64-.88 5.49999999 1.32 7.69999999l38.72000001 39.16c1.98 2.2 2.64 3.74-.22 6.6-10.12 10.12-31.24 31.68-39.82000001 39.82-2.42 2.2000002-1.54 5.0600002 0 6.3800002l3.74 3.52c3.08 2.86 5.72000001 1.98 7.92000001-.22 13.2-12.7600002 23.54-22.4400002 36.74-36.9600002 2.86-3.08 5.94-4.84 9.9-.66l37.84 38.5000002c1.54 1.54 3.2999999 2.2 6.3799999-.44l4.84-3.96c2.42-1.98 1.98-3.96-.88-6.8200002l-40.0399999-39.82c-2.42-2.42-1.32-4.4.44-5.72 8.8-7.92 29.7-29.92 40.6999999-40.7 2.64-2.63999999 1.76-4.61999999.22-6.15999999z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(503.587096 120.173865)"></path><g transform="translate(478 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".007813" y="59">multiplication symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(66)"></path></g></g></svg></figure></p>
<p>A proper multiplication sign avoids confusion with the letter “x” and aligns better with numerals.</p>
<h3>Obelus</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="A slash symbol on the left marked incorrect and labeled “slash,” contrasted with a division sign (obelus) on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m90.8913316 6.38c2.42-3.52.66-5.94-.88-5.94l-11-.44c-1.76 0-3.08 2.42-3.74 3.52-25.3 48.62-49.28 95.7-74.57999997 144.32-3.74000001 7.26 8.79999999 5.5 11.21999997 5.72 2.64.22 3.74-1.98 4.84-4.18z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(175.418668 90.06)"></path><g transform="translate(200 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".480469" y="53">slash</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(9)"></path></g><path d="m69.96 9.02c0-5.06-4.18-9.02-9.24-9.02-4.84 0-9.46 3.52-9.46 8.58-.22 5.5 4.18 9.9 9.46 9.9 5.06 0 9.24-4.18 9.24-9.46zm52.58 49.5-.44-6.38c-.22-1.98-1.32-2.86-3.08-3.3-.88-.22-1.98-.22-3.08-.22h-3.96-105.16c-2.86 0-6.82 0-6.82 3.96v5.5c0 2.42 4.62 4.84 7.04 4.84h108.68c3.08 0 7.04-.22 6.82-4.4zm-52.58 43.12c0-5.28-3.96-9.24-9.24-9.24-5.06 0-9.46 3.96-9.46 9.24s4.4 9.46 9.46 9.46c5.28 0 9.24-4.4 9.24-9.46z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(497.39 119.76)"></path><g transform="translate(532 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".910156" y="59">obelus</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(12)"></path></g></g></svg></figure></p>
<p>The obelus is the correct symbol for division, with visual weight that centers between operands.</p>
<h3>Quotation marks &amp; apostrophes</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Four straight vertical quote marks on the left labeled “straight marks” and marked with a red X. On the right, matching typographic curly quotes marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(133.339336 150.72)"><path d="m65.34 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.92 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path><path d="m174.201328 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.92 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(457.589336 157.32)"><path d="m79.2 40.92c0-6.16-4.4-11.22-10.56-11.22-.88 0-1.76.22-2.64.44s-1.54.44-2.42.44c-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.5-14.96 16.5-21.12 1.98-1.1 1.54-3.52.66-5.06-1.1-1.32-3.08-1.1-4.4-.66-14.74 6.38-24.64 19.8-24.64 33.66 0 10.78 7.04 19.14 16.94 19.14 7.04 0 12.76-5.28 12.76-12.32zm-49.5 0c0-6.16-4.4-11.22-10.56-11.22-1.1 0-1.98.22-2.86.44l-1.1.22c-.44 0-.88.22-1.1.22-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.72-14.74 16.5-21.12 1.76-.88 1.1-3.3.22-4.84-.44-.88-2.2-1.54-3.96-.88-14.74 6.38-24.64 19.8-24.64 33.66 0 10.78 7.04 19.14 16.94 19.14 7.04 0 12.76-5.28 12.76-12.32z"></path><path d="m204.561328 19.36c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22 1.32 0 2.64-.44 4.18-.66.22-.22.66-.22 1.1-.22 1.32-.22 2.2.44 2.2 3.52 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.54 3.96-.22 5.5 1.1 1.54 3.52.66 5.06 0 14.3-6.6 23.98-20.02 23.98-33.22zm-49.5 0c0-11.22-7.48-19.36-16.94-19.36-7.26 0-12.98 5.28-12.98 12.32 0 6.38 4.62 11.22 10.56 11.22.88 0 1.98-.22 3.08-.44.66-.22 1.76-.66 2.64-.66.66 0 1.76.88 1.76 3.74 0 7.04-5.5 14.74-16.94 20.9-1.76 1.1-1.32 3.52-.22 5.06 1.32 1.76 4.18.66 4.84.44 14.3-6.6 24.2-20.02 24.2-33.22z"></path></g><g transform="translate(496 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".929688" y="59">quotation marks</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(48)"></path></g></g></svg></figure></p>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="On the left: two straight vertical marks labeled “straight marks” and marked incorrect. On the right: typographic apostrophes with curled shapes marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(179.979336 150.72)"><path d="m24.42 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path><path d="m80.4813281 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(505.659336 156.985695)"><path d="m29.48 41.2543047c0-6.16-4.62-11.44-10.78-11.44-1.54 0-3.08 1.1-4.62 1.1-1.32 0-2.2-.66-2.2-3.3 0-7.04 5.5-14.96 16.28-21.12000002 3.96-2.86.44-7.26-1.98-6.38-15.62 5.94-26.18 19.14000002-26.18 33.44000002 0 11 7.26 20.02 16.94 20.02 7.04 0 12.54-5.28 12.54-12.32z"></path><path d="m105.121328 19.6943047c0-11.22000002-7.0399999-19.36000002-16.7199999-19.36000002-7.04 0-12.76 5.28-12.76 12.32000002 0 6.38 4.4 11.22 10.56 11.22 1.76 0 3.3-.44 4.84-.88 2.2-.44 2.42 1.76 2.42 3.52 0 7.04-5.5 14.52-16.5 20.9-1.98 1.32-1.32 3.96 0 5.5 1.1 1.32 3.52.44 4.84-.22 13.86-6.6 23.3199999-19.8 23.3199999-33z"></path></g><g transform="translate(510 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".761719" y="59">apostrophes</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(34)"></path></g></g></svg></figure></p>
<p>Use proper quotation marks and apostrophes (not straight marks).</p>
<h3>Ellipsis</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of ellipses shown side by side: three individual dots on the left marked incorrect, and a single ellipsis character on the right marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(167 188)"><path d="m26.18 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m71.06 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path><path d="m115.94 12.54c0-7.48-5.06-12.54-12.76-12.54-7.92 0-13.42 5.06-13.42 12.76 0 7.26 5.72 12.54 13.42 12.54s12.76-5.5 12.76-12.76z"></path></g><g transform="translate(181 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".214844" y="53">three dots</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(28)"></path></g><path d="m178.42 12.32c0-7.26-5.28-12.32-12.98-12.32s-13.2 4.18-13.2 11.66c0 7.04 5.72 12.98 13.42 12.98s12.76-5.06 12.76-12.32zm-75.68.22c0-7.26-5.28-12.32-12.98-12.32s-13.2 4.84-13.2 12.32c0 7.04 5.5 12.1 13.42 12.1 7.7 0 12.76-4.84 12.76-12.1zm-76.34-.22c0-7.26-5.28-12.32-12.98-12.32s-13.42 4.4-13.42 11.66 5.72 12.98 13.42 12.98 12.98-5.28 12.98-12.32z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(470 189)"></path><g transform="translate(493 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".863281" y="59">ellipsis character</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(51)"></path></g></g></svg></figure></p>
<p>The proper ellipsis character (instead of three individual dots) ensures consistent spacing and baseline alignment across typefaces.</p>
<h3>Primes</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="On the left, three straight vertical tick marks labeled “straight marks” and marked incorrect; on the right, slanted tick marks representing prime and double prime symbols are marked correct." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(153.579336 150.72)"><path d="m24.42 13.86c0-8.58-4.84-13.86-12.54-13.86-8.14 0-11.88 5.5-11.88 16.06 0 5.94 1.54 11.88 2.64 17.6l5.28 30.58c.66 3.52 0 3.74 3.96 4.18 2.86.22 3.96-2.2 4.4-4.62l5.28-30.14c.44-2.64 1.1-6.16 1.76-9.68s1.1-7.04 1.1-10.12z"></path><path d="m127.561328 13.86c0-8.36-4.84-13.86-12.54-13.86-8.8 0-12.54 5.5-12.54 16.28 0 6.16 1.76 11.88 2.86 17.82l5.94 33.44c0 1.32 3.08 2.42 5.06 1.98 1.54-.22 2.2-1.32 2.42-1.98l6.38-33.66c1.1-5.72 2.42-14.08 2.42-20.02zm-40.9199999 0c0-8.36-4.84-13.86-12.54-13.86-8.14 0-11.88 5.28-11.88 14.96 0 6.16 1.32 12.32 2.42 18.48l5.5 31.46c.44 2.42 2.42 3.96 3.96 3.96 1.98.22 3.08-.66 3.52-1.32l6.38-33.88c.66-3.3 1.32-6.6 1.76-9.9s.88-6.6.88-9.9z"></path></g><g transform="translate(165 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".777344" y="53">straight marks</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(44)"></path></g><g fill="#f5f5f5" fill-rule="nonzero" transform="translate(476.896484 148.652344)"><path d="m43.5058594 0-28.6816406 63.2714844h-14.8242188l19.6582031-63.2714844z"></path><path d="m132.128906 0-28.68164 63.2714844h-14.8242191l19.6582031-63.2714844zm37.597656 0-28.68164 63.2714844h-14.824219l19.658203-63.2714844z"></path></g><g transform="translate(532 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".375" y="59">primes</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(12)"></path></g></g></svg></figure></p>
<p>Prime marks indicate units like inches and minutes; straight apostrophes are typographic imposters.</p>
<h3>Degree symbol</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="A lowercase letter “o” on the left marked incorrect, contrasted with a correctly raised and smaller degree symbol on the right." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m99.66 49.28c.22-27.94-21.78-49.28-50.16-49.28-28.16 0-49.5 20.9-49.5 49.06 0 27.72 21.56 48.84 50.16 48.84 27.72 0 49.5-21.34 49.5-48.62zm-19.58 5.28c0 20.68-11.88 35.2-27.28 35.2-18.26 0-33.66-20.9-33.66-47.74 0-19.8 11.88-34.1 27.28-34.1 18.04 0 33.66 21.12 33.66 46.64z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(170.17 144.4)"></path><g transform="translate(193 302)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x="0" y="53">o letter</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(16)"></path></g><path d="m66 29.92c0-17.16-14.52-29.92-33.22-29.92s-32.78 12.76-32.78 29.92 14.3 29.92 33.22 29.92c18.26 0 32.78-12.98 32.78-29.92zm-13.64 3.3c0 12.1-7.48 20.68-17.38 20.68-11.66 0-21.56-12.1-21.56-28.16 0-11.66 7.48-20.02 17.38-20.02 11.44 0 21.56 12.1 21.56 27.5z" fill="#f5f5f5" fill-rule="nonzero" transform="translate(525.22 101.72)"></path><g transform="translate(502 296)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".046875" y="59">degree symbol</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(42)"></path></g></g></svg></figure></p>
<p>The proper degree symbol is smaller and raised—distinct from a lowercase o.</p>
<h3>Parentheses</h3>
<p><figure><svg height="440" viewBox="0 0 800 440" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of parentheses compared side by side. On the left, the italicized version is marked incorrect; on the right, the roman version is marked correct, showing the preferred typographic form." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><g transform="translate(202 326)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".226563" y="53">italic</tspan></text><path d="m21.7086196 1.18317306-1.1360477-1.00347308c-.1747765-.13088779-1.0486593 0-1.3982124.43629264-2.0536246 2.31235101-5.2432967 5.71543363-7.2969213 7.591492-.7428003.65443896-1.0049652.69806823-1.6166831.08725852-2.53426008-2.70501438-5.76762637-6.02083847-7.90863919-8.0714139-.48063553-.47992191-1.09235348-.04362926-1.13604762 0l-.91757692.91621455c-.52432967.52355118-.17477656 1.09073161.26216483 1.52702426l7.69016849 7.76600905c.39324726.4362926.52432967.7416975-.04369414 1.3088779-2.0099304 2.0069462-6.20456776 6.2826141-7.90863918 7.8968969-.48063554.4362926-.30585898 1.0034731 0 1.2652486l.74280036.6980683c.61171795.5671804 1.13604762.3926633 1.57298901-.0436293 2.62164835-2.5304973 4.67527289-4.450185 7.29692124-7.3297164.56802382-.6108097 1.17974172-.9598438 1.96623622-.1308878l7.515392 7.6351213c.305859.3054048.6554121.4362926 1.26713-.0872586l.9612711-.7853267c.4806355-.3926634.3932472-.7853268-.1747766-1.3525072l-7.9523333-7.8968969c-.4806355-.4799219-.2621648-.8725853.0873883-1.1343608 1.7477655-1.57065355 5.8987088-5.93357999 8.0834157-8.07141394.5243297-.52355117.3495531-.91621455.0436942-1.2216194z" fill="#e6594c" fill-rule="nonzero" transform="translate(7)"></path></g><g transform="translate(534 320)"><text fill="#979797" font-family="SFProText-Regular, SF Pro Text" font-size="16"><tspan x=".183594" y="59">roman</tspan></text><path d="m10.8133536 33c-1.31714723-2.4347826-2.32979265-4.2246377-3.0379363-5.3695652l-1.12594841-1.8043478-.84977238-1.326087c-1.85533637-2.9565217-3.78856854-5.3985507-5.79969651-7.326087 1.14719272-.9710144 2.21648963-1.4565217 3.20789074-1.4565217 1.21800708 0 2.30146687.4565217 3.25037937 1.3695652.94891249.9130435 2.14567526 2.6521739 3.59028829 5.2173913 1.6428933-5.4637681 3.7319171-10.6449275 6.2670713-15.54347823 1.4021245-2.66666667 2.651998-4.46014493 3.7496207-5.38043479 1.0976226-.92028985 2.5528578-1.38043478 4.3657056-1.38043478.9630754 0 2.1527567.15217391 3.569044.45652174-3.6398584 3-6.5503288 6.56521739-8.7314112 10.69565216-2.1810825 4.1304348-4.9994942 11.4130435-8.4552352 21.8478261z" fill="#4ade80" fill-rule="nonzero" transform="translate(10)"></path></g><g fill="#f5f5f5" fill-rule="nonzero"><g transform="translate(179 68.458291)"><path d="m67.32 7.38170935c2.86-4.84-.88-6.38-3.08-5.5-34.32 33.22000005-64.24 78.54000005-64.24 127.81999965 0 27.5 8.8 55.88 20.02 80.74 2.86 3.74 7.48 2.2 5.72-2.64-12.32-35.42-15.4-70.62-6.16-106.92 9.02-35.6399996 24.2-65.3399996 47.74-93.49999965z"></path><path d="m117.881328 83.0617094c0-28.38-9.68-55.88-20.0199999-80.96000005-2.86-4.84-7.04-.22-5.72 2.86 11.8799999 37.18000005 16.0599999 68.86000005 6.38 106.91999965-9.02 35.64-24.2 65.56-48.18 93.28-3.52 2.86-1.98 8.36 3.3 5.72 34.54-33.22 64.2399999-78.54 64.2399999-127.8199996z"></path></g><g transform="translate(496.38 67.985601)"><path d="m50.16 198.474399c-6.38-7.48-8.36-10.12-14.3-20.46-14.74-25.74-20.24-45.98-20.24-74.8 0-19.5800003 2.42-34.1000003 8.36-49.7200003 6.16-16.06 16.72-34.76 26.18-45.31999996 2.64-4.18-3.52-10.56-7.92-7.26-25.3 27.49999996-42.24 64.67999996-42.24 102.30000026 0 36.3 16.06 73.48 40.26 100.32 1.32 1.54 2.86 2.64 4.62 1.76 3.3-1.54 6.6-3.96 5.28-6.82z"></path><path d="m122.281328 102.774399c0-36.7400003-15.4-73.2600003-40.2599999-100.54000026-1.76-1.76-4.84-2.42-7.48-.22-2.42 1.98-2.42 5.5-.66 7.26 5.28 6.15999996 7.48 9.23999996 12.76 18.69999996 14.7399999 25.96 20.4599999 46.2 20.4599999 74.8000003 0 19.8-2.42 34.32-8.3599999 49.94-6.16 16.06-16.72 34.54-26.4 45.32-3.52 5.5 3.52 10.56 7.92 7.26 25.9599999-27.28 42.0199999-64.9 42.0199999-102.52z"></path></g></g></g></svg></figure></p>
<p>Parentheses and brackets are not designed to be italicized; they retain proper shape and spacing when set in roman.</p>
<h2>Use the right characters</h2>
<p>To learn what characters to use, read my article about <a href="https://www.jonathanharrell.com/blog/better-typography-with-font-variants" target="_blank" rel="noreferrer">better typography with font variants</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking the Benefits of CSS Variables]]></title>
            <link>https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties</link>
            <guid>https://www.jonathanharrell.com/blog/unlocking-the-benefits-of-css-custom-properties</guid>
            <pubDate>Tue, 24 Oct 2017 20:17:00 GMT</pubDate>
            <description><![CDATA[Overview of the benefits of CSS variables and helpful tips and tricks for working with them.]]></description>
            <content:encoded><![CDATA[<p>More and more developers are starting to use CSS variables, or as they are more correctly known, custom properties. Native CSS custom properties provide several clear benefits over preprocessor variables. They provide the power to achieve things like live theming which were previously much more difficult.</p>
<p>I want to take a quick look at the benefits of CSS custom properties and go over some lesser known features that may come in handy.</p>
<h2>Benefits of CSS Custom Properties</h2>
<h3>They’re Native</h3>
<p>This one is obvious, but important. You can use CSS custom properties without the need for a preprocessor. The tooling around CSS has grown in complexity over the last several years. We may now be looking at a simplification as more features are adopted into CSS proper.</p>
<h3>They’re Live</h3>
<p>Preprocessor variables are not actually live in the browser. They are evaluated when the CSS is compiled. Redefining a variable within a media query will do nothing. With CSS custom properties, the property actually lives in the browser so it can be redefined in media queries, or with JavaScript.</p>
<p>This also means that all variable expressions and calc statements using CSS custom properties will be recalculated when the variable is redefined.</p>
<p>Here we are redefining a grid gutter within a media query and using that custom property inside <code>calc()</code> statements:</p>
<pre><code class="language-css">:root {
  --grid-gutter: 1rem;
}

@media (min-width: 600px) {
  :root {
    --grid-gutter: 1.25rem;
  }
}

.grid {
  display: grid;
  grid-gap: var(--grid-gutter);
  margin-left: calc(-1 * var(--grid-gutter));
  margin-right: calc(-1 * var(--grid-gutter));
}
</code></pre>
<h3>They Cascade</h3>
<p>Since preprocessor variables don’t run in the browser, they have no knowledge of the DOM. Therefore they cannot be scoped to DOM elements. CSS custom properties, on the other hand, do have this knowledge. CSS custom properties can be scoped to particular elements, or classes on elements.</p>
<p>A clear use case for this is theme switching:</p>
<pre><code class="language-css">:root {
  --body-background-color: white;
  --body-text-color: black;
}

body {
  background-color: var(--body-background-color);
  color: var(--body-text-color);
}

.dark {
  --body-background-color: black;
  --body-text-color: white;
}
</code></pre>
<h3>They Work Anywhere</h3>
<p>Preprocessor variables do not work in plain CSS or with other preprocessors so their shareability is limited. Because custom properties are native, they can be used with any preprocessor. They can also be accessed and defined through JavaScript.</p>
<p>Here’s an example of overriding default Bootstrap Sass typography variables to use custom properties.</p>
<pre><code class="language-css">$font-size-h1: calc(var(--font-size-base) * 2.6) !default;
$font-size-h2: calc(var(--font-size-base) * 2.15) !default;
$font-size-h3: calc(var(--font-size-base) * 1.7) !default;
$font-size-h4: calc(var(--font-size-base) * 1.25) !default;
$font-size-h5: var(--font-size-base) !default;
$font-size-h6: calc(var(--font-size-base) * 0.85) !default;
</code></pre>
<h3>Using Fallback Values</h3>
<p>If you aren’t sure if a particular custom property exists, you can provide a default value for a particular property. This can be especially useful if you are creating a component that will be packaged up and imported as part of a library.</p>
<p>Simply pass in the default value as the second argument of the <code>var()</code> function:</p>
<pre><code class="language-css">/* single fallback */
.button {
  background-color: var(--button-background-color, gray);
}
</code></pre>
<p>You can provide multiple fallbacks by nesting multiple <code>var()</code> functions inside of each other:</p>
<pre><code class="language-css">/* multiple fallbacks */
.button-primary {
  background-color: var(
    --primary-button-background-color,
    var(
      --button-background-color,
      gray
    )
  );
}
</code></pre>
<h2>Converting Unitless Values</h2>
<p>There may be times when you need to define a custom property as a unitless value and then tack on a unit. This can often be the case when dealing with responsive typography. To accommodate this, simply write a <code>calc()</code> expression where you multiply the custom property value by the unit you wish to add onto it.</p>
<p>Here’s an example of a complex responsive font size calculation using custom properties:</p>
<pre><code class="language-css">:root {
  /* unitless base font size variables in px */
  --unitless-min-font-size: 15;
  --unitless-max-font-size: 18;

  /* unitless viewport widths in px */
  --unitless-lower-font-range: 460;
  --unitless-upper-font-range: 1200;

  --font-size-difference: calc(
    var(--unitless-max-font-size) -
    var(--unitless-min-font-size)
  );
  --font-range-difference: calc(
    var(--unitless-upper-font-range) -
    var(--unitless-lower-font-range)
  );
  --viewport-difference: calc(
    100vw -
    (var(--unitless-lower-font-range) * 1px)
  );
}

html {
  font-size: calc(
    (var(--unitless-min-font-size) * 1px) +
    var(--font-size-difference) *
    var(--viewport-difference) /
    var(--font-range-difference)
  );
}
</code></pre>
<h2>Redefining Custom Properties in Media Queries</h2>
<p>Remember that you can redefine custom properties within media queries. Margins, padding, and grid gutters are particularly good use cases for this. Imagine a condensed view of a grid on mobile, a slightly more spaced out view on tablet, and a view with even more space on desktop. This is possible very simply with custom properties. Instead of redefining the spacing properties on the element, just redefine the custom properties within the media queries.</p>
<pre><code class="language-css">:root {
  --card-padding: 1rem;
}

@media (min-width: 600px) {
  :root {
    --card-padding: 1.25rem;
  }
}

@media (min-width: 1000px) {
  :root {
    --card-padding: 1.5rem;
  }
}

.card {
  padding: var(--card-padding);
}
</code></pre>
<p>Learn how to use custom properties to enable live theming in my article <a href="https://www.jonathanharrell.com/blog/live-theming-with-css-variables" target="_blank" rel="noreferrer">Live Theming with CSS Variables</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s the Deal with Margin Collapse?]]></title>
            <link>https://www.jonathanharrell.com/blog/whats-the-deal-with-margin-collapse</link>
            <guid>https://www.jonathanharrell.com/blog/whats-the-deal-with-margin-collapse</guid>
            <pubDate>Sun, 11 Mar 2018 20:17:00 GMT</pubDate>
            <description><![CDATA[Learn about margin collapse, a fundamental concept of CSS layout. See visual examples of when margin collapse happens, and when it doesn’t.]]></description>
            <content:encoded><![CDATA[<p>The concept of <em>margin collapse</em> is foundational to an understanding of the box model in CSS, but it is actually quite complex and potentially confusing. <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">The spec</a> describing how it works is thorough but difficult to understand. This article is an attempt to give some visual examples to the concepts from the specs.</p>
<p>The basic idea is that if two margins are adjoining, they will collapse into one margin, which will have the greater of the two margin values (it will be the more negative of the margins if both margins are negative).</p>
<h2>What makes margins adjoining?</h2>
<p>The key is understanding when two margins are adjoining. Here are the basic situations:</p>
<h3>Sibling Elements</h3>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Two sets of stacked rectangular blocks representing sibling elements. Each top and bottom pair is separated by a 30px space, which collapses into a single 30px margin between them." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 79h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m90 216h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 462)"></path><path d="m90 261h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 552)"></path><path d="m91 292h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c" fill-rule="nonzero"><path d="m235 218.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z"></path><path d="m226 288.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z"></path><g transform="translate(240.46875 227.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><g transform="translate(240.46875 274.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 102h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 239h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 508)"></path><path d="m431 270h278v136h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m566 266.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 250.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The bottom margin of an element collapses with the top margin of its proceeding sibling.</p>
<h3>Child Elements</h3>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram of a parent element with a top margin of 30px and a child element with a top margin of 30px. Arrows indicate that both margins collapse into one." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 130h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m91 162h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c"><path d="m90 99h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 228)"></path><path d="m90 131h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 292)"></path><path d="m165 101.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 110.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><path d="m156 158.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 144.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 130h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m431 130h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 99h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 228)"></path><path d="m566 126.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 110.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The top margin of an element collapses with the top margin of its first child element.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram of a parent element with a bottom margin of 30px and a child element with a bottom margin of 30px. Both margins collapse into a single 30px space." style="width:100%;height:auto"><g fill="none" fill-rule="evenodd"><path d="m91 100h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m91 208h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><g fill="#e6594c"><path d="m90 347h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 724)"></path><path d="m156 374.5v-1h4v-20.092l-3.564212 6.337131-.245131.435787-.871575-.490261.24513-.435788 4.5-8 .435788-.774733.435788.774733 4.5 8 .24513.435788-.871575.490261-.245131-.435787-3.564212-6.337131v20.092h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 360.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g><path d="m90 379h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 788)"></path><path d="m165 381.5v1h-4v20.091l3.564212-6.336131.245131-.435787.871575.490261-.24513.435788-4.5 8-.435788.774733-.435788-.774733-4.5-8-.24513-.435788.871575-.490261.245131.435787 3.564212 6.336131v-20.091h-4v-1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(170.46875 390.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m431 100h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path><path d="m431 240h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path><path d="m430 379h280v30h-280z" fill="#e6594c" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 788)"></path><path d="m566 406.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill="#e6594c" fill-rule="nonzero"></path><g fill="#e6594c" fill-rule="nonzero" transform="translate(578.46875 390.208008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g></svg></figure></p>
<p>The bottom margin of an element collapses with the bottom margin of its last child element.</p>
<h3>An Element’s Own Top and Bottom Margins</h3>
<p><figure><svg height="400" viewBox="0 0 800 400" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Dashed rectangles representing an element with zero height. The element has top and bottom margins of 30px each, but they collapse into 0px due to the element not occupying vertical space." style="width:100%;height:auto"><defs><path id="a" d="m90 185h280v30h-280z"></path><mask id="b" fill="#fff" height="30" width="280" x="0" y="0"><use xlink:href="#a"></use></mask><path id="c" d="m0 0h280v30h-280z"></path><mask id="d" fill="#fff" height="30" width="280" x="0" y="0"><use xlink:href="#c"></use></mask></defs><g fill="none" fill-rule="evenodd"><use mask="url(#b)" stroke="#f5f5f5" stroke-dasharray="4 3" stroke-width="4" xlink:href="#a"></use><g fill="#e6594c"><path d="m90 155h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 340)"></path><path d="m90 215h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 460)"></path><g fill-rule="nonzero" transform="translate(225.319082 157.480136)"><path d="m.68091839 24.0198644v-1h4v-20.09099997l-3.56421223 6.33613062-.24513062.43578777-.87157554-.49026124.24513062-.43578777 4.5-8 .43578777-.77473381.43578777.77473381 4.50000004 8 .2451306.43578777-.87157556.49026124-.24513062-.43578777-3.56421223-6.33613062v20.09099997h4v1z"></path><g transform="translate(15.149668 9.727872)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g fill-rule="nonzero" transform="translate(225.319082 218.5)"><path d="m9.68091839 0v1l-4-.001v20.092l3.56421223-6.3361306.24513062-.4357878.87157556.4902613-.2451306.4357877-4.50000004 8-.43578777.7747338-.43578777-.7747338-4.5-8-.24513062-.4357877.87157554-.4902613.24513062.4357878 3.56421223 6.3361306v-20.091h-4v-1l4 .001v-.001z"></path><g transform="translate(15.149668 8.708008)"><path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path><path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path><path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path><path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path></g></g><path d="m226 210.5v-1h4v-19h-4v-1h9v1h-4v19h4v1z" fill-rule="nonzero"></path><g fill-rule="nonzero" transform="translate(240.366211 196.208008)"><path d="m0 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835938-.30761719c0-1.40625.45898437-2.24121094 1.21582031-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582031-.83984375-1.21582031-2.24609375z"></path><path d="m7.37792969 7.92480469v-1.92382813h.06347656c.22949219.546875.76171875.859375 1.46972656.859375 1.21582029 0 1.94824219-.86914062 1.94824219-2.30957031v-.71777344c0-1.44042969-.7226562-2.3046875-1.92871094-2.3046875-.72753906 0-1.29882812.34667969-1.50878906.90332031h-.06347656v-.24902343c-.02929688-.40039063-.25390625-.62011719-.63476563-.62011719-.40527343 0-.62988281.25390625-.62988281.71289062v5.64941407c0 .45410156.22949219.70800781.63964844.70800781.41503906 0 .64453125-.25390625.64453125-.70800781zm0-3.35449219v-.68847656c0-.83007813.41503906-1.32324219 1.08886719-1.32324219.68847656 0 1.07910156.5078125 1.07910156 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.06933594 1.40136718-.65917969 0-1.09863281-.49804687-1.09863281-1.25976562z"></path><path d="m11.6259766 6.25c0 .33691406.258789.59082031.571289.59082031.2832032 0 .4589844-.12695312.6738282-.45410156l.9033203-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.2099609-.32226563-.390625-.44921875-.6689453-.44921875-.3222656 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841796 1.62109375c-.0976563.10742188-.15625.26855469-.15625.42480469z"></path></g></g><g transform="translate(430 185)"><use mask="url(#d)" stroke="#f5f5f5" stroke-dasharray="4 3" stroke-width="4" xlink:href="#c"></use><g fill="#e6594c" fill-rule="nonzero"><path d="m136 25.5v-1h4v-19h-4v-1h9v1h-4v19h4v1z"></path><g transform="translate(150.366211 11.208008)"><path d="m0 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882813-1.31347656 2.54882813-3.31054687v-.3125c0-2.01660157-.9375-3.31054688-2.52929688-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835938-.30761719c0-1.40625.45898437-2.24121094 1.21582031-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582031-.83984375-1.21582031-2.24609375z"></path><path d="m7.37792969 7.92480469v-1.92382813h.06347656c.22949219.546875.76171875.859375 1.46972656.859375 1.21582029 0 1.94824219-.86914062 1.94824219-2.30957031v-.71777344c0-1.44042969-.7226562-2.3046875-1.92871094-2.3046875-.72753906 0-1.29882812.34667969-1.50878906.90332031h-.06347656v-.24902343c-.02929688-.40039063-.25390625-.62011719-.63476563-.62011719-.40527343 0-.62988281.25390625-.62988281.71289062v5.64941407c0 .45410156.22949219.70800781.63964844.70800781.41503906 0 .64453125-.25390625.64453125-.70800781zm0-3.35449219v-.68847656c0-.83007813.41503906-1.32324219 1.08886719-1.32324219.68847656 0 1.07910156.5078125 1.07910156 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.06933594 1.40136718-.65917969 0-1.09863281-.49804687-1.09863281-1.25976562z"></path><path d="m11.6259766 6.25c0 .33691406.258789.59082031.571289.59082031.2832032 0 .4589844-.12695312.6738282-.45410156l.9033203-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.2099609-.32226563-.390625-.44921875-.6689453-.44921875-.3222656 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841796 1.62109375c-.0976563.10742188-.15625.26855469-.15625.42480469z"></path></g></g></g></g></svg></figure></p>
<p>The top and bottom margins of an element collapse if the element has no height, padding, or border and all of its children elements’ margins collapse (height is represented here only for clarity).</p>
<h2>When does margin collapse not occur?</h2>
<p>There are several exceptions to these rules. This is where things can get hard to follow. Following are some visual examples of situations where margins would not collapse. For a more complete understanding, refer to <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">the spec</a>.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Left side shows a parent with padding above a child element. Both have 30px top margins, which do not collapse due to the padding. Right side has the same margins but no padding, so margins collapse." style="width:100%;height:auto">
    <defs>
        <path id="a2" d="m0 0h276v30h-276z"></path>
        <mask id="b2" fill="#fff">
            <use fill="#fff" fill-rule="evenodd" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a2"></use>
        </mask>
    </defs>
    <g fill="none" fill-rule="evenodd">
        <path d="m370 130v280h-280v-280" stroke="#f5f5f5" stroke-width="2"></path>
        <path d="m431 131h278v278h-278z" stroke="#f5f5f5" stroke-width="2"></path>
        <path d="m89 130h282" stroke="#f5f5f5" stroke-width="4"></path>
        <path d="m90 163h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path>
        <g transform="translate(430 162)">
            <path d="m1 31h138v138h-138z" fill="#525252" stroke="#f5f5f5" stroke-width="2"></path>
            <g fill="#e6594c">
                <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z" fill-rule="nonzero"></path>
                <g fill-rule="nonzero" transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c">
            <path d="m89 98h282v30h-282z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 226)"></path>
            <path d="m90 132h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 294)"></path>
            <path d="m155 125.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(169.46875 109.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <path d="m155 159.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(170.46875 145.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <path d="m430 100h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 230)"></path>
            <path d="m566 127.5v-1h4v-23h-4v-1h9v1h-4v23h4v1z" fill-rule="nonzero"></path>
            <g fill-rule="nonzero" transform="translate(578.46875 111.208008)">
                <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
            </g>
            <g transform="translate(432 132)">
                <use fill-opacity="0.1" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a2"></use>
                <path d="m31.8087452-2.20709356.7114183.70276883-32.31371111 32.71141833-.71141829-.7027689zm-7.9027356 0 .7114183.70276883-32.31371107 32.71141833-.71141829-.7027689zm-7.9027355 0 .7114182.70276883-32.313711 32.71141833-.7114183-.7027689zm-7.90273561 0 .71141829.70276883-32.31371108 32.71141833-.7114183-.7027689zm31.61094221 0 .7114183.70276883-32.31371105 32.71141833-.71141828-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027355 0 .7114183.70276883-32.3137111 32.71141833-.7114182-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114182.70276883-32.313711 32.71141833-.7114183-.7027689zm7.9027355 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027356 0 .7114183.70276883-32.3137111 32.71141833-.7114183-.7027689zm7.9027353 0 .711419.70276883-32.3137115 32.71141833-.7114183-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.7114183-.7027689zm7.902735 0 .711419.70276883-32.3137114 32.71141833-.7114183-.7027689zm7.902736 0 .711418.70276883-32.3137109 32.71141833-.7114182-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711419-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313712 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902736 0 .711418.70276883-32.313711 32.71141833-.711418-.7027689zm7.902735 0 .711419.70276883-32.313711 32.71141833-.711419-.7027689z" fill-rule="nonzero" mask="url(#b2)"></path>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>If the parent element has a top border or padding, the parent’s top margin does not collapse with the first child’s top margin.</p>
<p><figure><svg height="507" viewBox="0 0 800 507" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-label="Left side shows a parent with bottom padding and a child with bottom margin; margins do not collapse. Right side shows same margins but no padding; the 30px margins collapse." style="width:100%;height:auto">
    <defs>
        <path id="a3" d="m0 0h276v30h-276z"></path>
        <mask id="b3" fill="#fff">
            <use fill="#fff" fill-rule="evenodd" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a3"></use>
        </mask>
    </defs>
    <g fill="none" fill-rule="evenodd">
        <g stroke="#f5f5f5">
            <path d="m90 378v-280h280v280" stroke-width="2"></path>
            <path d="m431 99h278v278h-278z" stroke-width="2"></path>
            <path d="m89 378h282" stroke-width="4"></path>
            <path d="m90 207h138v138h-138z" fill="#525252" stroke-width="2"></path>
            <path d="m431 177h138v138h-138z" fill="#525252" stroke-width="2"></path>
        </g>
        <g fill="#e6594c" transform="translate(89 380)">
            <path d="m0 0h282v30h-282z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 11.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(89 346)">
            <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(432 346)">
            <use fill-opacity="0.1" transform="matrix(1 0 0 -1 0 30)" xlink:href="#a3"></use>
            <g fill-rule="nonzero" mask="url(#b3)">
                <g transform="translate(-24 -2)">
                    <path d="m55.8087452-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m47.9060096-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m40.0032741-.20709356.7114182.70276883-32.31371103 32.71141833-.71141829-.7027689z"></path>
                    <path d="m32.1005385-.20709356.7114183.70276883-32.3137111 32.71141833-.71141828-.7027689z"></path>
                    <path d="m63.7114807-.20709356.7114183.70276883-32.313711 32.71141833-.7114183-.7027689z"></path>
                    <path d="m71.6142163-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m79.5169519-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m87.4196874-.20709356.7114183.70276883-32.3137111 32.71141833-.7114182-.7027689z"></path>
                    <path d="m95.322423-.20709356.7114183.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m103.225159-.20709356.711418.70276883-32.3137112 32.71141833-.7114183-.7027689z"></path>
                    <path d="m111.127894-.20709356.711418.70276883-32.3137107 32.71141833-.7114183-.7027689z"></path>
                    <path d="m119.03063-.20709356.711418.70276883-32.3137111 32.71141833-.7114183-.7027689z"></path>
                    <path d="m126.933365-.20709356.711419.70276883-32.3137115 32.71141833-.7114183-.7027689z"></path>
                    <path d="m134.836101-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m142.738836-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m150.641572-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m158.544307-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m166.447043-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m174.349779-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m182.252514-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m190.15525-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m198.057985-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m205.960721-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m213.863456-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m221.766192-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m229.668928-.20709356.711418.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m237.571663-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m245.474399-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m253.377134-.20709356.711419.70276883-32.313712 32.71141833-.711418-.7027689z"></path>
                    <path d="m261.27987-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m269.182605-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m277.085341-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m284.988076-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                    <path d="m292.890812-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m300.793548-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m308.696283-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m316.599019-.20709356.711418.70276883-32.313711 32.71141833-.711418-.7027689z"></path>
                    <path d="m324.501754-.20709356.711419.70276883-32.313711 32.71141833-.711419-.7027689z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(430 378)">
            <path d="m0 0h280v30h-280z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m136 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(148.46875 11.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
        <g fill="#e6594c" transform="translate(430 316)">
            <path d="m0 0h140v30h-140z" fill-opacity="0.5" opacity=".25" transform="matrix(1 0 0 -1 0 30)"></path>
            <g fill-rule="nonzero">
                <path d="m66 27.5v-1h4v-23h-4v-1h.5 8 .5v1l-4-.001v23.001h4v1z"></path>
                <g transform="translate(80.46875 13.208008)">
                    <path d="m0 5.38574219c0 .80566406 1.01074219 1.54785156 2.32910156 1.54785156 1.46972656 0 2.50488282-.81542969 2.50488282-1.98242187 0-.84472657-.61035157-1.53808594-1.42089844-1.61621094v-.08300782c.67382812-.09765624 1.21582031-.76171874 1.21582031-1.484375 0-1.04003906-.94726563-1.76757812-2.29492187-1.76757812-1.27441407 0-2.2265625.71777344-2.2265625 1.49902344 0 .31738281.22460937.53710937.53710937.53710937.22949219 0 .40039063-.10253906.546875-.34667969.25878906-.43945312.63476563-.6640625 1.11816406-.6640625.62011719 0 1.04980469.36621094 1.04980469.90332032 0 .53710937-.43945312.92773437-1.04003906.92773437h-.45410156c-.29785157 0-.50781251.21972657-.50781251.51269531 0 .30273438.21484375.52246094.50781251.52246094h.47851562c.71777344 0 1.20117187.41015625 1.20117187 1.015625s-.47363281 1.00097656-1.20605468 1.00097656c-.546875 0-.98144532-.23925781-1.26464844-.68847656-.18066406-.26367187-.34179687-.36621094-.55664062-.36621094-.29785157 0-.51757813.22460938-.51757813.53222657z"></path>
                    <path d="m5.58105469 3.62304688c0 2.01171874.94238281 3.31054687 2.52441406 3.31054687s2.54882815-1.31347656 2.54882815-3.31054687v-.3125c0-2.01660157-.93750002-3.31054688-2.5292969-3.31054688-1.58691406 0-2.54394531 1.30859375-2.54394531 3.31054688zm1.31835937-.30761719c0-1.40625.45898438-2.24121094 1.21582032-2.24121094.75683593 0 1.21582031.83984375 1.21582031 2.24121094v.29785156c0 1.40625-.45898438 2.24609375-1.21582031 2.24609375-.75683594 0-1.21582032-.83984375-1.21582032-2.24609375z"></path>
                    <path d="m12.9589844 7.92480469v-1.92382813h.0634765c.2294922.546875.7617188.859375 1.4697266.859375 1.2158203 0 1.9482422-.86914062 1.9482422-2.30957031v-.71777344c0-1.44042969-.7226563-2.3046875-1.9287109-2.3046875-.7275391 0-1.2988282.34667969-1.5087891.90332031h-.0634766v-.24902343c-.0292969-.40039063-.2539062-.62011719-.6347656-.62011719-.4052734 0-.6298828.25390625-.6298828.71289062v5.64941407c0 .45410156.2294922.70800781.6396484.70800781.4150391 0 .6445313-.25390625.6445313-.70800781zm0-3.35449219v-.68847656c0-.83007813.415039-1.32324219 1.0888672-1.32324219.6884765 0 1.0791015.5078125 1.0791015 1.40136719v.46875c0 .88867187-.390625 1.40136718-1.0693359 1.40136718-.6591797 0-1.0986328-.49804687-1.0986328-1.25976562z"></path>
                    <path d="m17.2070312 6.25c0 .33691406.2587891.59082031.5712891.59082031.2832031 0 .4589844-.12695312.6738281-.45410156l.9033204-1.38671875h.0634765l.9228516 1.39160156c.2050781.31738282.3955078.44921875.6835937.44921875.3125 0 .5712891-.25390625.5712891-.59570312 0-.17089844-.0634766-.32226563-.2001953-.46386719l-1.2646485-1.57714844 1.2988282-1.61621094c.102539-.11230468.15625-.26367187.15625-.41992187 0-.34179687-.2539063-.59082031-.5761719-.59082031-.2783203 0-.4541016.12695312-.6689453.44921875l-.9228516 1.38671875h-.0634765l-.9277344-1.38671875c-.209961-.32226563-.390625-.44921875-.6689453-.44921875-.3222657 0-.5859375.24902344-.5859375.5859375 0 .16113281.0683593.33203125.1708984.43945312l1.3037109 1.6015625-1.2841797 1.62109375c-.0976562.10742188-.15625.26855469-.15625.42480469z"></path>
                </g>
            </g>
        </g>
    </g>
</svg></figure></p>
<p>If the parent element has a bottom border or padding, the parent’s bottom margin does not collapse with the last child’s bottom margin.</p>
<h2>Further Resources</h2>
<p>There are some additional, more complex scenarios that prevent collapse that aren’t covered here. For updated and complete information, see the <a href="https://www.w3.org/TR/CSS2/box.html#collapsing-margins" target="_blank" rel="noreferrer">CSS Box Model Spec</a>.</p>]]></content:encoded>
        </item>
    </channel>
</rss>