每隔几个月就会出现一篇文章代表:CSS并非真正的编程语言。以编程语言的标准来讲,CSS过于困难。使用这门语言会颇有创造性:编程
人们对CSS有一些强烈的情愫。— Dave Rupert (@davatron5000) [September 18, 2017]canvas
事实确实如此,CSS不一样于传统的编程,且具备缺陷,同任何标准化编程语言相比,使用起来都更为困难。这是因为CSS被设计为一种描绘界面的方式,而不是以编程形式实现该界面,例如canvas的API。CSS的设计初衷就不一样于传统编程语言。后端
CSS为用户上网时遇到的一些复杂且未知的东西建立界面,这个设计初衷是很棒的。做为一名CSS开发者,你相信用户代理(大部分状况下指的是浏览器)会表现正确的行为。你没法控制CSS发生的时机,但同时你也无需担忧性能、渲染时间和响应的具体细节,由于这些细节是由浏览器开发者和浏览器所处操做系统决定的。不过很棒的一点是,CSS容许你在其应用的地方修改这些重要的细节。若是你使用JavaScript来建立界面或动画,你不只须要作更多深刻细致的控制,还要确保一切都能正常工做,不然可能会阻塞页面的正常显示。使用CSS就意味着放弃控制,而去花更多的时间建立友好的响应式交互界面。用户可能会搞乱你的界面设置,但CSS能够为你规避这种状况。浏览器
使用CSS开发不一样于传统模式,并不须要循环、条件和变量。但CSS正朝着这个方向发展,Sass做为CSS的扩展语言,引入了变量,为CSS将来的发展奠基了基础。但CSS最须要的不是语法,而是你要清楚使用CSS所描绘的界面是什么。其次,如何确保你使用CSS编写的界面是足够灵活的,以致于用户没法触发页面的错误也不会没法访问页面。当你理解了HTML并使用CSS来控制它的样式时,你可以减小很大的代码量。编程语言
你的用户们的忠诚度依赖于所在的技术平台,若是你不打算建立友好的交互来提高用户体验,增长用户的留存度,CSS可能并不适合你。CSS被设计为一种“宽容“的语言,当你的一些代码没法起做用时,CSS也不会报错。所以,渐进加强是很棒的设计。你无需担忧因添加了一行不支持的代码而出错,解析器会跳过它不支持的属性。当遇到错误时,JS解析器会中断解析而且抛出错误信息,而CSS解析器会忽略这些错误并继续解析。这对于想要知道错误信息的开发者来讲会很奇怪,可是却让你从须要使用if来包含各类状况、兼容全部可能使用的浏览器这一情况下解脱出来。如何对按钮使用渐变效果?首先,定义一个背景色,而后在下一行设置背景为渐变。若是浏览器不支持渐变效果,它依旧会渲染出一个正常的按钮,只不过背景不是渐变而已。在这个过程当中,你根本无须担忧浏览器是否支持渐变。工具
因为对CSS的设计目的不了解而产生了错误认知,才致使出现了不少“CSS不是真正的编程”的观点。若是你想要彻底控制一切,好比界面、甚至精细到像素的话,请不要使用CSS。相反,若是你想要构建一个包罗普遍、多种多样的页面,CSS是个很好的工具。编写CSS须要站在用户的角度考虑,设计拥有良好交互的页面,提高用户体验,但这并非说你把一个Photoshop生成的图片放到页面就行了。使用CSS构建页面须要不一样于后端语言的技术栈,其次,做为维护者、编写者的心态也要发生转变。性能
无论怎么说,轻视CSS开发者、将他们视为非纯正开发者,这种傲慢的想法略显荒谬。尤为是在你甚至都没花时间了解CSS的设计目的是什么,以及它目前惊人的发展速度。动画
从另外一方面来讲,CSS本不是也不该该是任何问题的解决方式。例如,你能够建立带有阴影的像素,但同时也会对浏览器渲染引擎带来渲染压力。spa
对我来讲,CSS就是Web的一部分;对有些人来讲,CSS的语法显得很奇怪,以致于让他们以为是另外一种编程语言。不过这些年来,随着CSS的发展,它的价值毋庸置疑。在将来很长一段时间,CSS应该也不会消失。所以,若是你不喜欢使用CSS,那就和会使用的人合做开发网页。操作系统
与其讨论“CSS是否有缺陷,须要被替代”的问题,不如以一种积极健康且不一样于以往的角度讨论CSS: