首页
web设计
正文
Web开发的改良
发布日期:
2009.07.03
浏览:
807次 关键字:
Web 开发 改良
最近网上再度兴起了CSS布局和Table 布局的争论。我最初颇有些不以为然:我原以为CSS 布局的意义早已深入人心,却没想到还有这么多设计师及开发人员持有异议。
静下心来看罢大家的讨论,一番细想,觉得原因可能有两个方面:
- 一方面,IE6阴魂不散,让Web开发成本居高不下。网上曾经有一个统计,数据显示Web开发人员针对IE6的投入/产出比是最低的。相信大多数前端工程师都有被IE6折磨得咬牙切齿的经历。与其那般痛苦的用CSS布局,还不如用table 来的爽快方便。
- 另一方面,我发现前端工程师们越来越务实和注重效率。CSS2以及CSS3的诸多新特性迟迟未能广泛普及,而Web标准布道者们所津津乐道的CSS的优点,在照进现实时又经常会遭遇妥协。尽管我一直以Web标准布道为己任,但也不得不同意:table的浏览器兼容性是最好的;table 布局对于设计师来说更容易上手。 就国内环境而言, table切图依旧是制作门户网站专题或者电子商务网站促销页面的最常用方式,存在即有它的合理性。
所以,我们在推崇CSS布局的同时,无需为了证明它的优越性而把table本身贬得一文不值。日常开发中,也无需激进得完全抛弃table。table本身有语义,该显示数据表格的时候就应该使用<table>;在开发过程中,一些需要权衡成本的场合用table+css的布局也未尝不可。在这方面,很欣赏google 和 facebook 前端工程师们的务实做法。大家可以去关注下facebook 上常见的带半透明阴影的弹出对话框,就是使用<table>来制作的,同样非常的精妙。
这一番的争论,结合近年来Web标准的发展,让我开始思考Web开发中改良和改革的区别。
XHTML 2试图直接进化到XML,宣布与HTML的决裂。这曾经让我这个传统的HTML开发者感到恐慌。而当我看到WHATWG组织提出HTML5(最终被W3C认可)的时候,它的温良的改进让我感觉亲切得多,事实也证明,HTML5正越来越向我们走进。而Douglas Crockford甚至觉得HTML5都太猛烈了,提出了HTML 4.2的改良方案。
再看JavaScript, ECMAScript 4 将JavaScript 改得天翻地覆,所幸技术委员会在最终阶段回归理智,重新提出的向下兼容的ESMAScript 3.1 显然得到更多真正战斗在一线的开发人员的认可。
改良,而非血淋淋的改革,也许才是推动技术发展的更实际、更合情合理的方式。Web标准的演进是如此,产品或项目的升级是如此,甚至社会制度的建设亦如此
SELECT [t0].[a_id], [t0].[a_site], [t0].[a_model], [t0].[a_type], [t0].[a_special], [t0].[a_name], [t0].[a_from], [t0].[a_from_url], [t0].[a_author], [t0].[a_editor], [t0].[a_describe], [t0].[a_content], [t0].[a_create_date], [t0].[a_tag], [t0].[a_hits], [t0].[a_commend], [t0].[a_istop], [t0].[a_isimg], [t0].[a_cacheimg], [t0].[a_imgurls], [t0].[a_imgurl], [t0].[a_ismedia], [t0].[a_mediaurl], [t0].[a_iscomment], [t0].[a_isRecycle], [t0].[a_weight], [t0].[a_weights], [t0].[a_status], [t0].[a_url], [t0].[a_file_path], [t0].[a_contentfile], [t0].[a_comment], [t0].[a_ispass], [t0].[a_bury], [t0].[a_dig], [t0].[a_score], [t0].[a_rank], [t0].[a_diguser], [t0].[a_buryuser], [t0].[a_viewip], [t0].[a_lastviewdate], [t0].[a_neworimageorvideo], [t0].[class_id], [t0].[class_type], [t0].[class_name], [t0].[class_show_name], [t0].[class_parent_id], [t0].[class_id_path], [t0].[class_name_path], [t0].[class_show_name_path], [t0].[class_depth], [t0].[class_order], [t0].[class_content], [t0].[class_img], [t0].[a_model_name]
FROM [dbo].[mvc_content_view] AS [t0]
WHERE ([t0].[a_id] = @p0) AND ([t0].[a_type] = @p1) AND (NOT ([t0].[a_isRecycle] = 1))
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6364]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [218]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT TOP (1) [t0].[a_id], [t0].[a_name]
FROM [dbo].[mvc_content_view] AS [t0]
WHERE ([t0].[a_type] = @p0) AND ([t0].[a_id] < @p1) AND (NOT ([t0].[a_isRecycle] = 1))
ORDER BY [t0].[a_id] DESC
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [218]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6364]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT TOP (1) [t0].[a_id], [t0].[a_name]
FROM [dbo].[mvc_content_view] AS [t0]
WHERE ([t0].[a_type] = @p0) AND ([t0].[a_id] > @p1) AND (NOT ([t0].[a_isRecycle] = 1))
ORDER BY [t0].[a_id]
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [218]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6364]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT TOP (10) [t0].[a_id], [t0].[a_site], [t0].[a_model], [t0].[a_type], [t0].[a_special], [t0].[a_name], [t0].[a_from], [t0].[a_from_url], [t0].[a_author], [t0].[a_editor], [t0].[a_describe], [t0].[a_content], [t0].[a_create_date], [t0].[a_tag], [t0].[a_hits], [t0].[a_commend], [t0].[a_istop], [t0].[a_isimg], [t0].[a_cacheimg], [t0].[a_imgurls], [t0].[a_imgurl], [t0].[a_ismedia], [t0].[a_mediaurl], [t0].[a_iscomment], [t0].[a_isRecycle], [t0].[a_weight], [t0].[a_weights], [t0].[a_status], [t0].[a_url], [t0].[a_file_path], [t0].[a_contentfile], [t0].[a_comment], [t0].[a_ispass], [t0].[a_bury], [t0].[a_dig], [t0].[a_score], [t0].[a_rank], [t0].[a_diguser], [t0].[a_buryuser], [t0].[a_viewip], [t0].[a_lastviewdate], [t0].[a_neworimageorvideo], [t0].[class_id], [t0].[class_type], [t0].[class_name], [t0].[class_show_name], [t0].[class_parent_id], [t0].[class_id_path], [t0].[class_name_path], [t0].[class_show_name_path], [t0].[class_depth], [t0].[class_order], [t0].[class_content], [t0].[class_img], [t0].[a_model_name]
FROM [dbo].[mvc_content_view] AS [t0]
WHERE ([t0].[a_type] IN (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21, @p22, @p23, @p24)) AND (NOT ([t0].[a_isRecycle] = 1))
ORDER BY [t0].[a_id] DESC
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [218]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [232]
-- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [248]
-- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [251]
-- @p4: Input BigInt (Size = 0; Prec = 0; Scale = 0) [249]
-- @p5: Input BigInt (Size = 0; Prec = 0; Scale = 0) [241]
-- @p6: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233]
-- @p7: Input BigInt (Size = 0; Prec = 0; Scale = 0) [253]
-- @p8: Input BigInt (Size = 0; Prec = 0; Scale = 0) [254]
-- @p9: Input BigInt (Size = 0; Prec = 0; Scale = 0) [255]
-- @p10: Input BigInt (Size = 0; Prec = 0; Scale = 0) [229]
-- @p11: Input BigInt (Size = 0; Prec = 0; Scale = 0) [256]
-- @p12: Input BigInt (Size = 0; Prec = 0; Scale = 0) [257]
-- @p13: Input BigInt (Size = 0; Prec = 0; Scale = 0) [230]
-- @p14: Input BigInt (Size = 0; Prec = 0; Scale = 0) [231]
-- @p15: Input BigInt (Size = 0; Prec = 0; Scale = 0) [203]
-- @p16: Input BigInt (Size = 0; Prec = 0; Scale = 0) [224]
-- @p17: Input BigInt (Size = 0; Prec = 0; Scale = 0) [226]
-- @p18: Input BigInt (Size = 0; Prec = 0; Scale = 0) [225]
-- @p19: Input BigInt (Size = 0; Prec = 0; Scale = 0) [204]
-- @p20: Input BigInt (Size = 0; Prec = 0; Scale = 0) [238]
-- @p21: Input BigInt (Size = 0; Prec = 0; Scale = 0) [239]
-- @p22: Input BigInt (Size = 0; Prec = 0; Scale = 0) [240]
-- @p23: Input BigInt (Size = 0; Prec = 0; Scale = 0) [250]
-- @p24: Input BigInt (Size = 0; Prec = 0; Scale = 0) [252]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT TOP (10) [t0].[a_id], [t0].[a_site], [t0].[a_model], [t0].[a_type], [t0].[a_special], [t0].[a_name], [t0].[a_from], [t0].[a_from_url], [t0].[a_author], [t0].[a_editor], [t0].[a_describe], [t0].[a_content], [t0].[a_create_date], [t0].[a_tag], [t0].[a_hits], [t0].[a_commend], [t0].[a_istop], [t0].[a_isimg], [t0].[a_cacheimg], [t0].[a_imgurls], [t0].[a_imgurl], [t0].[a_ismedia], [t0].[a_mediaurl], [t0].[a_iscomment], [t0].[a_isRecycle], [t0].[a_weight], [t0].[a_weights], [t0].[a_status], [t0].[a_url], [t0].[a_file_path], [t0].[a_contentfile], [t0].[a_comment], [t0].[a_ispass], [t0].[a_bury], [t0].[a_dig], [t0].[a_score], [t0].[a_rank], [t0].[a_diguser], [t0].[a_buryuser], [t0].[a_viewip], [t0].[a_lastviewdate], [t0].[a_neworimageorvideo], [t0].[class_id], [t0].[class_type], [t0].[class_name], [t0].[class_show_name], [t0].[class_parent_id], [t0].[class_id_path], [t0].[class_name_path], [t0].[class_show_name_path], [t0].[class_depth], [t0].[class_order], [t0].[class_content], [t0].[class_img], [t0].[a_model_name]
FROM [dbo].[mvc_content_view] AS [t0]
WHERE ([t0].[a_type] IN (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21, @p22, @p23, @p24)) AND (NOT ([t0].[a_isRecycle] = 1))
ORDER BY [t0].[a_id] DESC
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [218]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [232]
-- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [248]
-- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [251]
-- @p4: Input BigInt (Size = 0; Prec = 0; Scale = 0) [249]
-- @p5: Input BigInt (Size = 0; Prec = 0; Scale = 0) [241]
-- @p6: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233]
-- @p7: Input BigInt (Size = 0; Prec = 0; Scale = 0) [253]
-- @p8: Input BigInt (Size = 0; Prec = 0; Scale = 0) [254]
-- @p9: Input BigInt (Size = 0; Prec = 0; Scale = 0) [255]
-- @p10: Input BigInt (Size = 0; Prec = 0; Scale = 0) [229]
-- @p11: Input BigInt (Size = 0; Prec = 0; Scale = 0) [256]
-- @p12: Input BigInt (Size = 0; Prec = 0; Scale = 0) [257]
-- @p13: Input BigInt (Size = 0; Prec = 0; Scale = 0) [230]
-- @p14: Input BigInt (Size = 0; Prec = 0; Scale = 0) [231]
-- @p15: Input BigInt (Size = 0; Prec = 0; Scale = 0) [203]
-- @p16: Input BigInt (Size = 0; Prec = 0; Scale = 0) [224]
-- @p17: Input BigInt (Size = 0; Prec = 0; Scale = 0) [226]
-- @p18: Input BigInt (Size = 0; Prec = 0; Scale = 0) [225]
-- @p19: Input BigInt (Size = 0; Prec = 0; Scale = 0) [204]
-- @p20: Input BigInt (Size = 0; Prec = 0; Scale = 0) [238]
-- @p21: Input BigInt (Size = 0; Prec = 0; Scale = 0) [239]
-- @p22: Input BigInt (Size = 0; Prec = 0; Scale = 0) [240]
-- @p23: Input BigInt (Size = 0; Prec = 0; Scale = 0) [250]
-- @p24: Input BigInt (Size = 0; Prec = 0; Scale = 0) [252]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT TOP (10) [t0].[a_id], [t0].[a_site], [t0].[a_model], [t0].[a_type], [t0].[a_special], [t0].[a_name], [t0].[a_from], [t0].[a_from_url], [t0].[a_author], [t0].[a_editor], [t0].[a_describe], [t0].[a_content], [t0].[a_create_date], [t0].[a_tag], [t0].[a_hits], [t0].[a_commend], [t0].[a_istop], [t0].[a_isimg], [t0].[a_cacheimg], [t0].[a_imgurls], [t0].[a_imgurl], [t0].[a_ismedia], [t0].[a_mediaurl], [t0].[a_iscomment], [t0].[a_isRecycle], [t0].[a_weight], [t0].[a_weights], [t0].[a_status], [t0].[a_url], [t0].[a_file_path], [t0].[a_contentfile], [t0].[a_comment], [t0].[a_ispass], [t0].[a_bury], [t0].[a_dig], [t0].[a_score], [t0].[a_rank], [t0].[a_diguser], [t0].[a_buryuser], [t0].[a_viewip], [t0].[a_lastviewdate], [t0].[a_neworimageorvideo], [t0].[class_id], [t0].[class_type], [t0].[class_name], [t0].[class_show_name], [t0].[class_parent_id], [t0].[class_id_path], [t0].[class_name_path], [t0].[class_show_name_path], [t0].[class_depth], [t0].[class_order], [t0].[class_content], [t0].[class_img], [t0].[a_model_name]
FROM [dbo].[mvc_content_view] AS [t0]
WHERE ([t0].[a_type] IN (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21, @p22, @p23, @p24)) AND (NOT ([t0].[a_isRecycle] = 1))
ORDER BY [t0].[a_hits] DESC, [t0].[a_id] DESC
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [218]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [232]
-- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [248]
-- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [251]
-- @p4: Input BigInt (Size = 0; Prec = 0; Scale = 0) [249]
-- @p5: Input BigInt (Size = 0; Prec = 0; Scale = 0) [241]
-- @p6: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233]
-- @p7: Input BigInt (Size = 0; Prec = 0; Scale = 0) [253]
-- @p8: Input BigInt (Size = 0; Prec = 0; Scale = 0) [254]
-- @p9: Input BigInt (Size = 0; Prec = 0; Scale = 0) [255]
-- @p10: Input BigInt (Size = 0; Prec = 0; Scale = 0) [229]
-- @p11: Input BigInt (Size = 0; Prec = 0; Scale = 0) [256]
-- @p12: Input BigInt (Size = 0; Prec = 0; Scale = 0) [257]
-- @p13: Input BigInt (Size = 0; Prec = 0; Scale = 0) [230]
-- @p14: Input BigInt (Size = 0; Prec = 0; Scale = 0) [231]
-- @p15: Input BigInt (Size = 0; Prec = 0; Scale = 0) [203]
-- @p16: Input BigInt (Size = 0; Prec = 0; Scale = 0) [224]
-- @p17: Input BigInt (Size = 0; Prec = 0; Scale = 0) [226]
-- @p18: Input BigInt (Size = 0; Prec = 0; Scale = 0) [225]
-- @p19: Input BigInt (Size = 0; Prec = 0; Scale = 0) [204]
-- @p20: Input BigInt (Size = 0; Prec = 0; Scale = 0) [238]
-- @p21: Input BigInt (Size = 0; Prec = 0; Scale = 0) [239]
-- @p22: Input BigInt (Size = 0; Prec = 0; Scale = 0) [240]
-- @p23: Input BigInt (Size = 0; Prec = 0; Scale = 0) [250]
-- @p24: Input BigInt (Size = 0; Prec = 0; Scale = 0) [252]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1