跳转到主要内容

是2016年原子CSS的年份吗?

如果你熟悉布拉德霜原子设计模式实验室你可能想知道它如何应用于它网站布局样式语言,如CSS自;它不像其他编程语言那样结构化,所有原子设计的例子都涉及到HTML的组织。

但是,如果您实际应用了Pattern LabWeb样式指南对于一个项目,您将快速发现任何可以分解到基本可重用代码的任何内容都可以受原子设计。

这不可避免地为CSS找到了出路,并导致了所谓的原子CSS (ACSS)的兴起。ACSS问世已经有一段时间了,但直到2015年初才真正获得关注,并且越来越受欢迎。

那么,什么是原子CSS?

ACSS是一个用于一个CSS属性的一个类的方法,以便在站点的不同部分中使用相同的属性。这消除了由于类本身在HTML中多次使用的自从课程本身在HTML中使用的情况下重复该属性的可能性。这导致更小的“干燥”样式表,也是在网页上快速方式快速方式的原型布局和组件的好方法。

这通常会导致在一个HTML元素上使用多个CSS类,如下所示:

< / div >文本

上面的语法可能会震惊你一点,因为你可能从未见过用于CSS类名称的括号,可能看起来不必要,但是伪类和媒体查询等复杂原子类是有意义的。这不是编写原子课的佳能方式,但这是我到目前为止找到的最好的方法。

使用括号名称

为了浏览器在类名中读取括号,他们需要在CSS中逃脱。我不想在这篇文章中嘲笑逃避角色,但这是一个简单的方法,涉及在你想要逃脱的角色之前放置背部斜线\。如果我们想从属性中创建一个原子类文本 - 变换:大写,HTML中的类看起来像他,tt(u)和css .tt \(u \)。所有现代浏览器都支持CSS中的逃逸字符,但是我相信IE8有一些问题。如果您想了解更多我建议阅读本文Mathias Bynens.

在原子css类名中包含方括号的另一个好处是,它将原子类与非原子类明显地分离开来,这不仅是因为有方括号,还因为它是命名空间类的最佳实践。哈里·罗伯茨写了一本很棒的关于命名课程的文章而且我自己已经提出了一种可重复使用的方法包含命名等级的组件。然而,如前所述,您可以编写原子类。

那么BEM呢?

在我看来,原子类应该只用于整个网站重复使用的属性,你知道的属性不会被改变它很好,坚持用BEM坚持,或者你对你很舒服的命名约定。例如,您有一个默认的输入框样式为您的网站,我在使用BEM时没有发出问题,然后在此之后添加原子类。所以例如:

 

可以有属性:

.c-form__input {边界半径:2px;边框:1PX实体#555;白颜色;身高:30px;}

这些属性构成输入元素的基本状态,其他状态(例如成功或错误)可能会将原子类添加到它们。

.bd \(绿色\){背景:绿色} .bd \(红色\){背景:红色}
  <! -  for成功 - >   <! -  for错误 - >

内联样式和ACSS有什么不同

简而言之,没有太大的区别,但是对每个元素使用内联CSS可能会导致重复属性,而使用acss,一个属性只写一次。我仍然建议内联关键的css,但不要添加属性的元素,如果他们将被反复使用。

这会在CSS中膨胀吗?

如果存在未使用的类,则ACS可能会导致膨胀。您可以使用诸如此类的工具来避免此操作UNCS.净化CSS删除未使用的制度进行生产。然而,ACS的最佳工具是雾化器的雅虎它读取文档(或多个所有文档)中使用的原子类,并自动将相关的CSS添加到目标文件中。Atomizer工作与gulp和grunt,这意味着它很容易添加为一个前端进程。

我怎样才能说服我的上司使用这个技巧呢?

不仅有很大熟悉的公司,如雅虎和MailChimp已经在其生产代码中使用ACSS,但如果您是面向对象的信徒(OOCS),它会更有意义,因为它进一步模块化代码。

我考虑原子CSS(不与原子设计混淆)代表NOCSS的NOC。

-本Frain

结论

我是ACSS的强烈信徒,不要相信我可以在没有它的情况下返回创建基于Web的项目。我还没有像这样尝试一样对于React,我还没看到它有多不同CSS模块,但如果你目前没有使用这些工具(即使你正在使用),我敢肯定你会发现这是一个非常有益的方式,使您的CSS属性可重用。