<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://csswitch.github.io/jekyll-glass-theme/feed.xml" rel="self" type="application/atom+xml" /><link href="https://csswitch.github.io/jekyll-glass-theme/" rel="alternate" type="text/html" /><updated>2026-05-12T20:27:31+00:00</updated><id>https://csswitch.github.io/jekyll-glass-theme/feed.xml</id><title type="html">Glass Theme</title><subtitle>A glassmorphism Jekyll theme with frosted glass UI, ambient backgrounds, and smooth animations.</subtitle><author><name>Your Name</name><email>you@example.com</email></author><entry><title type="html">Glassmorphism CSS Deep Dive — How backdrop-filter Works</title><link href="https://csswitch.github.io/jekyll-glass-theme/2024/01/22/glassmorphism-css-deep-dive/" rel="alternate" type="text/html" title="Glassmorphism CSS Deep Dive — How backdrop-filter Works" /><published>2024-01-22T00:00:00+00:00</published><updated>2024-01-22T00:00:00+00:00</updated><id>https://csswitch.github.io/jekyll-glass-theme/2024/01/22/glassmorphism-css-deep-dive</id><content type="html" xml:base="https://csswitch.github.io/jekyll-glass-theme/2024/01/22/glassmorphism-css-deep-dive/"><![CDATA[<p><code class="language-plaintext highlighter-rouge">backdrop-filter</code> is the CSS property that makes glassmorphism possible. Let’s dig into how it actually works, where it’s supported, and how to write fallbacks properly.</p>

<h2 id="how-backdrop-filter-works">How backdrop-filter Works</h2>

