谈CSS书写风格



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) -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6357] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1 SELECT TOP (1) [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] = @p0) AND ([t0].[a_id] < @p1) ORDER BY [t0].[a_id] DESC -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6357] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1 SELECT TOP (1) [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] = @p0) AND ([t0].[a_id] > @p1) ORDER BY [t0].[a_id] -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6357] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1 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] FROM [dbo].[mvc_content] AS [t0] WHERE ([t0].[a_id] = @p0) AND ([t0].[a_type] = @p1) -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6357] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1 UPDATE [dbo].[mvc_content] SET [a_hits] = @p19 WHERE ([a_id] = @p0) AND ([a_site] = @p1) AND ([a_model] = @p2) AND ([a_type] = @p3) AND ([a_special] = @p4) AND ([a_name] = @p5) AND ([a_from] = @p6) AND ([a_from_url] IS NULL) AND ([a_author] IS NULL) AND ([a_editor] IS NULL) AND ([a_describe] IS NULL) AND ([a_content] = @p7) AND ([a_create_date] = @p8) AND ([a_tag] = @p9) AND ([a_hits] = @p10) AND (NOT ([a_commend] = 1)) AND (NOT ([a_istop] = 1)) AND (NOT ([a_isimg] = 1)) AND ([a_cacheimg] IS NULL) AND ([a_imgurls] IS NULL) AND ([a_imgurl] = @p11) AND (NOT ([a_ismedia] = 1)) AND ([a_mediaurl] IS NULL) AND (NOT ([a_iscomment] = 1)) AND (NOT ([a_isRecycle] = 1)) AND ([a_weight] = @p12) AND ([a_status] = @p13) AND ([a_url] IS NULL) AND ([a_file_path] IS NULL) AND ([a_contentfile] IS NULL) AND ([a_comment] = @p14) AND ([a_ispass] = @p15) AND ([a_bury] = @p16) AND ([a_dig] = @p17) AND ([a_score] = @p18) AND ([a_diguser] IS NULL) AND ([a_buryuser] IS NULL) AND ([a_viewip] IS NULL) AND ([a_lastviewdate] IS NULL) AND ([a_neworimageorvideo] IS NULL) SELECT [t1].[a_weights], [t1].[a_rank] FROM [dbo].[mvc_content] AS [t1] WHERE ((@@ROWCOUNT) > 0) AND ([t1].[a_id] = @p20) -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6357] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [197] -- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [24] -- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- @p4: Input BigInt (Size = 0; Prec = 0; Scale = 0) [0] -- @p5: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [谈CSS书写风格] -- @p6: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [3416] -- @p7: Input NVarChar (Size = 2625; Prec = 0; Scale = 0) [

随着公司业务的增加,需求变的越来越多,团队也因此在不断的扩大,我们经常会遇到几个人协同工作来完成同一件作品或者维护修改别人作品的时候,那么是什么最让你最感到困扰呢?我们在实现一个表现复杂的页面的同时,CSS文件就会比较繁琐,众多的选择符、属性让人眼花缭乱,那么如何更快的定位、如何更高效的编写样式呢?CSS的书写被很多人所忽略。关于书写风格,翻看了一些知名网站的作品,发现横向连排几乎成为各大产品项目的主流,然而,每个人对于CSS的写法各异,这就导致我们工作效率的降低。为了更好的协同工作,保持团队内CSS书写的一致性,几经波折后达成共识,具体书写方法如下:CSS属性横排书写,选择符纵排书写,每个”,”(逗号)后必须换行;

重构组代码书写规范示例:(其中数字只用做示范,实际应用中不建议用数字命名。)

.class_name_1 .class_name_1_1,
.class_name_2 .class_name_2_1 .class_name_2_1_1,
.class_name_3{style1:value; style2:value; styel3:value; }

有人说,好代码就是用记事本打开也是艺术品,而样式文件本身就是设计作品。目前并没有一个权威来界定这种规范,我们只能对两种写法做个简单的总结。

就样式文件本身对比:

纵向书写特点:

  1. 每个CSS属性独立一行,一般不会出现换行或横向滚动条。
  2. 可以通过firebug等工具查找到模块,在DW中ctrl+g行定位,修改方便。
  3. 属性段落间有缩进,保证了代码的整洁,层次清楚,符合编程语言代码规范,修改更加直观。

存在的问题:代码冗余(如空格符、tab符、换行符);文件大小增加;容易出现纵向滚动条。

横向书写特点:

  1. 最大化的利用了空间,单屏内能显示更多,减小了纵向滚动条出现的几率,能够快速捕获较多的信息。
  2. 减小了文件大小,省去了不必要的空格、换行等。
  3. 横向书写方便分块以及注释,便于查看CSS结构,选择符一目了然。当今显示器正朝着越来越大,越来越宽发展,基本上一行内可以显示完全。
  4. 加快编写CSS速度,不用每次敲换行和tab,并且减少拉动滚动条的次数。
  5. 如果是活动页,不用作压缩处理。使用CSS optimizers 来优化CSS是提倡的,但是使用横向书写,基本上不存在多余的空格和换行,因此可以不用压缩,这样效率和能力都会得到提高。
  6. 便于阅读和查找相关结构。代码编辑器对同行数定位做的都比较好,因此我们要解决的是如何快速纵向定位目标。横向书写时选择符纵向对齐,再加上
    .class_name_2  .class_name_2_1  .class_name_2_1_1的选择符层次分明,因此很容易定位到目标。
    在调试小Bug的时候就可以直接打开CSS更改,不用再打开firebug去找到模块。
  7. 横向书写,是基于CSS选择符的写法,层次容易对比,更利于模块化。对整体CSS规划有好处,后期维护成本低。
  8. 便于不同版本的CSS代码对比。

存在的问题:书写过密,从而影响阅读。这种弊端显而易见,但只要优化做到家,这种状况会很少。

尽管对于现如今的带宽来说,网页文件那仅以K为单位的大小实在是微不足道,但如何将这以K来计算的网页文件精简到最小还是网页设计师们应该考虑的问题之一。而横向书写省去了不必要的空格、换行等,大大减小了文件大小。我们不能说哪种书写是对的,至于具体采用哪种写法依个人选择,当然改变习惯可能会影响一个人的工作效率,那我们提倡的是:提交的CSS样式文件是经过代码格式化的,而这个工作可以完全交给DW等工具,我们只要点击一下,整个文件就会像我们想象的那样呈现出来。这样的代码看起来很舒服,修改容易,团队成员在后续交接也会变得更加顺利。

PS: Dreamweaver下代码格式的设置方法:


点击上图放大

原文:http://webteam.tencent.com/?p=1080

] -- @p8: Input DateTime (Size = 0; Prec = 0; Scale = 0) [2009-6-23 10:17:01] -- @p9: Input NVarChar (Size = 9; Prec = 0; Scale = 0) [CSS,书写,风格] -- @p10: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1158] -- @p11: Input NVarChar (Size = 0; Prec = 0; Scale = 0) [] -- @p12: Input BigInt (Size = 0; Prec = 0; Scale = 0) [0] -- @p13: Input Int (Size = 0; Prec = 0; Scale = 0) [0] -- @p14: Input BigInt (Size = 0; Prec = 0; Scale = 0) [0] -- @p15: Input Int (Size = 0; Prec = 0; Scale = 0) [0] -- @p16: Input BigInt (Size = 0; Prec = 0; Scale = 0) [0] -- @p17: Input BigInt (Size = 0; Prec = 0; Scale = 0) [0] -- @p18: Input Float (Size = 0; Prec = 0; Scale = 0) [0] -- @p19: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1159] -- @p20: Input BigInt (Size = 0; Prec = 0; Scale = 0) [6357] -- 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)) AND (NOT ([t0].[a_isRecycle] = 1)) ORDER BY [t0].[a_id] DESC -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [253] -- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [254] -- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [255] -- 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)) AND (NOT ([t0].[a_isRecycle] = 1)) ORDER BY [t0].[a_id] DESC -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [233] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [253] -- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [254] -- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [255] -- 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)) 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) [233] -- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [253] -- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [254] -- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [255] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1