读《编写高质量代码-Web前端开发修炼之道》笔记

第一章

  1.Web标准由一系列标准组合而成,核心理念是将网页的结构,样式和行为分离,所以分为三大部分:结构标准,样式标准和行为标准。结构标准包括XML标准,XHTML标准,HTML标准;样式标准指CSS标准;行为标准主要包括DOM标准和ECMAScript标准。

第二章

  1.注释增加代码的可读性;提高重用性--公共组件和私有组件的维护;冗余or精简;前期的构思;制定规范;团队合作

第三章

  1.语义化标签

  2.table布局的缺点:代码量大,结构混乱;标签语义不明确,对搜索引擎不友好。

  3.CSS布局:div+css布局  or  (X)HTML+css布局;代码量少;语义清晰。

  4.判断标签语义是否良好:去掉样式,看网页结构是否组织良好有序,是否仍然有很好的可读性。  CSS裸体日。   FireFox插件-Web Developer

  5.表格标题要用caption,表头要用thead包围,主体部分用tbody包围,尾部要用tfoot包围,表头和一般单元格要区分开,表头用th,一般单元格用td。

  6.语义化标签应该注意:尽可能少地使用无语义标签div和span;   在语义不明显,既可以使用p也可以用div的地方,尽量用p,因为p默认情况下有上下间距,去样式后的可读性更好,对兼容特殊终端有利;   不要使用纯样式标签,例如b,font,和u等,改用css设置,语义上需要强调的文本可以包在strong或em标签里,strong和em有“强调”的语意,其中strong的默认样式是加粗,而em的默认样式是斜体。

第四章

  1.怪异模式:为了确保向后兼容,模拟老式浏览器的行为以防止老站点无法工作;IE对盒模型的解析在怪异模式中,width本身就包括了padding和border的宽度,margin-left(right):auto在怪异模式下也无法正常工作。

  2.触发怪异模式:DTD文档类型定义

  3.组织CSS的方法:base.css(被所有页面引用,与具体UI无关,力求精简和通用,具有高度可移植性,不同风格的网站可以使用同一个base,相对稳定,不需要维护)+common.css(提供组件级的css类,尽可能将内部实现封装,对尽可能会经常变化的部分提供灵活的接口,最好一人负责,统一管理)+page.css(高度重用的模块,每个页面都有自己的page)

  4.推荐的base.css

/*css reset*/

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}

table{border-collapse: collapse;border-spacing: 0;}

fieldset,img{border:0}

address,caption,cite,code,dfn,em,strong,th,var{font-style: normal;font-weight: normal}

ol,ul{list-style: none}

caption,th{text-align: left}

h1,h2,h3,h4,h5,h6{font-size: 100%;font-weight: normal}

q:before,q:after{content: ''}

abbr,acronym{border:0}



/*文字排版*/

.f12{font-size: 12px}

.f13{font-size: 13px}

.f14{font-size: 14px}

.f16{font-size: 16px}

.f20{font-size: 20px}

.fb{font-weight: bold}

.fn{font-weight: normal}

.t2{text-indent: 2em}

.lh150{line-height: 150%}

.lh180{line-height: 180%}

.lh200{line-height: 200%}

.unl{text-decoration: underline;}

.no_unl{text-decoration: none;}



/*定位*/

.tl{text-align: left}

.tc{text-align: center}

.tr{text-align: right}

.bc{margin-left: auto;margin-right: auto;}

.fl{float: left;display: inline}

.fr{float: right;display: inline}

.cb{clear: both}

.cl{clear: left}

.cr{clear: right}

.clearfix:after {content: “.”;display:block;height:0;clear:both;visibility:hidden;} 

.clearfix {display: inline-block;}* html .clearfix {height: 1%;} 

.clearfix {display: block;}

.vm{vertical-align: middle}

.pr{position: relative}

.pa{position: absolute}

.abs-right{position: absolute;right: 0}

.zoom{zoom:1}

.hidden{visibility: hidden}

.none{display: none}



/*长度高度*/

.w10{width:10px}

.w20{width:20px}

.w30{width:30px}

.w40{width:40px}

.w50{width:50px}

