<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fylgja CSS</title>
    <description>The latest articles on DEV Community by Fylgja CSS (@fylgja).</description>
    <link>https://dev.to/fylgja</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4624%2F1fba3651-889a-4e1d-b9d0-3912d82c4b54.jpg</url>
      <title>DEV Community: Fylgja CSS</title>
      <link>https://dev.to/fylgja</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fylgja"/>
    <language>en</language>
    <item>
      <title>Native CSS Utilities</title>
      <dc:creator>Sean van Zuidam</dc:creator>
      <pubDate>Thu, 05 Feb 2026 10:04:30 +0000</pubDate>
      <link>https://dev.to/fylgja/native-css-utilities-297j</link>
      <guid>https://dev.to/fylgja/native-css-utilities-297j</guid>
      <description>&lt;p&gt;With every passing year, CSS becomes more powerful.&lt;br&gt;
The last few have brought amazing additions that are now becoming baseline, and 2026 is shaping up to continue that trend.&lt;/p&gt;

&lt;p&gt;Today, we'll focus on one upcoming feature that will fundamentally change how we write CSS utilities: the &lt;code&gt;attr()&lt;/code&gt; function.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is &lt;code&gt;attr()&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;attr()&lt;/code&gt; function allows you to use HTML attribute values directly in your CSS.&lt;br&gt;
In the past, its use was limited to the &lt;code&gt;content&lt;/code&gt; property for displaying text, like showing a link's URL in a print stylesheet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fylgja.dev/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Explore FylgjaCSS&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="n"&gt;print&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;href&lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="s1"&gt;"https://"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;" ("&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s1"&gt;")"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Soon, however, &lt;code&gt;attr()&lt;/code&gt; will be usable with &lt;em&gt;any&lt;/em&gt; CSS property and will support types beyond just strings.&lt;/p&gt;

