<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>原子化CSS on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%8E%9F%E5%AD%90%E5%8C%96css/</link><description>Recent content in 原子化CSS on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 10 Nov 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%8E%9F%E5%AD%90%E5%8C%96css/index.xml" rel="self" type="application/rss+xml"/><item><title>原子化CSS</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-024/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-024/</guid><description>&lt;h2 id="1-什么是原子化css"&gt;1. 什么是原子化CSS&lt;/h2&gt;
&lt;h3 id="11-基本概念"&gt;1.1 基本概念&lt;/h3&gt;
&lt;p&gt;原子化CSS(Atomic CSS) 近年来热度逐渐增加，与原子化CSS相关的库在Github上也收获上万的Star。那么什么是原子化CSS呢，引用文章 &lt;a href="https://css-tricks.com/lets-define-exactly-atomic-css/"&gt;Let&amp;rsquo;s Define Exactly What Atomic CSS is&lt;/a&gt; 中定义：&amp;ldquo;原子化CSS是一种CSS架构方式，其支持小型、单一用途的类，其名称基于视觉功能。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;更加通俗的来讲，原子化CSS是一种新的CSS编程思路，它倾向于创建小巧且单一用途的class，并且以视觉效果进行命名。举个简单的例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- 原子化类定义 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;style&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;text-white&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;white&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;bg-black&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;black&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;text-center&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;text-align&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;center&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;style&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- 原子化类使用 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;text-white bg-black text-center&amp;#34;&lt;/span&gt;&amp;gt;hello Atomic CSS&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="12-vs-行内样式"&gt;1.2 VS 行内样式&lt;/h3&gt;
&lt;p&gt;看到以上的示例，你可能很快就想到，直接使用行内样式不是更好吗，还省去了原子类的定义。这个问题可以从样式编写、一致性、功能、和缓存四个方面来回答。&lt;/p&gt;
&lt;p&gt;在样式编写层面，CSS预处理和后处理器很大程度上依赖单独的样式表，原子化CSS可以充分利用Sass、Less等CSS预处理器功能进行样式的编写，同时可以借助&lt;code&gt;PostCSS&lt;/code&gt;进一步增强CSS的功能。而对于行内样式，虽然在技术上支持使用预处理和后处理器对其进行处理，但很少有成熟的工具对此提供支持和维护。&lt;/p&gt;
&lt;p&gt;在一致性层面，原子化CSS框架一般有预定义的设计系统，开发者仅能在设计系统中选择要设置的值。而对于行内样式或者传统CSS类定义来说，可设置的值是没有任何限制的。对于行内样式或者传统的CSS类设置来说，一个标签的字体大小可能是&lt;code&gt;14px&lt;/code&gt;或&lt;code&gt;0.875rem&lt;/code&gt;，当产品（or 客户）说需要调小一点时，开发者A可能调整为&lt;code&gt;13px&lt;/code&gt;，开发者B可能调整为&lt;code&gt;12px&lt;/code&gt;。但对于原子化CSS框架来说，调小一点意味着设置的类从&lt;code&gt;text-sm&lt;/code&gt;变为&lt;code&gt;text-xs&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下为部分采用传统CSS类编写的网站样式统计数据（&lt;a href="https://cssstats.com/stats/"&gt;统计来源&lt;/a&gt;）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://juejin.cn/"&gt;掘金官网&lt;/a&gt;：283种背景颜色 471种字体颜色 264种字体大小&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab"&gt;GitLab&lt;/a&gt;：1199种背景颜色 1351种字体颜色 450种字体大小&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.csdn.net/"&gt;CSDN&lt;/a&gt;：585种背景颜色 1190种字体颜色 504种字体大小&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;在功能方面，原子化CSS本质上还是CSS类，因此支持媒体查询功能，也支持对元素的悬停、聚焦等状态进行处理，而内联样式缺少这部分的能力。&lt;/p&gt;
&lt;p&gt;在打包方面，内联样式包含在JS文件中，样式的修改会导致整个bundle的改变，原子化CSS样式定义和JS逻辑分离，修改元素的class属性可能并不影响（在没有新CSS类的情况下）最终打包输出样式文件。&lt;/p&gt;
&lt;h2 id="2-谁在使用原子化css"&gt;2. 谁在使用原子化CSS&lt;/h2&gt;
&lt;p&gt;截至目前已经有部分网站借鉴或者使用原子化CSS的思想重构了自己的web网站，比较知名的网站有&lt;code&gt;Facebook&lt;/code&gt;、&lt;code&gt;Twitter&lt;/code&gt;、&lt;code&gt;Github&lt;/code&gt;、&lt;code&gt;swipperjs&lt;/code&gt;等。根据网上公开的信息，&lt;code&gt;Facebook&lt;/code&gt;在使用原子化CSS思想重构之后，仅登录页面的&lt;code&gt;413KB&lt;/code&gt;样式文件，减少为整个站点的&lt;code&gt;74KB&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/"&gt;Facebook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-024/image-01.png"&gt;&lt;/p&gt;</description></item></channel></rss>