Web前端开发修炼之道——学习笔记一

 1.前端设计的关键

(1)前期的构思很重要,是一个先慢后快的过程
(2)制定规范
(3)团队的分工与合作

  2.  衡量高质量的HTML的标准

2.1 语义化标签,那如何评判?
  • 去掉样式,看网页结构是否组织良好有序,是否仍然有很好的可读性。比如W3C的官方网站语义就非常优秀
2.2 语义化的标题和内容模块
HTML部分
<strong>    </strong><div>
    	<h2>标签的语义</h2>
    	<a href="#">更多</a>
    </div>
    <p>段落一的内容<strong>根据浏览器的默认样式</strong></p>
    <p>段落二的内容</p>
CSS部分
<span style="font-weight: bold; white-space: pre;">	</span>.title{border-bottom: 1px dashed #fff;text-align: right;}
	.title h2{float: left;}
	p{text-indent: 2em;line-height: 150%;margin: 0 0 20px 0;}
	strong{color: red;font-weight: normal;}
2.3 语义化的表单模块
HTML部分
    <form action="" method="">
    	<fieldset>
    		<legend>登录表单</legend>
    		<p><label for="name">账号: </label><input type="text" id="name" /></p>
    		<p><label for="pw">密码: </label><input type="password" id="pw" /></p>
    		<input type="submit" value="登录" class="subBtn" />
    	</fieldset>
    </form>
2.4 语义化的表格模块
HTML部分
     <table border="1">
    	<caption>几种页面实现的比较</caption>
    	<thead>
    		<tr><th>实现方式</th><th>代码量</th><th>搜索引擎友好</th><th>特殊终端兼容</th></tr>
    	</thead>
    	<tbody>
    		<tr><th>table 布局</th><td> 多 </td><td> 差 </td><td> 一般 </td></tr>
    		<tr><th>乱用标签的CSS布局</th><td> 少 </td><td> 一般 </td><td> 差 </td></tr>
    		<tr><th>标签语义良好的CSS布局</th><td> 少 </td><td> 好 </td><td> 好 </td></tr>
    	</tbody>
    </table>

     3.高质量的CSS
3.1 建议通过以下三个CSS文件组织网站的CSS
  • base层:base.css(CSS reset) 被所有页面引用,是页面样式依赖的最底层
  • common层: common.css 网站级,提供高度重用模块的CSS类。最好有一个人统一管理
  • page层:page.css 页面级,每个页面都有可能有自己的page层CSS
3.2 推荐的base.css
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}
.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:50px}
.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}
  • 在 base.css 中,CSS reset 部分来自于YUI(雅虎的前端框架),这是一段很成熟的代码,推荐大家都使用它来进行 CSS Reset。
  • base.css中,有几个类比较特殊,下面特别说明一下:
(1 )“.fl”类和“.fr”类。这个类,除了设置float:left和float:right之外,还设置了display:inline.其作用是解决IE6的双外边距Bug。在IE6下,如果对元素设置了浮动,同时又设置了margin-left或者margin-right,margin值会加倍。例如,设置margin-left:10px;在IE6下会显示为margin-left:20px;通过设置display:inline;可以解决这个bug。
( 2 )“.bc”类。这个类是“,blockCenter,作用是使块级元素居中。直接使用不足以使块级元素居中,还需要设定宽度。
( 3 )“.clearfix”类。这个类用于在父容器直接清除子元素浮动。让浮动元素的父容器能够根据浮动元素的高度而自适应高度。
例如:<div class="clearfix"><div class="fl"></div></div>
( 4 )".zoom"类。IE的专有属性。用于触发hasLayout
( 5 )".mt5",".mt10","mt20"这些类虽然繁杂,但有助于减少page层的代码量

    3.2. CSS的命名
要点:结合驼峰命名法和划线命名法进行命名
原则:驼峰命名法用于区别不同的单词,划线用于表明从属关系
例如:
<style type=”text/CSS”>
/*made by 工程师A*/
.ad-timeList{xxxxxxx}
.ad-timeList li{border-bottom:xxxx;}
.ad-timeList-lastItem{border-bottom:none;}
/*made by 工程师B*/
.zx-timeList{}
.zx-timeList li{border-bottom:xxxx;}
</style>
<!--made by 工程师A-->
<ul class=”ad-timeList”>
<li>2009 年08 月(3)</li>
<li>2009 年07 月(12)</li>
<li>2009 年06 月(3)</li>
<li>2009 年05 月(8)</li>
<li>2009 年04 月(2)</li>
<li class=”ad-timeList-lastItem”>2009 年03 月(8)</li>
</ul>
<!--made by 工程师B-->
<ol class=”zx-timeList”>
<li>2009-08-07</li>
<li>2009-08-06 </li>
<li>2009-08-05</li>
</ol>

  3.3.  挂多个class还是新建class——多用组合,少用继承
