前端开发之HTML+css

之前看过一篇文章是再说HTML和CSS其实作用不大,是可以考虑删除直接用jsvascript直接来表现,当然他也给出了自己的观点和解释,让我们以前来看一下:

程序本质是数据结构和算法,HTML 和 CSS只能表达简单的树形结构,适合简单的内容型网站,不适合复杂的Web程序。以它们为核心的开发会:把简单变的更简单,但把复杂变的更复杂。石头搭得了石屋,不一定盖得了大厦。

HTML和CSS的语言表达能力,用JavaScript的一个子集JSON(其实就是JavaScript对象和数组)就可以代替,但缺少基本运算符、语句、函数、对象等,为啥不干脆用JavaScript代替,还能保持统一性和灵活性。我不是说的具体功能,功能是浏览器底层实现的,JavaScript照样可以作为接口,就像Node.js一样。

因为是游戏开发出身,所以知道对于像游戏这样复杂的东西,不可能用 HTML 和 CSS 等标记式语言开发。那么,随着 Web 前端的复杂度不断高升,HTML 和 CSS 这种适合文档网站的语言还有存在的必要吗?会不会阻碍复杂程序的开发。

作为类比,以前我用过 Flex,其 MXML 语言的灵活度比 HTML 更高,也会用到 CSS,但是除非是很简单的页面结构,大部分情况下,用 ActionScript 组织页面会更方便灵活。而且 JavaScript 开发,也更容易模块化。HTML 和 CSS 都太简单,甚至可以用 JSON 替代,其功能用 JS 封装。

就像很多其它语言平台一样,比如 Java,用纯 Java 代码开发界面。如果真的很需要结构化动态数据,可以用 JSON 或 XML。至于内容、表现、逻辑的分离,并不需要从语言层面分离,纯 JS 一样可以分离,而且更有可控性。HTML 和 CSS 逻辑太弱了,这也是为什么会有 LESS 等 CSS 预编译器和各种模板引擎,如果用纯 JS,这些都可以不需要了。

至于不支持 JS 的浏览器,基本上也不可能用来上网了吧。

以上是我之前看过的一篇文章作者支持取消HTML和CSS的观点,其实说的有一定道理,但是:

主流Web开发很少采用全JS的方案。原因大体有以下几点:

1. 注重考虑那些无法运行JS的用户代理。用户使用不支持JS的浏览器(比如较老的手机浏览器),或者禁用脚本。当然你可以选择忽略这一小撮用户,尤其是现在绝大多数网站和应用也是如此选择的,但是至少我们应该对坚持考虑无JS情况的开发者予以基本的尊重。此外,如 Mobile Transcoder或某些手机浏览器的“极速模式”是基于服务器端对网页的解析和重组,是否能支持JS很够呛。更重要的因素是SEO friendly。如果是全JS生成的网页,搜索引擎无法索引内容。因为对网站来说,搜索排名是是性命攸关的。

2. 注重HTML/CSS本身的优点。诚然JS本身也可以通过精心设计的框架和库来实现分离等所有HTML/CSS模型的优点。但是存在许多不确定因素:

1) 有足够好的框架和库吗?要考虑是否能满足你的业务需求,还可能要考虑性能、可扩展性、之前提到的accessibility、学习曲线、工具链,乃至此框架和库的长久的生存(有人维护,修bug、加新功能比如对HTML5新API的支持之类的)。关键是,理论上说JavaScript具有更高的弹性,但是更大的自由度未必能得到更好的

2) 框架和库给出的抽象模型和HTML/CSS模型的阻抗是否匹配?假如该框架或库本质上仍然使用HTML/CSS模型,只是改变了语法(比如从markup改为json),那么其提供的好处在哪里?仅仅是语法统一?如果该框架或库有自己独立的抽象层,比如widget/component等,那么它是建筑在HTML/CSS之上的额外抽象层(即最终映射到HTML/CSS),还是仅仅以HTML/CSS为纯粹实现工具?对于前者,实际上最终会回归HTML/CSS模型。而后者,可以参考的经验教训就是http://ASP.NET WebForm和JSF。

3) 框架和库所设定的约束能否在开发中一以贯之的执行?无论是理论或者现实,HTML/CSS模型都算不上完美。但是至少是清晰和较容易被一致的执行的。但是单一语言即使提供分层机制,也容易被绕过——尤其是框架和库本身不够好的情况下,可能由于不能满足需求、有bug等情况而倾向于hack之,更不要说deadline紧迫时。

3. 注重性能。须知,最终Web应用、页面是在浏览器中执行,而浏览器完全是按照HTML/CSS所设计。抛开Canvas不论,纯JS的实现最终还是要生成DOM。从性能的角度看,纯JS生成DOM自然赶不上直接的markup。同样的道理,就算用CSS预处理器也都会在部署时预先编译——尽管在运行时可以做出更牛逼的特性(然而实际上目前我不知道有任何CSS预处理器干了这样的事情——因为它们都是按照预编译的场景设计的),再如HTML/CSS是按照渐进显示优化的(页面不用全下载完就可以看部分),而纯JS的架构没有精心设计是很难做到的(比如json数据全部下载完你才能parse,数据才可用,DOM才能生成)。尽管LESS是可以在运行时执行的,但是从性能的角度出发是不合适的,因为CSS通常必须在页面rendering之前就全部就位。而运行时产生CSS,就要求在页面rending之前至少要先下载执行LESS的脚本,然后解析编译你的.less源代码。这个性能开销至少目前还不容忽视。

性能优化的另一点是基于HTML/CSS的声明性特点,即只表明high-level的目标,浏览器才能获得更大的优化自由度。比如CSS transition/animation,与JavaScript通过修改style达到效果比,前者性能表现要好得多。