&lt;p&gt;This opens up a world of possibilities, especially for utility systems.&lt;br&gt;
By adding a type similar to &lt;code&gt;@property&lt;/code&gt; you can tell the browser what kind of value to expect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-grid-cols=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-grid-cols&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--col-count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data-grid-cols&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--col-count&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;minmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we're telling the browser that &lt;code&gt;data-grid-cols&lt;/code&gt; should be a &lt;code&gt;number&lt;/code&gt;.&lt;br&gt;
If an invalid value is provided (e.g., &lt;code&gt;#fff&lt;/code&gt;), the browser will use our fallback of &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Evolution of CSS Utilities
&lt;/h2&gt;

&lt;p&gt;So, how does this change the way we build CSS Utilities? Let's look at the evolution of a simple padding utility.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Static, Generated Classes
&lt;/h3&gt;

&lt;p&gt;The most common approach today is a static utility framework like Tailwind CSS,&lt;br&gt;
which generates a separate class for each variation.&lt;/p&gt;

&lt;p&gt;This is predictable and easy to use, but requires a large CSS file or a build step to generate the styles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"py-2 px-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"py-3 px-5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;/* Generated CSS */&lt;/span&gt;
&lt;span class="nc"&gt;.py-2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.px-4&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-inline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.py-3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.px-5&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-inline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Dynamic Utilities with CSS Variables
&lt;/h3&gt;

&lt;p&gt;To avoid large CSS files and build tools, we at Fylgja developed &lt;a href="https://dev.to/docs/concepts/dynamic-css-utilities/"&gt;Dynamic CSS Utilities&lt;/a&gt; using inline styles to set CSS variables.&lt;/p&gt;

&lt;p&gt;The CSS is minimal, but it comes at the cost of verbosity in the HTML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"--py: .5rem; --px: 1rem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"--py: var(--size-3); --px: 1.25rem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;*=&lt;/span&gt;&lt;span class="s1"&gt;"--py:"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--py&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;*=&lt;/span&gt;&lt;span class="s1"&gt;"--px:"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-inline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Native Utilities with &lt;code&gt;attr()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The new &lt;code&gt;attr()&lt;/code&gt; function gives us the best of both worlds:&lt;br&gt;
the clean HTML of static classes and the dynamic,&lt;br&gt;
build-free nature of CSS variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-py=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;data-px=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-py=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt; &lt;span class="na"&gt;data-px=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-py&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--data-py&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-px&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-inline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--data-px&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach is clean, requires no build step, and gives us sensible defaults.&lt;br&gt;
It even handles responsive variants elegantly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-md-py=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="err"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-md-py&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;padding-block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--spacing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="n"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--data-py&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Finding the Right Balance
&lt;/h2&gt;

&lt;p&gt;Should &lt;code&gt;attr()&lt;/code&gt; be used for everything&lt;br&gt;
A hard &lt;strong&gt;NO&lt;/strong&gt;. Utilities are great for simple, repeatable patterns like layouts, but they shouldn't replace well-crafted components.&lt;br&gt;
They should complement them.&lt;/p&gt;

&lt;p&gt;For example, our own &lt;code&gt;@fylgja/card&lt;/code&gt; component can be combined with &lt;code&gt;attr()&lt;/code&gt; based utilities&lt;br&gt;
to create complex variations without writing new CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt; &lt;span class="na"&gt;md-grid-cols=&lt;/span&gt;&lt;span class="s"&gt;"50px 1fr"&lt;/span&gt; &lt;span class="na"&gt;gap=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;md-grid-cols&lt;/code&gt; and &lt;code&gt;gap&lt;/code&gt; could be &lt;code&gt;attr()&lt;/code&gt; utilities that apply layout styles at different breakpoints,&lt;br&gt;
making the component system both flexible and readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;This new way of defining CSS utilities is exciting, but it's still on the horizon.&lt;br&gt;
As of this writing, the typed &lt;code&gt;attr()&lt;/code&gt; function is &lt;a href="https://webstatus.dev/features/attr" rel="noopener noreferrer"&gt;only supported in Chrome and Edge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While we wait for broader browser support, you can experiment with this approach today.&lt;br&gt;
We are exploring it for &lt;code&gt;@fylgja/utilities&lt;/code&gt;,&lt;br&gt;
and you can check out the &lt;a href="https://github.com/fylgja/fylgja/blob/main/utilities/utils/experimental/spacing.css" rel="noopener noreferrer"&gt;spacing utilities&lt;/a&gt; we showed here.&lt;/p&gt;

&lt;p&gt;A build tool could be an option in the future to create the fallback values, but for now, using inline CSS variables,&lt;br&gt;
as shown in our &lt;a href="https://dev.to/docs/concepts/dynamic-css-utilities/"&gt;Dynamic CSS Utilities&lt;/a&gt; concept, remains a great, cross-browser compatible solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Shout-Out
&lt;/h2&gt;

&lt;p&gt;While writing this post, we did our own research and experimented with &lt;code&gt;attr()&lt;/code&gt; support in Fylgja.&lt;br&gt;
But we also took inspiration from these excellent articles by other developers exploring the same topic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://una.im/advanced-attr" rel="noopener noreferrer"&gt;Advanced CSS &lt;code&gt;attr()&lt;/code&gt;&lt;/a&gt; by Una Kravets&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ishadeed.com/article/modern-attr/" rel="noopener noreferrer"&gt;The Modern &lt;code&gt;attr()&lt;/code&gt;&lt;/a&gt; by Ahmad Shadeed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We especially loved the approach to CSS Anchors in Una's article.&lt;br&gt;
If you want to dive deeper into &lt;code&gt;attr()&lt;/code&gt;, we highly recommend giving their posts a read.&lt;/p&gt;

&lt;p&gt;For the most detailed technical information,&lt;br&gt;
the MDN Web Docs are always the best place to check: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/attr" rel="noopener noreferrer"&gt;MDN &lt;code&gt;attr()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>fylgjacss</category>
      <category>tailwindcss</category>
      <category>css</category>
      <category>cssprops</category>
    </item>
    <item>
      <title>What Are Design Tokens, and Why Should You Care?</title>
      <dc:creator>Sean van Zuidam</dc:creator>
      <pubDate>Tue, 23 Sep 2025 07:58:44 +0000</pubDate>
      <link>https://dev.to/fylgja/what-are-design-tokens-and-why-should-you-care-289c</link>
      <guid>https://dev.to/fylgja/what-are-design-tokens-and-why-should-you-care-289c</guid>
      <description>&lt;p&gt;As developers and designers, we've all been there. You're working on a new feature, and you need to use the brand's primary color. You open the inspector, find a button that looks right, and copy the hex code: &lt;code&gt;#3B82F6&lt;/code&gt;. A week later, another developer does the same but samples it from a slightly different banner and gets &lt;code&gt;#3B83F7&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Individually, these tiny inconsistencies are harmless. But they accumulate. Over time, your application's UI becomes a patchwork of "almost-right" values, leading to a messy user experience and a maintenance nightmare.&lt;/p&gt;

&lt;p&gt;This is the problem that &lt;strong&gt;Design Tokens&lt;/strong&gt; solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Exactly Are Design Tokens?
&lt;/h2&gt;

&lt;p&gt;At their core, &lt;strong&gt;design tokens are a methodology for managing your design decisions&lt;/strong&gt;. They are named entities that store the individual, low-level values of your design system, like colors, spacing, typography, and corner radii.&lt;/p&gt;

&lt;p&gt;Think of them as variables for your design. Instead of hard-coding a value like &lt;code&gt;#3B82F6&lt;/code&gt; directly in your CSS or UI component, you reference a token, for example, &lt;code&gt;color-brand-primary&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These tokens are stored in a technology-agnostic format like JSON, so they can be used anywhere. Here's a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"brand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"primary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#3B82F6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"secondary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#EC4899"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"base"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#1F2937"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"subtle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#6B7280"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"font"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"family"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sans"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Inter, sans-serif"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"base"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1rem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"lg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.125rem"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"spacing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.5rem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1rem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.5rem"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file becomes the &lt;strong&gt;single source of truth&lt;/strong&gt; for your entire design system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Do They Matter?
&lt;/h2&gt;

&lt;p&gt;Adopting a token-based approach might seem like extra work upfront, but it pays off massively by establishing a robust and scalable foundation for your UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Unbreakable Consistency
&lt;/h3&gt;

&lt;p&gt;When every part of your application—from CSS styles to JavaScript components—references the same set of tokens, your UI becomes inherently consistent. If the brand's primary color ever needs to change, you update it in one place, and the change propagates everywhere automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤝 A Shared Language for Designers and Developers
&lt;/h3&gt;

&lt;p&gt;Tokens bridge the communication gap between design and development. Designers can create their layouts in Figma or Sketch using tokens like &lt;code&gt;spacing-md&lt;/code&gt;, and developers can implement the exact same token in the code. There's no more guesswork or manual value conversion.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 Effortless Theming
&lt;/h3&gt;

&lt;p&gt;Want to add a dark mode? Or support white-labeling for different clients? With design tokens, it's simple. You can create different token files for each theme. The application's structure remains the same; you just swap out the token values.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Familiar Face: Comparison to Tailwind CSS
&lt;/h3&gt;

&lt;p&gt;If you've ever used a utility-first CSS framework like Tailwind, you're already familiar with the concept of design tokens, even if you didn't call them that.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;theme&lt;/code&gt; object in your &lt;code&gt;tailwind.config.js&lt;/code&gt; file is essentially a design token system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// tailwind.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#3B82F6&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;purple&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#EC4899&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;8px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;12px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="c1"&gt;// ...etc&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you use a class like &lt;code&gt;bg-blue&lt;/code&gt; or &lt;code&gt;p-1&lt;/code&gt;, you are referencing a design token. The power of a dedicated design token system is that it decouples these decisions from a specific framework, allowing you to use them across any platform or technology you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bringing Your Tokens to Life with Fylgja
&lt;/h2&gt;

&lt;p&gt;So, you have your beautiful JSON file with all your design decisions. How do you turn that into usable CSS?&lt;/p&gt;

&lt;p&gt;We built the &lt;strong&gt;&lt;a href="https://fylgja.dev/library/extensions/props-builder/" rel="noopener noreferrer"&gt;@fylgja/props-builder&lt;/a&gt;&lt;/strong&gt; to solve this exact problem. It's a powerful NPM package that takes your design token files and compiles them into a variety of formats, including CSS Custom Properties, Sass variables, and JavaScript objects.&lt;/p&gt;

&lt;p&gt;This allows you to maintain a single source of truth and use your design decisions in whatever format your project needs.&lt;/p&gt;

&lt;p&gt;The Props Builder is the final, critical step in making your design tokens a truly integrated part of your development workflow. By embracing design tokens with Fylgja, you're not just organizing your styles; you're investing in a more consistent, scalable, and collaborative future for your UI.&lt;/p&gt;

</description>
      <category>css</category>
      <category>designtokens</category>
      <category>fylgja</category>
    </item>
    <item>
      <title>Fylgja 2.1 is Live: New Utilities, Performance Boosts, and More</title>
      <dc:creator>Sean van Zuidam</dc:creator>
      <pubDate>Thu, 07 Aug 2025 10:07:12 +0000</pubDate>
      <link>https://dev.to/fylgja/fylgja-21-is-live-new-utilities-performance-boosts-and-more-477k</link>
      <guid>https://dev.to/fylgja/fylgja-21-is-live-new-utilities-performance-boosts-and-more-477k</guid>
      <description>&lt;p&gt;We're excited to announce the release of Fylgja 2.1!&lt;br&gt;
This update is packed with improvements across the Fylgja library,&lt;br&gt;
focusing on new features, performance enhancements.&lt;/p&gt;

&lt;p&gt;Let's dive into what's new.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A More Accessible and Performant Foundation with &lt;a href="https://github.com/fylgja/fylgja/blob/main/base/CHANGELOG.md" rel="noopener noreferrer"&gt;@fylgja/base&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Our base styles have received significant upgrades to improve both accessibility and performance.&lt;br&gt;
We've enhanced &lt;code&gt;aria&lt;/code&gt; attribute support for buttons, making it easier to manage states with JavaScript.&lt;/p&gt;

&lt;p&gt;We've also trimmed down the selector for the &lt;code&gt;::file-selector-button&lt;/code&gt; and performed other cleanups to reduce the overall CSS size.&lt;/p&gt;

&lt;p&gt;For a full breakdown of the changes, check out the &lt;a href="https://github.com/fylgja/fylgja/blob/main/base/CHANGELOG.md" rel="noopener noreferrer"&gt;@fylgja/base&lt;/a&gt; changelog.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;More stable &lt;a href="https://github.com/fylgja/fylgja/blob/main/tokens/CHANGELOG.md" rel="noopener noreferrer"&gt;@fylgja/tokens&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A small but powerful addition, we've introduced the &lt;code&gt;@property --hue&lt;/code&gt; to our tokens.&lt;br&gt;
This allows for smooth animations on all colors.&lt;br&gt;
If you've seen our homepage, you might have noticed the colors change when scrolling—this is all powered by the new &lt;code&gt;@property&lt;/code&gt;,&lt;br&gt;
which gracefully falls back if not supported.&lt;/p&gt;

&lt;p&gt;In addition, we've fixed and improved the &lt;code&gt;design-tokens&lt;/code&gt; syntax to be more in line with the specification.&lt;/p&gt;

&lt;p&gt;See all the token enhancements in the &lt;a href="https://github.com/fylgja/fylgja/blob/main/tokens/CHANGELOG.md" rel="noopener noreferrer"&gt;@fylgja/tokens&lt;/a&gt; changelog.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Powerful New &lt;a href="https://github.com/fylgja/fylgja/blob/main/utilities/CHANGELOG.md" rel="noopener noreferrer"&gt;@fylgja/utilities&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This release cleans up the divider utility, making it significantly smaller than the previous version.&lt;br&gt;
The gap is now handled through the &lt;code&gt;flow&lt;/code&gt; or &lt;code&gt;gap&lt;/code&gt; utility instead of relying on a separate utility.&lt;/p&gt;

&lt;p&gt;We've also added several new utilities for text and the all-new &lt;code&gt;scroll-mask&lt;/code&gt; utility for adding overflow shadows to scrollable elements.&lt;/p&gt;

&lt;p&gt;For more details, see the &lt;a href="https://github.com/fylgja/fylgja/blob/main/utilities/CHANGELOG.md" rel="noopener noreferrer"&gt;@fylgja/utilities&lt;/a&gt; changelog.&lt;/p&gt;

&lt;p&gt;We're confident that Fylgja 2.1 will help you build better, faster, and more accessible websites. Update to the latest version today to take advantage of all these new features and improvements! We welcome your feedback and look forward to seeing what you create.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>css</category>
      <category>fylgja</category>
      <category>opensource</category>
      <category>news</category>
    </item>
    <item>
      <title>Fylgja 2.0 is Live</title>
      <dc:creator>Sean van Zuidam</dc:creator>
      <pubDate>Mon, 21 Apr 2025 15:01:15 +0000</pubDate>
      <link>https://dev.to/fylgja/fylgja-20-is-live-2jcg</link>
      <guid>https://dev.to/fylgja/fylgja-20-is-live-2jcg</guid>
      <description>&lt;p&gt;Get ready for a significant evolution in Fylgja!&lt;/p&gt;

&lt;p&gt;We're excited to release Fylgja 2, a fundamental shift in our CSS library's architecture.&lt;/p&gt;

&lt;p&gt;This new version is built from the ground up with a focus on &lt;em&gt;modularity&lt;/em&gt;, enhanced performance, and a streamlined &lt;em&gt;development experience&lt;/em&gt;. We've improved all facets, resulting in a more powerful and user-friendly CSS solution.&lt;/p&gt;

&lt;p&gt;This release represents a complete rebuild of our core, making Fylgja 2 a solid foundation for your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a New Foundation? &lt;em&gt;Addressing V1's Challenges and Enhancing Developer Experience&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;In our journey working with Fylgja v1, we learned a lot. While its modularity was a strength, managing numerous npm dependencies became a maintenance burden. We recognized the need to simplify this aspect and enhance the overall developer experience.&lt;/p&gt;

&lt;p&gt;Fylgja 2 tackles this by introducing a more streamlined package structure. We've bundled our three core concepts into three dedicated packages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fylgja Base&lt;/strong&gt;
Encompasses the classless styles, including components like forms and buttons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fylgja Tokens&lt;/strong&gt;
Houses our CSS properties for colors, spacing, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fylgja Utilities&lt;/strong&gt;
Provides a curated set of helpful utility classes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of the three core packages offers individual imports, allowing you to include only the specific parts you need, without compromising modularity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embracing Modern &lt;em&gt;CSS for Enhanced Flexibility and Performance&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;With this architectural overhaul, we've also embraced modern CSS features that we planned but held back on to ensure stability. This includes the use of the &lt;code&gt;:is()&lt;/code&gt; and &lt;code&gt;:where()&lt;/code&gt; selectors, which significantly improve the ease of overriding styles and contribute to an even smaller overall footprint.&lt;/p&gt;

&lt;p&gt;The bundling of core components has also led to noticeable size improvements. The Fylgja Base package, which includes all the essential default styles, clocks in at a lean 14kb.&lt;/p&gt;

&lt;p&gt;Beyond the bundling and size optimizations, we've also refined each of the three core packages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Fylgja Base &lt;em&gt;A Solid Foundation for Classless Styling&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Fylgja Base is now providing an exceptional classless styling experience. It's designed to make working with HTML or JSX feel intuitive and efficient.&lt;/p&gt;

&lt;p&gt;By using semantic HTML, you can achieve well-styled pages, without the need to apply numerous classes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!Note]&lt;br&gt;
Fylgja Base is not intended to be a traditional CSS Reset or Normalize.&lt;br&gt;&lt;br&gt;
Instead, it aims to establish a sensible and improved browser default that you can build upon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We're also excited to introduce a scoped version of typography styles, named &lt;code&gt;prose&lt;/code&gt;, inspired by TailwindCSS's approach. Our implementation differs by prioritizing CSS inheritance, a often overlooked fundamental strength of CSS.&lt;/p&gt;

&lt;p&gt;We plan to release presets for UnoCSS and TailwindCSS, allowing you to use the best of both worlds in your projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fylgja Tokens &lt;em&gt;A Refined and Dynamic Color System&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Fylgja Tokens have been optimized and streamlined, building upon the solid foundation of previous Fylgja packages for color, sizes, borders, shadows, and layers.&lt;/p&gt;

&lt;p&gt;Unlike some other CSS property libraries like Open Props, our color system is dynamic. Instead of a long list of static values that can introduce unnecessary overhead and require build tools, we utilize a dynamic list of colors that can be modified using &lt;strong&gt;hue&lt;/strong&gt; and &lt;strong&gt;chroma&lt;/strong&gt; modifiers.&lt;/p&gt;

&lt;p&gt;This allows you to easily set your own or predefined hues on the element or root selector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--hue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--hue-blue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.my-test-element&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--color-10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--color-1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And provides you with complete control while ensuring a consistent and manageable color system, and we've refined the token values, making Fylgja Tokens as lean as possible without sacrificing functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fylgja Utilities &lt;em&gt;Empowering You with Dynamic and Curated Tools&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Fylgja Utilities are not intended to replace comprehensive CSS utility systems like Tailwind CSS or UnoCSS. Instead, they are designed to complement these systems or provide a &lt;em&gt;lightweight utility solution&lt;/em&gt; when you prefer to avoid a full build toolchain.&lt;/p&gt;

