原文做者: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日在杭州举办
好文推荐:
“UC国际技术”致力于与你共享高质量的技术文章
欢迎关注咱们的公众号、将文章分享给你的好友