你也许不知道,CSS 也有编程能力?


原文做者:Jeremy Keithcss

译者:UC 国际研发 Jothy前端


写在最前:欢迎你来到“UC国际技术”公众号,咱们将为你们提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。程序员

现在编程界有一种使人担心的趋势——那些 “真正的” 程序员对 CSS 嗤之以鼻。 他们指出,这只是一种声明性语言,而不是一种功能齐全的编程语言。 啧啧啧,它甚至不是一种脚本语言。
算法

这多是实话,但这并不意味着 CSS 不强大。 它的强大致如今与传统语言不一样的地方。
编程

以 CSS 选择器为例。 在最基本的层面上,它们像条件语句同样工做。 这是一个标准的 if 语句:
编程语言

条件须要求值为 true 才能执行花括号中的代码。 听起来有点熟?模块化

这是一个很是简单的映射,但若是条件语句更复杂怎么办?测试

那么,这就是后代选择器的做用:翻译

实际上,经过使用子组合器,兄弟组合器和相邻的兄弟组合器,咱们能够获得更具体的信息:3d

  • condition1 > condition2

  • condition1 ~ condition2

  • condition2 + condition2

AND 只是布尔逻辑的一部分。 还有 OR:

在 CSS 中,咱们使用逗号分隔条件:

咱们还使用 :not() 伪类来完成布尔可能性的集合。若是你添加了数量查询,经过 :nth-child 及其同类,CSS 看起来更像图灵完备了。我见过人们使用相邻的兄弟组合器和 :checked 伪类来构建状态机。

不管如何,个人观点是 CSS 选择器很是强大。然而,咱们常常故意选择性地不使用这种力量。 OOCSS(面向对象的 CSS),BEM 和 Smacss 存在的理由正是故意限制选择器的功能,将其局限于类选择器。

从表面上看,这彷佛是一个奇怪的选择。毕竟,咱们不会故意将本身局限在编程语言的某个子集中,是吧?

答案是咱们会,而且咱们已经这样作了。这就是模板语言的用途。不管是 PHP 的 Smarty 仍是 Twig,仍是 JavaScript 的 Mustache,Nunjucks 或 Handlebars,它们都是实现了一部分小而美的功能。有些人为本身没有逻辑而自豪。若是你发现本身试图作一些模板化语言没有提供的东西,那么这是一个好的迹象,你不用试图在模板中这样作;它应该在控制器中完成。

所以,模板语言的存在是为了强制简化并确保复杂性发生在其余地方。这与 BEM 等的故事相似。若是你发现没法在 CSS 中选择某些内容,则代表你可能须要在 HTML 中添加另外一个类名。复杂性仅限于 HTML 标记,以保持 CSS 更直接,模块化和可维护。

可是,咱们也不要忘记这也是一个选择。并非说 CSS 自己就没法执行复杂的条件。偏偏相反。正是由于 CSS 选择器(和级联)很是强大,咱们才选择划清界限。

英文原文:

https://adactio.com/journal/14574


预告:第13届D2前端技术论坛将于2019年1月6日在杭州举办


好文推荐:

我想学Flutter,可是我不知道应该如何开始?



“UC国际技术”致力于与你共享高质量的技术文章

欢迎关注咱们的公众号、将文章分享给你的好友

相关文章
相关标签/搜索