&lt;p&gt;They can be used directly without requiring build tools, and also offer compatibility when integrated with them.&lt;/p&gt;

&lt;p&gt;This curated set of CSS utilities offers a range of handy features such as the Auto Grid and Snap.&lt;/p&gt;

&lt;p&gt;We're also introducing new concepts for utilities, starting with &lt;em&gt;&lt;a href="https://dev.to/docs/concepts/dynamic-css-utilities"&gt;Dynamic Utilities&lt;/a&gt;&lt;/em&gt;. This approach ensures that utilities are applied at the component or page level, preventing unnecessary bloat in your global CSS.&lt;/p&gt;

&lt;p&gt;A prime example is our approach to modifiers, like alignment utilities &lt;em&gt;(often seen in utility systems)&lt;/em&gt;. In Fylgja, we offer a single alignment utility that can be customized using the power of CSS variables.&lt;/p&gt;

&lt;p&gt;And we're taking this a step further with spacing utilities, allowing you to add padding to an element simply by using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"--px: 2rem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Dynamic Utilities in action&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes CSS utilities truly dynamic, ensuring that each value doesn't contribute to an ever-growing global CSS size.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next? &lt;em&gt;Expanding the Fylgja Ecosystem&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Our journey doesn't stop here! We're already working on expanding the Fylgja ecosystem with new &lt;em&gt;CSS Components&lt;/em&gt;, the Input and Button Groups are already available.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating from Fylgja v1.x
&lt;/h3&gt;

