分类 Web 下的文章

计算机科学领域有几个概念,乍一听很相似,但实际上差别非常大,它们是:迭代、遍历、枚举、递归、循环。

这些概念,对于写码为生的人而言,大部分都应该不陌生。但如果让谁确切地说出它们的含义,恐怕还真没有几个能够全都说对的。时间关系,本文就简单地对这些概念做一番梳理,供大家参考。

1. 迭代(iteration)

迭代,是一个重复的过程,目的是为了输出一系列值(可能是无穷序列)。每次重复的过程也叫一次“迭代”,一次迭代的结果,可以作为下一次迭代的起点。

2. 遍历(traversal)

遍历,一般是指对树形数据结构的操作,比如树遍历(也叫树搜索),就是对树形数据结构每个节点进行访问(为了检查和/或更新),且每个节点只访问一次。这种遍历是按照访问节点的顺序分类的,比如深度优先或宽度优先。

- 阅读剩余部分 -

Flexbox已经得到主流浏览器较新版本的广泛支持。对于某些需要兼容的旧版本浏览器,只要调整一下语法或提供商前缀,基本上也没问题。

两套属性

Flexbox有两套属性,一套针对可伸缩容器(flexible container),一套针对容器的直接子元素,或可伸缩项(flexible item)。

Flex容器,即应用display:flex;display: inline-flex规则的元素,可以接受如下属性:

  • flex-direction:指定主轴方向是水平还是垂直
  • flex-wrap:指定可伸缩项是否折行
  • flex-flow:以上两个属性的简写形式
  • justify-content:指定可伸缩项在主轴方向上的对齐方式
  • align-items:指定可伸缩项在辅轴方向上的对齐方式
  • align-content:指定多行可伸缩项在辅轴方向上的对齐方式

容器的直接子元素或者可伸缩项,可以接受如下属性:

  • flex-grow:指定当前项如何扩展
  • flex-shrink:指定当前项如何收缩
  • flex-basis:指定分配剩余空间之前当前项的初始大小
  • flex:以上三个属性的简写形式
  • order:指定当前项在容器中出现的次序

针对容器的属性非常容易理解,而针对可伸缩项的属性则不好理解。更确切地说,是flex-growflex-shrinkflex-basis属性不好理解。只有理解了这三个属性,你才能说自己真正理解了Flexbox。

- 阅读剩余部分 -

免责声明

本文是仓促之作,从构思到成文不足半天。文中没有提到很多优秀的库和框架,提前在此致歉,因为没时间搜集整理。但这不代表笔者对这些库和框架没有敬意。实际上,包括jQuery在内,我的敬意是给这些名字背后整个社区和贡献者的,当然包括库和框架的最初编写者,比如John Resig。

另外,时间所限,本文粗略、不严谨,甚至可能不客观地描绘了前端技术的发展脉络。对前端发展走向的这个判断,仅代表本人自己的主观认知,并非业界共识,恳请广大读者了解。千万不要以本文观点作为评价前端技术发展的依据。谢谢!

Github抛弃jQuery

2018年7月25日,Mislav Marohnić发了一条推文,宣布GitHub.com前端已经彻底删除了jQuery(下图)。而且,还自问自答地解释(低调炫耀),删除jQuery之后也没用其他框架,而是全部依赖原生API。

Github removing jQuery

