前端必看的书籍

html-css023

前端必看的书籍,第1张

了解更多的前段知识请看下面我精心为您整理的前端必看的书籍,希望您喜欢!

十本学习前端必看书籍

第一本,入门

《Head first HTML&CSS》

最好的入门书。看两遍就对HTML &CSS 有个大概印象了。

此时把w3cschool作为备查手册收藏起来

第二本《CSS权威指南(第三版)》

最权威的CSS书籍,除了阅读W3C的文档外的不二选择(就是翻译有点操蛋,遇到感到难理解的地方可能还是要求助于网络资源)。有时间(无论是现在还是将来)可以反复看,并当做字典随时查。

第三本《精通CSS》

广受前辈推荐的一本书。上一本书是字典的话,这本书相当于《中学生作文大全》,汇集了一些CSS的最佳实践。

第四本《图解CSS3:核心技术与案例实践》

这本书比较新,讲解的是最新的CSS3(前三本书停留在CSS2.1时代),CSS3也是必学的,不是什么可学可不学的最新技术。

HTML CSS值得看的书就这些(之后会有一本《CSS秘密花园》,尚在翻译中,也很值得期待),剩下的就是自己写还有看技术博客了。接下来是JavaScript,HTML和CSS都是没有逻辑的标记型语言,JS才是真正的编程语言,评价前端工程师的水平就看这个了。

第五本《JavaScript DOM编程艺术》

最好的JS入门书籍,一目了然地告诉你如何用JS操作DOM(这是浏览器端编程的基本功),还灌输了最符合标准的编程理念。可惜有点老,最新一版是2010年的,以至于部分内容有点过期,例如本书内经常提到“某某方法浏览器不一定支持,需要小心使用”,而这些历史遗留问题当今已经不存在了,阅读过程中无视就好。

第六本《JavaScript高级程序设计》

每个前端必看的书,此书是前端工程师科技树的关键一环。看完此书后再看看之后各类进阶书籍会比较好。

俗称红宝书,也算入门书籍,虽然是大部头(七百多页),但至少通读一遍。

全部掌握了,你可以在网络社区里谈笑风生了,经过实践的锻炼后,面试个前端工程师的岗位应该都没问题了。

第七本《JavaScript语言精粹》

也是前端必看。薄薄一百来页,对JS的去粗取精。

第八本《你不知道的JavaScript》

这是一套丛书, 目前为止仅翻译了第一卷。每本都挺薄,深入介绍了JS中的重要概念。

第九本《JavaScript设计模式》

“设计模式”是软件工程的重要课题,相当于高考时候的答题套路。前人总结出来的应对各种问题的模板。也算是必看书籍。关于JavaScript设计模式的书籍目前也有好几本,也有国人写的,挑一两本看看就好。

第十本《高性能网站建设指南》(及其续篇《高性能网站进阶》)

告诉你真正的商业公司的前端是怎么优化一个网站的。当然优化的问题不是看看书就能解决的,最好时刻了解你的同行们的经验。

第一阶段:HTML和CSS的学习

HTML就不多说了,基础中的基础,这个都不会的小伙伴请参见HTML手册,认真学习W3C课程,稍有基础之后可以跟着视频学习《HTML+CSS基础课程》。

   前端开发必看的14本书

1、《CSS权威指南》第三版

这本书实在太适合小白用户了,是一本为初学者清扫障碍的书籍。同行一致认为这本书是学习CSS基础的首选。CSS界权威Meyer大师的作品,翻译水平也灰常赞!

2、《CSS那些事儿》

不用于一般技术类书籍的枯燥乏味,这本书很有意思。作者是蓝色理想经典论坛标准版荣誉版主林小志,具有多年网站设计和网站重构经验,在CSS、XHTML等前台技术方面有着深厚功底。

全书以传达CSS布局思维为中心,通过页面中的文字、图片、表格、表单等常见元素的处理及各种页面布局方式的使用,使读者能深入了解到如何在页面中更好地运用CSS布局。阅读本书之后将会发现,原来CSS样式居然是这么好玩的东西。

3、《精通CSS:高级Web标准解决方案》第二版

前段学习必备书籍,作者Andy Budd是国际顶尖的网页设计师,著名的Web标准倡导者,网页咨询公司Clearleft的创始人之一。

本书将最有用的CSS技术汇总在一起,总结了CSS设计中的最佳实践,讨论了解决各种实际问题的技术,重点讲解了一系列的css开发技巧,是前端开发人员必备的手册。

4、《CSS禅意花园》

这是一本令人惊叹的书!必须用一个字形容的话,那就是:美!内容编排合理,文字生动有趣引人入胜,通过一个个实例引导读者阅读,强烈推荐!

作者是世界著名的网站设计师,书中的范例来自网站设计领域最著名的网站——CSS Zen Garden(CSS禅意花园)。童鞋们自己去领略吧。

第二阶段——JavaScript的学习

Javascript的书籍当然还是要看老外的,你懂得~

5、《JavaScriptDOM编程艺术》

此书绝对是入门好书,简洁优美的文笔简直是工具书中的典范啊有木有!

这本书讲述了JavaScript和DOM的基础知识,但重点放在DOM编程技术背后的思路和原则,然后将这些概念贯穿在书中的所有代码示例中,使你看到用来创建图片库页面的脚本、用来创建动画效果的脚本和用来丰富页面元素呈现效果的脚本,最后结合所讲述的内容创建了一个实际的网站。

6、《JavaScript权威指南》第6版

这本书非常适合初级、中级程序员,是学习核心JavaScript语言和由Web浏览器定义的JavaScript API的指南和综合参考手册。

第6版涵盖HTML 5和ECMAScript 5。很多章节完全重写,紧跟当今最佳Web开发实践。本书新增章节描述了jQuery和服务器端JavaScript。

7、《JavaScript高级程序设计》第三版

《javascript权威指南》比较像一本字典,而这本《javascript高级程序设计》可以算是一本由浅入深的好读物。这两本书看完后,对javascript一定会有较为深入的了解。

作者Nicholas C. Zakas是世界顶级Web技术专家,现为雅虎公司界面呈现架构师,负责My Yahoo!和雅虎首页等大访问量站点的设计。这本书,看一遍不能算看过,至少读两三遍,每一遍都会让你有新的收获。

8、《高性能JavaScript》

本书从性能角度全面分析js,含金量非常大,很多知识都是作者通过实践总结出来的,都是经验的积累,强烈推荐!

同是Nicholas C. Zakas所写,如果看《JS高级程序设计》觉得理解不太透彻,学习较为吃力,那么我强烈建议你看看这本书,真的是极好的一本实践类书籍,言简意赅,灰常实用!

9、《JavaScript王者归来》

这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。O(∩_∩)O 有追求的程序员一定不要错过!愿神力与你同在!

它揭开了JavaScript的面纱,绕过误解和虚幻的表象,引领你探索程序王国的奥妙。这是一本探寻程序设计思想本源的“魔法典籍”,也是一本Web开发工程师们需要的案头参考书。

10、《JavaScript模式》

它绝对不是一本入门级别的书,适用于希望将自身的Javascript技巧提高到一个新层次的专业的开发人员和程序员。

《JavaScript模式》包含了实现每个讨论的模式的实践建议,并附有数个可以立即上手的范例同时还可以学到一些反模式。短小精悍,进阶必读!

11、《JavaScript设计模式》

进阶教程,得有一定功底才能看懂。反之,如果你轻而易举就能拿下此书,说明你已非等闲之辈~

本书共有两部分。第一部分给出了实现具体设计模式所需要的面向对象特性的基础知识,第二部分则专注于各种具体的设计模式及其在JavaScript语言中的应用,主要介绍了工厂模式、桥接模式、组合模式、门面模式等几种常见的模式。

第三阶段——jQUery的学习

12、《锋利的jQuery》第二版

入门首选,简单易懂,非常实在。《锋利的jQuery(第2版)》循序渐进地对jQuery的各种函数和方法调用进行了介绍,对jQuery分析的逻辑非常值得学习。

第四阶段—学无止境!

如果以上书籍你全都搞定了,那么,恭喜你,你真的很厉害!到这种程度,相信你也不太需要别人推荐书籍了,不过我还是厚着脸皮推荐两本吧。

13、《高性能网站建设指南》

前端开发可以优化网站剩余70%~80%性能,这本书不算厚,几个小时就能看完,推荐前端开发工程师看看。在《高性能网站建设指南》中,作者给出了14条具体的优化原则,每一条原则都配以范例佐证,并提供了在线支持。

14、《Web开发敏捷之道》第二版

Web开发敏捷之道》曾荣获Jolt大奖“最佳技术图书”奖。在第1版的内容架构基础上,第2版增加了对Rails 1.2中新特性和最佳实践的介绍。此书覆盖了rails1.2的方方面面,其本身也很"敏捷",翻译也非常好。

在上一章节,我们讨论了元素显示的基本特点。而在这一章,我们将看到css属性是如果改变元素显示外观的,这包括了padding,border,margin。