<p><code class="language-plaintext highlighter-rouge">backdrop-filter</code> applies a filter effect to the area <strong>behind</strong> an element, rather than to the element itself. The key is that it filters what’s rendered <em>below</em> the element in the stacking context.</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.glass-card</span> <span class="p">{</span>
  <span class="nl">background</span><span class="p">:</span> <span class="n">rgba</span><span class="p">(</span><span class="m">255</span><span class="p">,</span> <span class="m">255</span><span class="p">,</span> <span class="m">255</span><span class="p">,</span> <span class="m">0.08</span><span class="p">);</span>
  <span class="py">backdrop-filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">16px</span><span class="p">)</span> <span class="n">saturate</span><span class="p">(</span><span class="m">1.5</span><span class="p">);</span>
  <span class="nl">-webkit-backdrop-filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">16px</span><span class="p">)</span> <span class="n">saturate</span><span class="p">(</span><span class="m">1.5</span><span class="p">);</span>
  <span class="nl">border</span><span class="p">:</span> <span class="m">1px</span> <span class="nb">solid</span> <span class="n">rgba</span><span class="p">(</span><span class="m">255</span><span class="p">,</span> <span class="m">255</span><span class="p">,</span> <span class="m">255</span><span class="p">,</span> <span class="m">0.15</span><span class="p">);</span>
  <span class="nl">border-radius</span><span class="p">:</span> <span class="m">12px</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Three things are working together here:</p>

<ol>
  <li><strong>Semi-transparent background</strong> — lets the element behind show through</li>
  <li><strong>backdrop-filter blur</strong> — blurs what’s behind the element</li>
  <li><strong>Subtle border</strong> — catches the light, gives the glass edge definition</li>
</ol>

<h2 id="browser-support">Browser Support</h2>

<p>As of 2024, <code class="language-plaintext highlighter-rouge">backdrop-filter</code> has <strong>~96% global browser support</strong>:</p>

<table>
  <thead>
    <tr>
      <th>Browser</th>
      <th>Support</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Chrome 76+</td>
      <td>✅ Full</td>
    </tr>
    <tr>
      <td>Firefox 103+</td>
      <td>✅ Full</td>
    </tr>
    <tr>
      <td>Safari 9+</td>
      <td>✅ <code class="language-plaintext highlighter-rouge">-webkit-</code> prefix</td>
    </tr>
    <tr>
      <td>Edge 79+</td>
      <td>✅ Full</td>
    </tr>
  </tbody>
</table>

<p>Always include the <code class="language-plaintext highlighter-rouge">-webkit-</code> prefixed version for Safari.</p>

<h2 id="performance-considerations">Performance Considerations</h2>

<p><code class="language-plaintext highlighter-rouge">backdrop-filter</code> is GPU-accelerated but still expensive. Best practices:</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">/* Add will-change to hint the browser */</span>
<span class="nc">.glass-card</span> <span class="p">{</span>
  <span class="py">will-change</span><span class="p">:</span> <span class="n">transform</span><span class="p">;</span>
  <span class="py">backdrop-filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">16px</span><span class="p">);</span>
<span class="p">}</span>

<span class="c">/* Limit the number of blurred elements visible at once */</span>
<span class="c">/* Each backdrop-filter creates a stacking context */</span>
</code></pre></div></div>

<p><strong>Don’t</strong> apply <code class="language-plaintext highlighter-rouge">backdrop-filter</code> to hundreds of elements — it gets expensive fast. Apply it to cards, navs, and modals only.</p>

<h2 id="the-fallback-pattern">The Fallback Pattern</h2>

<p>For browsers without support (rare in 2024, but good practice):</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.glass-card</span> <span class="p">{</span>
  <span class="nl">background</span><span class="p">:</span> <span class="n">rgba</span><span class="p">(</span><span class="m">20</span><span class="p">,</span> <span class="m">20</span><span class="p">,</span> <span class="m">40</span><span class="p">,</span> <span class="m">0.85</span><span class="p">);</span>
  <span class="py">backdrop-filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">16px</span><span class="p">);</span>
  <span class="nl">-webkit-backdrop-filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">16px</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">@supports</span> <span class="n">not</span> <span class="p">(</span><span class="n">backdrop-filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">1px</span><span class="p">))</span> <span class="p">{</span>
  <span class="nc">.glass-card</span> <span class="p">{</span>
    <span class="c">/* Solid fallback for older browsers */</span>
    <span class="nl">background</span><span class="p">:</span> <span class="n">rgba</span><span class="p">(</span><span class="m">20</span><span class="p">,</span> <span class="m">20</span><span class="p">,</span> <span class="m">40</span><span class="p">,</span> <span class="m">0.95</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="creating-the-aurora-orb-background">Creating the Aurora Orb Background</h2>

<p>The animated orbs in this theme use a simple CSS keyframe animation:</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.orb</span> <span class="p">{</span>
  <span class="nl">position</span><span class="p">:</span> <span class="nb">fixed</span><span class="p">;</span>
  <span class="nl">width</span><span class="p">:</span> <span class="m">600px</span><span class="p">;</span>
  <span class="nl">height</span><span class="p">:</span> <span class="m">600px</span><span class="p">;</span>
  <span class="nl">border-radius</span><span class="p">:</span> <span class="m">50%</span><span class="p">;</span>
  <span class="nl">background</span><span class="p">:</span> <span class="n">hsl</span><span class="p">(</span><span class="m">260</span><span class="p">,</span> <span class="m">70%</span><span class="p">,</span> <span class="m">55%</span><span class="p">);</span>
  <span class="nl">filter</span><span class="p">:</span> <span class="n">blur</span><span class="p">(</span><span class="m">80px</span><span class="p">);</span>   <span class="c">/* &lt;-- NOT backdrop-filter, just regular blur */</span>
  <span class="nl">opacity</span><span class="p">:</span> <span class="m">0.45</span><span class="p">;</span>
  <span class="nl">animation</span><span class="p">:</span> <span class="n">float</span> <span class="m">22s</span> <span class="n">ease-in-out</span> <span class="n">infinite</span> <span class="n">alternate</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">@keyframes</span> <span class="n">float</span> <span class="p">{</span>
  <span class="nt">from</span> <span class="p">{</span> <span class="nl">transform</span><span class="p">:</span> <span class="n">translate</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">)</span> <span class="n">scale</span><span class="p">(</span><span class="m">1</span><span class="p">);</span> <span class="p">}</span>
  <span class="nt">to</span>   <span class="p">{</span> <span class="nl">transform</span><span class="p">:</span> <span class="n">translate</span><span class="p">(</span><span class="m">40px</span><span class="p">,</span> <span class="m">30px</span><span class="p">)</span> <span class="n">scale</span><span class="p">(</span><span class="m">1.08</span><span class="p">);</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>The orbs are the background layer. The glass cards then sit above them and blur through with <code class="language-plaintext highlighter-rouge">backdrop-filter</code>.</p>

<h2 id="wrapping-up">Wrapping Up</h2>

<p>Glassmorphism with <code class="language-plaintext highlighter-rouge">backdrop-filter</code> is now fully production-ready:</p>
<ul>
  <li>Wide browser support (96%+)</li>
  <li>GPU accelerated</li>
  <li>Pure CSS — no JS needed</li>
</ul>

<p>The key to making it look good: generous blur (12–20px), very subtle transparent backgrounds (5–12% opacity), and thin semi-transparent borders.</p>]]></content><author><name>Your Name</name><email>you@example.com</email></author><category term="css" /><category term="glassmorphism" /><category term="frontend" /><category term="tutorial" /><summary type="html"><![CDATA[A technical deep-dive into CSS backdrop-filter, browser support, fallbacks, and performance considerations.]]></summary></entry><entry><title type="html">Welcome to Glass Theme — A Glassmorphism Jekyll Theme</title><link href="https://csswitch.github.io/jekyll-glass-theme/2024/01/15/welcome-to-glass-theme/" rel="alternate" type="text/html" title="Welcome to Glass Theme — A Glassmorphism Jekyll Theme" /><published>2024-01-15T00:00:00+00:00</published><updated>2024-01-15T00:00:00+00:00</updated><id>https://csswitch.github.io/jekyll-glass-theme/2024/01/15/welcome-to-glass-theme</id><content type="html" xml:base="https://csswitch.github.io/jekyll-glass-theme/2024/01/15/welcome-to-glass-theme/"><![CDATA[<p>Welcome to <strong>Glass Theme</strong> — a Jekyll theme built around the glassmorphism design aesthetic. Frosted glass cards, ambient animated backgrounds, smooth transitions, and zero JavaScript dependencies (other than a tiny vanilla JS file).</p>

<h2 id="what-is-glassmorphism">What is Glassmorphism?</h2>

<p>Glassmorphism is a UI trend popularized around 2020–2021. Key characteristics:</p>

<ul>
  <li><strong>Frosted glass effect</strong> — elements appear as translucent frosted surfaces</li>
  <li><strong>Background blur</strong> — <code class="language-plaintext highlighter-rouge">backdrop-filter: blur()</code> creates the glass illusion</li>
  <li><strong>Subtle borders</strong> — thin semi-transparent borders enhance the glass edges</li>
  <li><strong>Depth through layering</strong> — colored orbs/shapes visible through the glass</li>
</ul>

<p>This theme implements all of these properly in pure CSS.</p>

<h2 id="configuring-your-theme">Configuring Your Theme</h2>

<p>Open <code class="language-plaintext highlighter-rouge">_config.yml</code> and tweak the <code class="language-plaintext highlighter-rouge">glass:</code> block:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">glass</span><span class="pi">:</span>
  <span class="na">background</span><span class="pi">:</span> <span class="s2">"</span><span class="s">aurora"</span>   <span class="c1"># aurora | mesh | bokeh | minimal</span>
  <span class="na">accent_hue</span><span class="pi">:</span> <span class="m">260</span>        <span class="c1"># 0-360 hue (260 = purple, 200 = blue, 150 = green)</span>
  <span class="na">orbs</span><span class="pi">:</span> <span class="no">true</span>             <span class="c1"># animated background orbs</span>
  <span class="na">blur</span><span class="pi">:</span> <span class="m">16</span>               <span class="c1"># card blur intensity in px</span>
  <span class="na">reading_progress</span><span class="pi">:</span> <span class="no">true</span> <span class="c1"># progress bar on posts</span>
</code></pre></div></div>

<p>Changing <code class="language-plaintext highlighter-rouge">accent_hue</code> shifts the entire color palette — accent colors, tag pills, link highlights, orbs.</p>

<h2 id="writing-posts">Writing Posts</h2>

<p>Posts go in <code class="language-plaintext highlighter-rouge">_posts/</code> with the filename format: <code class="language-plaintext highlighter-rouge">YYYY-MM-DD-title.md</code></p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">layout</span><span class="pi">:</span> <span class="s">post</span>
<span class="na">title</span><span class="pi">:</span> <span class="s2">"</span><span class="s">My</span><span class="nv"> </span><span class="s">Post</span><span class="nv"> </span><span class="s">Title"</span>
<span class="na">date</span><span class="pi">:</span> <span class="s">2024-01-15</span>
<span class="na">tags</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">tag1</span><span class="pi">,</span> <span class="nv">tag2</span><span class="pi">]</span>
<span class="na">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Short</span><span class="nv"> </span><span class="s">description</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">SEO"</span>
<span class="nn">---</span>

Your content here...
</code></pre></div></div>

<h2 id="code-highlighting">Code Highlighting</h2>

<p>Code blocks get syntax highlighting via Rouge and a copy button automatically:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">glass</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="dl">'</span><span class="s1">.glass-card</span><span class="dl">'</span><span class="p">);</span>
<span class="nx">glass</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">backdropFilter</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">blur(16px)</span><span class="dl">'</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">✨ glassmorphism enabled</span><span class="dl">'</span><span class="p">);</span>
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">frosted_glass</span><span class="p">(</span><span class="n">blur_px</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">16</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
    <span class="k">return</span> <span class="sa">f</span><span class="s">"backdrop-filter: blur(</span><span class="si">{</span><span class="n">blur_px</span><span class="si">}</span><span class="s">px)"</span>
</code></pre></div></div>

<h2 id="whats-next">What’s Next?</h2>

<ul>
  <li>Add your posts to <code class="language-plaintext highlighter-rouge">_posts/</code></li>
  <li>Edit <code class="language-plaintext highlighter-rouge">about.md</code> to introduce yourself</li>
  <li>Update <code class="language-plaintext highlighter-rouge">_config.yml</code> with your site name, author info, and social links</li>
  <li>Optionally link a custom domain in your repo settings</li>
</ul>

<p>Enjoy the theme! Any questions or issues → <a href="https://github.com/csswitch/jekyll-glass-theme/issues">open an issue</a>.</p>]]></content><author><name>Your Name</name><email>you@example.com</email></author><category term="design" /><category term="getting-started" /><category term="glassmorphism" /><summary type="html"><![CDATA[An intro to Glass Theme — frosted glass UI, animated orbs, configurable accent colors, and zero dependencies.]]></summary></entry></feed>