很多人不知道,我和jQuery颇有渊源。大概11年前(2007年),因为“疯狂迷恋”jQuery,我在国内率先翻译了jQuery 1.1的文档。后来有同好基于我翻译的版本继续翻译了jQuery新版文档,还不忘记在“关于”中提到我(http://hemin.cn/jq/about.html):

关于jQuery文档

居然称我为“国内jQuery的引路人”,惭愧。但在当时jQuery文档奇缺的情况下,我翻译的中文版应该是帮到了不少同学的。后来,我还翻译了Learning jQuery(《jQuery基础教程》)。

正因与jQuery的这个不解之缘,GitHub.com彻底抛弃jQuery的消息才触动我想了一些事。于是,决定写这篇小文,以飨读者(但愿有用,哈哈)。

- 阅读剩余部分 -

本文基于维基百科条目编译:https://en.wikipedia.org/wiki/Tim_Berners-Lee

Tim Berners-Lee,1955年6月8日出生于英国伦敦。父母都是数学家,父亲Conway Berners-Lee也是计算机科学家、第一台商业计算机“费伦蒂马克1号”(Ferranti Mark 1)开发团队成员,母亲Mary Lee Woods则还是一位程序员,曾为“费伦蒂马克1号”写程序,父母因此相识并结婚。

Tim小学就读于Sheen Mount Primary School,中学在伦敦西南部的Emanuel School渡过(该校1/4生源由英国中央财政拨款资助,1975年成为独立法人),那是1969至1973年(14-18岁)。少年时期的Tim是个“铁道迷”,通过焊接铁道模型初涉电子领域。

1973至1976年(18-21岁),Tim在牛津大学王后学院学习,成绩优秀,获得一等物理学学士学位。

大学毕业后,Tim进入多塞特(Dorset)郡普尔(Poole)的一家通讯公司Plessey当工程师(21-23岁)。

1978年,Tim加入芬当(Ferndown)市的D. G. Nash公司,参与开发打印机排版软件。

- 阅读剩余部分 -

简单地说,就是从CSS3开始,CSS规范就被拆成众多模块(module)单独进行升级,或者将新需求作为一个新模块来立项并进行标准化。因此今后不会再有CSS4、CSS5这种所谓大版本号的变更,有的只是CSS某个模块级别的跃迁。

引入模块化之前

按照CSS工作组的说法,CSS历史上并没有版本的概念,有的只是“级别”(level)的概念。比如,CSS3其实是CSS Level 3,CSS2是CSS Level 2,而CSS Level 1当然就是CSS1。每个级别都以上一个级别为基础。

大家都知道,CSS1早就作废了。CSS2其实基本上也已经作废了。但是,CSS1、CSS2(以及CSS2.1)在当时都是一个大而全的规范。而且,CSS2在成为最终标准的时候,W3C规范的流程里还没有定义CR这个阶段。

后来,W3C进一步完善了规范制定流程,要求每个规范都要经过以下五个阶段:

  1. 工作草案(WD,Working Draft)
  2. 最终工作草案(LC/LCWD,Last Call Working Draft)
  3. 候选推荐(CR,Candidate Recommendation)
  4. 提议推荐(PR,Proposed Recommendation)
  5. 推荐标准(REC,Recommendation)

由于当初CSS2并没经过CR阶段,因此出现了很多问题。CSS工作组被无穷无尽的“改bug”搞得不厌其烦。结果,他们决定对CSS2进行一次修订,这就是CSS2.1(CSS Level 2 Revision 1)。换句话说,CSS2.1其实只是CSS2的一个修订版,并没有实质性变化。有些CSS2中的内容,CSS工作组认为不够成熟,于是从CSS2.1中删除了。这些删除的内容被视为回退到流程的CR阶段——相当于需要“回炉”。(后来,这些内容基本都以CSS模块的方式,经过修订和增补,进入了CSS Level 3。)

CSS2.1及之前的CSS规范把所有内容都写在一个文档里。随着CSS特性越来越多,越来越复杂,CSS规范的篇幅也越来越长。CSS2.1的PDF版有430页(https://www.w3.org/TR/CSS2/css2.pdf)。这就给勘误和进一步升级带来了极大不便。因为文档不同部分升级的进度不可能强求一致。

于是,CSS工作组决定从CSS2.1之后开始采取模块化的路线。就是把需要升级的内容独立成模块拆分出来,新增的需求也以新模块的方式立项。从此以后,CSS就进入了Level 3。

- 阅读剩余部分 -