4. 注重Web开发的独特特点

1) HTML/CSS 都是声明式的,也就是其本身并不希望是程序员来编程。当然,一个编程语言能干所有的事情,但是即使考虑编程本身,为什么在通用编程语言之外还要有SQL、还有以各种语法写的配置文件?

2) HTML/CSS是基于标准的。这与http://ASP.NET WebForm、JSF、Flash/Flex等私有技术或一个语言和平台下的标准有天壤之别。具体就不展开了。

3) Web开发和一般应用开发有个重大区别是,Web应用、网页的最终表现和行为,或者说Web的用户体验,并不是完全由开发者决定的,而是开发者和用户共同决定的。用户选择不同的设备、不同的浏览器、不同的浏览器设置、不同的浏览器扩展等,都能影响结果。这是缺点,也是优点。看你如何体会了。

纯JavaScript开发通常表示你想更多的控制用户体验,但这并非简单的多写代码就能做到。[补充:举个例子,表单控件上的autofocus属性,乍一看脚本也可以做嘛。但是其实脚本要做对很难!比如页面已然加载一半,用户开始在某个输入框里输入了,但是后续载入的控件要求focus,如果是脚本实现,通常就武断的调用focus(),打断了用户输入(特别是东亚用户使用输入法时被打断很是受伤)。而HTML本身所定义的属性,是由浏览器实现,则可以做恰当的处理。特别注意的是,从老浏览器到新浏览器的升级,你自然就获得了用户体验的提升。另一方面,用户可以主动选择他想用的浏览器,来主动升级他自己的用户体验。这样的例子还有许多许多,不胜枚举。]以上。

时间: 2024-10-08 00:37:40

前端开发之HTML+css的相关文章

我的IT梦——web前端开发之HTML,CSS(一)

HTML HTML全称HyperText Markup Language(超文本标记语言) 标签成对出现 <!DOCTYPE html>    文档类型定义 < >    标记||标签 charset=UTF-8    字符编码集,万国码 <head></head>    头部 <body></body>    内容 <!-- -->    注释 标题<h1></h1><h2></

前端开发之CSS基础知识02

重要: 行内元素中只能容纳文本或其他的行内元素 a标签例外 文字类型的块标签,不要放其他块元素 如 P H1 CSS规范: .demo {} 空格 font-size: 12px; 空格 .a1, .a2, .a3 {} 空格 后代选择器或子代选择器最好不要超过三层 文字分为 顶线 中线 基线 底线 CSS特性: 层叠行:若冲突,按照最后的为准 CSS权重(重要): 标签 0.0.0.1 类选择器 0.0.1.0 id选择器 0.1.0.0 内联样式 1.0.0.0 !important 无穷大

移动平台前端开发之WebApp代码技巧

1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" /> <meta content="yes" name="apple-mobile-web

高效Web前端开发之路:YUI 3.15 PDF扫描版

JavaScript是一种最初由Netscape的LiveScript发展而来的面向对象的Web脚本语言,被ECMA国际定义为国际化标准--ECMAScript.JavaScript具有使用局限性.在Web方面,其必须与各种DOM技术结合才能发挥作用.因此,一些具有开拓创新精神的开发者们便开发出了各种丰富的第三方框架,通过第三方的支持代码实现浏览器兼容性的统一.代码的简化以及功能的增强. <高效Web前端开发之路:YUI 3.15>作者便是在此背景下,以国外最优秀的JavaScript框架之一

前端开发之html基础知识02

经典表格:表格没有列的概念,只有行的概念, 一行 tr,行中的单元格 td表头的突出显示:tr>th <table width="400px" align="center" border="1px" cellspacing="0" cellpadding="5px" > <!-- align = "center" 表格整体剧中--> <caption&

前端开发之css篇

一.css简介 css(Cascading Style Sheets)层叠样式表,是一种为html文档添加样式的语言,主要有两个功能:渲染和布局.使用css主要关注两个点:查找到标签,属性操作 二.css的引入方式 (1)行内式引入: <div style="color:red;font-size: 16px">hello</div> 直接在html语句的属性中设置,这种方法的缺点是html代码和css代码混合在一起,耦合性太强,维护困难 (2)嵌入式引入: &

前端开发之CSS篇一

一.CSS介绍和语法 二.CSS引入方式 三.基本选择器 四.高级选择器 五.伪类选择器 六.伪元素选择器 1??  CSS介绍和语法 1. CSS的介绍 (1)为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样式属性,当HTML内容非常多时,就会定义很多重复的样式属性,并且修改的时候需要逐个修改,费心费力.而此时CSS就出现了. CSS的出现解决了以下问题: 首

前端开发之CSS篇三

一.CSS布局之浮动 二.清除浮动带来的问题 三.margin塌陷问题和水平居中 四.善用父级的的padding取代子级的margin 五.文本属性和字体属性 六.超链接美化 七.背景属性(颜色.图片.位置)   1??  CSS布局之浮动 float:即浮动,CSS布局用得最多的一个属性. 效果:元素并排,并且两个元素都能够设置宽度和高度. 要想学好必须要知道的四个特性: (1)浮动的元素脱标: (2)浮动的元素互相贴靠: (3)浮动的元素有“字围“效果: (4)紧凑的效果 1.元素脱标 脱离

前端开发之css

<!--页面中的组成部分通常随便打开一个网页,有文字,图片,视频,表格,音频,表单(注册信息) css 属性/尺寸/边框/背景 1.css的尺寸属性,就是大小width max-width min-widthheight max-height min-height 2.css的边框属性border-style 边框风格 none:无边框. border-color和boder-width都将被忽略 hidden:隐藏边框. dotted:点状边框. dashed:虚线边框. solid:实线边框