&lt;p&gt;Since Fylgja 2 represents a complete rebuild, there isn't a direct automated upgrade path or script, however, due to the modular nature of even v1, you can gradually replace features from v1 with the new version.&lt;/p&gt;

&lt;p&gt;For detailed information, please refer to our extensive &lt;a href="https://dev.to/library"&gt;Library&lt;/a&gt; and &lt;a href="https://dev.to/docs"&gt;Documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share Your Thoughts and Support Fylgja!
&lt;/h2&gt;

&lt;p&gt;If you're as excited about Fylgja 2 as we are, please take a moment to &lt;a href="https://github.com/fylgja/fylgja" rel="noopener noreferrer"&gt;&lt;strong&gt;star our Github Repository&lt;/strong&gt;&lt;/a&gt;. Your support helps us grow and reach more developers!&lt;/p&gt;

&lt;p&gt;We'd also love to hear your feedback! Share your suggestions and opinions on our &lt;a href="https://github.com/orgs/fylgja/discussions" rel="noopener noreferrer"&gt;Github Discussions&lt;/a&gt;. If you write a blog post about Fylgja 2, please share it with us on your favorite social media platform using our social media handle. We're eager to see what you build with Fylgja 2!&lt;/p&gt;

</description>
      <category>css</category>
      <category>fylgja</category>
      <category>opensource</category>
      <category>news</category>
    </item>
    <item>
      <title>Fylgja v1.2 is here!!</title>
      <dc:creator>Sean van Zuidam</dc:creator>
      <pubDate>Mon, 25 Jul 2022 22:25:00 +0000</pubDate>
      <link>https://dev.to/fylgja/fylgja-v12-is-here-3jh0</link>
      <guid>https://dev.to/fylgja/fylgja-v12-is-here-3jh0</guid>
      <description>&lt;p&gt;The second minor version of Fylgja has been released, and it includes some significant updates.&lt;/p&gt;

&lt;p&gt;So what has changed between Fylgja v1.1 and v1.2.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slim down existing components&lt;/li&gt;
&lt;li&gt;New Native CSS Components, The Range Slider&lt;/li&gt;
&lt;li&gt;CSS props are here!&lt;/li&gt;
&lt;li&gt;Preview components directly on Fylgja.dev&lt;/li&gt;
&lt;li&gt;And more!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Slim down existing components
&lt;/h2&gt;

&lt;p&gt;First, we have started working on enhancing the already-existing components by organising the code and rearranging it.&lt;/p&gt;

&lt;p&gt;This introduces some improvements without compromising the exciting code base and reduces the size of the components.&lt;/p&gt;

&lt;p&gt;As a result, many CSS components now have SCSS mixin options, which makes it simpler to use the strong foundation on your own class- or scope-specific styles.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Native CSS Components, The Range Slider
&lt;/h2&gt;

&lt;p&gt;New to the block is the HTML Input Range Slider.&lt;/p&gt;

&lt;p&gt;The Range slider will work out of the box if you load the &lt;code&gt;@fylgja/range&lt;/code&gt; and use in your html the &lt;code&gt;&amp;lt;input type=range&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0g5jwhimji9elssdxmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0g5jwhimji9elssdxmx.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fylgja.dev/components/range/" rel="noopener noreferrer"&gt;Check out the Fylgja Range Component&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS props are here!
&lt;/h2&gt;

&lt;p&gt;Surprise, surprise Fylgja has also added CSS props!&lt;/p&gt;

&lt;p&gt;Despite the fact that Fylgja already integrates seamlessly with other CSS Props (Design Tokens) systems, such as &lt;a href="https://open-props.style/" rel="noopener noreferrer"&gt;Open Props&lt;/a&gt; or &lt;a href="https://www.pollen.style/modules/ui" rel="noopener noreferrer"&gt;Pollen&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Additionally, we at Fylgja wanted to support our own version.&lt;/p&gt;

&lt;p&gt;The Fylgja version will primarily concentrate on keeping the tokens straightforward, so there won't be any tokens with values that are exactly one to one.&lt;/p&gt;

&lt;p&gt;With v1.2, we now provide;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Colors&lt;/li&gt;
&lt;li&gt;Easing (transitions)&lt;/li&gt;
&lt;li&gt;Media Query tokens, based and part of the Mq component&lt;/li&gt;
&lt;li&gt;Shadow&lt;/li&gt;
&lt;li&gt;Sizes, for not just sizes but also typography and spacing.&lt;/li&gt;
&lt;li&gt;Z-layer (z-index)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://fylgja.dev/components/#css%20props%20(design%20tokens)" rel="noopener noreferrer"&gt;Check out the Fylgja CSS Props&lt;/a&gt; for what is available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preview components directly on Fylgja.dev
&lt;/h2&gt;

&lt;p&gt;Even though we do provide this, we learned from user feedback that visitors were unable to find any demos or previews.&lt;/p&gt;