.w60{width:60px}

.w70{width:70px}

.w80{width:80px}

.w90{width:90px}

.w100{width:100px}

.w200{width:200px}

.w250{width:250px}

.w300{width:300px}

.w400{width:400px}

.w500{width:500px}

.w600{width:600px}

.w700{width:700px}

.w800{width:800px}

.w{width: 100%}

.h50{height: 50px}

.h80{height: 80px}

.h100{height: 100px}

.h200{height: 200px}

.h{height: 100%}



/*边距*/

.m10{margin:10px}

.m15{margin:15px}

.m30{margin:30px}

.mt5{margin-top:5px}

.mt10{margin-top:10px}

.mt15{margin-top:15px}

.mt20{margin-top:20px}

.mt30{margin-top:30px}

.mt50{margin-top:50px}

.mt100{margin-top:100px}

.mb5{margin-bottom:5px}

.mb10{margin-bottom:10px}

.mb15{margin-bottom:15px}

.mb20{margin-bottom:20px}

.mb30{margin-bottom:30px}

.mb50{margin-bottom:50px}

.mb100{margin-bottom:100px}

.ml5{margin-left:5px}

.ml10{margin-left:10px}

.ml15{margin-left:15px}

.ml20{margin-left:20px}

.ml30{margin-left:30px}

.ml50{margin-left:50px}

.ml100{margin-left:100px}

.mr5{margin-right:5px}

.mr10{margin-right:10px}

.mr15{margin-right:15px}

.mr20{margin-right:20px}

.mr30{margin-right:30px}

.mr50{margin-right:5px}

.mr100{margin-right:100px}

.p10{padding:10px;}

.p15{padding:15px;}

.p30{padding:30px;}

.pt5{padding-top:5px}

.pt10{padding-top:10px}

.pt15{padding-top:15px}

.pt20{padding-top:20px}

.pt30{padding-top:30px}

.pt50{padding-top:50px}

.pb5{padding-bottom:5px}

.pb10{padding-bottom:10px}

.pb15{padding-bottom:15px}

.pb20{padding-bottom:20px}

.pb30{padding-bottom:30px}

.pb50{padding-bottom:50px}

.pb100{padding-bottom:100px}

.pl5{padding-left:5px}

.pl10{padding-left:10px}

.pl15{padding-left:15px}

.pl20{padding-left:20px}

.pl30{padding-left:30px}

.pl50{padding-left:50px}

.pl100{padding-left:100px}

.pr5{padding-right:5px}

.pr10{padding-right:10px}

.pr15{padding-right:15px}

.pr20{padding-right:20px}

.pr30{padding-right:30px}

.pr50{padding-right:50px}