众所周知,所有的document元素都会生成一个长方形的box来布局,称为元素box,而且这个box是具有排他性的,同一个区域是不允许有多个box交叠的。这就是前端最熟悉的盒模型:

一般来说,这里说的宽度和高度指的都是上面图中inner edge的宽和高。而这两个属性最重要的一点就是它们不作用于inline的不可替代元素。举例来说,

如果你给链接设置了宽高,那么浏览器就会忽略这些声明:

在盒模型中,从里到外的第2层就是padding:

该属性接受任何的长度值,包括百分比。例如:

从上图中我们发现,padding也是在背景的覆盖范围的。

默认来说,元素是没有padding的。但一般情况下我们还是希望有padding的,不然border有时候看起来就离内容太近了:

另外padding是由方向的设置顺序的,来看下:

而且每个方向上,你所用的长度单位都可以是不一样的,举个列子:

有时候你会碰到相同的padding数值,例如

这可以简化为:

这是怎么实现的呢?其实在CSS内部定义了一套规则:

换句话说,如果只给了三个值,那么第四个left就会拷贝right的值。如果只给定2个值,那么第三个拷贝第一个,第4个拷贝第二个。如果只给了一个值,那么所有值都从它身上拷贝。

这个属于大家非常熟悉的部分了:

百分比的计算核心在于标准的确定,在padding中,其标准就是父元素的内容区域的宽度。举个例子:

设置百分比的padding存在一个问题,就是当父元素未设置宽度,而且随着浏览器会变化宽度的情况,那么这个padding的宽度也会跟着一起变动。

如果对一个inline元素施加padding是不会改变元素的高度的,例如:

这是因为对于不可见的背景情况下,padding是被设置为透明的,所以上面的声明不会改变行高。但如果设置了背景,情况就不一样了:

上面我们看到了处理padding top和bottom的情况,但是left和right的padding有点不同。如果对inline元素设置了left和right的padding是有效果的:

那如果inline元素跨行了会怎么样呢?

很自然的,left作用于开头,而right作用于结尾。

我们还是拿图片来举例,试着为图片添加padding:

不管可替换元素是block的还是inline的,这一padding都会加上,如下图所示:

在padding外面一层的为border,默认来说,background的颜色的边界就是在border这层。而每个border都有三部分组成:宽度,厚度和样式。对于宽度来说,默认值为medium,一般来说是2px。但有没有发现平常我们很少注意到,每个元素的border宽度已经设置好了?那是因为border的样式默认设置为none,所以我们压根看不到。最后来说说border默认的颜色,就是它的前景色(foreground color)。

另外刚说了背景区域到border位置,但是到border的内边界还是外边界没说。其实按照CSS的标准定义,这个需要扩展到外边界,因为有些border是dotted的。

border的样式是最重要的,因为你不设置,它就压根不出来。

CSS中定义了10中不同的样式,包括默认的none,列举如下:

其中最难搞得就是double,border样式为两行,而其中的空白的宽度就是border-width的宽度。而且CSS标准中并没有规定两条线的粗细的标准,都依赖浏览器去实现。

下面来看看另外需要颜色的border类型:inset,outset,groove,ridge

默认来说,border的颜色是基于元素的颜色。但是颜色的变化又得完全依赖浏览器去实现,来看看不同的实现:

在border-style属性中是允许同时定义多种border的:

这样设置的结果是什么呢?那就是top border为solid,right border为dashed, bottom border为dotted ,left border为solid。就像之前定义的padding一样。

来看个具体的例子:

如果想要设置单侧的样式,可以使用下列的一系列属性:

来看个具体的例子,设置h1三边包围:

上面需要注意的是,针对第二种方案,必须将border-left-style样式放在后面,不然就会被后者替换。

设置完style后,接下来就需要设置宽度width:

对应的单侧的设置为:

总共有4种方式来设置border的宽度,可以是像4px这样的数值,也可以是另外3个关键词(thin,medium,thick)。但要注意这三个关键词没有对应具体的数值,按照CSS标准,只要层层加厚就可以,依赖于浏览器实现。

我们假定一个段落p有个背景色和border style

border的width默认为medium,我们将其修改下:

来玩个极限的,将宽度设置为50px:

当然也可以设置单侧的宽度:

想要去掉border非常简单:

哪怕设置了宽度,如果style被设置为了none,那么border也不会显示,那这是为什么呢?这是因为如果将style设置为none,那么CSS就会将其视为是不存在的,然后自动将其宽度设置为0,无论你自己定义了什么。就像一个杯子已经空了,那么再来描述他是半满的是没有任何意义的。

这一点为什么重要呢,因为很多人容易忘记来声明一个border的样式。例如:

来看个颜色的示例:

当然也可以为不同的side设置不同的颜色:

如果没有设置颜色,那么就会获取当前元素的前景色:

当然也可以设置单侧的border颜色:

就像我们上面提到的,如果border没有style,那么久没有宽度。那如果碰到需要设置宽度但是border又不可见的情况怎么办?答案是将颜色设置为transparent。例如:

试想下这种情况,如果要针对某一边添加widith,style和color。如果单独设置的话其实还是蛮麻烦的:

但如果可以简化的话,那就方便很多了:

针对每个side属性的简化顺序为:

完全可以按照上面的定义来设置更复杂的border设置:

而且这些值得顺序也是不用担心的,下面的规则和上面的是一样的:

另外值得注意的是,在简化版中避免重复的类型值,比如两个width等:

这会导致浏览器直接忽略这条规则。

现在我们回到border属性本身:

来看看怎么用的吧:

这个会自动应用到每个方向上:

inline元素之前已经讲了很多了,现在主要简单讲几个需要注意的点。

首先就是不论border设置的width多厚,inline元素的line height都不会改变:

top和bottom的border是不可以的,但是left和right都是可以的:

而对于可替换元素来说,border是会影响行高的:

为了支持圆角的边框,border引入了border-radius属性来设置:

如果想要实现边角的圆角过渡,可以如下设置:

如果给定的是一个百分比值,那么结果很可能就是一个椭圆,因为长宽的基准值不一样:

另外,跟其他元素一样,border-radius也可以设置多个值,位置从左上沿顺时针到底部左侧。

而参数个数为3个的时候也是一样的,第4个参考第2个:

而在上图中重点到不是边角,而在于内容区域的右下角也发生了圆滑过渡,这是因为内容区域的背景和padding的背景不同所致,我们将在后面一章中详细讨论。

border-radius在原理上修改的是border和background的渲染,而不是盒子模型本身,来具体看下:

刚刚我们看到了设置单个值得情况,那如果设置2个值会怎么样呢?如果我们想要在水平方向设置3英寸,而在垂直高度设置1英寸。我们不能直接这样写:

因为这样我们会将左上,右下对角线一个宽度,而右上和左下对角线有一个宽度。而是应该使用:

而这相当于下面的表达式:

下面是一个简单的例子:

接下来来个更复杂的:

不同的颜色和样式在角的位置的渲染效果是不同的:

上面第一个是简单的圆角,第二个在厚度上出现了变化。第三个颜色和厚度是一样的,但是角的曲线从solid变成了double。而且样式间的过渡被阻断了。第四个我们把厚度和样式做了改变。第5第6个开始出现颜色的变化,但是都是直接的改变而没有渐变。而第七种情况则是厚度相同,颜色发生渐变,但是可以看到,只有外侧发生了变化,而内侧还是直角,示例如下:

值得注意的是,这次是不同在水平和垂直方向加/的,来看下:

上面两个是一样的。

如果你想要使用一张图片来作为border,那么可以使用border-image-source:

让我们使用一张单个圆点的图片作为border背景:

这里需要注意几个地方,如果没有定义border:25px solid按照之前的说法,没有style,border其实默认是不显示的。另外就是border-width其实就是后面border图片的宽度。

那令人奇怪的是,为什么图片只出现在角落里,边上为什么没有,而这就需要用到下面这个属性了:

slice也是接收4个值,完全遵从top,right,bottom, right的CSS默认赋值流程,而且数值也是基于百分比的值。

我们就以3 x 3 的网格图为例来看下效果:

注意到中间的一块空了,这是因为css中自动把中间的内容设置为empty,具体会在后面讲解原理。

slice属性的不同百分比对应不同的边缘裁切效果:

这就是我们为什么选取3 x 3网格图的原因,可以清晰的看到裁剪后的边框效果。除了上面的百分比,我们也可以使用数字,一般对于栅格图来说就是像素值,来看个例子:

回到之前的中心空白问题,这其实可以通过fill来填充回来:

而且从效果上来说会覆盖到其他的背景元素之上,因此可以作为背景的替代。

同时之前我们看到的宽度都是相同的,而其实可以为border的4个方向设置不同的宽度,然后border-image会自动匹配到对应宽度:

如果想要自己来设置border图片的宽度,可以使用border-image-width:

border-image-width其实和border-image-slice差不多,而不同的是前者就是border box本身。为了更好理解这个意思,我们假定宽度设置为1em:

其示意图如下:

边框都是1em宽,那么如果来填充呢,这里涉及多个属性,由border-image-slice生成的图片要经过border-image-repeat的处理,然后显示在border-image-width定义的盒子里面。