&lt;p&gt;As a result, in addition to the already present view demo buttons, we are rolling out previews for each component, with few all ready live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jhomr5sb2yf4dggve74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jhomr5sb2yf4dggve74.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  And more!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;New bundle option for the CSS props&lt;/li&gt;
&lt;li&gt;Fixed import issue for utilpack &lt;a href="https://github.com/fylgja/fylgja/issues/40" rel="noopener noreferrer"&gt;#40&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fixed iOS selectbox has overflow when the text is to large for the box &lt;a href="https://github.com/fylgja/fylgja/issues/66" rel="noopener noreferrer"&gt;#66&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Introduced &lt;code&gt;@layer&lt;/code&gt; support for &lt;strong&gt;auto-grid&lt;/strong&gt;, &lt;strong&gt;button&lt;/strong&gt;, &lt;strong&gt;container&lt;/strong&gt; and &lt;strong&gt;stretched-link&lt;/strong&gt;, trough separate import, this will make it easier to be used Tailwind's &lt;code&gt;@apply&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get the latest release
&lt;/h2&gt;

&lt;p&gt;With Node;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @fylgja@1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CDN:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://unpkg.com/fylgja@1.2/fylgja.css"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or get each CSS Component separately on the &lt;a href="https://fylgja.dev/components/" rel="noopener noreferrer"&gt;Fylgja Components page&lt;/a&gt; as intended.&lt;/p&gt;

</description>
      <category>fylgjacss</category>
      <category>css</category>
      <category>framework</category>
      <category>release</category>
    </item>
    <item>
      <title>How to use with another exciting framework</title>
      <dc:creator>Sean van Zuidam</dc:creator>
      <pubDate>Sat, 27 Nov 2021 15:33:52 +0000</pubDate>
      <link>https://dev.to/fylgja/how-to-use-with-another-exciting-framework-3cd2</link>
      <guid>https://dev.to/fylgja/how-to-use-with-another-exciting-framework-3cd2</guid>
      <description>&lt;p&gt;As we mention multiple times, on our site 😅, Fylgja is component based framework, meaning you can download and use each CSS component separately.&lt;/p&gt;

&lt;p&gt;Making it easier to combine and use with other CSS frameworks or to add it to an existing project.&lt;/p&gt;

&lt;p&gt;So how do you actually do this?&lt;/p&gt;

&lt;p&gt;First make sure to understand what compiler your running. There are 2 use cases;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCSS based&lt;/li&gt;
&lt;li&gt;PostCSS based with postcss-import&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;most other tools have no impact with using Fylgja.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use with Utility based frameworks, like TailwindCSS
&lt;/h2&gt;

&lt;p&gt;So for example if you are running a &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;TailwindCSS&lt;/a&gt; or other utility CSS based framework, like &lt;a href="https://windicss.org/" rel="noopener noreferrer"&gt;WindiCSS&lt;/a&gt;, thats one of the easiest use cases.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The only components that might conflict are the Utilpack, Transition and Transform components, since these are also utility based CSS components.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So if you are using TailwindCSS you can simply install the &lt;code&gt;@fylgja/form&lt;/code&gt; component and include it in your CSS like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"tailwindcss/base"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"tailwindcss/components"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"@fylgja/form"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"tailwindcss/utilities"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And now you don't need to add any CSS classes for your form elements, since the &lt;code&gt;@fylgja/form&lt;/code&gt; component styles them directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38m99d958y5qp7cmi8or.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38m99d958y5qp7cmi8or.webp" alt="Noice" width="440" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this way you can also add more and more Fylgja CSS components without having to create them with utility classes.&lt;/p&gt;

&lt;p&gt;So instead having to use &lt;code&gt;@apply&lt;/code&gt; to create a Card component, You can just include it, just as with the form. The only difference is the Fylgja Card component uses classes, but that is just wat we want, moving to a more DRY approach and still using the flexibly of utility classes. 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use with Component based frameworks, like Bootstrap
&lt;/h2&gt;

&lt;p&gt;This is a little harder since some components already exists, so make sure to disable the CSS Component you want to replace.&lt;/p&gt;

&lt;p&gt;So you can add CSS Components that don't exist in Bootstrap, or replace existing ones with Fylgja CSS components.&lt;/p&gt;

&lt;p&gt;For Bootstrap you could extend the utilities with our Utilpack component, adding more utility power, or add some Native CSS components like the form to simplify the HTML.&lt;/p&gt;

&lt;p&gt;So how do you actually remove CSS components from Bootstrap?&lt;/p&gt;

&lt;p&gt;First make sure that you don't import Bootstrap using a single import. Instead load everything from the &lt;code&gt;bootstrap.scss&lt;/code&gt; file separately,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"bootstrap"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;load everything separately, like this;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;Configuration&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"functions"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"variables"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"mixins"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"utilities"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;Layout&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nt"&gt;components&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"root"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"reboot"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"offcanvas"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"placeholders"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;Helpers&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"helpers"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;Utilities&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"utilities/api"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and include this in your &lt;code&gt;main.css&lt;/code&gt; with the newer &lt;code&gt;@use&lt;/code&gt; syntax.&lt;/p&gt;