.pr100{padding-right:100px}

  5.拆分模块:模块与模块之间尽量不要包含相同的部分,如果有相同部分,应将它们提取出来,拆分成一个独立的模块;模块应在保证数量尽可能少的原则下,做到尽可能简单,以提高重用性。

  6.CSS命名:骆驼命名法用于区别不同单词,划线用于表明从属关系。

  7.多用组合,少用继承

  8.id只能挂一个,class可以挂多个,用空格分隔

  9.上下margin会重合,左右不会

  10。如果不确定模块的上下margin特别稳定,最好不要将它写到模块的类里,而是使用类的组合,单独为上下margin挂用于边距的原子类(如mt10,mb20).模块最好不要混用margin-top和margin-bottom,统一使用margin-top或margin-bottom。

  11.当不同选择符的样式设置有冲突时,会采用权重高的选择符设置的样式。

  12.HTML标签权重是1,class的权重是10,id的权重是100。

  13.如果CSS选择符权重相同,那么样式会遵循就近原则,哪个选择符最后定义,就采用哪个选择符的样式。

  14.为了保证样式容易被覆盖,提高可维护性,CSS选择符需保证权重尽可能低。少用自选择器,多添加class。

  15.CSS sprite:图片翻转技术将多张图片合并为一张,然后利用background-position属性来展示我们需要的部分。

  16.CSS编码风格:推荐一行式的编码风格,可读性稍差,但有效减少CSS文件的行数,提高开发速度,减小CSS文件大小。

  17.CSS hack-IE条件注释;选择符前缀法;样式属性前缀法。

  18.解决超链接访问后hover样式不出现的问题:love hate原则,即l(link)ov(visited)e h(hover)a(active)te。

  19.haslayout:IE浏览器专有的属性,用于CSS的解析引擎,在IE下一些复杂的CSS设置解析起来会出现bug,其原因可能与haslayout没有被自动触发有关;haslayout触发方法:设置width,height的值,设置position为relative,但是会有副作用;更好的解决方法:使用“zoom:1”.

  20.块级元素和行内元素是布局最基本的两种元素,常见的块级元素有div,p,form,ul,ol,li等,常见的行内元素有span,strong,em等。

  21.块级元素可以设置width,height属性。行内元素设置width,height属性无效。

  22.块级元素可以设置margin和padding属性。行内元素水平方向会产生边距,但竖直方向不会。

  23.块级元素对英语display:block,行内元素对应于display:inline。可以通过修改display属性来切换块级元素和行内元素。

  24.display:inline-block  行内的块级元素,拥有块级元素的特点,可以设置长宽,可以设置margin和padding的值,却不独占一行,宽度并不沾满父元素。IE6和IE7不支持,可以通过触发行内元素的halayout实现。

  25.行内元素的水平居中  text-align:center

  26.确定宽度的块级元素的水平居中   {margin-left:auto;margin-right:auto}

  27.不确定宽度的块级元素水平居中:将ul包含在table标签内,对table设置margin-left:auto和margin-right:auto;改变块级元素的display为inline类型,然后使用text-align:center;给父元素设置float,然后父元素设置position:relative 和left:50%,子元素设置position:relative和left:-50%。

  28.父元素高度不确定的文本,图片,块级元素的竖直居中:通过给父容器设置相同上下边距实现。

  29.父元素高度确定的单行文本的竖直居中:通过给父元素设置line-height来实现,line-height值和父元素的高度只相同。

  30.父元素高度确定的多行文本,图片,块级元素的竖直居中:当父元素为td或th时,可以设置vertical-align属性;对支持display:table-cell的IE8H和Firefox用display:table-cell和vertical-align:middle来实现居中,不支持的IE6和IE7,使用特定格式的hack。

  31.main的内容比起sidebar更重要,无论sidebar和main的样式上谁左谁右,在html标签上要保证main的标签在sidebar之前被加载。

第五章

  1.团队合作中,用匿名函数将脚本包起来,可以有效控制全局变量,避免冲突隐患。

  2.添加必要的注释,可以大大提高代码的可维护性,对于团队合作来说,很有必要。

  3.网页中的JavaScrippt从功能上,分为两大部分-框架部分和应用部分。框架部分提供的是对JavaScript代码的组织应用,包括定义全局变量,定义命名空间方法等,它和具体应用无关,每个页面都需要包括相同的框架,所以框架部分的代码在每个页面都相同。应用部分提供的是页面的功能逻辑,不同页面会有不同的功能,不同页面应用部分的代码也不相同。

  4.CSS放在页头,JS放在页尾。

  5.为减小网页大小,缩短网页下载时间,在发布JavaScript之前,先进行压缩。压缩工具有Packer和YUI Compressor。

  6.为了方便维护,源文件叫做head.js 压缩后的文件叫head.js。

  7.JavaScript分层:base层(位于底端,封装不同浏览器下JavaScript的差异,提供统一的接口,可以靠它来完成跨浏览器兼容的工作;扩展JavaScript语言底层提供的接口,让它提供更多更为易用的接口。)common层(中间层,依赖base层提供的接口。common层提供可供复用的组件,和页面功能没有直接关系)page层(位于顶端,和页面里的具体功能需求直接相关,完成页面内的功能需求)

  8.获得DOM节点的三种方法:getElementById,getElementsByTagName,getElementsByClassName。

  9.同一个页面里id只能出现一次,所以如果你的程序需要被多处复用,就一定不能使用id作为JavaScript获得DOM节点的挂钩。

  10.组件需要指定一个根节点,以保持每个组件之间的独立性。

 

你可能感兴趣的:(web前端开发)