通过类的组合,很容易实现类的扩展,避免产生类的爆炸,下面直接上例子:
<style type=”text/CSS”>
.f12{font-size:12px}
.f16{font-size:16px}
.red{color:red}
.numberList{border:1px solid #ccc;padding:10px;}
.numberList li{height:20px;line-height:20px;}
</style>
<body>
<ul class="numberList f12">
<li>111111111111111111</li>
<li>222222222222222222</li>
<li>333333333333333333</li>
</ul>
<ul class="numberList f16">
<li>444444444444444444</li>
<li>555555555555555555</li>
<li>666666666666666666</li>
</ul>
<ul class="numberList f12 red">
<li>777777777777777777</li>
<li>888888888888888888</li>
<li>999999999999999999</li>
</ul>
<ul class="numberList f16 red">
<li>101010101010101010</li>
<li>111111111111111111</li>
<li>121212121212121212</li>
</ul>
</body>

   3.4  处理上下margin
  • margin是个有点特殊的样式,相邻的 margin-left 和 margin-right 是不会重合的,但相邻的 margin-top 和 margin-bottom 会产生重合。所以模块最好不要混用 margin-top 和 margin-bottom,统一使用 margin-top 或 margin-bottom。
  • 还有,如果不确定模块的上下 margin 特别稳定,最好不要将它写到模块的类里,而是使用类的组合,单独为上下 margin 挂用于边距的原子类(例如mt10,mb20)
   3.5  低权重原则——避免滥用子选择器
  • CSS的选择符是有权重的,当不同选择符的样式设置有冲突时,会采用权值高的选择符设置的样式。权重的规则是这样的:HTML标签的权重是1,class的权重是10,id的权重是100,例如p的权重是1,”div em“的权重是1+1=2,”strong.demo“的权重是10+1=11,”#test .red“的权重是100+10=110.
  • 使用子选择器,会增加CSS选择符的权重,CSS选择符的权重越高,样式越不易被覆盖,越容易对其他选择符产生影响。所以,为了保证样式容易被覆盖,提高可维护性,CSS选择符需保证权重尽可能低。(同等条件下,使用class而不是用id)

*以上内容大部分摘自《Web前端开发修炼之道》曹刘阳 著
笔记内容只记录了本人觉得比较重要的部分,有删减。建议读者阅读原著,会更有帮助!
转载请注明出处~!谢谢



kindle高清文字版,可在电脑上用clearview电子书阅读软件阅读。 第1章 从网站重构说起 1.1 糟糕的页面实现,头疼的维护工作 1.2 Web标准——结构、样式和行为的分离 1.3 前端的现状 1.4 打造高品质的前端代码,提高代码的可维护性——精简、重用、有序 第2章 团队合作 2.1 揭秘前端开发工程师 2.2 欲精一行,必先通十行 2.3 增加代码可读性——注释 2.4 提高重用性——公共组件和私有组件的维护 2.5 冗余和精简的矛盾——选择集中还是选择分散 2.6 磨刀不误砍柴工——前期的构思很重要 2.7 制订规范 2.8 团队合作的最大难度不是技术,是人 第3章 高质量的HTML 3.1 标签的语义 3.2 为什么要使用语义化标签 3.3 如何确定你的标签是否语义良好 3.4 常见模块你真的很了解吗 3.4.1 标题和内容 3.4.2 表单 3.4.3 表格 3.4.4 语义化标签应注意的一些其他问题 第4章 高质量的CSS 4.1 怪异模式和DTD 4.2 如何组织CSS 4.3 推荐的base.css 4.4 模块化CSS——在CSS中引入面向对象编程思想 4.4.1 如何划分模块——单一职责 4.4.2 CSS的命名——命名空间的概念 4.4.3 挂多个class还是新建class——多用组合,少用继承 4.4.4 如何处理上下margin 4.5 低权重原则——避免滥用子选择器 4.6 CSS sprite 4.7 CSS的常见问题 4.7.1 CSS的编码风格 4.7.2 id和class 4.7.3 CSS hack 4.7.4 解决超链接访问后hover样式不出现的问题 4.7.5 hasLayout 4.7.6 块级元素和行内元素的区别 4.7.7 display:inline-block和hasLayout 4.7.8 relative、absolute和float 4.7.9 居中 4.7.10 网格布局 4.7.11 z-index的相关问题以及Flash和IE 6下的select元素 4.7.12 插入png图片 4.7.13 多版本IE并存方案——CSS的调试利器IETester 第5章 高质量的JavaScript 5.1 养成良好的编程习惯 5.1.1 团队合作——如何避免JS冲突 5.1.2 给程序一个统一的入口——window.onload和DOMReady 5.1.3 CSS放在页头,JavaScript放在页尾 5.1.4 引入编译的概念——文件压缩 5.2 JavaScript的分层概念和JavaScript库 5.2.1 JavaScript如何分层 5.2.2 base层 5.2.3 common层 5.2.4 page层 5.2.5 JavaScript库 5.3 编程实用技巧 5.3.1 弹性 5.3.2 getElementById、getElementsByTagName和getElements-ByClassName 5.3.3 可复用性 5.3.4 避免产生副作用 5.3.5 通过传参实现定制 5.3.6 控制this关键字的指向 5.3.7 预留回调接口 5.3.8 编程中的DRY规则 5.3.9 用hash对象传参 5.4 面向对象编程 5.4.1 面向过程编程和面向对象编程 5.4.2 JavaScript的面向对象编程 5.4.3 用面向对象方式重写代码 5.5 其他问题 5.5.1 prototype和内置类 5.5.2 标签的自定义属性 5.5.3 标签的内联事件和event对象 5.5.4 利用事件冒泡机制 5.5.5 改变DOM样式的三种方式 附录A 写在规则前面的话 附录B 命名规则 附录C 分工安排 附录D 注释规则 附录E HTML规范 附录F CSS规范 附录G JavaScript规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值