&lt;p&gt;Now in your &lt;code&gt;main.css&lt;/code&gt; add your Fylgja Components like you normally do. And in your custom Bootstrap import, you can disable unused components or components you want to replace with Fylgja Components.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://fylgja.dev/guides/using-fylgja-with-exciting-framework/" rel="noopener noreferrer"&gt;This Post and Guide&lt;/a&gt; is originally from the Fylgja site&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>fylgjacss</category>
      <category>css</category>
      <category>framework</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Fylgja a new CSS framework, WHY!</title>
      <dc:creator>Ruud van Zuidam</dc:creator>
      <pubDate>Sun, 29 Aug 2021 07:40:14 +0000</pubDate>
      <link>https://dev.to/fylgja/fylgja-a-new-css-framework-why-3b0n</link>
      <guid>https://dev.to/fylgja/fylgja-a-new-css-framework-why-3b0n</guid>
      <description>&lt;p&gt;Time to introduce Fylgja a new CSS framework, there are already a lot of CSS frameworks, almost everybody knows Bootstrap, Material and Tailwind.&lt;/p&gt;

&lt;p&gt;None of them are bad, each of them does the job, and if one of them fits the way you are working, you're probably happy.&lt;/p&gt;

&lt;p&gt;Looking around on dev.to you would find articles, describing CSS frameworks and their pros and cons, for example;&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/chetan_atrawalkar" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F655054%2F319c19c5-c069-4692-b50d-dd887a6e6e57.png" alt="chetan_atrawalkar"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/chetan_atrawalkar/20-best-css3-library-for-developers-58p" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;🚀20 Best CSS3 Library For Developers.&lt;/h2&gt;
      &lt;h3&gt;Chetan Atrawalkar ・ Jul 27 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#codenewbie&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/vetheedixit" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F385377%2F23e1b650-9034-4eb3-accc-15c28bf4f9fe.jpg" alt="vetheedixit"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/vetheedixit/11-best-css-frameworks-to-look-forward-in-2020-3p3p" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;11 Best CSS Frameworks To Look Forward In 2020&lt;/h2&gt;
      &lt;h3&gt;Vethee Dixit ・ Jun 3 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#framework&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#design&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/themeselection" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7642%2F0f558665-6cea-4d27-bbcd-51c7c8426fdc.png" alt="ThemeSelection" width="800" height="800"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F307204%2F326109cb-a894-412a-b963-1cf36950736d.jpg" alt="" width="300" height="300"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/themeselection/best-css-frameworks-in-2020-1jjh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Best CSS Frameworks in 2022&lt;/h2&gt;
      &lt;h3&gt;ThemeSelection for ThemeSelection ・ Sep 8 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/pravunathsingh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F239473%2F7f70634b-f2f0-429f-994a-fd4565bac65b.png" alt="pravunathsingh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/pravunathsingh/battle-of-the-frameworks-which-one-to-choose-and-why-27ke" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Battle of the Frameworks, Which one to choose and why.&lt;/h2&gt;
      &lt;h3&gt;Pravunath Singh ・ Apr 26 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tailwindcss&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;The Best is of course opinionated, choose what works for you,&lt;br&gt;
and always check Github to see if there is active development.&lt;br&gt;
A dead framework is not a great investment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So why! Fylgja, well because its a very good tool for frontenders who understand CSS and need a consistent basis for their projects.&lt;/p&gt;

&lt;p&gt;Some history, years ago we started working with Bootstrap 2, using it for frontend design, we developed it as an extend / utility pack to give us tools to work better and faster.&lt;/p&gt;

&lt;p&gt;Initially developed with LESS and Grunt we switched to SCSS and GULP, and it became a daily tool for us, &lt;a href="https://fylgja.dev/about" rel="noopener noreferrer"&gt;read the full story here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;On the road we learned from others and we continuously kept developing it to improve things, and since we are only human and are proud of our product we like to share it with you all.&lt;/p&gt;

&lt;p&gt;We put it on Github and released version 1 on 22 June this year, you can find  the Website with the documentation on &lt;a href="https://fylgja.dev" rel="noopener noreferrer"&gt;Fylgja.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, we could fill this article with exaggerating marketing text, telling you how good it is, and why we’re the best (we are 😁) but no BS here, Take a look, try it out, use it and contribute if you like.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/fylgja" rel="noopener noreferrer"&gt;
        fylgja
      &lt;/a&gt; / &lt;a href="https://github.com/fylgja/fylgja" rel="noopener noreferrer"&gt;
        fylgja
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The flexible and lightweight CSS library designed to streamline your web development.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>fylgjacss</category>
      <category>css</category>
      <category>framework</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
