0%

参考书籍
1. 张宏杰《曾国藩的正面与侧面》民主与建设出版社.2014年
2. 张宏杰《曾国藩的正面与侧面》国际文化出版公司.2011年
3. 林乾《曾国藩大传》人民文学出版社.2011年

四、为人

(一) 与左宗棠的对比及两人的恩怨

首次见面的第一印象

曾国藩与左宗棠的首次见面,是在咸丰二年十二月二十一日傍晚。当时曾国藩回湖南本是为母亲办丧事,没想到恰逢太平军横扫湖南和湖广,咸丰帝命他出任帮办湖南团练大臣。曾国藩墨绖出山,这一天赶到长沙,并与前来迎接的湖南巡抚张亮基及其幕僚左宗棠展开长谈。

注:墨绖dié,指丧服

此次会面之前,左宗棠之名对曾国藩来说已经如雷贯耳,太多朋友向他介绍过这位“湖南诸葛亮”是如何卓绝特出。交谈之中,左宗棠之头脑清晰,气概慷慨,议论明达,言中款要,确实令曾国藩颇为叹服。他在致胡林翼的信中写道:

(腊月)二十一日驰赴省垣,日与张石卿中丞(张亮基)、江岷樵(江忠源)、左季高(左宗棠)三君子感慨深谈,思欲负山驰河,拯吾乡枯瘠于万一。盖无日不共以振刷相勖。

注:相勖,互相勉励

太平军起之际,湖南巡抚张亮基派人三顾茅庐,把他请出了山,通省要务,概以任之。虽然身份仅为一名师爷,却实际负担起全省军政要务,在湖南要风得风,要雨得雨,张亮基反倒成了一块牌位:

制军于军谋一切,专委之我;又各州县公事票启,皆我一手批答。

左宗棠对曾国藩的印象,却有一点复杂。一见面,左宗棠并没有失望。人言曾国藩“向无大僚尊贵之习”,此言确实不虚。二品大员曾国藩没有一点官架子。他看起来更像一介循循儒生,衣着简朴,神态谦逊,一脸书生之气。而曾国藩言谈中所表现出的强烈担当意识,更让左宗棠刮目相看。晚清天下滔滔,官员们以敷衍塞责为能。在这种黑暗污浊的大背景下,曾国藩以清新方正之姿进入左宗棠的视野,如同鲍鱼之肆中吹入一股清风,不能不令左宗棠意外而且欣喜。因为曾氏的“正派”,“肯任事”,他大有相见恨晚之感。

左宗棠在给朋友的信中谈到对曾国藩的第一印象说:

曾涤生侍郎来此帮办团防。其人正派而肯任事,但才具稍欠开展。与仆甚相得,惜其来之迟也。

但另一方面,初次接谈,左宗棠就得出了曾氏才略平平的结论。这句评价奠定他对曾国藩一生轻视态度的基础。

曾国藩确实不是那种让人“一见即惊”的人。乍一接触,你不但会觉得他并无什么出众之处,甚至还会认为他有点笨头笨脑。许多人一见到曾国藩,都觉得有点失望。

方宗诚见到晚年的曾国藩,觉得他不像一位总督和将领,而像一位土里土气的乡村老教师

宽大和平,不自矜伐,望之如一老教师耳。”

注:不自矜伐,不矜不伐,不自以为了不起,不为自己吹嘘。

而后来英国人戈登见到曾国藩时,也大感失望

曾国藩却是中等个子,身材肥胖,脸上皱纹密布,脸色阴沉,目光迟钝,举止行动表现出优柔寡断的样子——这与他过去的历史是不相符合的;他的穿着陈旧,衣服打皱,上面还有斑斑的油迹。”

在聪明才智上,曾国藩肯定不如左宗棠。曾国藩前后足足考了七次,二十三岁才中了个秀才,而且还是全县倒数第二名。

梁启超说

文正固非有超群绝伦之天才,在并时诸贤杰中称最钝拙

曾国藩自己也说

余性鲁钝,他人目下二三行,余或疾读不能终一行。他人顷刻立办者,余或沉吟数时不能了。

另外,曾国藩行动拘执,谨慎内向,凡事只肯说三分话。他观察思考得比一般人细,下判断也比一般人要慢。

周腾虎曾经说曾国藩:

儒缓不及事

他的学生李鸿章也当面指出他病在“儒缓”:

少荃论余之短处,总是儒缓。

他对周李二人的判断是首肯的,说:

”余亦深以舒缓自愧”,“驽缓多病,百无一成”。

这种性格特点更加重了他的“笨拙”,使他眼中乏精悍之气,面上无果决之容。在左宗棠滔滔不绝指画天下之时,他只是默默倾听,认真思考,并没有在第一时间贡献出什么高明的见解。因此左宗棠才得出了“才具稍欠开展”的第一印象。

合作之初

曾国藩和左宗棠在创办湘军和扫清湖南境内的土匪两个问题上,两人不谋而合,开始合作。这段时间,曾左往来信函极多,曾国藩探讨军务的信件干脆不再寄给巡抚张亮基,而是直接写给左宗棠,对左的称呼也从客气的“尊兄”变成了亲切的“仁弟”,显示出两人关系的日益亲密。

不过,这种良好关系建立在一种有点特别的交往形态上。按理,曾国藩科名既早,年龄又长,又是二品大员之身,当然应该是曾国藩发号施令,小小布衣举人左宗棠只有毕恭毕敬、小心建言的份儿。然而事实却相反。左宗棠在曾国藩面前毫不客气,对曾国藩动辄指手画脚,指示训诫,毫不客气。

左宗棠在湘军成军之后写给胡林翼的信中云:

涤公才短,麾下又无勤恳有条理之人,前自岳州归后,弟无三日不过其军絮聒之。伊却肯听话,所以诸事尚有几分。近来外人亦不尽以书憨嘲之。伊却自笑云:坏了几分矣。以后若再好几分,恐又行不去也。

注:聒guō,声音嘈杂,使人厌烦
注:憨hān,1.傻;痴呆;2.朴实,天真

那意思是说,曾国藩才能短浅,书呆气重,又没其他人相帮,所以全赖他处处出主意。好在曾国藩毕竟为人老实,“肯听话”,在他的指导下,诸事还算颇有起色。湖南官员们终于不再嘲笑曾国藩是书呆子了。左宗棠的高己卑人、当仁不让之态在信中一览无余。这种做派在传统官场绝无仅有。

左宗棠的性格和曾国藩可谓截然相反。他反应迅速,做事果断,尤其善于在纷纭复杂的局面中迅速发现机会,定下策略。缺点则是过分自信或者说自大,性情过于张扬外露。

而曾国藩刚刚出山办事之时,是一个“官场愣头青”,在一些具体问题的处理上,书生气重,拘执生硬,令左宗棠看着着急,忍不住经常加以“指导”。好在曾国藩和张亮基一样好脾气,对左宗棠俯首听命,从善如流。因此才造成了这段难得的“同心若金”。

邀请被拒

可惜的是,这段蜜月为期过短。咸丰三年,张亮基调任署理湖北总督,左宗棠也随之北上武汉。这两个人一走,曾国藩在湖南马上就寸步难行,处处碰壁。那些湖南官员早就痛恨曾国藩越位侵权,此时团结起来,处处给曾国藩小鞋穿。曾国藩一怒之下出走衡阳,想脱离湖南官场,独力创建湘军。刚刚来到衡阳曾国藩势单力孤,形只影单,要钱没钱,要人没人,处境十分困难。恰在此时,张亮基调离湖北,左宗棠也归乡隐居,曾国藩闻讯大喜,立刻写信请他来帮助自己。

因为深知左氏的性骄气傲,所以他给左宗棠的这封邀请信写得异常客气:

弟智虑短浅,独立难搘,欲乞左右野服黄冠,翩然过我,专讲练勇一事,此外,概不关白于先生之前。先生欲聋两耳,任先生自聋也,吾不得而治之也,先生欲盲两目,任先生自盲焉,吾不得而凿之也。《曾国藩全集·书信》

注:搘zhī,古同“支”,支撑。
注:野服黄冠,平民百姓

意思是说,我请您做一个高级顾问,不敢让您承担那些琐碎的俗务,只要居傍指点指点我就可以了。

令曾国藩万万想不到的是,左宗棠回给曾国藩一封极为冷淡的信,明确拒绝,“文字似敬实疏,态度似谦实傲,与曾国藩之火热心肠、尊奉情怀,形成了鲜明的对照”。不仅如此,左宗棠在给朋友的信中谈到此事时还语含讥讽:

涤公正人,其将略未知何如。弟以刚拙之性,疏浅之识,万无以赞高深。前书代致拳拳,有感而已。《左宗棠全集·书牍》

很显然,左宗棠不愿做曾国藩的助手,主要原因是对曾国藩的“将略”评价颇低。在长沙期间的短暂合作,并没有扭转他对曾国藩才能的评价。况且当时曾氏以在籍侍郎练兵,非官非绅,地位尴尬,没权没钱,左宗棠不认为他是能大有作为的靠山。

收到了左氏的回信,曾国藩才发现自己原来在左宗棠心目中如此无足轻重。这令他深觉伤心。

左宗棠的科举情结

左宗棠幼有神童之誉,读书一目十行,举一反三。左宗棠自我期许亦极高,他终生最崇拜的人是诸葛亮,与朋友通信,动辄自署“今亮”(当今诸葛亮)、“老亮”。还在学生时期,他就:

好大言,每成一艺,辄先自诧

每写完一篇文章,都要先自己惊诧一番:怎么写得这么好啊!难道真的是我写的吗?

成年之后,他更是恃才傲物,爱吹牛,爱自夸,“喜为壮语惊众”(《清史稿》)。平平常常的吹捧他听来根本不过瘾,最喜欢听过头的吹捧,把他比作神仙圣人他听起也不刺耳。曾国藩对此看得很清楚,晚年他曾对幕僚赵烈文说:

左季高喜出格恭维。凡人能屈体已甚者,多蒙不次之赏。此中素叵测而又善受人欺如此。”

自视如此之高,现实却不给他面子。左宗棠一生有一个触不得的痛点,那就是科举。他中举之后,本以为取进士如探囊取物。不想一个举人却成为他功名的顶点。在这之后,六年之间三次会试,都名落孙山。这对本来一帆风顺的他是一个极大打击,一怒之下,他当众发誓此生再不应考。然而,在传统时代,像左宗棠这样不中进士,又不肯走捐官之类的旁门左道的人,基本上就宣告了与官场绝缘。腹中再多韬略诗书,也没有任何用处。因为家贫,他早年入赘到妻子家中,这在传统时代,对一个男人来说是极为尴尬的事。他本来以为自己能早早科名发达,摆脱这一屈辱的身份,不料天不遂人愿,这种倒插门生活一连过了许多年。“自命不凡”、“口多大言”却伴着“赘婿身份”、“连年落第”,左宗棠的性格因此集极度自卑与极度自尊于一体。

因此,对于那些高中科甲、飞黄腾达之人,左宗棠下意识中一直有一股莫名的敌意。在他后来的家书中,经常能看到他对科名中人的讥评之语,比如

人生精力有限,尽用之科名之学,一旦大事当前,心神耗尽,胆气薄弱,……八股做得愈入格,人材愈见得庸下

换句话说,在他看来,科举越成功的人,能力往往就越差。

而曾国藩似乎天生就是左宗棠的反衬。曾左二人身上有太多相似之处:他们年龄只差一岁,一个四十一,一个四十。又同为湖南人,一为湘乡,一为湘阴。家境也相当,都出身小地主家庭。只因科举运气不同,如今命运迥异。曾国藩中举之后,科举路上极为顺利,中进士,点翰林,在翰林院中仅凭写写文章,弄弄笔头,十年中间,七次升迁,到太平军起之时,这两个人,一个是朝中的副部级侍郎,一个却是白衣的举人,身份相悬,如同天地。左宗棠自认为是国中无二的人才,比曾国藩高明百倍,却进身无门,只好靠当师爷来过过权力瘾。而曾国藩虽然才智平平,仅仅因为科名运气好,办什么事都能直通九重。曾国藩的存在,简直就是上天用来衬托左宗棠命运的坎坷。所以左宗棠看待曾国藩,下意识中有一种莫名的反感。他一直戴着有色眼镜,千方百计放大曾国藩身上的缺点和毛病,来验证自己的“上天不公论”和“科举无用论”,为自己寻找一个心理平衡。想让他左宗棠来做曾国藩的幕僚,这实在有点难。

二度合作

咸丰四年三月,左宗棠重新出山,成为新任湖南巡抚骆秉章的高参。而此后不久,湘军宣布练成,开驻长沙,准备进行长沙保卫战。曾左二人自然再次开始打交道。

咸丰四年四月初二日,曾国藩亲率湘军首次出师,进攻驻扎于靖港的太平军。曾国藩对这一战寄予极大希望,以为自己费尽心血打造出的这支劲旅肯定会旗开得胜,不料结果却是大败而归。曾国藩沮丧羞愤之下,投水自尽,幸被部下救起。回船以后,曾国藩仍然寻找机会自杀,“其志仍在必死”。湖南官员闻此消息,无不幸灾乐祸,唯左宗棠闻讯立即从长沙缒城而出,到湘江船上看望曾国藩。虽然下意识地对曾国藩反感嫉妒,但左宗棠毕竟是一个奇男子,伟丈夫。虽然对曾国藩的才干不以为然,但他很清楚,像曾国藩这样有血性肯任事的高官大吏天下罕见,这支新练成的湘军已经是大清天下为数不多的希望,曾国藩的生命安危已经关乎天下大局。所以,在曾国藩最需要支持的时候,他毫不犹豫地挺身而出。

曾左两人具体聊了些什么,史书没有详细记载。我们见到的最直接的资料是光绪八年(1882年)左宗棠所作的《铜官感旧图序》。左宗棠在这篇回忆文章中追忆此事道:

其晨,余缒城出,省公舟中,气息仅属,所著单襦沾染泥沙,痕迹犹在。责公事尚可为,速死非义。公闭目不语,但索纸书所存炮械、火药、丸弹、军械之数,属余代为点检而已。

就是说,左氏来到船上,看到刚被捞上来的曾国藩气息奄奄,神情狼藉,衣服上还沾着河里的泥沙。左宗棠责备曾国藩此举糊涂,说胜负乃兵家常事,刚刚失败一次就自寻短见,你怎么对得起皇上的信任,怎么对得起天下百姓?曾国藩尴尬羞愧,只能闭目不语。等左宗棠说够了,才睁开眼睛,让人拿来纸,写出所剩军火的数量,请左宗棠帮他查点一下。

应该说,左宗棠的指责是有道理的。胜败乃兵家常事。初遇失败就要自杀,这实在不是一个军人应该具有的心理素质。左宗棠挺身而出来看曾国藩,是情;大义凛然责备曾国藩,是义。这样看来,左氏此举,诚可谓情义交至。

但是左宗棠的表现其实并不是这样恰当而完美,他的回忆其实有所避讳。李详《药裹慵谈》中说,左宗棠在这次会面中,曾当面嘲笑曾国藩为“猪子”,也就是湖南话笨蛋之意。如果说《药裹慵谈》是孤证的话,那么王闿运的那句“左生狂笑骂猪耶”则可作为旁证。左宗棠对曾国藩,不但责以“大义”,还曾冷笑讥嘲,破口痛骂。骂他这么点小事都转不过脑筋来,实在笨得像猪。

原来左宗棠对处于极度痛苦之中的朋友,就是这样“安慰”的。乍听起来有点骇人听闻,不过细想一下,倒也符合左宗棠的天生炮筒子脾气。只是遇事一根筋的曾国藩被骂之后,似乎一时并未猛醒,还是默默准备着再找机会自杀。幸亏此时湘潭大捷消息传来,另一路湘军取得了大胜。这场胜利是太平军军兴以来清军取得的最大一次胜利,这一消息立刻使曾国藩转悲为喜,从床上跳了下来。湘潭大捷确立了湘军的声望。曾国藩在湖南的境遇也立刻大大好转,应骆秉章之请,重新搬回长沙办公。曾国藩与左宗棠同处长沙,两人过从甚密,“无一日不见,无一事不商”。左宗棠不但是骆秉章的高参,也成了曾国藩的高参。

二度合作中的冲突

然而性格上的冲突却导致二人的合作再一次落入低谷。湘潭大捷后,湘军又连获武昌、半壁山、田家镇三处大捷。在官兵处处望风溃逃、不堪一击之际,湘军却一枝独秀,成了大清王朝的中流砥柱。曾国藩因此难免踌躇满志,露出不可一世之态,以为太平军可举手而平。而一直冷眼旁观的左宗棠却认为,连胜之后的湘军全军上下都已经显出骄态。将士皆骄,是军事之大忌,也是由盛转衰之机。所以他致书曾国藩,批评他存在轻敌思想,说湘军此时“将士之气渐骄,将帅之谋渐乱”,要求他提高警惕,以防大的闪失。左宗棠的出发点当然十分良好。但问题是他的书信风格一贯是满纸批评,“书辞傲诞”,把曾国藩置于比白痴强不了多少的角色上加以劈头盖脸的训斥。

此时的曾国藩已经今昔对比,不再是被湖南通省官员看不起的灰溜溜的“落水狗”,而成了大清王朝的救星。他修养再好,此刻也不免“颇露骄愎之气”。况且壮年时的曾国藩脾气其实也很暴烈,内心深处的骄傲一点也不亚于左宗棠。曾左两人都以“刚强”闻名。左宗棠的刚是峻烈严厉、锋芒毕露之刚,他曾自谓:“丈夫事业,非刚莫济”。而曾国藩的刚虽然是外柔内刚,但强度丝毫也不逊于左氏。他说自己:“素有忿狠不顾气习,偏于刚恶。”(晚年他还说自己“渐衰老,亦常有勃不可遏之候”。可见他脾气暴烈的一面。)

两刚相遇,必有一伤。在长沙他对左宗棠虽然表面上一直笑脸相迎,但是越谦虚的人其实自尊心往往越强,在和左宗棠相处的过程中,他已经忍足了一肚子恶气,现在左宗棠如此不礼貌,他再也不想忍气吞声、虚与委蛇了。所以对左宗棠的几次居高临下式的指点,他一字未回。刚开始,左宗棠还不明白是怎么回事,还继续去信指点曾国藩。及至四五封信都没有接到回音,他才明白,曾国藩生气了。左宗棠已经习惯了曾国藩的宽厚和包容,他似乎从没有想到过,曾国藩也会生气。因此,发现曾国藩真的不理他之后,也感觉有些后悔。不过在给朋友的信里,他仍然不承认自己有什么错误:

弟数与书而不一答,盖嫌其太直也。……诸君以狂直目我,冤哉冤哉。

然而问题是,左宗棠的脾气极差,眼光却是极其高明的,不久,曾国藩的湘军于咸丰四年年底果然大败于江西湖口。太平军烧毁湘军水师战船百余艘,冲上曾国藩座船,杀死他的管驾、监印等官,尽获其文牍。曾国藩仓皇逃跑,“呼救无从”,又一次试图投水自尽。太平军湖口之战的胜利,一举扭转了西征的整个战局。至此,曾国藩沿江东下的攻势被瓦解,迅速占领江西的计划也被粉碎了。

因此一败,曾国藩内心更推重左宗棠,而左宗棠更看不起曾国藩。不久,曾国藩移兵江西,步入危地,又与江西官员相处不睦,处境极为困难。左宗棠在与朋友的书信中,一直不忘津津有味地讥评曾国藩的表现。咸丰六年(1856年)十一月十四日致胡林翼信中说:

涤公方略本不甚长,而事机亦实不顺利。闻有西安将军衔命来江之说,恐此后日益为难。见与江西大僚构衅已深,倾之者多,将来恐同归于糟而已。”

又说:“涤公年来意兴索然,于人材罕所罗致,所部杰出者颇少。” 此外还有“乡曲气太重”、“才亦太缺”、“于兵事终鲜悟处”(皆致胡林翼信中语)等恶评。

说到极处,左宗棠更认为曾氏用兵呆滞,“非办贼之人”,以为曾氏之才不足以平定太平天国,要拯救大清王朝,还需要别人出手。骂归骂,左宗棠的大局观却一直非常清晰。他十分清楚如果曾国藩彻底失败,天下大势将更不可为,所以一边讥评曾国藩,同时也不遗余力地对湘军加以救助。当石达开突入江西后,左宗棠担心江西全局因此而溃,祸及湖南,他说“吾为涤公危,亦为吾乡危”,因此向湖南巡抚骆秉章建议迅速支援江西:

以时局论,固无有急于援江西者

在左宗棠的主持下,湖南派出刘长佑速带援军于咸丰六年初赶往江西,救曾国藩于危难之中。后来又陆续派刘腾鸿、曾国荃、周凤山等军东援江西,并在军饷方面给了曾国藩以慷慨帮助。两人的关系因此又多云转晴。左宗棠的恶评当然或多或少会传入曾国藩的耳朵,曾国藩却没有过任何反驳或者辩白。他把这些话默默地咽了下去,对左宗棠仍然一如既往地推重。咸丰六年,曾国藩老弟曾国荃在湖南募兵,写信给哥哥讨教用兵方法。曾国藩写信给他,让他多听左宗棠意见:

一听骆中堂、左季兄之命,敕东则东,敕西则西。”

曾国藩把左宗棠那些刻薄入骨的话全部默默咽下,这一方面是由于他过人的修养;另一方面,是因为左宗棠对曾国藩军事指挥才能的批评并非没有道理。

毫无疑问,曾国藩是中国历史上一流的军事家。他用兵的长处在于大局观好,老成持重。曾国藩做人以拙为本,在军事上,也以“结硬寨、打呆仗”闻名,他打仗第一要求是“”,在行军、扎营、接仗等各个环节,都力求先立于不败之地。

《孙子兵法·形篇》强调:“昔之善战者,先为不可胜,以待敌之可胜。”

但凡事过犹不及,脚踏实地固然是做事的基本原则,但是兵者诡道也,有一些特殊情势下,也需要敢于冒险,大踏步前进。在这样的时候,曾国藩身上的弱点就显露出来了。他从来不敢出奇兵,用奇谋,因此错失过许多好机会,许多时候事倍功半。

曾国藩平生长于自省,因此对自己用兵的长与短,心里也很清楚。同治五年,曾国藩剿捻欠效,在《病难速痊请开各缺仍留军中效力摺》中就这样谈到自己的用兵问题:

臣不善骑马,未能身临前敌,亲自督阵。又行军过于迟钝,十余年来,但知结硬寨、打呆仗,从未用一奇谋、施一方略制敌于意计之外。此臣之所短也。

左宗棠批评“涤相于兵机每苦钝滞”,确有七分道理。

第一次断交

咸丰七年(1857年)前后是曾国藩生命中最困难、最痛苦的时期之一。此时他创立的湘军已经转战三载,屡立战功,但是处境却越来越尴尬:由于皇帝对他抱有防范心理,不肯给他以督抚地位,使他领兵三载,一直孤悬客处,用兵、用人、用饷无处不难。特别是在江西期间,由于手中没有行政权力,虽然湘军为保卫江西终日苦战,仍然被江西通省视为额外负担,始终受到官僚大吏们的排挤和刁难,可谓步步荆棘,处处碰壁。曾国藩饱受欺凌,郁愤满怀,心力交瘁,走投无路,精神几近崩溃,以至在与刘蓉的信中说出了这样的话:

所至龃龉,百不遂志。今计日且死矣,君他日志墓,如不为我一鸣此屈,泉下不瞑目也。

恰在此时,一纸家书传来,曾国藩父亲于咸丰七年二月四日去世。得到这个消息,曾国藩如遇大赦。他迅速把军务交给他人,给朝廷发去一封陈请开缺的奏折后,不待皇帝批复,即于二月二十一日起程回家,为父亲办理丧事去了。

作为领兵大臣,擅自离开军营,是一件严重违反军纪的事。一贯以忠贞自誓的曾国藩在军事危急之际做出这个决定,确实显得有些不负责任。但曾国藩此举,实属迫不得已。他是想通过此举,表达对清政府的不满,也想借这个机会,向皇帝申明自己所处“极不得位”的真实处境。咸丰皇帝虽然颇为震怒,但是他对曾国藩的艰难处境心知肚明,加上湖南巡抚骆秉章和湖北巡抚胡林翼不断为曾国藩说情,遂传旨给假三个月,委军一事免于追究。朋友当中,胡林翼、吴敏树等都对曾国藩的举动表示了理解,多次去信对曾国藩加以安慰,吴敏树在信中说:

曾公之事,暴于天下,人皆知其有为而为,非从其利者。

按理说,在曾氏如此困难之际,作为朋友,左宗棠对曾应该加以理解安慰才对。但是左宗棠却在这个当口,寄来了一封信,对曾国藩大义凛然地加以严厉批评。信的开头,左宗棠就劈头盖脸地从儒家伦理原则高度出发,批评曾国藩委军归家,是不忠不义、不负责任的表现,接下来左宗棠又嬉笑怒骂,捎带嘲讽了曾国藩兵略平常:

《纲目》一书,于夺情题后一事,总以其人所处之时地为断,所以重纲常、维名教而警偷薄之俗也。至“金革之事无避”一语,经义直捷了当,更无可疑……

《纲目》,即朱熹《资治通鉴纲目》,是吾国“正名学”的集大成著作。其论“夺情”要“以其人所处之时地为断”,则根源于《礼记》:

“金革之事无辟(通避)也”一语;

这句话怎么解释呢?唐人孔颖达《礼记正义》曰:

“此一经,是权礼也。若值国家有事,孝子不得遵恒礼,故从权事”;

“经”,是原则;父母丧,居丧三年,就是原则。但是,“若值国家有事,孝子不得遵恒礼”,公事和私礼发生冲突,怎么办呢?原则是死的,人是活的,这里就要引进一个“权”的概念。

“权”者,“反于经,然后有善者也”;

原来,在非常时期,“反于经”而“从权”,乃能“有善”。故国家有“金革之事”(即战事)的时候,涉身军务的“孝子”(兼忠臣)就毋庸遵守居丧三年的“恒礼”,而应遵循坚守岗位、继续战斗的“权礼”。故左宗棠说:“世俗所谓‘夺情’者,乃圣贤所谓‘遵礼’”;他根据“经义”立论,预先杜绝了曾国藩恤于人言(即“拟议”)的借口。

老兄之于兵事,诚不敢谓其有功无过,然竭其心与力所可到而黾勉为之,此念尚可见谅于朝廷……

老兄之出与不出,非我所敢知也;出之有济与否,亦非我所敢知。区区之愚,但谓匆遽奔丧、不俟朝命,似非礼非义,不可不辨。

注:偷薄,不敦厚
注:黾miǎn,努力,勉力。

意思是说,你曾国藩领兵打仗,本来就犯了许多错误,丧失了许多机会。朝廷念你忠心耿耿,不予计较。不过这次你这番举动,使你的忠心都值得怀疑了。你是不是听我的劝重新出山,我不知道。你重新出山,凭你的本事,对国家大局能否有所帮助,我也不知道。但是你不待朝廷命令,擅自委军奔丧,则非礼非义,我不能不严肃批评你。从才能到品质,左宗棠把曾国藩批了个一无是处。可以想见曾国藩收到这封信后会多么郁闷。

事情还不止于此,除了写信责骂曾国藩之外,左宗棠在公众场合对曾国藩更加肆无忌惮地大加讥弹。

左恪靖(指左宗棠)在骆文忠(指骆秉章)幕中,肆口诋毁,一时哗然和之。

曾国藩此次委军回湘,是湖南官场一时谈论的热点,左宗棠每见一人,都大谈曾氏平日摆出一副理学大家面孔,以诚自命,此次却以父丧为由,要挟君父,可见其居心并不如自己所称那样正大。应该说,左宗棠的骂人功夫确实登峰造极。其特点一是一针见血,毫不留情;二是得理不饶人,喋喋不休。曾国藩在官场上飞黄腾达,一个主要原因就是凭“以诚为本”的理学功夫博得大名。好,你不是以“诚”自许吗?那么我就用事实来证明你其实为人不诚不忠。左宗棠下意识里对曾国藩压抑多年的嫉妒不平之心终于找到机会进行了一次光明正大的爆发。

道德是曾国藩最看重的资本,往这项资本上泼污水,是他无法忍受的。多年之后,他向人谈起与左失和的始末时,还咬牙切齿地说:

我生平以诚自信,彼乃罪我欺,故此心不免耿耿。

左宗棠这一骂,正发生在曾国藩情绪处于最低谷的时期。曾国藩要挟皇帝,并没有得到期望中的结果,反被皇帝顺水推舟,解除了兵权,让他在家守孝。一下子,曾国藩弄巧成拙,成为天下官场的笑柄,已经痛苦不已。而左宗棠的诋毁,又成了撒在曾氏伤口上的一把盐,把曾国藩伤到彻骨,让他终生难以释怀。正因如此,曾国藩对左宗棠的这封信根本不予回复,从此与左音书断绝。左宗棠没接到回信,一时居然还很不高兴,在四月二十日致胡林翼信说:

此公才短气矜,终非平贼之人。仁先、霞仙知其为君子,而不以君子待之,殊可叹。此辈宜置之高阁,待贼平再议耳。

但四处骂完了曾国藩,痛快完了嘴之后,中夜抚心自思,左宗棠也感觉自己做得有些过分。听说曾国藩对他“见怪”之后,在给刘峙衡的信中他写道:

涤公不候朝命,遂戴星而归。弟力陈其不可。然审已无及,闻颇有见怪之意,则只可听之。

在给王錱的信中,他难得地做了一点自我批评:

涤帅自前书抵牾后,即彼此不通音问,盖涤以语言过亢故也。忠告而不善道其咎,不尽在涤矣。

注:抵牾dǐwǔ,抵触,矛盾

就是说,虽然我说的都是正确的道理,不过方式方法可能有问题。但是曾国藩不给他回信,心高气傲的他当然也不可能主动再去联络。他在给胡林翼的信中说:

此公(指曾国藩)仍负气如故,我亦负气如故也

左宗棠和曾国藩性格上的对比

左宗棠对曾国藩的这通嬉笑怒骂,符合他的一贯作风。他平生为人,从来都是不平则鸣,从不藏着掖着,虚与委蛇。说话做事,不过多考虑后果,不太多考虑别人反应。他不光这样痛骂过曾国藩,以后也同样这样痛骂过好友郭嵩焘等人。这种性格当然很容易得罪人。胡林翼说他

刚烈而近于矫激,面折人过,不少宽假,人多以此尤之

也就是说,他经常当面批评别人,一点也不客气,人多因此怨恨他。对于这一点,左宗棠自己当然也十分清楚。他自己说

兄平生性刚才拙,与世多忤。然不强人就我,亦不枉己徇人,视一切毁誉、爱憎如聋瞽之不闻不睹,毕竟与我亦毫无增损也

也就是说,他决不因为别人的看法而改变自己,别人的一切毁誉,他皆置之度外。

注:徇xùn,1.依从;曲从;2.对众宣示
注:瞽gǔ,1.眼睛瞎;2.指没有识别能力的

左宗棠对自己的这种处世方式是十分看重的。他甚至认为,自己对这个国家、这个社会的最大价值就在于此。领军之后,他曾经有过这样一番自我评价:

涤公(曾国藩)谓我勤劳异常,谓我有谋,形之奏牍;其实亦皮相之论。相处最久、相契最深如老弟(郭嵩焘)与润公(胡林翼),尚未能知我,何况其他?此不足怪。所患异时形诸纪载,毁我者不足以掩我之真,誉我者转失其实耳。千秋万世名,寂寞身后事,吾亦不理,但于身前自谥曰“忠介先生”,可乎?

也就是说,曾国藩等人认为他的优点是勤劳多谋,才华出众。左宗棠认为这是皮相之见。他认为相处更久相知更深的郭嵩焘、胡林翼等人,其实也不真正了解他。左宗棠夫子自道,他最大的特点和长处是“忠介”。

忠者,忠于国家,至死不渝。介者,耿直、坚定,一生固守真我,不因外界环境而稍稍折损自己的锋芒。左宗棠这样说,也真的这样做到了。他坚信,自己的刚直忠介,既可以质诸天地鬼神而不屈,也可以施诸于朋友同事之中而不违。他的风格一开始可能很难为人所接受,但时间长了,大家必然会理解他原谅他,而当大家接受了他的行事风格之后,那些复杂的事就变简单了,没有了那么多虚伪做作的环节,交往效率和办事效率反而大大提高。这就是他的“以直胜曲”论,与曾国藩的“以拙胜巧”颇有异曲同工之妙。他的好朋友胡林翼为人灵活,善于交往,长于运用权术,他却说

润之(芝)喜任术,善牢笼,吾向谓其不及我者以此

左宗棠的优点在于他的清澈单纯,而缺点也在于他清澈单纯。每个人内心深处,都潜藏着“自我中心”、“高己卑人”的强大本能。这种本能,既能促人争强好胜,建功立业,也能使人自矜自大,甚至嫉贤妒能。因此对于这种本能,必须如驯服烈马一样,施以一番陶冶磨炼之功,得其益而去其害,才能最终成为大贤大能。而左宗棠为人,却善于察人,不善自察。和曾国藩比起来,他的自省功夫无疑相差太远,对于心中的自大自矜,他缺乏克化之功。因此,他的“直”,他的“清澈”,也就把内心深处的“忮求之意”直接呈现出来。他一生的两大爱好,好听过头恭维和爱酷评他人,都根源于此。他一生从来不会拒绝别人的任何一句恭维,也从来不会放过任何一个挑别人毛病的机会。特别是一遇到那些才力与自己相当之人,左宗棠就本能地变成一只好斗的公鸡,总是抑制不住自己的攻击倾向,开口即骂,专揭其短,无所不至。这在他后来与李鸿章、郭嵩焘的关系中表现得也很明显。

相比左宗棠,曾国藩为人就全面得多。

每个人的青年时代都是青涩的。青年时代的曾国藩和左宗棠一样,也有着高己卑人、骄傲自大的一面。在早年离家到京服官之际,他那位识字不多却深有识人之明的老祖父送给他这样的临别赠言:

尔的才是好的,尔的官是做不尽的,尔若不傲,更好全了

老祖父的一句箴言当然不足以克去曾国藩身上的这个缺点。在北京的最初几年,他的几个至交都曾直言不讳地指出他的“傲慢”。他的好朋友邵懿辰说他的缺点第一个是“慢,谓交友不能久而敬也”;第二个是“自是”,听不进不同意见。青年曾国藩的脾气之大当时毫不亚于左宗棠。因为脾气火暴,曾国藩到北京头几年与朋友打过好几次大架。那时的曾国藩,和左宗棠一样,遇事只认理不认情

凡事见得自己是而他人不是

和左宗棠不同的是,曾国藩下过一段扎扎实实的克己之功,以理学为武器对自己“天赋之性”进行过深刻的反省和系统的纠正。脱掉自己身上的“自我中心”、“高己卑人”,换上“诚恕”之心,谦虚之道。他的胸襟日益扩展,性格日益宽厚,到与左宗棠初次会面以前,他已经从一个血气方刚凡事必争的青年变成了一个涵养极好遇事忍让的中年人,对朋友之道颇有见地。他认为交友贵雅量,要

推诚守正,委曲含宏,而无私意猜疑之弊

他总结说,对朋友

  1. 诚,凡人以‘伪’来,我以‘诚’往,久之则伪者亦共趋于诚矣”。
  2. 敬,“至于与人交际之道,则以‘敬’字为主”。
  3. 恕,“我要步步站得稳,须知他人也要站得稳,我要处处行得通,须知他人也要行得通。所谓达也。今日我处顺境,预想他日也有处逆境之时;今日我以盛气凌人,预想他日人亦有以盛气凌我之身,或凌我之子孙”。
  4. 浑,“惟忘机可以消众机”。人际交往中凡事不可过于计较,分得太清楚。
  5. “不嫉妒”。曾国藩认为这一点极为重要,以至于他晚年以“不忮”也就是“不嫉妒”作为遗嘱,嘱咐后人。

曾左早期合作的顺利,正是建立在曾国藩的深厚修养之上。而左宗棠一生所有注意力都贯注于事功,在心性上缺乏了这一段功夫。这就是曾左最大的差距所在。当然,一个人要成为“内方外圆”的“圣人”,不是一蹴而就的事情。虽然经过了艰苦的自我砥砺,但是从北京刚刚来到地方官场,曾国藩的棱角仍然显得过于分明,处事仍然过于方刚和理想主义,对地方官场上令人意想不到的黑暗污浊一时难以适应。他在江西数年与地方官不能相安,既有官场体制的原因,也有性格和处世方式的原因。

从咸丰七年二月到咸丰八年六月,曾国藩在老家待了近一年半时间。这一段时间是曾国藩生命中除了道光年间刻苦自修之外,另一个极为重要的生命关节点。极为好胜的曾国藩像一个闭关的和尚一样把自己关在屋子里,一坐就是一整天,苦苦思索自己失败的原因。他意识到,办事风格手段过于生硬,是他处处碰壁的主要原因之一。经过一年多的乡居,曾国藩如同变了个人。他斩关夺隘,没有被挫折打垮,反而本领大长。行动做事,由原来的方正,一变而为圆通。他的人际交往能力,从此大大提高。这首先就体现在曾左关系当中。

关系回暖

左宗棠与曾国藩虽然关系僵了,但是和曾国藩的弟弟曾国荃的关系一直不错,与曾国藩断绝音信之后,与曾国荃却音书不绝。这是曾左关系中一个有点奇怪的插曲。想想其实也理有当然。左宗棠与曾国荃性格相投,他们都是炮筒子式的人物,办事直来直去,心急火燎,不似曾国藩的磨磨叽叽,瞻前顾后。他们命运也有共同之处,都是科举不中,以军功升迁,彼此同病相怜。更加上曾国荃从戎之初得到过左宗棠的用心指点,对左宗棠的才能十分钦佩,在资历功业上又一直低左宗棠一等,对左氏的声威名望从不曾构成威胁,左宗棠一直从容地保持着居高临下之势,所以两个人终生关系不错。

曾国藩不回左宗棠的信,却不想因自己而影响弟弟与左宗棠的关系,因此特意给弟弟写信说:

左季高待弟极关切,弟即宜以真心相向,不可常怀智术以相迎距。凡人以‘伪’来,我以‘诚’往,久之则伪者亦共趋于诚矣。

曾国荃本来夹在兄长和朋友当中,不知如何是好,这下知道了兄长的态度。在与左氏保持交往的同时,他还想方设法调和二人关系,劝哥哥先给左宗棠写封信。然而,被人指着最痛处骂了一顿之后,还要主动修好,迈出这一步不是那么容易的。咸丰八年三月二十四日,他在与弟弟信中写道

弟劝我与左季高通书问,此次暂未暇作,准于下次寄弟处转递,此亦兄长傲之一端,弟既有言,不敢遂非也。

可见这封信写得多么不容易。四月初九日,这封复交信终于写成,他在给弟弟的信中写道

弟前请兄与季高通信,兹写一信,弟试观之尚可用否?可用则便中寄省,不可用则下次再写寄可也。

曾国藩既然伸出了橄榄枝,左宗棠自然也不怠慢。他的回信写得相当热烈:

沅浦递到手书,敬悉近状之详,喜慰无似。不奉音敬者一年,疑老兄之绝我也,且思且悲,且负气以相待。窃念频年,抢扰拮据,刻鲜欢悰,每遇忧思郁结之时,酬接之间亦失其故。意有不可,即探纸书之,略无拟议。旋觉之而旋悔之,而又旋蹈之。徒恃知我者不以有它疑我,不以夫词苛我,不以疏狂罪我。望人恒厚,自毖殊疏,则年过而德不进之徵也。来书云晰义末熟,翻成气矜,我之谓矣……尊恙闻服卫生丸颇效,然否?若然,则非仅血虚可知。如须此者,当为觅之。弟小兄一岁,近亦颓然,可憎厌也。近代草筹饷一疏上,乞教之。仁先时有书来,言都下事,多令人忧者,不敢寻览。先此略复,馀俟续致。

注:悰cóng,1.欢乐;乐趣;2.心情;思绪;3.谋划。

信的大意是说,接到你弟弟转来的信,我实在是太高兴了。一年没接到你的回信,我疑心你彻底与我绝交了,我又思念,又伤心,但是仍然负气等待,不愿先认错。但是反思这些年,事务太繁、困难太多,所以接人待物,常常出错。心中冒出一个念头,常常不假思索就形之于文字,刚发出去就后悔了,但是不久又犯同样的错误。我心中总以为,作为知友,大家都知道我的性格,不会怪罪我。这就叫做责人严而责己疏,无疑是我自我修养不够的表现。

两人中断了一年多的书信来往又从而恢复。虽然曾经讥讽曾氏再出,“有济与否,亦非我所敢知”,其实左宗棠是非常清楚曾国藩这样“勇于任事”之人对于中兴大业的重要性的。在胡林翼的协调下,四月二十五日,左宗棠替骆秉章起草奏折,与胡林翼一起,请朝廷起用曾国藩。由于战局重又紧张,皇帝不得不勉从其请,命曾国藩重新出山。

经过一年多的反思,曾国藩面目大变。在人际交往上,他更加圆通和气,他到了长沙,首先拜遍大小衙门,连小小的长沙县衙他也亲自造访。拜访左宗棠当然也是他的重要日程。他在长沙与左宗棠一周之内数次深谈,十六日又“至季高家赴宴”,并集“敬胜怠,义胜欲;知其雄,守其雌”十二字为一联,请精于篆书的左宗棠书写,表示谦抑之意。遂“交欢如初,不念旧恶”。

注:敬胜怠就是勤勤恳恳战胜懈怠,义胜欲就是正道战胜欲望
注:知其雄,守其雌,虽知阳刚的显要,但仍能坚守阴雌的柔静心态

友谊的顶峰

曾国藩以谦卑圆融之态营造了比以前更舒适的生存空间。而左宗棠的傲慢却终于受到了报复。咸丰九年底,左宗棠遇到了自己人生中最大的跌蹉。咸丰四年入幕后不久,骆秉章就开始对左宗棠是言听计从;按左宗棠自己的话说:

所计画无不立从。一切公文,画诺而已,绝不检校。

由于骆秉章如此放手,左宗棠也就毫不客气,把自己当成了真巡抚,将全省官员当成自己的下属,“一意孤行”,对那些品级很高的大员也不假颜色。虽然在左的治下,湖南“自刑名、钱谷、征兵、练勇与夫厘金、捐输,无不布置井井,洞中机要”,但他的作风却得罪了许多官员。在湖北居官之李香雪就写信告诉胡林翼

湘中人来,颇怨左公

左宗棠自己也感到:

所处之地介于不绅不幕之间,踪迹太幻,遂“为世所指目”。

关于这次灾难的起源,有两个版本。一个是徐宗亮《归庐谈往录》记载,永州镇总兵樊燮曾经拜访湖南巡抚骆秉章,身为幕僚的左宗棠出与樊燮共谈,不料双方“意大龃龉”,虽然樊燮为二品大员,左宗棠以一介举人,居然“进起批樊颊”,并且大肆詈骂,使“樊不能堪”,两人从此结下不解之怨。

而据刘成禺《世载堂杂议》记载,咸丰九年,永州镇总兵樊燮因事谒见骆秉章。骆秉章让樊燮直接去见左宗棠。总兵是二品大员,但清代重文轻武,左宗棠更是看不起胸无点墨的武官。樊燮自恃大员身份,见了左宗棠没有请安,惹得傲慢惯了的左宗棠怒气大发:“武官见我,无论大小,皆要请安,汝何不然?”不料樊燮也是个倔性子,顶撞道:“朝廷体制,未定武官见师爷请安之例,武官虽轻,我也朝廷二三品官也。”

左宗棠平时最忌讳人家提他的“师爷”身份。中不了进士才去给人家当师爷,这是表面上风光无限的左氏内心的隐痛。他最受不了别人因为他的师爷身份而轻视自己,因此勃然大怒,上前一脚踢翻了樊燮,嘴里还大骂:“王八蛋,滚出去!”不久,左宗棠就怂恿骆秉章弹劾樊氏,使他被革职回了老家。

事实是否真的如此具有戏剧性已不可考。但是左宗棠怂恿骆秉章弹劾樊燮确有其事。官场之上,冤家宜解不宜结,因为你不知道哪块云彩有雨。樊燮与湖广总督官文关系极为密切。在官文的支持下,他一个状子把左宗棠告到了朝廷,说左宗棠是“劣幕”,一官两印,嚣张跋扈。一个师爷敢打二品大员耳光,这还了得?朝廷发下谕旨,命人逮捕左氏,“果有不法情事,可即就地正法”。一时之间,不可一世的左师爷头颅岌岌可危。

闻听左氏遇祸,曾国藩“焦灼极切”,他不光为朋友忧,也为大局忧。他在家信中忧心忡忡地写道:

湖南樊镇一案,骆中丞奏明湖南历次保举,一秉至公,并将全案卷宗封送军机处。皇上严旨法责,有“属员怂恿,劣幕要挟”等语,并将原奏及全案发交湖北,原封未动,从此湖南局面不能无小变矣。

左宗棠遇到的这一大难,可与曾氏家居困境相比。左当时对曾是雪上加霜。此际曾国藩却对左雪中送炭,关爱有加。他十分体谅左宗棠此际的心境,怕他因为惊忧过度,损害健康,因此去信加以宽解。九月三十日,曾在给左的信中写道:

得闻樊案又生波折,深恐台端愤悒自伤,适丁果臣一信,道所以处之之法甚精当,想润帅(即胡林翼,字润芝)已抄送左右矣。

除了温辞慰问,曾国藩还全力以赴,托关系走后门,帮左氏解脱。咸丰帝将此案交湖北正考官钱宝青审办,钱宝青是曾国藩的门生,于是曾氏以座师身份,请他设法缓解。在钱的努力下,左氏暂时未获牢狱之灾,得以顺利离开湖南。

咸丰九年十二月,左宗棠退出了巡抚的幕府,以北上会试为名,打算“直之于朝”,在皇帝面前剖白此事原委。他对这个极端的办法本来也心里没底,一路风雨交加,前途茫茫,心情极差。路上他收到了胡林翼写来的信,劝他不要北上,因为陷害他的人并不会因为他离开幕府而罢手,正在四处布置,他去北京,无疑是自投网罗。左宗棠看了这封信,感到进京既无出路,回到老家,对方仍能“寻踪而得”,深感“侧身天地,四顾茫茫”,无安身之地。思前想后,他决定避难军营。于是掉头南旋,来到宿松曾国藩大营。曾国藩对左氏的到来大表欢迎,二十天中,他与左“昕夕纵谈东南大局,谋所以补救之法”。左宗棠向曾国藩表示,请让他自带一队湘军,以一个普通小营官自效,万一官文等“必不相舍,山北山南网罗密布,即匿影深山,亦将为金丸所拟”,那就带队“策马冲锋”,以战场上结束自己的生命。可见悲观到了何等地步。

天下之事,每每祸福相生。谁也没想到,这一次天子亲自问罪,竟成为左宗棠一生命运的重大转折。由于左氏一人事关湖南大局,所以许多大吏特别是两湖官员,积极展开营救。除了曾国藩的努力,还有许多人共同出手。胡林翼写信向官文说好话,老朋友郭嵩焘向肃顺求助。在一番紧锣密鼓的营救下,事情出现了戏剧性的转机。在“樊燮京控案”以前,就多次有人向咸丰皇帝举荐过左宗棠其人。咸丰因此对左氏印象颇深。这次案件中,又有这么多人为左宗棠求情。潘祖荫甚至对皇帝说出“国家不可一日无湖南,湖南不可一日无左宗棠”这样的话,皇帝因此对左氏更加好奇。因此特意专旨询问曾国藩,想听听曾国藩对左宗棠的评价,以及能否调到曾的麾下使用。曾接旨大喜,于咸丰十年四月回复说

(左氏)刚明耐苦,晓畅兵机,当此需才孔亟之时,或饬令办理湖南团防,或简用藩、臬等官,予以地方,俾得安心任事,必能感激图报,有裨时局。

皇帝于是命左氏以四品京堂候补,作为曾国藩的助手,襄办湖南军务。而此前左宗棠因做多年幕僚,得到的官衔是五品兵部郎中。左宗棠做梦也没想到曾国藩等一干朋友的援手,居然使他枯木逢春,化大凶为大吉,他说对此际遇感到“实非梦想所期”。对朝廷与朋友们感激次骨,遂摩拳擦掌,准备在曾国藩帐下大干一番。得到左宗棠这样的有力助手,曾国藩当然如虎添翼,他决定放手让左氏大干,派他到湖南募勇,自成一军,以做独当一面的打算。左宗棠仅一个月时间,就募了五千人。此刻的左宗棠意兴勃勃,雄心大炽,他在家书中写道

此去务要尽平生之心,轰烈做一场,未知能遂其志否?”

虽然深受曾国藩的举荐之恩,但左宗棠对曾国藩,自始至终毫无唯唯之态。在曾国藩麾下带兵之初,左宗棠就表现出不甘人下的特立独行风格。以前,凡是曾国藩麾下的军队,统称为“湘军”,而左宗棠却独树一帜,将自带的五千人号为“楚军”。曾国藩选将专要朴实的读书人,以其有根底,有操守,大节不苟。而左宗棠却多用武夫,“亦不尽朴实之选,止取其能拼命打硬仗耳”。左宗棠有左宗棠的算盘。原来,读书人有功名,立了战功很快可以高升,不再为己所用。而武人升到提督已是非常不易,不得不一直在自己脚下盘桓,容易控制。曾国藩招兵,多从原籍湘乡一县招募,左宗棠认为这样弊端尤多,因为一旦失利,往往是举县尽哀,士气容易受挫。所以他从全省各府县招募,优中选优,强中择强。至于营制,他也参用后来脱离曾国藩系的王錱之法,处处与湘军有所不同。

事实证明左宗棠的名气不是吹出来的。首次亲自带兵打仗,他就旗开得胜。咸丰十年底,太平军兵分三路,包围了曾国藩所驻的祁门。曾国藩四面楚歌,陷于惊恐之中。幸好左宗棠在景德镇经过一日一夜激战,将太平军将领黄文金率领的数万军队击败,令曾国藩转危为安。事后,曾国藩专折为左宗棠请功说:“左宗棠初立新军,骤当大敌,昼而跃马入阵,暮而治事达旦,实属勤劳异常,惟系襄办京堂大员,应如何优擢奖叙之处,出自圣裁。”于是皇帝发布谕旨,着左宗棠以三品京堂候补。

曾国藩侥幸渡过此难,不料更大的危险紧接着到来。咸丰十一年(1861年)二月,太平军李世贤部再度进入江西,并于二月底击败左宗棠,攻占了景德镇,兵锋直指祁门。曾国藩文报不通,饷道中断,又一次陷于绝境,在日记中写道

忧灼特甚,夜竟不能成寐,口枯舌燥,心如火炙,殆不知生之可乐,死之可悲矣。

甚至给曾纪泽写下了遗嘱。

在这关键时刻,左宗棠再次力挽狂澜。景德镇失败后,他退守乐平,三月六日与李世贤大战于此,左充分利用地形优势,命人开挖壕沟,引水塞堰,大大限制了太平军骑兵的作用。在他的指挥下,左军奋力进攻,大败太平军,杀敌五千多人。李世贤大败狂奔,曾国藩再一次走出绝境,他大喜过望,对左宗棠当然又一次奖誉不已,向皇帝汇报称:“(左宗棠)以数千新集之众,破十倍凶悍之贼,因地以审敌情,蓄机势以作士气,实属深明将略,审越时贤。”请求“将左宗棠襄办军务改为帮办军务”。曾国藩甚至对皇帝说,他以此事断定左“将来必能为国家开拓疆土,廓清逆氛”。可谓推重备至,也预见到了左宗棠后来收复新疆之功,诚可谓“知人之明”。皇帝又一次接受了曾因藩的建议,“命候补三品京堂左宗棠帮办两江总督曾国藩军务”,左由襄办改为帮办,一字之差,变成曾的副手。随后又晋为太常寺卿,正三品,这是左出山十年来第一次被授真正的实职官职。

太平军被赶出江西后,却在浙江势如破竹。咸丰十一年九月,浙江全省几乎全部被太平军占领。咸丰十一年十月十八日,朝廷命曾国藩督办江苏、安徽、江西、浙江四省军事。曾国藩用人,抱定立人、达人之原则,绝不因自己用着顺手就把这个人压在自己手下不使其升迁。他早就想为左宗棠谋得更大的发展空间。浙江失陷,给了他这个机会。他决定将浙江军务全盘交给左宗棠,让他从此独当一面。十一月十六日,曾国藩在复左宗棠的信中写道:

昨奉廷寄谕旨,谬以鄙人兼办浙江军务。位太高,权太重,虚望太隆,才智太短,殆无不颠蹶之理。即日当具折请辞,而推阁下督办浙江军务。

他说到做到,当月二十五日,他上《恳辞节制浙省各官及军务等折》,说明了自己的想法

以臣遥制浙军……不若以左宗棠专办浙省……其才实可独当一面

左宗棠闻讯大喜。这么多年来,他一直盼着离开曾国藩羽翼,自己开辟乾坤大展拳脚的一天。他率领军队,兴冲冲地准备起程。这时曾国藩却给他寄来信件,命他按兵不动。原来此时太平军已经把浙江巡抚王有龄围困在杭州,王有龄凶多吉少。如果左宗棠马上出兵救援,万一失败,左氏得承担救援不力之责。如果救援成功,把王有龄救出来,那么浙江巡抚还是要由王有龄来做,左宗棠如何安置?因此直到十一月底,得知浙江巡抚王有龄在围困中自缢而死,曾国藩才密奏清廷,请以左宗棠为浙江巡抚,同时命令左宗棠迅速入浙。曾国藩心机权术之深,可见一斑。

十二月二十四日,清政府任命左宗棠为浙江巡抚。在投奔曾国藩之初,左宗棠所期望不过是“以小营官自效”,孰料“进步”速度如此之快。这当然全是曾国藩提携之效。曾国藩好事做到底,不但把驻扎在赣浙边界的湘军统归左宗棠节制,而且慷慨地给了他向皇帝的专奏权和征收厘金权。入浙是左宗棠一直以来的梦想。早在楚军出湘之始,左就注意到浙江这个最富之地。曾国藩这次超额满足了他的梦想,令他快慰无已。而曾国藩在入浙时机上的选择,更让他看到曾国藩为他考虑的细致周到。此时的左宗棠,对曾国藩发自内心地尊重感激,和曾国藩交往中,变得毕恭毕敬,“修敬先达之礼”,“每事必请教而后行”。称“涤帅与我,情意郛洽之至”。这是双方合作中最情投意合的一段。 注:郛fú,古代指城外面围着的大城

获得了更大平台的左宗棠的才干更挥洒无余,他竭尽平生才力,专注于浙江军事。同治二年三月,清廷超擢他为闽浙总督。左宗棠担任巡抚,已经属于破格超升。而仅仅一年之时间,就又擢升总督,居然与曾国藩平起平坐,分庭抗礼了。他在家书中说:“近奉冲圣(年幼的君主)寄谕,吾与涤公均平列。”这一年多中间,左宗棠并无特殊建树,何以如此轻松取得与曾国藩平列的地位呢?这道圣旨的背后隐藏着大清朝廷极为深刻的用心。原来,曾国藩此时权倾天下,拥兵过广,已经令清廷不放心了。他们怕曾国藩尾大不掉。使左氏与曾分庭抗礼,就是为了分裂湘军,牵制“兵权过重”的曾国藩,达到分湘系集团而治之的目的。之所以起用左宗棠来牵制曾国藩,是因为清廷敏锐地发现,左宗棠与自己的恩主曾国藩之间出现了矛盾。

矛盾再现

随着左宗棠地位的迅速上升,他与曾国藩的关系又一次出现了恶化。首先当然还是用兵方略上的争执。既为麾下之后,左宗棠对曾的许多军事判断虽然不再公开嘲讽,但与朋友们交流时仍直言不讳。比如闻听太平军占领浙江后,曾国藩的判断极为悲观,惊呼道

现在苏、浙两省膏腴之地,尽为所有,窟穴已成,根柢已固,……东南大局,收拾愈难

左宗棠却认为这是一件好事,太平军舍弃长江中游的安庆地区,而专集于下游,“大局顿有转机”。事实证明左的看法确实比曾更有见地。

早在咸丰十年三月,左宗棠就建议曾国藩“先以偏师谋取吴越”。曾国藩却坚持所谓“稳扎稳打”之法,拒绝此议,进驻皖南万山丛中的祁门。左宗棠虽然没有公开批评,却在写给儿子的信中流露出轻蔑之色:

涤公于我极亲信,毫无间言。唯才略太欠,自入窘乡,恐终非戡乱之人

随着浙江巡抚做得越来越顺手,左宗棠对曾国藩的批评也越来越直言不讳。在给骆秉章的信中,他这样表达自己的委屈

涤相于兵机,每苦钝滞,而筹饷亦非所长,近日议论多有不合。只以大局为重,不能不勉为将顺,然以难矣

入浙之初,左宗棠对曾国藩的建议还是唯命是从至少积极响应的,但随着他在浙江脚根扎稳,对曾国藩就越来越轻慢起来。曾国藩对周开锡、李庆霖二人十分反感,要求左宗棠斥退他们。左宗棠却对曾国藩的用人之道不以为然,“恪靖(指左宗棠)尝谓文正(指曾国藩)无知人之明,故文正所弃者,无不重用”,反而委此二人以重任。同治元年(1862年),当太平军进攻曾国荃部时,曾国藩要求左宗棠派蒋益沣(fēng)一军往援,左宗棠却拒不从命。曾国藩于浙事或者楚军的“大调度”,都通过书信或者咨文商之于左,可是左却“每置不肯”。曾国藩寄给左宗棠的信件,左动不动就不予回复。以至于曾国藩在一封信中这样抱怨道:

每有大调度,常以缄、咨敬商尊处,公每置之不论,岂其未足与语耶?抑自足而拒嘉谟耶?盍亦箴砭而推挽之?”

与左宗棠的合作中,曾国藩不得不又一次回到忍气吞声、逆来顺受的角色。和别人他不好说什么,只能对亲兄弟一吐肝肺。同治二年五月初二日,他在致曾国荃的信中这样说:

余因呆兵太多,徽祁全借左军之力,受气不少。此后余决不肯多用围城之呆兵矣!

郁怒之态,溢于言表。不论有多少不愉快,曾左二人关系表面上还是过得去的。因为曾国藩位为两江总督,左宗棠是浙江巡抚,名位毕竟在曾国藩之下,不得不时时压制自己的气焰。但当左宗棠升任闽浙总督,与曾国藩地位相等后,二人冲突就开始表面化了。

二人第一次冲突的导火线是军饷问题。湘军不是经制之兵,军饷一直是曾国藩最头疼的问题。当湘军顿兵南京城下之时,曾国荃每天只能发四成饷,士兵连半饱也吃不上,只能煮粥度日。为了保证湘军军饷供应,曾国藩保举沈葆桢出任江西巡抚,因为江西是湘军重要的饷源地。没想到出任江西巡抚不久,地方主义倾向就压倒了对曾国藩的感激之情,沈葆桢急于在江西干出成绩,想把江西财政收入都留为己用,不再为湘军供饷。曾国藩闻讯大急。曾沈二人为了争饷,在皇帝面前打起了笔仗。对于沈葆桢的忘恩负义,曾氏大营的所有人都气愤填膺,他们纷纷说,如果朝廷设一个“绝无良心科”,沈一定取得第一名。

曾国藩为此“郁闷殊甚”,写信给左宗棠说:

幼丹(沈葆桢的字)中丞与敝处大相龃龉,将漕折全行截留,初不省其开罪之由。以中才而当末流之世,处权势之地,固宜丛尤悔而不自知乎?

曾国藩把左宗棠当成了心腹和知己,才如此推心置腹地谈论此事。他万万没想到,升任了总督的左宗棠在回信中没接他的话茬,却为沈葆桢抱起了不平。原来,左沈二人此时已经走到了一起。战争形势的发展,使左沈有了共同的利害关系。因为左氏军队在浙江阻挡太平军入赣,为江西起了屏障作用。左宗棠还多次带兵入赣剿杀江西境内的太平军。沈葆桢虽然不愿为曾氏供饷,却愿意为左氏供饷,双方因此关系密切,情投意合。在和曾国藩打奏折官司时,沈葆桢甚至还把左宗棠带兵入赣、高风格地不用江西饷银的事迹写入奏折,以此贬低曾国藩。

江西现已财力枯竭,所幸闽浙总督左宗棠派兵前来我省作战,“极谅江省苦情,派来刘典援师,血战于江,转饷于浙”。(沈葆桢:《洋税尽数解营片同治二年五月二十七日》)

左宗棠成为总督之后,与曾国藩的书信往来又恢复了旧日飞扬跋扈指手画脚之态。笔记中有这样一条记载:

(左宗棠)一日来咨,极诋文正(曾国藩)用人之谬,词旨亢厉,令人难堪。文正复之云:“昔富将军(富明阿)咨唐义渠中丞云:‘贵部院实属调度乖方之至。’贵部堂博学多师,不仅取则古人,亦且效法时贤,其于富将军可谓深造有得,后先辉映,实深佩服,相应咨覆云云。”

注:乖方,违背法度

以曾国藩之修养,如非郁怒已极,决不会以这样的嬉笑怒骂尖酸刻薄来回应左宗棠。双方的关系,至此已经阴云重重。经过三年苦战,左宗棠攻克杭州,清廷因此于同治三年三月特加左宗棠以太子少保衔,并赏穿黄马褂。及至当年十月,左宗棠夺得浙江全省,被清廷封为一等伯爵,并赐爵名“恪靖”。

最终决裂

同治三年六月十六日正午,南京太平门外一声巨响,城墙崩坍,烟尘升起数十丈。天京陷落。

两天之后的六月十八日午夜,气喘吁吁的信使叩响了曾国藩大营营门。已经于二更四点睡下的曾国藩在三更三点被人叫醒,披衣复起。他已经猜到是什么消息,颤抖的手握住咨文,读后:

思前想后,喜惧悲欢,万端交集,竟夕不复成寐

是啊,曾国藩有太多理由百感交集。从咸丰二年起兵到今天,整整十二年了。这十二年里,他失去了两个亲兄弟,也亲手把数万名湘乡老乡送入鬼门关。自己更是三次自杀,数度濒危,忍受了超过普通人耐受极限十倍百倍的艰巨和委屈,才换来这一张捷报。

收到捷报,大清朝廷“特沛殊恩,用酬劳勚”,册封曾国藩为一等侯,世袭罔替。同时册封曾国荃为一等伯。

注:勚yì,1.劳苦;2.器物磨损,失去棱角、锋芒等。

然而,就在封侯的喧闹喜庆过去不久,曾国藩却又一次陷入了苦恼之中。原来,曾国荃午夜送来的那张捷报存在一个致命的问题。曾国荃没有详细调查,就匆忙汇报说,幼天王“积薪宫殿,举火自焚”,南京城内十万太平军皆被消灭。南京一役,圆满成功。然而事实是,南京城破之际,有数千人突围成功。这数千人中,就有洪秀全的儿子幼天王。自古用兵,讲究擒贼擒王斩草除根,幼天王逃走,则太平军残部犹心有所系,镇压太平天国自然不能算彻底成功,曾国荃血战两年得来的“首功”由此也大打折扣。曾国藩得知真相后,如同兜头一瓢凉水。他只能盼布防的湘军在南京城外迅速抓住幼天王。这样,他也可以从容向朝廷汇报,措辞之间,极力回旋,使他们兄弟不至于十分难堪。让他想不到的是,幼天王居然一路逃过湘军在南京城外的层层布防,千里奔逃到湖州,投奔了当时太平军余部中的堵王黄文金部。更让他想不到的是,居然有人不禀告他,率先将此消息报告给了朝廷。

此人就是左宗棠。

左宗棠通过线人,得知了幼天王的踪迹。按常理,他应该及时把这个消息告诉曾国藩,让曾国藩决定如何处置整个事情。再退一步,即使是由他来向朝廷汇报,他无论如何也应该先与曾氏兄弟通报一下情况。这样于国家无损,而于私谊有益。事实上,在以前的军务大端上,左宗棠一直是这么做的,只有这次,在涉及曾氏兄弟根本利益的大事上,左宗棠没有这样做。在获得了幼天王下落后,他立刻于七月初六直接奏报朝廷:

据金陵逃出难民供:伪幼主洪瑱福于六月二十一日由东坝逃至广德,二十六日,堵逆黄文金迎其入湖州府城。查湖郡守贼黄文金、杨辅清、李元继等皆积年逋寇,贼数之多约计尚十馀万,此次互相勾结,本有拼命相持之意;兹复借伪幼主为名号召贼党,则其势不遽他窜可知。且江西兵力渐集,李世贤、汪海洋诸逆如不得逞于江西,则遁入浙、闽,复与湖州踞逆相首尾,亦未可知。

注:逋bū,1.逃亡;2.拖欠

也就是说,据金陵逃出来的难民交代,幼天王逃到了广德,被堵王黄文金接入湖州城。黄文金等都是太平天国骨干,又拥十万残部,本来就要战斗到最后一刻。如此又得到了幼主作为号召,实在十分危险。其他太平军残部,有可能前来会合。

这道奏折,不但有实情,还有夸大。幼天王逃至湖州是实,但是所谓他受到太平天国十万余残部的热烈欢迎,“拼命相持”,却是夸大不实之词。其实,洪秀全在天国覆亡之前已经人心丧尽,毫无政治经验、与臣下素无交往的幼主更谈不上什么号召力。李世贤、汪海洋等残余将领对“迎驾”、“护驾”根本不感兴趣,不想给自己找一个空头麻烦,所以幼天王在逃亡途中总是“赶不上”他们。堵王黄文金虽有“迎主”的举动,其后却对幼天王本人避而不见。左宗棠夸大幼天王的影响力,意图十分明显,那就是要贬损曾氏兄弟的战功。他告诉清廷,幼天王远比南京城更重要。幼天王逃出,并且受到十万余残部的热烈欢迎,那么太天国各地残部联合起来,重新复兴,并非没有可能。看来镇压太平天国大业,只是完成了一半。而曾氏兄弟就是凭着一半成功,骗得了封侯之赏。左宗棠的目的果然达到了,朝廷勃然大怒。慈禧太后万万没想到素称老实厚道的曾国藩居然敢如此欺君罔上。于是降下严旨,切责曾国藩:

据曾国藩奏,洪福瑱积薪自焚,茫无实据!似已逃出伪宫。李秀成供:曾经挟之出城,后始分散;其为逃出,已无疑义。湖熟防军所报斩杀净尽之说,全不可靠!著曾国藩查明。此外,究有逸出若干?并将防范不力之员弁从重参办!

注:瑱zhèn,古人冠冕上垂在两侧以塞耳的玉

从表面上看,幼天王的生死,确实是关系到清王朝根本利益的重要问题,左宗棠忠心王事,不顾私情,第一时间将侦知到的情报上奏朝廷,大义凛然,光明正大。薛福成在《庸庵笔记》中就说:“左公不感私恩,专尚公议。”

但问题是,左宗棠并非从不感私恩。当初他身陷樊案,潘祖荫营救颇力,他就一直念念不忘,发达之后,每年都送以厚礼,仅仅冬天的“炭敬”一项,照例为一千两。后来在陕甘总督任上,他弄到了一件极不寻常的古董,送给已经受到革职处分的潘祖荫,以表安慰之意。这件古董的分量如何?只用一句话就可以说明:它名为“大盂鼎”,后来成为了中国历史博物馆的镇馆之宝。可见他如果想报私恩,也可以做得很漂亮。

如果论恩情,曾国藩对左宗棠并不亚于潘祖荫。曾国藩在他进身之路上,一路扶植提携。而左宗棠与曾国荃,更是多年情投意合,即使是在他有憾于曾国藩之时,和曾国荃关系也一直非常良好。他如此处理此事,实际上受更大打击的是曾国荃,因为曾国荃才是直接责任人。因此这种做法无疑太令人费解了。

但是如果考量一下事件发生的时机,我们可以清晰地看出,推动左宗棠做出此事的,是纠结了他一生的“瑜亮情结”。潘祖荫对左宗棠的功名地位只有帮助,从无妨碍。所以左宗棠对他的感谢,慷慨而充分。除了送过一只大鼎外,他还在书信中这样表达过感激之情:

(潘祖荫,宗稷辰)皆与吾无一面之缘,无一宗之交,留意正人,见义之勇,非寻常可及。

而对曾国藩,他从来没有表达过感激之意,每提起曾氏,他心中总会涌起一股难言的怨气。原因只有一个,那就是曾国藩在舞台当中占据了本来应该属于他的“主角”位置。以主帅身份平定了太平天国,这就是曾国藩对不起他左宗棠之处。

如谓不信,请看这样一个故事。左宗棠晚年,为《铜官感旧图》作序。铜官就是曾国藩靖港之败后自投湘江之处,《铜官感旧图》画的就是曾国藩当年自杀之事。左宗棠的序中有这样一句:

公(曾国藩)不死于铜官,幸也。即死于铜官,而谓荡平东南,诛巢馘让,遂无望于继起者乎?殆不然矣。

注:馘guó,古代战争中割掉敌人的左耳计数献功。也指上述情况割下的左耳

这句话的意思就是,曾国藩那次投水没死,当然是天下之幸。但是如果说他死了,天下就没救了,也不是那么回事。从这句话不难看出,左宗棠真恨不得曾氏死于当时,那么,“荡平东南,诛巢馘让”的应该就是他了。在大的战略方针上,多少次事后的结果证明他左宗棠比曾国藩更高明?然而,说这些都没有用了。追今抚昔,一切还都是出在“科名”二字上。曾国藩虽然愚笨平庸,但因科名顺遂,早早占据了有利地位。他做好了只手擎天的一切准备,却因为身无名分,无法充分施展。虽然最终终于被皇帝起用,无如“出身太迟”,起身太晚,追赶曾国藩已经来不及。南京城破之际,普天同庆,只有左宗棠孤坐在自己的总督府中,心绪异样。每一个时代,只能有一桩最大的事功。曾左时代,这一事功无疑就是平定太平天国。错过了这个机会,他左宗棠此生无望成为天下第一。在平定太平天国之后,当时之人品评天下人物,每以曾、左、李为序,大家认为这是左宗棠的荣耀,左宗棠对此却相当不以为然。后来他曾这样对郭嵩焘说:

阁下……生平惟知曾侯、李伯及胡文忠而已,以阿好之故,并欲侪我于曾、李之列,于不佞生平志行若无所窥,而但以强目之,何其不达之甚也!

注:侪chái,同辈或同类的人
注:不佞nìng,1.没有才能;2.谦辞。称自己
注:阿好之故,阿其所好

实际上,他认为自己才是一时无两的人物,远远高于曾国藩、李鸿章二人。所以,获知幼天王下落后,他想也没想,凭着条件反射式的本能反应,第一时间做出此事。如果仅止关乎个人名誉,曾国藩可能会坦承自己调查不周,引咎自责。但事情涉及他的部下,特别是兄弟曾国荃,他无法让步。左宗棠奏折中的蓄意倾陷,让他更气愤难平。他固然知道左宗棠脸酸心硬,但想不到他忘恩负义、恩将仇报如此。曾国藩轻易不会攻击别人,但一旦出手,那锋芒也是常人难敌的。他在回奏中这样向左宗棠发起了攻击:

至防范不力之员弁,是夕贼从缺口冲出,我军巷战终日,并未派有专员防守缺口,无可指之汛地,碍难查参。且杭州省城克复时,伪康王汪海洋、伪听王陈炳文两股十万之众,全数逸出,尚未纠参;此次逸出数百人,亦应暂缓参办。

谕旨威胁要将“防范不力之员弁从重参办”。曾国藩却说,当时全军都忙于战斗,“并未派有专员防守缺口,无可指之汛地”,由此推卸了部下的责任。接下来,他反戈一击,揭出左宗棠当年的一桩老底:原来,同治三年左宗棠攻陷杭州后,曾有数万太平军逃出,左宗棠却汇报成只有数千人。这事曾国藩早就心知肚明,却一直为左宗棠保密。直到今天,才不得不作为撒手锏抛了出来。

左宗棠没想到曾国藩会来这一手。事情闹到这一步,左宗棠已经骑虎难下,况且他本是好辩之人,怎能偃旗息鼓?马上再次上奏,绞尽脑汁进行反驳:

曾国藩称:“杭城克复,十万之众全数逸出”;所谓“十万”、“全数”,果何据乎?两城之贼于二月二十三夜五更窜出,官军皆于黎明时入城;夫以片时之久,一门之狭,而谓贼众十万从此逸出,殆无是理!此固不待辨而自明者也。至云杭贼全数出窜,未闻“纠参”;尤不可解。金陵早已合围,而杭、余则并未能合围也;金陵报杀贼净尽,杭州报首逆实已窜出也。臣欲“纠参”,亦乌得而“纠参”之乎?至若广德有贼不攻、宁国无贼不守,致各大股逆贼往来自如,毫无阻遏;臣屡以为言,而曾国藩漠然不复介意。前因幼逆漏出,臣复商请调兵以攻广德,或因厌其絮聒,遂激为此论,亦未可知。然因数而疏可也,因意见之弊遂发为欺诬之词,似有未可。臣因军事最尚质实,固不得不辩;至此后公事,均仍和衷商办,臣断不敢稍存意见,自重愆尤。

注:愆qiān,1.罪过;过失;2.错过;耽误

这年九月,清军终于在江西擒获幼天王,从事实上证明了左胜曾败,曾国藩更陷于难言的尴尬。双方彻底失和,自此而始。直到曾国藩去世,两人之间再没任何私下交往。正如薛福成云:

左文襄公自同治甲子与曾文正公绝交以后,彼此不通书问。

考诸左宗棠的生平,我们很容易发现,他一生于朋友之道不屑用心讲求,先后绝交的朋友不止曾国藩一人。

郭嵩焘是左宗棠的发小,也是曾国藩的金兰之好。他曾经在皇帝面前多次举荐左宗棠,因此使左宗棠之名深入皇帝脑海。当左宗棠身陷樊案之中,他为营救左宗棠更是费尽苦心。潘祖荫上书,实际上就他运作的结果。从这个角度说,他可称得上是左宗棠的最大恩人。

天京城破,太平军残部流入福建广东。此时郭嵩焘正署理广东巡抚。虽然早年关系极好,但是由于与曾国藩走得过近,在左宗棠看来,郭氏此时已经是“曾国藩的人”,让左宗棠心生反感。加上郭嵩焘此时与总督不和,广东官僚体系运转不力。正如当初向曾国藩发动的突然袭击一样,左宗棠在郭嵩焘毫无心理准备之时,参奏郭氏“应变之略,非其所长”,把做官本领平平的郭嵩焘赶出了广东。

如果仅止于此,左宗棠也可以解释为这是为了天下大局,大义灭亲。但问题是他事后又百般推托,不承认是自己将郭氏排挤出广东。郭焘嵩气愤已极,写信给曾国藩说:

鄙人致憾左君,又非徒以其相倾也,乃在事前无端之陵藉,与事后无穷之推宕。

注:陵藉,欺侮,践踏

两个发小因此恩断义绝,郭嵩焘从此对左宗棠恨之入骨,在左宗棠去世后,郭嵩焘的挽诗中有这样两句

攀援真有术,排斥亦多门!

纵观一生,左宗棠在人际交往上是失败的。他的高己卑人、刚直无饰、盛气凌人,使他没有多少朋友。在官场上他也天马行空,独来独往,对下属和同事都缺乏包容,这大大影响了他事业的局面。左宗棠做事“喜专断,务凌人”,所以许多有识之士,对他都敬而远之。曾氏幕府人才济济,左宗棠幕中却人才不多。

左宗棠用人,喜欢使之盘旋自己脚下终生不得离去,所以往往并不实力为部下保举,直到他自己可能要离开高就的时候,才会给部下请功。刘锦棠在他麾下屡立大功,却始终是一个道员衔,多年不得升迁,气得他一度想辞职回家不干。终其一生,左宗棠提携起来的人很少。他的部下中,没有一人后来担任朝中一、二品的文官,在地方出任督抚的也很少。

左宗棠一生与同事共事,纠纷不断。他的铁杆部下刘典,与他分任陕西督抚时,因为督抚不和,曾经愤然告归。左宗棠前期与沈葆桢一拍即合,后来却也因意见不合撕破了脸皮。他与李鸿章虽然没有公然决裂过,但私下里却彼此瞧不起。左宗棠西征时,想招曾门大将鲍超。鲍超却拒不从命,不敢与他合作。细细阅读左宗棠的一生,我们会发现,除了早死的胡林翼之外,他和朋友几乎没有一个能善始善终。虽然英雄一世,但缺乏友情一环,不能不说是左宗棠一生的最大遗憾。

相比之下,曾国藩的人际交往就比左宗棠成功多了。曾国藩一生朋友如云,且其所深交,都是相当杰出的人物。曾国藩一生功业,半受朋友之助;他事业的成功,从某个角度来说,是善于用人的成功。反过来说,他更善于设身处地为他人着想,对朋友提携报答,不遗余力。曾国藩的部下几乎都经过他的举荐,其中有二十六人成为督抚、尚书。有五十二人成为三品以上。此外,道员、知府、知州、县令,更是数不胜数。天京克复前后,湘系“文武错落半天下”。

后人的一般印象中,曾国藩是一个正襟危坐、不苟言笑的道学家,其实这是一个极大的误解。生活中的曾国藩是一个极富风趣、极重人情的人。亲情和友情,是他一生快乐的两大来源。他长于言谈,也颇具幽默感。和朋友们诗酒往还、倾心吐肺地长谈是他最愉快的时光。检点《曾国藩全集》,除了奏折公文之外,其他的文字,绝大部分都与朋友有关:除去卷帙浩瀚的往来书信不说,他的诗作,几乎除了安慰遭遇不幸的朋友、怀念远方家乡的朋友,就是与身边的朋友相唱和;他的文章,几乎除了墓志、寿词,就是给他人文集写的序言。作为一个诗文造诣颇深的文章大家,他的笔墨绝大多数都消耗在社交之中,并没有留下多少“个人化”的文字。在曾国藩的人际关系史上,绝大多数人都终生与曾国藩保持着深厚的个人感情。

胡林翼始终自居曾国藩之下,说“小店本钱,出自老板”。

李鸿章则终生以做过曾国藩的学生为荣,开口闭口我老师如何如何。

老朋友郭嵩焘认为,汉代以来两千年,“德业文章兼备一身”,未有超过曾国藩的。

刘蓉在曾氏死后,写了整整一百首挽诗。

即使是多次受过曾国藩弹劾的李元度,在曾死后也毫不抱怨曾对自己的打击,在挽诗《哭师》中写道

雷霆与雨露,一例是春风。

并且说下辈子还要再做曾的学生:

程门今已矣,立雪再生来。

曾国藩死后,鲍超每“遇岁时伏腊及生辰”,都要设曾国藩的牌位,“焚冥楮若干,以志追感”。这种举动持续了一生。

赵烈文于曾死后,更于每年正月初一日早起,拜天、孔子及祖先毕,必拜曾国藩遗像。

曾国藩一生辛苦自持,自言很有少生趣。然而在友情方面的付出与回报,均远多于常人,考曾国藩于人生五伦,几乎没有任何缺憾。在这一点上,曾胜于左何止一筹。

最后的交集

失和之后,曾国藩从来没有公开说过左氏一句坏话,私下里也不怎么对人谈论他与左氏的是非短长。真的做到了“相忘于江湖”。然而左宗棠却停止不了对曾国藩的评论。曾左失和,是当时天下人都关注的一桩大事。爱护自己名声如同眼珠一样的左宗棠当然十分重视别人因此对他的评价。然而天下左袒曾而右袒左者居多,一是因为曾国藩的为人居心久为人所知,二则曾国藩毕竟算是左宗棠的恩主,在传统社会,忘恩负义是一个怎么讲也难以周全的事。左宗棠对此当然郁闷殊深。因此他一定要为自己辩解。所以许多笔记资料都记载,曾左失和之后,左宗棠每见一人,都要谈他与曾国藩关系的来龙去脉。每谈此事,则必“大骂”曾国藩。

曾国藩的部下薛福成就这样记载说:

文襄每接见部下诸将,必骂文正。然诸将多旧隶文正者,退而愠曰:“大帅自不快于曾公斯已矣,何必对我辈烦聒?且其理不直,其说不圆,聆其前后所述,不过如是。吾耳中已生茧矣。”

注:愠yùn,含怒;怨恨

同治五年郭嵩焘写给曾国藩的一封信也验证了薛福成的这一说法。

面对左宗棠的不断攻击,曾国藩采取了如下对策:

  1. 要求自己的亲朋好友及家人不要回击左宗棠,避免火上浇油,而是鼓励他们尽量与左宗棠搞好关系。他在信中一再赞扬李鸿章:“阁下不与左帅争意气,远近钦企。”并说这是李进德甚猛的表现。他还嘱咐自己的儿子,不要因此与左沈等人交恶

    余于左、沈二公以怨报德,此中诚不能无芥蒂,然老年笃畏天命,力求克去褊心忮心。尔辈少年,尤不宜妄生意气,于二公但不通闻问而已,此外着不得丝毫意见。切记切记。

    注:忮zhì,嫉妒

  2. 是对左宗棠的攻击不闻不问,不予回答。他在复郭氏信中委婉地说:

    左公之朝夕诟詈鄙人,盖亦粗闻一二。然使朝夕以诟詈答之,则素拙于口而钝于辩,终亦处于不胜之势。故以不诟不詈不见不闻不生不灭之法处之,其不胜也终同,而平日则心差闲而口差逸耳。年来精力日颓,畏暑特甚,虽公牍最要之件,浏览不及十一,辄已弃去,即贺禀谀颂之尤美者,略观数语,一笑置之。故有告以詈我之事者,亦但闻其绪,不令竟其说也。

也就是说,我早就听说左公早晚不停地骂我。然而如果让我也这样骂他,我口笨心拙,肯定骂不过他。不如以一不骂二不听三不管的办法处理,结果也一样是“不胜”,却省心省力。老来精力日颓,正事还忙不过来,听那些颂扬我的话还听不过来。所以有告诉我别人骂我的事,我只听个大概,不让他们说完。

同治五年,左宗棠出任陕甘总督,受命镇压西捻军。后又因为西北地区回教起义导致局势动荡不安,左宗棠继续西征。曾左二人也因此有了平生最后一次交集。左宗棠十分看重这次出兵,平定太平天国,他只是曾国藩的配角,这次征西他却成了主角。虽然头发已白,他却豪情万丈,决心倾情出演。然而这次出征面临着一个最大的难题,那就是筹饷。因为西北乃天下贫瘠之区,饷源不能指望当地,势必要“用东南之财赋,赡西北之甲兵”。西征之初,他就对朝廷声明,这次战争,“筹饷”重于指挥战斗。他在信中甚至这样说

仰给各省协款,如婴儿性命寄于乳媪,乳之则生,给朋友的断哺则绝也。

注:媪ǎo,年老的妇女

这样,曾国藩与左宗棠不可避免又要打起交道。因为同治九年,曾国藩回任两江总督,其辖下的江苏乃西征军重要的饷源地。晚清督抚之间的个人关系,对政治运作影响极为重大。事实上,虽然朝廷规定各省要按份额及时供给西征军军费,但只有少数与左宗棠个人关系好的省份尽力供应,而那些与左宗棠个人关系一般的省份都没能做到如数按期,《光绪东华录》概括西征之饷的落实情况说

各省拨解之数,有过半者,有不及一半者。惟湖南止解三分之一,河南拨解不及十分之一,广东、福建、四川欠解亦多。

所以,当左宗棠听说曾国藩回任两江后,第一反应是担心曾国藩不实心实意支持他,破坏他成就大功

我即与曾公不协,今彼总督两江,恐其隐扼我饷源,败我功也。

然而不久他就发现他判断错了。其后,曾国藩分内的那份军饷就源源不断,稳定而可靠地输送而来,不但足额而且及时。史载

文正为西征军筹饷,始终不遗余力,士马实赖以饱腾。

除此之外,在左宗棠剿捻及西征中,曾国藩又将最得意的部下刘松山交给左宗棠使用,刘松山屡立巨功,对左宗棠帮助极大。

又选部下最悍将最健者,遣忠壮公松山一军西征,文襄之肃清陕甘及新疆,毕倚此军之力,是则文襄之功,文正实助成之。

左宗棠身上最大的弱点,就是执著于“争功”。打一个不客气的比方,左宗棠就是庄子故事中的那只猫头鹰,而战功则是那只死鼠。直到晚年,这种心态丝毫没变。然而晚年曾国藩的心事,却早已达到看破功名,跻身圣域的境界。在他晚年,念念不忘的只有“责任”二字,至于浮名,他确实是可以置之笑谈之外的。处理天津教案,他就分明是以自己的名声为代价,换得了国家的平安。曾氏死后,他的老朋友欧阳兆熊写了一副挽联,其下联曰:

省身留日记,读到获麟绝笔,将汗马勋名、问牛相业,都看做秕糠尘垢,开拓万古心胸。

注:秕bǐ,子实不饱满:~子。~糠(秕子和糠,喻没有价值的东西)

“获麟绝笔”则是指孔子修《春秋》时,在鲁哀公十四年(公元前481)得知叔孙氏的仆人捕获一头麒麟,他伤心瑞兽被庸人所获,此乃天下将乱之兆头。于是记下“西狩获麟”后,便终止了《春秋》的写作,两年后孔子辞世。

“问牛相业”典出汉宣帝时丞相丙吉问牛的故事。丙吉一次外出,碰到路上有人斗殴,死伤横道,他不闻不问,再往前走遇到有牛喘气而吐舌,他立刻停下来让人去问这牛已走了多久。身边的人很不理解,他解释说,百姓斗殴的事自有长安令、京兆尹来管。而时节才是暮春,牛却吐舌,如此可能这一年气候不正常,会直接影响收成,这是关系天下的大事。

惠子相梁,庄子往见之。或谓惠子曰:“庄子来,欲代子相。”于是惠子恐,搜于国中三日三夜。庄子往见之,曰:“南方有鸟,其名为鹓鶵(yuānchú),子知之乎?夫鹓鶵发于南海,而飞于北海;非梧桐不止,非练实不食,非醴泉不饮。于是鸱(chī)得腐鼠,鹓鶵过之,仰而视之曰:‘吓!’今子欲以子之梁国而吓我邪?”《惠子相梁》

注:练实,竹实,即竹子所结的子,因为色白如洁白的绢,故称。
注:鸱(chī),猫头鹰
注:吓(hè),模仿鹞鹰发怒的声音。下文的“吓”用作动词

惠施在梁国做国相,庄子去看望他。有人告诉惠施说:“庄子(到梁国)来,是想取代你做宰相。”于是惠施非常害怕,在国都搜捕三天三夜。庄子前去见他,说:“南方有一种鸟,它的名字叫鹓鶵,你知道它吗?那鹓鶵从南海起飞飞到北海去,不是梧桐树不栖息,不是竹子的果实不吃,不是甜美的泉水不喝。在此时猫头鹰拾到(一只)腐臭的老鼠,鹓鶵从它面前飞过,(猫头鹰)仰头看着,发出‘喝!’的怒斥声。现在你也想用你的梁国来吓我吗?”

虽然一直不断挨着左宗棠的骂,对左氏之才,曾国藩却一直是赞不绝口。在听说左宗棠将要西征之时,曾国藩与常州吕庭芷之间有过这样一段对话:

曾国藩问吕庭芷:“你对左宗棠怎么看?请平心论之。”

吕庭芷虽然明知曾、左二人恩怨,但更深知曾国藩的为人,因此坦率回答:

处事之精详,律身之艰苦,体国之公忠,窃谓左公之所为,今日朝廷无两矣。

陈其无在《庸闲斋笔记》记载,曾国藩闻听此言,击案起身,双目放光,大声说道

诚然!此时西陲之任,倘左君一旦舍去,无论我不能为之继,即起胡文忠于九泉恐亦不能为之继之。君谓之朝端无两,我以为天下第一耳!

曾左晚年这最后一次交集,确实头一次感动了左宗棠。左宗棠第一次对曾国藩产生了发自内心的敬重和钦佩。在此之前,左宗棠一直认为曾国藩是一个以术制人的伪君子,至此才彻底推翻了自己的判断。这是曾左关系上的一个重要转折点。思来想去,曾国藩做得如此漂亮,我左宗棠也要表现得更为潇洒。于是,在总结自己的剿捻之功时,他把大半功劳推让给了曾国藩的老部下刘松山,并由此对曾国藩大加推许。在奏折中他这样说道:

臣尝私论曾国藩素称知人,晚得刘松山尤征卓识。刘松山由皖、豫转战各省,曾国藩尝足其军食以相待,解饷一百数十万两之多,俾其一心办贼,无忧缺乏,用能保垂危之秦,救不支之晋,速卫畿甸,以步卒当马贼,为天下先。即此次巨股荡平,平心而言,何尝非刘松山之力?臣以此服曾国藩知人之明,谋国之忠,实非臣所能及。……合无仰恳天恩,将曾国藩之能任刘松山,其心重于以人事君,其效归于大裨时局,详明宣示,以为疆臣有用人之责者劝。

公开是这样讲,私下里左宗棠在写给儿子们的信中解释自己上这样一道奏折的动机时这样说:

吾近来于涤公多所不满,独于赏识寿卿(刘松山字寿卿)一事,最征卓识,可谓有知人之明、谋国之忠。此次捻匪荡平,寿卿实为功首,则又不能不归功于涤公之能以人事君也。私交虽有微嫌,于公谊实深敬服,故特奏请奖曾,以励疆吏。大丈夫光明磊落,春秋之义:“笔则笔,削则削”;乌能以私嫌而害公谊,一概抹杀,类于蔽贤妒能之鄙夫哉!人之以我与曾有龃龉者,观此当知我之黑白分明,固非专闹意气者矣。

左宗棠本以为这样一道奏折会显露他“大丈夫光明磊落”的胸怀。不想,此奏一出,读者惊疑。官场中人都一时转不弯子,闹不明白为什么左宗棠突然出现这样大的转变。中国人习惯于阴谋思维,于是一致认为左氏动机不纯,他故借扬曾以扬刘松山,扬刘松山也就是扬自己,扬自己则是为了贬低李鸿章。

曾国藩也是这样推测。十一月初七日,在致郭嵩焘信中说

左帅表刘寿卿(刘松山字寿卿),谬及鄙人,论者谓其伸秦师(指左所统帅的军队)而抑淮勇,究不知其意云何也。

同治十一年(1872年)3月12日,曾国藩因脑溢血逝世于南京两江总督府,年不过六十二岁。消息传出,天下震动。一时之间,同僚朋友、门生故吏云集南京,曾国藩的葬礼成了一场诗文大会。盖与葬者既多文学之士,撰文者又发自真情实感,所以留下许多脍炙人口的名作。

李鸿章的挽联后来更成了千古名作:

师事近三十年,薪尽火传,筑室忝为门生长;
威名震九万里,内安外攘,旷代难逢天下才。

时人这样评价这副对联:“豪迈精当,亦自占身份,非鸿章不能亦不敢道此。”

在林林总总的祭文挽联中,最为引人注目的一对,是当时身在西北前线的左宗棠派人千里迢迢送来的,其文曰:

谋国之忠,知人之明,自愧不如元辅。
同心若金,攻错若石,相期无负平生。

他和曾国藩较量了一生短长,总也不服气。但是到了这一刻,静心反思,他服了。他自甘同时代第二人的身份,所以以“自愧不如”四字作为二人关系的最后总结。这对心高气傲的左宗棠来说,实在是太难得了。如果曾左关系能以此为结局,无疑是一桩动人佳话。然而事实并非如此简单。

在曾国藩身后,左宗棠对曾国藩的后人极其照顾。曾国藩死后五年,其子曾纪鸿因家人病重,缺钱医治。左宗棠送给他三百两银子,还在家书中这样回忆曾左交谊

吾与文正交谊,非同泛常。所争者国家公事,而彼此性情相与,固无丝毫芥蒂,岂以死生而异乎?以中兴元老之子,而不免饥困,可以见文正之清节足为后世法矣。

曾纪鸿因病去世前后,左宗棠在医药费丧葬费上又多次给予帮助。在给李勉林的信中谈及此事时,左宗棠说

吾辈待其(曾国藩)后昆,不敢以此稍形轩轾。上年弟在京寓,目睹栗诚苦窘情状,不觉慨然为谋药饵之资,殡殓衣棺及还丧乡里之费,亦未尝有所歧视也。

注:轩轾xuān zhì,意思是车前高后低为“轩”,车前低后高为“轾”,喻指高低轻重。

但与此同时,在曾左关系的是非曲直上面,左宗棠并没有停止发言。人越老年,越顾虑自己的身后名声,所以越急于要澄清此事。左宗棠晚年,每与人交往,几乎都要谈到曾左关系问题,每次谈及,他仍然喋喋不休于证明自己在一些具体问题上的正确,曾国藩的错误。

曾国藩的弟子薛福成就绘声绘色地描写左宗棠晚年在这个问题上多么昏聩:

迨壬申二月,文正薨于位,文襄寄挽联云:“谋国之忠,知人之明,自愧不如元辅。同心若金,攻错若石,相期无负平生。”又致书唁(劼)刚袭侯,措辞颇为恳挚。余谓文襄自此意气可平矣。

庚辰、辛巳间,文襄奉旨召入枢廷。文武官僚于中涂进谒者,皆云左相言语甚多,大旨不外自述西陲设施之绩,及砥讥曾文正公而已,谈次不甚及他事。

顷之,文襄总督两江。官绅有赴金陵者,皆云文襄见宾客无他语,不过铺陈西陲功绩,及历诋曾文正公而已。苏绅潘季玉观察,以地方公事特赴金陵,欲有所陈,归而告人曰:

“吾初谒左相,甫寒喧数语,引及西陲之事,左相即自述西陲功绩,剌剌不能休,令人无可插话。旋骂曾文正公,语尚未畅,差弁侍者见日已旰,即举茶杯置左相手中,并唱送客二字,吾乃不得不出。翼日,左相具柬招饮,方谓可乘间言地方公事矣。乃甫入座,即骂曾文正公,迄终席,言尚如泉涌也。既撤席,吾又不得不出。越数日,禀辞,左相始则骂曾文正公,继则述西陲之事,终乃兼骂合肥李相及沈文肃公。然其意若谓本不如已远甚,初无待其力攻也。侍者复唱送客,吾于起立时,方欲陈地方事数语,左相复引及西陲之事,吾乃疾趋而出云。”

注:剌là,象声词,状风声
注:旰gàn,晚,天色晚
注:柬jiǎn,信件、名片、帖子等的统称

也就是说,左宗棠由西北入京,一路上遇到所有人,话题不外两个,一个是他在西北的设施多么高明,另一个就是讥评已经去世的曾国藩。做了两江总督,见到客人,所谈也不过如此,喋喋不休,让客人插不上话。

对曾左一生的恩恩怨怨,人们评价议论得很多。其中老朋友郭嵩焘的评价虽然掺杂了很多情绪因素,不过仍然因有见地而值得一读。对于一生至交曾国藩,郭嵩焘由亲近而敬佩,最后甚至达到崇拜的地步。有一次郭嵩焘在曾氏大营中待了几天,在日记中记下他人如何评曾:

相国好谀而不废逆耳之言,好霸气而一准诸情理之正,是从豪杰入者。其于用人处事,大含元气,细入无间,外面似疏而思虑却极缜密,说话似广大不落边际而处事却极精细,可为苦心孤诣。尝言李申甫(门客)能知我深处,不能知我浅处。又尝言古人办事不可及处,只是运用得极轻,疱丁解牛,匠石运风,有此手段,所谓不动声色措天下于太山之安者,轻而已矣。=

在另一处日记中,他这样评价曾左二人的不同:

尽古今人才,只有狂狷两途。吾辈守之,仕不必求进,禄不必求丰。苟得行其志焉,斯可矣。万钟之禄,不以为泰;不得行其志而退,终身泊然。其有不足,舌耕笔蓐,取给一身而无所歉。左文襄公,狂者类也。知有进取而已,于资财无所校量,日费万金不惜也,而亦不可与居贫。闲居静处,则心不怡而气不舒。

注:蓐rù,草席,草垫子(多指产妇的床铺)

狂狷:1.形容人具有不拘一格,积极进取而又洁身自好的品性,也指具有如此品性的人;2.好高骛远的人和拘谨自守的人,亦指具有如此品性的人。

朱熹:“狂者,志极高而行不掩。狷者,知未及而守有余。

《论语·子路》:“子曰:‘不得中行而与之,必也狂狷乎!狂者进取,狷者有所不为也。’”

意思是说,左宗棠心性修养功夫远远不够。只知进取,不能静处。而曾国藩进可以做大事,退可以做圣人。郭嵩焘还认为:

左帅以盛气行事而不求其安,以立功名有余,以语圣贤之道,殆未也。

王船山说,圣贤一定是豪杰,而豪杰不一定是圣贤。在郭嵩焘看来,曾国藩是圣贤,而左宗棠仅止于豪杰,这就是二人的根本区别。

一、简介

  1. Sublime Text是一款跨平台代码编辑器(Code Editor)。
  2. 编辑器的选择(Editor Choices):推荐Vim和Sublime Text
    • 跨平台:Vim和Sublime Text均为跨平台编辑器(在Linux、OS X和Windows下均可使用)。为了减少重复学习,使用一个跨平台的编辑器是很有必要的。
    • 可扩展:Vim和Sublime Text都是可扩展的(Extensible),并包含大量实用插件,我们可以通过安装自己领域的插件来成倍提高工作效率。
    • 互补:Vim和Sublime Text分别是命令行环境(CLI)和图形界面环境(GUI)下的最佳选择,同时使用两者会大大提高工作效率。
      • GUI(Graphical User Interface,GUI,即图形用户界面/图形用户接口)
  3. 编辑器(Editor) 和集成开发环境(Integrated Development Environment,IDE)的区别
    • 编辑器就是纯编辑文本的编辑器
    • 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

二、命令面板

shift+command+p

三、快捷键

command kb 边框sidebar super=command command+n 打开新的界面 control+tab 两个界面间跳转 command j 合并两行 command+] 向右缩进一个级别 command+l 选择当前行 comman+回车 某一行下开辟一行 shift+command+回车 某一行上开辟一行 opt+鼠标选择 块选择,同时进入多点编辑模式(esc退出) 操作粒度(同时按shift则选择) alt+左键,每次移动一个单词 command+左键,一下到头/尾 command+shift+下箭头(全选上面或下面) command+a全选

命令面板直接输入CSS,即可编辑CSS 调整缩进 rein lines keybing users ctrl+~反引号,调出控制台 command+s保存

+z撤销

包的使用 调出命令行,然后复制代码到命令行中,运行

说明
1. 部分参考O'Reilly Media出版的HTML and CSS和HTML with CSS & XHTML
2. 部分参考作者兼续在简书上的笔记https://www.jianshu.com/p/727dbfcef685

一、基本概念

常识与实践

  1. css的每一个语句包括一个场所,以及这个场所的一个属性,及应用到这个属性的一个样式,一个典型的css规则如下:

    1
    2
    3
    4
    p { // 需要增加样式的元素: p,这称为选择器(selector),匹配页面中的所有p元素
    background-color: red; //背景色为红色
    border: 1px solid gray; //边框: 1像素,实线,灰色
    }

  2. css 的注释: /* */

    1
    /* this rule will have no effect because it's in a comment p { color: blue; } 缺一个星号*/

  3. css验证:http://jigsaw.w3.org/css-validator/

    • 还可以把验证图标放到你的web页面中
  4. 查看浏览器是否支持新元素,以及支持情况是否有更新:https://caniuse.com/#search=new%20elements

二、链接方式

内部链接

要为html直接增加css样式,需要在<head>元素中增加开始和结束style标记,css规则放在里面

1
2
3
4
5
<style>
p {
color: gray;
}
</style>

CSS文件外置

另一种方式将css文件外置,如style.css,作为样式表(stylesheets),然后从html中创建一个到这个文件的外部链接,用<link>元素,用外部样式表的好处是要修改整个网站的样式,只要进入这个样式表,对css进行几处修改即可。如:

1
2
3
<link type="text/css" rel="stylesheet" href="lounge.css" >
#放到<head>元素中,在html5中不再需要type这个属性(可选),rel(relation)指定html与所链接文件间的关系,这里指我们要链接到一个样式表
#link是一个void元素

三、多样式表

使用多个样式表,顺序很重要,一个样式表会覆盖在它上面链接的样式表中的样式,有时会有一个样式表作为页面的基础样式。修改样式,要在下面提供自己的样式表,指定要修改的样式,如下所示:

1
2
3
<link rel="stylesheet" href="corperate.css">//总公司样式
<link rel="stylesheet" href="beverage-division.css">//部门对总公司的样式做了一些补充,甚至可以覆盖公司的样式
<link rel="stylesheet" href="lounge-seattle.css">//西雅图休闲室对样式表做了自己的调整

四、简写

css属性太多,能不能不费吹灰之力就指定这些属性呢?可以把同一属性的值结合起来写成一句,即简写。

简写格式

  1. padding
    • padding: 0px 40px 30px 20px;

    • 顺序是上右下左,顺时针

    • 如果都相同可以用padding: 20px;

      1
      2
      3
      4
      padding-top: 0px;
      padding-right: 40px;
      padding-bottom:30px;
      padding-left: 20px;

  2. margin
    • 上面的padding格式同样对margin也适用
    • 还有另一种方法,如果上下一样,左右一致,可以这样写:margin: 0px 20px;,前面指定上下,后面指定左右。
  3. border
    • 边框属性简写border: thin solid #007e73;
    • 可以用你喜欢的任何顺序
  4. background
    • 背景简写background: white url(images/cocktail.gif) repeat-x;
    • 同样顺序随便
  5. 字体
    • 字体简写的格式稍微复杂一些:
    • font : font-style font-variant font-weight font-size/line-height font-family
    • font的属性中font-size必须有
    • font-size前的属性是可选的,组合任意,不过必须出现在font-size之前
    • line-height是可选的,只要在font-size后加/然后指定行高即可
    • font-variant指小型大写字母
    • font-family名之间要使用逗号分隔
    • 如: font : small/1.6em Verdana, Helvetica, Arial,sans-serif;

简写的优劣

  1. 不一定要用简写形式,有些人觉得长形式更可读。
  2. 简写的好处: 缩写css文件大小,输入更快。
  3. 简写的不足: 如果存在问题,或者顺序有误,比较难调试
  4. 简写记起来复杂,可以用参考手册

五、选择(selector选择器/选择符)

子孙选择器

父元素和子孙元素名之间有一个空格,子孙选择器会选择所有子孙,包括这个元素中嵌套的所有,不管嵌套多深,例如

1
2
3
#elixirs h2 {//选择elixirs子孙的所有h2
color: black;
}

选择直接的子元素

用>

1
2
3
#elixirs>h2 {//选择elixirs的直接孩子h2
color: black;
}

复杂选择

更复杂的选择,方法还是一样

1
2
3
#elixirs blockquote h2 {//选择elixirs中的blockquote中的h2元素
color: blue;
}

属性选择器

  1. img[width] { border: black thin solid; }

    选择所有包含一个width属性的图像

  2. img[height="300"] {border: red thin solid; }

  3. image[alt~="flowers"] { border: #ccc thin solid; }

    选择所有alt属性包含单词“flowers“的所有图像

  4. 按兄弟选择h1+p { font-style: italic; }

    所有紧跟在一个<h1>元素后面的段落

六、规则添加

  1. 要为多个元素编写一个规则,只需要在选择器之间加上逗号,如 "h1,h2"。
1
2
3
4
h1,h2 {// 多个选择器
font-family: sans-serif;
color: gray;
}
  1. 元素可以指定多次规则,例如我们想给h1添加下边框,但是不想给h2页也加上,也不想分解上面的规则,可以给h1再增加一个属性:

    1
    2
    3
    4
    5
    6
    7
    h1,h2 {
    font-family: sans-serif;
    color: gray;
    }
    h1{
    border-bottom: 1px solid black;
    }

  2. 把元素的所有共同样式归组在一起(如果改变,只需要在一个规则中修改),然后把一个元素特定的样式写在另一个规则中。

七、类

当我们用选择器选择元素使用一个规则时,会对所有该元素应用这个样式,所以如何单独地选择这些元素呢?

这里就需要类class,class可以定义一类元素,对属于该类的所有元素应用样式。要将一个元素加入一个类,只需要增加属性"class",并提供类名,如"greentea":

1
2
3
<p class="greentea">
...
</p>

类元素选择器

先选择这个类中的元素,再用"."指定一个类,最后是类名,如:

1
2
3
p.greentea {
color: green;
}

添加类元素

如果想对所有<blockquote>也做同样的处理,可以:

1
2
3
blockquote.greentea,p.greentea {
color: green;
}

类选择器

如果想把<h1>,<h2>,<h3>,<p><blockquote>都增加到greentea呢?要对类中的所有元素都用同一样式可以用:

1
2
3
4
.greentea{
color: green;
}
/*省略所有元素名,只有一个点,则会应用到所有成员*/

多类元素

元素可以有多个类,例如:

1
2
3
<p class="greentea raspberry blueberry"
#各个类名用空格分隔
#类中顺序不重要

特定元素选择器

如果多个选择器都选择了一个元素呢?例如上面的3个类都与p元素匹配,并且都定义了color属性,那么那个会胜出?

  1. 如果某个规则更特定,则选择更特定的元素

  2. 如果特定程度相同,那么会选择css文件中最后列出的规则,例如下面的例子中会选择p.blueberry的规则:

    1
    2
    3
    4
    5
    p { color : black;} // 对于所有段落
    .greentea { color: green;} //对于所有greentea类,比上面特定
    p.greentea { color : green;} //只选择greentea类中的段落,比上面特定
    p.raspberry { color : blue;} //同上,与greentea特定程度相同
    p.blueberry { color : purple;} //同上,与greentea特定程度相同

八、id

id的作用

id属性用来唯一地命名元素,通常你想对多个元素重用某些样式,才能真正发挥类的作用。但是如果只有一个元素需要样式,或者页面上只有一个元素,那就应该使用id,每个元素只能有一个id,页面中只能有一个元素拥有特定id,一个元素有一个id,同时可以属于一个或多个类,id中不允许出现空格或其他特殊字符,如<p id="footer">...</p>

选择元素

用id选择一个元素,需要在id前面使用一个#字符(类是[.]),id选择器只与页面中的一个元素匹配

1
2
3
#footer{
color: red;
}//选择id为footer的任意元素
1
2
3
p#footer{
color: red;
}//选择id为footer的<p>元素

实践建议

  1. 在复杂页面中,可能有些页面把id指定给一个段落,有些页面分配给了一个列表,那么需要为该id定义多个规则,根据页面上不同类型的元素应用不同的规则,如p#someidblockquote#someid
  2. 类名要以一个字母开头,不过id名可以以一个数字或字母开头,id和类名都可以包含字母、数字及_字符,但它们都不能有空格。id:p#footer,类:p.specials

九、继承

样式继承

  1. 为p选择器增加font-family属性时,也会影响到<p>元素中内部元素的字体。

  2. 元素能够从他们的父元素继承样式。

  3. 不是所有的样式都能继承,只有一部分,如font-family。

  4. 并不是所有元素都会继承,如img没有文本,所以不会受到字体影响。

  5. 继承的样式可以覆盖,例如给<em>提供一个特定的规则来覆盖body中指定font-family,浏览器会使用更特定的规则:

    1
    2
    3
    4
    5
    6
    7
    body {
    font-family : sans-serif;
    }

    em {
    font-family: serif;
    }

那哪些元素能够继承

  1. 如果样式会影响你的文本外观,那么所有这些样式都能继承,如color,font-family,font-size,font-weight,font-style等和字体相关的属性
  2. 其他属性不能继承,如边框,因为如果body元素有边框,不表示你希望body内的所有元素都有边框
  3. 根据常识确定,或者试试看

十、层叠Cascade

  1. 浏览器会用多个样式表组织样式,首先是你的(网页作者)ccs所有样式表,其次是用户创建的样式,最后浏览器本身会维护一组默认样式。即层叠样式表Cascading Style Sheets

  2. 给定一组样式表中的一组样式,浏览器会以层叠的方式确定具体使用哪个样式

  3. 读者可以在他的css属性上加上!important,那他就能覆盖你的样式。如

    1
    h1 {font-size: 200% !important;} 

  4. 浏览器需要选择最特定的规则进行显示,特定性由3个数开始000

    • 第一位: 这个选择器包含id吗?每个id加1分
    • 第二位: 这个选择器包含类或伪类吗?每个类和伪类加一分
    • 第三位: 这个选择器包含元素名吗?一个元素名加一分
    • 把它们读作真正的数,100>010>001,例如h1.greentea的特定性值为011,ol li p的特定性为003。
  5. 浏览器首先收集样式表找到所有的声明,然后对所有匹配的规则按作者,读者和浏览器排序,再按特定性对组内的所有声明分别排序,

  6. 最后对于冲突的规则,按照他们在各个样式表中出现的顺序排序,如果两个规则得分相同,最后出现的规则胜出。

具体度 具体度1 具体度2 具体度3 具体度计算

十一、媒体查询

link媒体查询

  1. 你可能想针对将要显示页面的设备调整页面的样式,可以用media属性,在link元素中增加这个属性。
  2. media属性允许你制定应用这个样式表的设备类型。
  3. 其他属性包括
    • min-device-width(设备的实际屏幕)/max-device-width
    • orientation(显示方向,横向landscape,纵向portrait)
    • max and min height
    • color
    • aspect ratio宽高比
    • min-width/max-width(浏览器窗口本身的最大和最小宽度)
1
2
3
4
5
<link rel="stylesheet" href="lounge-mobile.css" mdeia="screen and (max-device-width: 480px)">
#匹配有屏幕的设备,且屏幕宽度不超过480像素。

<link rel="stylesheet" href="lounge-print.css" media="print">
#匹配打印机设备
不同的媒体

css媒体查询

可以直接在css中增加媒体查询,使用@media规则,把对所有媒体类型都通用的规则放在@media规则下面,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@media screen and (min-device-width: 481px){//当设备屏幕宽度大于480px时使用
#guarantee {
margin-right: 250px;
}
}
@media screen and (max-device-width: 480px){//当设备屏幕小于等于480px时使用
#guarantee {
margin-right: 30px;
}
}
@media print { // 如果要打印页面,使用该规则
body {
font-family: Times, "Times New Roman", serif;
}
}

实践建议

  1. 如果css文件相当庞大,建议使用link元素
  2. 除了给出设备的媒体属性,如果你更关心浏览器大小,可以用max-width和min-width
  3. CSS3 Media Queries specification中更多细节http://www. w3.org/TR/css3-mediaqueries/)

十二、属性

盒模型the box model

盒模型是css看待元素的一种方式,css将每个元素看作由一个盒子表示,每个盒子由一个内容区以及可选的内边距,边框和外边距组成。由内而外分别是:

  • 内容区: content ,包含内容,如文本或图像
  • 透明内边距: padding ,可选,包围内容区
  • 边框: border ,可选,内边距周围
  • 透明外边距: margin,可选,包围所有部分
盒模型

内容区

内容区包含元素的内容,它的大小通常正好包含全部内容

padding内边距

  1. 使用内边距可以在内容与盒子边框之间创建一些看得到的空间

  2. CSS可以控制内边距的宽度,甚至任意一边的宽度,上下左右

  3. 透明,无法指定样式

  4. 元素的背景颜色或背景图像会延伸到内边距下面,但不会延伸到外边距

  5. 设置padding的顺序很重要,如果先设置padding-left再设置padding,刚才设置的padding-left就会被覆盖

    1
    2
    3
    padding: 25px;
    padding-left: 80px;
    # 我们首先有一个属性来控制所有4个边,另外再对每个边单独设置

border 边框

  1. 围绕内容的一条线

  2. 边框可以有不同的宽度,颜色和样式

  3. 内边距将内容区与边框隔开

  4. 可以指定任意一边的边框样式 border-top-color,border-top-style,border-top-width等

  5. 锯齿边框(破折线+白色):

    1
    2
    border-style: dashed;
    border-color: white;

border-style 边框样式

  • solid 实线
  • ridge 脊线
  • dashed 破折
  • dotted 虚线
  • double 双线
  • groove 槽线
  • outset 外凸
  • inset 内凸
边框样式

border-width边框宽度

  • 关键字 thin medium thick
  • 像素 5px;

border-color 边框颜色

和color 类似,使用颜色名,rgb或16进制码

border-radius 边框圆角

  1. 可以为4个角分别指定,如border-top-left-radius
  2. 可以用px或em(相对于元素字体大小)

border-radius: 15px;

边框圆角

margin 外边距

  1. 用外边距在同一个页面上的不同元素之间增加空间
  2. 和内边距一样,CSS可以控制外边距的宽度,甚至任意一边的宽度,上下左右
  3. 透明,无法指定样式
  4. 和padding一样,设置margin的顺序很重要
1
2
margin: 30px;
margin-right: 250px;

十三、color 颜色

文本元素的字体颜色

  1. color 元素实际控制着一个元素的前景色,他会控制文本和边框颜色,不过你也可以用border-color属性为边框指定自己的颜色
  2. 改变p的字体颜色不会影响里面的链接颜色
  3. Web颜色按构成颜色的红、绿和蓝三个分量所占数量来指定,每种颜色会分别指定一个从0到100%的数值,然后把它们混合起来得到最终的颜色。如100%红,100%绿,100%蓝混合在一起是白色。所有指定Web颜色的方法最终都是告诉浏览器:一个颜色的红绿蓝分量分别是多少。
  4. 对于文本和背景,要使用对比度最大的颜色,能提高可读性

用16进制码指定颜色

  1. #fc1257,这种方式最常用

  2. 以#开头,分别用2位数字指定红绿蓝

    1
    2
    3
    body {
    background-color: #cc6600;
    }

    用16进制码指定颜色
  3. 如果每一组分量中的两位数字都相同,可以使用简写,例如#ccbb00可以简写成#cb0,不过如果是#ccbb10则不能简写

按名指定颜色

  1. CSS只定义了大约150个颜色名,颜色名不区分大小写

  2. 16种基本颜色,所有浏览器都有,以及150种扩展色,它们是:aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow

    颜色关键词
  3. 例如:

    1
    2
    3
    body {
    background-color: silver;
    }

用红绿蓝值指定颜色

  1. 以rgb开头,在小括号里指定红绿蓝的百分比,例如:

    1
    2
    3
    body{
    background-color: rgb(80%, 40% , 0%)//橙色
    }

  2. 还可以指定0-255之间的一个数值,例如:

    1
    2
    3
    body{
    background-color: rgb(204, 102, 0)//和上面颜色一致,255*80% = 204
    }

十四、font-family 字体

大多数计算机上通常只安装了部分字体,所以选择字体时要当心,通常指定的font-family包含一个候选字体列表,他们都来自同一个字体系列,候选字体用逗号分隔,大小写字母必须一致,最后总是放一个通用的字体系列名,如果一个字体名中包含多个单词,比如Courier New,如何指定?用引号,"Courier New",如:

1
2
3
body{
font-family: Verdana, Geneva, Arial, sans-serif;
}

字体系列

每个font-family包含一组有共同特征的字体。共有5个字体系列:

  1. Sans-serif : 无衬线体 , 在计算机上更容易识别, 很多人认为在计算机显示中最适合体文本,包括: [Verdana : 大多数Win上都有],[Geneva : 大多数Mac上都有],[Arial : 在PC和Mac上都很常见]

  2. Serif : 有衬线体 , 新闻报纸的文字排版

  3. Monospace : 固定宽度的字符,主要用于显示软件代码示例

  4. Cursive : 看似手写的字体 , 有时会看到在标题中偶尔使用

  5. Fantasy : 包含有某种风格的装饰性字体

    font-family1 font-family2

@font-face 指定字体

  1. @font-face 允许你定义一种字体的名字和位置,然后可以在你的页面中使用。不是一个选择器规则,而是一个内置的CSS规则。可以获取一个Web字体,并为它分配一个font-family名。

  2. Web字体标准: 字体文件使用".woff"文件扩展名,表示web开放字体格式(web open font format)

  3. 常用字体格式:

    • [TrueType : .ttf]
    • [OpenType : .otf 建立在tt之上]
    • [Embedded OpenType字体 : .eot otf的压缩形式 微软专用,仅ie支持]
    • [SVG字体 : .svg 通用图像格式]
    • [Web开放字体格式 : .woff 推荐使用,浏览器支持最广泛]
  4. 缺点: 获取字体需要花费时间,第一次获取字体时页面性能可能会受影响。管理多个字体文件痛苦,最后移动设备和小型设备不支持。 Web字体 Web字体2 Web字体添加步骤

  5. 有字体托管服务可以为你托管web字体。

    • Google Web Font Service (http://www.google.com/webfonts)
    • FontSquirrel (http://www. fontsquirrel.com/) [a great place to find open source, free fonts that you can upload to your server]
  6. 利用font-family可以创建一个首选字体列表。浏览器会先在用户计算机上查找Verdana字体,如果有,这个元素就使用这个字体,如果不可用,找Geneva,以此类推,如果前面指定的字体都没有找到,就用浏览器默认的Sans-serif字体,就是我们最后指定的通用字体。

    font选择 font选择2

  7. 把该规则增加到文件的最上面,放在body规则之上

    1
    2
    3
    4
    5
    6
    @font-face {
    font-family: "Emblema One"; //创建一个名字
    src: url("http://wickedlysmart.com/hfhtmlcss/chapter8/journal/EmblemaOne-Regular.woff"),
    url("http://wickedlysmart.com/hfhtmlcss/chapter8/journal/EmblemaOne-Regular.tff");
    //src属性告诉浏览器到哪里找到这个字体,浏览器会尝试每一个src文件,直到找到它支持的一个文件。
    }

@import允许导入其他CSS文件

font-weight 控制文本的粗细

  1. lighter : 相对于继承的值使文本稍细一点。
  2. normal : 正常
  3. bold : 粗体
  4. bolder : 相对于继承的值使文本稍粗一点。
  5. 还可以设置为100到900之间的一个数(100的倍数),不过并没有广泛支持,通常不使用

font-size 让文本更大或更小

  1. 像素px指定大小 : font-size: 14px;//告诉浏览器字母高度是多少像素。14px中间不能有空格

  2. 百分数%指定大小 :font-size: 150%;//指定相对于父元素的字体大小

  3. em指定字体大小 : font-size: 1.2em; //指定相对于父元素的字体的比例因子,称为相对大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    body {
    font-size: 14px;
    }
    h1 {
    font-size: 150%; //父元素body,这里是14*150% = 21px
    }
    h2 {
    font-size: 1.2em; //父元素body,这里是14*1.2 = 17px
    }

  4. 关键字指定字体大小 : font-size: small;,

    • small通常定义为12px,下面每一级大小约比前一个大小大20%
    • 包括:xx-small,x-small,small,medium,large,x-large,xx-large 关键字指定字体大小

指定字体大小的秘诀

  1. 选择一个关键字(推荐small或medium),作为body的字体大小,为页面默认字体大小

  2. 使用em或百分数,相对于body字体大小指定其他元素的字体大小(em或百分数)这样改变Web页面中字体大小就很容易,只要改变body字体大小就可以了,例如:

    1
    2
    3
    body { font-size : small; }
    h1 { font-size : 150%; }
    h2 { font-size : 120%; }
    > 注意老版IE不支持用像素指定的文本缩放

浏览器默认字体大小

  1. 大多数情况下,浏览器默认的body字体大小都是16像素
  2. 如果在body中指定字体大小为90%,这将是默认字体的90%
    • h1 : 200%, 相对于默认字体,下同
    • h2 : 150%
    • h3 : 120%
    • h4 : 100%
    • h5 : 90%
    • h6 : 60%

text-decoration 文本装饰

  1. underline : 下划线 ,下划线文本通常被用户误认为是链接文本,所以要谨慎使用

  2. none : 无效果

  3. overline : 上划线

  4. line-through : 删除线。html有个<del>元素可以将内容标记为要删除的内容;<ins>元素标记要插入的内容,通常为下划线。

  5. 一次可以设置多个装饰

  6. 如果文本继承了你不想要的文本装饰,可以使用值"none"来去除装饰

  7. 如果同一段文本有两个不同的规则,不会累加,要把这两个值合并到一个规则中,才能同时得到这两个文本装饰.

    1
    2
    3
    em {
    text-decoration: line-through;
    }
    ### font-style 字体风格

  8. italic : 斜体 ,斜体文本向右倾斜,另外衬线还有弯曲

  9. oblique : 倾斜 ,并不是使用一组专门设计的倾斜字符,而是由浏览器将正常文字倾斜

  10. 不论你指定什么风格,结果并不确定,有时你会得到斜体,有时则是倾斜文本。无从控制。

list-style 改变列表中列表项的外观

列表的主要属性是list-style-type,利用这个属性可以控制列表中使用的项目符号

  • disc:默认
  • circle:圆圈标记
  • square:方块标记
  • none:删除列表标记

定制列表标记

  1. 如果想定制列表的标记,可以用list-style-image为列表设置标记图像,如:

    1
    2
    3
    4
    5
    li{
    list-style-image: url(images/backpack.gif);
    padding-top: 5px;
    margin-left: 20px;
    }

  2. 对于有序列表也一样,可以用list-style-type控制一个有序列表标记:

    • decimal,十进制
    • upper-alpha,大写字母
    • lower-alpha,小写字母
    • upper-roman,大写罗马数字
    • lower-roman,小写罗马数字
  3. 列表项的项目符号的位置如何控制?用list-style-position,有两个取值

    • inside(标记在列表项里)

    • outside(列表项外)。

    • 区别如下:

十五、其他属性

left 指定一个元素的左边所在位置

top 控制一个元素顶部的位置

background-image 在元素后面放置一个图像,如

url,既可以是一个相对路径,也可以是一个完整的URL

1
2
background-image: url(images/background.gif);
//用url括起来,注意没有引号

background-repeat 背景图像是否重复

  1. 默认在水平和垂直方向上重复
  2. 控制平铺行为,no-repeat,repeat-x,repeat-y,inherit(按照父元素来处理);
1
background-repeat: no-repeat;

background-position 背景图像的位置

  1. 可以按像素指定,或百分数,还可以用关键字,如top,left,right,bottom和center
1
background-position: top left;

background-color 控制元素的背景颜色

text-align 对齐

  1. text-align会对块元素中的所有内联内容对齐,而不仅仅是文本
  2. text-align只能在块元素上设置,对内联元素无效
    • left 左对齐
    • center 居中
    • right 右对齐

letter-spacing 在字母之间设置间距

line-height 设置文本元素中的行间距

1
2
3
4
5
body {
font-size: small;
font-family: Verdana, Helvetica, Arial, sans-serif;
line-height: 1.6em; //调整为字体大小的1.6倍
}
  1. line-height元素有点特殊,可以对它直接使用一个数,而不是相对度量,代表各元素行高是其自己字体大小的多少倍

1
2
3
#elixirs {
line-height: 1;//代表elixirs中的所有元素的行间距为其自己字体大小的1倍
}

  1. 设置line-heightnormal,允许浏览器选择一个适当的行高大小,通常根据字体来确定。

border-bottom 下边框

  1. 下边框会延伸到页面边缘,但是文本的underline属性的下划线只会出现在文本下面
  2. 1px solid black

width 指定元素宽度

  1. 宽度永远是设置的值
  2. width属性只指定内容区的宽度
  3. 要确定整个盒子的宽度,需要将内容区的宽度加上左和右内边距,左右外边距和边框的宽度
  4. 一个块的默认宽度为"auto",它会延伸占满可用的空间
  5. 如果使用百分数,那么宽度会计算为元素所在容器宽度的一个百分比
  6. 高度也是默认的,也是"auto",一般,不用指定元素的高度,就让它们默认为auto
  7. 可以设置内联元素如spanemstrong的宽度,不过在对这些元素定位之前,可能注意不到宽度改变的效果。另外,还可以对这些元素增加外边距、内边距及边框。内联元素的外边距和内边距与块元素稍有不同。如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间。你也可以对内联元素的上边和下边增加内边距。不过这个内边距不会影响包围它的其他内联元素的间距,所以内边距会与其他内联元素重叠。

a元素和它的多重人格

  1. 页面上的链接有多重显示样式,包括未访问,已访问或者处于悬停状态等(还有focus和active),这里需要用到伪类

  2. foucs是指浏览器将焦点放在你的链接上时就是焦点状态,浏览器允许用户按下tab键轮流访问时,浏览器访问到某个链接,某个链接就拥有了"焦点"。设置一个焦点伪类值对于提高可访问性很有帮助,因为需要使用键盘(而不是鼠标)来访问链接的人会知道他们何时选择到正确的链接。

  3. active是指用户第一次单击一个链接时,就处于活动状态。

  4. a元素可能同时处于多个状态,一般认为适当的顺序是

    • link,visited,hover,focus,active
  5. 例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    a:link {
    color: green;
    }
    a:visited {
    color: red;
    }
    a:hover {
    color: yellow;
    }
    ### 伪类pseudo-classes

  6. 上面的a:link,a:visiteda:hover就是伪类

  7. 它们都允许我指定样式,就好像他们是类一样,但是没有人在html中真正输入这些类

  8. 浏览器会仔细检查所有a元素,把它们增加到正确的伪类中,如果一个链接已访问过,会放到:visited类中,如果悬停,浏览器会把这个链接扔到:hover伪类中。浏览器会在后台向这些类增加和删除元素.

  9. 伪类不止能处理链接,还能对其他类型的元素提供处理

    • first-child对应元素的第一个子元素。

    • first-letter可以用来选择一个块元素中文本第一个字母。可以创建首字母大写和首字母下沉等效果。

    • first-line选择段落第一行。

      1
      2
      p:first-letter { font-size: 3em;}
      p:first-line {font-style: italic;}

十六、布局和定位

  1. 流:浏览器从html文件最上面开始,从上到下沿着元素流逐个显示所遇到的各个元素。

  2. 块元素从上向下流,各元素之间有一个换行,内联元素从左上方流向右下方,在水平方向上相互挨着摆放(只要右边还有空间放的下)

  3. 文本是内联元素的特殊情况,浏览器会把它分解成适当大小的内联元素,以适应给定的空间。

    流的工作原理 并排放置块和内联元素

  4. 对于外边距,浏览器并排放置两个内联元素时,外边距会相加,但是当上下放置两个块元素时,会把它们共同的外边距折叠在一起,高度为最大的外边距高度。

  5. 事实上只要两个垂直外边距碰到一起,它们就会折叠,但是在元素嵌套时,如果外面的元素有一个边框,那么两个元素的外边距就不会碰到一起,就不会折叠

float

  1. float属性首先尽可能远地向左或向右浮动一个元素,然后在它下面的所有内容会绕流这个元素。

  2. 对于所有浮动元素都有一个要求:它必须有一个宽度。

  3. 浮动元素的外边距不会折叠,因为它只是浮在页面上,注意到这一点可以避免常见CSS错误。

  4. 内联元素也可以浮动,如浮动图像

  5. float属性可以设置为left或right,不能是中间

    1
    2
    3
    4
    #amazing {
    width: 200px;
    float: right;
    }

  6. 下面看浏览器如何处理float(想象一下word的图片浮动):

    • 首先,浏览器像往常一样,正常将元素流入页面,从最上面开始。
    • 浏览器遇到浮动元素时,会把它尽可能放在最右边,还会从流中删除这个段落,好像它浮在页面上一样。
    • 由于该浮动段落已经从正常的流中删除,所以其他块元素会填在这里,就好像没有这个段落一样。
    • 对于内联元素定位时,它们会考虑浮动元素的边界,因此会绕着浮动元素。

clear

  1. 当元素流入页面时,在这个元素左边,右边或两边不允许有浮动内容,例如为防止页脚和右边栏重叠,可以用clear设置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #footer {
    background-color: #675c47;
    color: #efe5d0;
    text-align: center;
    padding: 15px;
    margin: 10px;
    font-size: 90%;
    clear: right;
    }

  2. 现在浏览器放置元素时会查看右边有没有浮动元素,如果有就下移,直到没有浮动元素为止。

两栏效果

  1. 把sidebar放在页眉下面,然后用float将sidebar栏向右浮动,通过将main div的右外边距设置得和sidebar的宽度相同,来创建两栏效果,不过此时如果页面太宽,页脚会上移造成重叠问题
  2. 这个问题可以在页脚肿添加clear属性解决。还有一个问题是因为我们把sidebar放在主要内容前,所以在小的移动设备上会看到边栏在最前面。
  3. 右紧左松,让主内容向左浮动,设置仿照上面的。这样div的顺序是正确的,但当浏览器变宽时,边栏过于扩展不好,还是固定些好
  4. 使用绝对定位,类似浮动效果,当主内容区的垂直空间缩小,边栏会向下覆盖页脚
  5. 使用CSS表格

流体与冻结设计

  1. 上面讨论的都是流体布局(liquid layouts),下面讨论冻结布局(frozen layouts),冻结布局会锁定元素。
    • 如将body中的所有内容都放到一个id为#allcontent的div中

      1
      2
      3
      4
      5
      6
      #allcontent {
      width: 800px;
      padding-top: 5px;
      padding-bottom: 5px;
      background-color: #675c47;
      }
      那么页面的宽度将被限制为800px,无论浏览器宽度如何变化都不会移动,但这会导致浏览器很宽时,右边有很多空白空间。

凝胶布局 Jello

  1. 凝胶布局会锁定页面中内容区的宽度,不过会将它在浏览器中居中,将内容区的内外边距设为auto即可,浏览器会确定正确的外边距是多少,确保左和右外边距相同,所以内容会居中,如下所示

    1
    2
    3
    4
    5
    6
    7
    8
    #allcontent {
    width: 800px;
    padding-top: 5px;
    padding-bottom: 5px;
    background-color: #675c47;
    margin-left: auto;
    margin-right: auto;
    }

绝对定位

  1. 例如上面的边栏,将边栏绝对定位时,它会从流中删除并根据制定的top,left,right或bottom属性定位。绝对定位,相对于“非static 定位”的第一个父容器定位(若没有任何父容器,则相对于父容器就是相对于浏览器<html>定位)。

    • 相对于<html>的绝对定位中,属性buttom定义为浏览器窗口的底部,而不是页面的底部。
    • 实现页面底部绝对定位的一个方法是把元素放进一个相对布置在页面底部的元素中。
  2. 由于边栏在流之外,其他元素甚至不知道有这样一个元素,它们会将它完全忽略,所以流中的内联内容不会围绕在一个绝对定位的元素周围。

  3. 如将侧边栏绝对定位

    1
    2
    3
    4
    5
    6
    #sidebar {
    position: absolute;
    top: 100px;
    right: 200px;
    width: 280px;
    }

  4. 关于绝对定位还有一个分层放置的问题,一个元素可以放在另一个绝对定位元素上面,那如何分层?谁在上面?

    • 每个定位元素都有一个z-index的属性,这会指定它在一个虚拟z轴上的位置(z轴从屏幕指向你,上面的元素“更靠近”你,z-index更大)
    • 只有使用CSS绝对定位,相对定位或固定定位的元素有z-index 绝对定位 z-index
  5. 可以对任何元素指定绝对位置。

  6. position的默认值为static,将元素放在正常的文档流中。忽略top, bottom, left, right或者z-index声明。

  7. position共有4个值:static,absolute,fixed,relative和inherit。

    • fixed将元素放在相对于浏览器窗口(区别于“页面”)的一个位置上,固定元素永远不会移动。还可以使用负的left属性值。 固定定位 负的left属性值
    • relative让元素正常流入页面,不过在页面上显示之前要进行偏移。
    • inherit规定应该从父元素继承position属性的值。
  8. 绝对元素不必像浮动元素一样指定宽度,不过默认会占浏览器的整个宽度,所以如果要改变这种行为就要设置width属性。

  9. 指定元素位置还可以用百分数,相对于浏览器宽度。

CSS表格

  1. 类似电子表格,在表格中只放置块元素,所以要把图像包围在一个div中。

  2. 为整个表格创建一个div,然后为每一行分别创建一个div,对于每一列,只要在行div中放置一个div。

  3. 例如一行两列的表格可以按如下方式创建:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <div id="tableContainer">
    <div id="tableRow">
    <div id="main">
    ...
    </div>

    <div id="sidebar">
    ...
    </div>
    </div>
    </div>

    对应的css为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #tableContainer {
    display: table;
    border-spacing: 10px;//于是不再需要div中的外边距
    }
    #tableRow {
    display: table-row;
    }
    #main {
    display: table-cell;
    background: #efe5d0 url(images/background.gif) top left; font-size: 105%;
    padding: 15px;
    /*margin: 0px 10px 10px 10px;*/
    vertical-align: top;//确保表格两个单元格中的所有内容相对于单元格上边对齐,默认为中间对齐,可以设置为top,middle,bottom
    }
    #sidebar {
    display: table-cell;
    background: #efe5d0 url(images/background.gif) bottom right;
    font-size: 105%;
    padding: 15px;
    /*margin: 0px 10px 10px 10px;*/
    vertical-align: top;
    }
    上面的border-spacing会在单元格之间增加10像素空间,另外在表格边界周围也会增加10像素空间,但是border-spacing和页眉(页脚)的外边距创建的10像素空间不会折叠。就会导致页眉和页脚与两列之间有20像素的空间,如何修正?将页眉(页脚)的下边距(上边距)设为0即可。

CSS表格显示 CSS表格显示2 CSS表格显示3

十七、开放商特定的CSS

开放商特定的CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!doctype html> 
<html> <head> <meta charset="utf-8"> <title>CSS Transforms and Transitions</title>

<style> #box { position: absolute;
top: 100px;
left: 100px;
width: 200px;
height: 200px;
background-color: red;
transition: transform 2s;
-webkit-transition: -webkit-transform 2s;
-moz-transition: -moz-transform 2s;
-o-transition: -o-transform 2s;}

#box:hover {
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);}
</style> </head> <body> <div id="box">
</div>
</body> </html>

Reveal.js允许您使用HTML创建美观的交互式幻灯片,并且免费。以下是使用默认主题的典型Reveal.js演示文稿的屏幕截图:

##一、操作键 1. 使用空格键或方向键移动演示文稿 2. iOS风格的滑动功能也适用于任何带有触摸功能的屏幕 3. Escape键:缩略图视图 4. .键:使屏幕变暗

##二、下载和安装 ###(一)获取Reveal.js-master.zip文件并解压缩到工作目录 1. 访问Reveal.js主页:https://github.com/hakimel/reveal.js 2. 寻找Zip图标,并点击下载

![](http://htmlcheats.com/wp-content/uploads/2013/03/gitub-download-as-zip.png)
  1. 解压缩后获得reveal.js master文件夹

###(二)将需要的文件复制到你的工作目录 1. 将reveal.js master文件夹中的css,js,plugin和lib文档复制到用来写HTML文件,并制作演示文稿的目录中。

###(三)将幻灯片创建为单个HTML文件

##三、逐步创建Reveal.js演示文稿 1. 以最小的HTML文件开始

1
2
3
4
5
6
7
8
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
</body>
</html>
  1. 给Reveal.js base增加references,给

    section增加theme style sheets

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <head>
    <meta charset="utf-8">
    <title>Reveal.js 3 Slide Demo</title>
    <link rel="stylesheet" href="css/reveal.min.css">
    <link rel="stylesheet" href="css/theme/default.css" id="theme">
    <!--Add support for earlier versions of Internet Explorer -->
    <!--[if lt IE 9]>
    <script src="lib/js/html5shiv.js"></script>
    <![endif]-->
    </head>

    <head>部分必须包含两个样式表:reveal.min.css和一个主题,例如default.css

    • 按照惯例,minimized的文件像完整样式表一样被命名为(在本例中为reveal.css),但在“css”之前有“min”,因此为reveal.min.css。

    • default.css文件表示默认的Reveal.js主题,它为您的演示文稿的整体外观提供了一个外观。 如果用“sky.css”代替“default.css”,它会加载Sky主题,如下所示:

    • 可以在目录css-theme中找到所有主题。

  2. 将对Internet Explorer 9的支持添加到

    部分

说明
1. 部分参考O'Reilly Media出版的HTML and CSS和HTML with CSS & XHTML
2. 部分参考作者兼续在简书上的笔记https://www.jianshu.com/p/727dbfcef685

一、基本概念

简称

  1. HTMLHyperText Markup Language的缩写,译为超文本标记语言
  2. CSSCascading Style Sheets的缩写,译为层叠样式表

元素类型

  1. 块(block)元素,前后都有一个换行
    • <h1>~<h6>,<p>,<blockquote>
    • 特点是: 特立独行
  2. 内联(inline)元素,总在“行内”出现,
    • <q>,<a>,<em>
    • 特点是: 随波逐流
  3. void元素,这个元素没有实际内容,会用简写来表示
    • <img>,<br>
    • 这样能提高效率

浏览器与服务器惯例

  1. 浏览器不会显示空白符和换行,制表符等

  2. Web服务器默认文件名为"index.html"或"default.htm"。如果浏览器向Web服务器请求一个目录而不是文件时,例如http://www.starbuzzcoffee.com/images/或http://www.starbuzzcoffee.com/。Web服务器会尝试查找这个目录中的一个默认文件。"index.html"或"default.htm"。所以,要从根目录(或任何其他目录)默认地返回一个文件,只需要把这个文件命名为"index.html"或"default.htm"。

    htm是微软服务器的一个怪癖

  3. 如果末尾没有正斜杠,如果该目录确实存在,那么浏览器会自动帮你加上末尾的斜线

  4. file:///文件URL有3个正斜杠而不是2个。当浏览器从你的计算机本地读取文件时会使用file协议。

    • 例如,文件file:///chapter4/starbuzz/index.html会告诉浏览器index.html在路径chapter4/starbuzz/下。
    • 记忆:http url中删去网站名也会有3个正斜杠
  5. HTML5不再只是用来建立Web页面,Web页面主要是静态页面,上有一些图像和链接,可能还有一些漂亮的效果,比如菜单。总的而言,是用来阅读的。另一方面,Web应用则用来交互,用来完成具体工作。就像你的桌面计算机上的应用一样,只使用Web应用就能在Web上完成工作。如社交媒体应用、地图应用和游戏。

  6. http://www.mydomain.com:8000/index.html。

    • 8000是一个可以放在HTTP URL中的可选的“端口”。
    • 网站名就像一个地址,端口则像是这个地址的邮箱号(例如,一个复合公寓里),通常Web上的所有东西都会传送到一个默认端口(80),不过有时Web服务器会配置为在另外一个不同的端口接收请求(如8000)。这种情况经常在测试服务器上出现。正常的Web服务器几乎都在端口80接收请求。如果你没有指定端口,则默认为80。
  7. www.starbuzzcoffee.com是一个网站名。其中www是域中特定服务器的名字。starbuzzcoffee.com则是域名。域名由ICANN(The Internet Corporation for Assigned Names and Numbers)控制,要保留域名,每年还需要交纳少许注册费。域名可以用于多个网站,如business.starbuzzcoffee.com或student.starbuzzcoffee.com。

  8. 怎么把文件传输到web服务器呢?方法有很多,大多数主机代理商支持一种叫做FTP的文件传输方式(File Transfer Protocol,文件传输协议),还有一种叫做SFTP安全文件传输协议(Secure File Transfer Protocol)。 FTP工作原理1 FTP工作原理2

  9. 常用的FTP应用程序

    • Fetch (http://fetchsoftworks.com/)[Mac/收费]
    • Transmit (http://www.panic.com/transmit/)[Mac/收费]
    • Cyberduck (http://cyberduck.ch/)[Mac/免费]
  10. URL统一资源定位符uniform Resource Location。是一个全局地址global address,可用来定位Web上的任意资源,包括HTML液面,视频音频和很多其他形式的Web内容。除了制定资源的位置,URL还可以制定用来获取资源的协议。

  11. http://www.starbuzzcoffee.com/index.html。http是接收资源的协议。中间是网站名,最后是从根目录到资源的绝对路径。

    • http是超文本传输协议HpyerText Transfer Protocol。
    • 超文本文件HpyerText documents,通常就是HTML页面。 HTTP工作原理
  12. 要创建服务器脚本,大多数托管公司都支持PHP, Ruby on Rails, Perl, Python, Node.js, and Java当然还有很多其他的语言。

规范

  1. 遵照标准编写html,尽量减少错误,用doctype告诉浏览器你使用的哪一版本的html,可以减少浏览器显示效果的差异。现在html5的doctype很简单,告诉浏览器你在使用标准html:

    1
    2
    3
    4
    5
    6
    <!DOCTYPE html>
    #虽然上述例子中DOCTYPE用了大写而html用了小写,但是这两者都是大小写不敏感的。
    #<!doctype html>或<!DOCTYPE HTML>均可
    #每个html页面都应该加
    #标签、属性名、属性值等,有的有大小写之别,而有的则没有。
    #HTML标准规定所有的字符串除特别说明外都是要区分大小写的

  2. 页面中增加

    标记指定字符编码,通常使用utf-8,它是Unicode系列中的一个编码。如下:

    1
    2
    <meta charset="utf-8">
    #这个标记要放到<head>元素中所有其他元素的上面

  3. html标准验证工具:W3C验证http://validator.w3.org

  4. 以后html不再有版本号,甚至不是html5,从现在起它只是"HTML"。标准改变,浏览器会继续支持老方式,同时也会支持新的方式,这叫做向后兼容性(backwards compatibility)向后兼容性(backwards compatibility)

    HTML 4.01 DOCtype
  5. Element = Opening Tag + Content + Closing Tag。我们把一对开始标记和结束标记,称为匹配标记matching tags。

    元素=开始标记+内容+结束标记

  6. 属性的写法:属性名=“属性值”,<a href="top10.html">Great Movies</a>

  7. 处理XHTML时,<br/>的语法更为严格,只要看到<br>就应该改写成<br/>。不过除非要规划或者编写与XHTML兼容的页面,否则在HTML中都应该使用`

  8. spec规范:就是一个文档,制定了HTML标准是什么,也就是说HTML中有哪些元素和属性等。这个文档由World Wide Web Consortium (W3C, for short)万维网协会维护。

二、实践

一般

  1. 规划页面时先设计大的块元素,然后用内联元素完善。
  2. 尽可能使用元素告诉浏览器内容的含义。
  3. id属性是唯一标识元素的方法,可以使用大小写,不过必须一致, (每次都用小写会更容易些), id在它的页面必须唯一。任何元素都可以有id属性进行标示。
    • id的要求:一定用一个字母(AZ或者az)开头,后面可以是任意字母,数字,横线,下划线,冒号或点号,但不能加空格。
  4. 任何元素都可以增加title属性,为其增加工具提示文体(tooltip text)。这些信息通常会在鼠标移到元素上时显示title的内容,以达到补充说明或者提示的效果。
  5. 将自己的注释放到HTML中,格式为<!--注释内容-->
  6. 用Mac系统中的文本编辑编写HTML时,需将其改为纯文本模式。默认为“富文本”模式,这种模式下,在保存文件时,会增加它自己的格式和特殊字符。修改为纯文本文件的步骤: 修改为纯文本文件的步骤 修改为纯文本文件的步骤

链接

  1. 同一网站内的网页使用相对地址(相对路径),外部网页使用绝对地址(相对路径,即URL)。

    相对路径<a href="beverages/elixir.html">elixirs</a>
    ..表示上溯到父目录。"../.."表示上溯两层目录。
    上溯的相对路径<a href="../lounge.html">Back to the Lounge</a>
    相对路径:相对于链接的源Web页面指向网站中其他文件的一个链接,就像在地图上一样,终点总是相对于起点。 绝对路径:从根目录去获得特点的页面或文件。

  2. 带id的元素有一个特殊特性:你可以直接链接这些元素。

    • <a href="index.html#chai">see chai tea</a>
    • 方法为在链接后加#,再加上目标标识符(id)。
  3. 通常在页面的最上面定义一个目标"top",并在页面最下面定义一个目标"Back to top"。要链接到同一页面的top目标,可以写为<a href="#top">Back to top</a>

  4. 链接要简洁,可以在title中提供额外的信息,不要使用诸如"单击这里",或"这一页"之类的链接标签,不要把链接放在一起。

  5. 一般用http://wickedlysmart.com/buzz/index.html#Coffee进行链接,不能使用http://wickedlysmart.com/buzz#Coffee的形式进行链接,因为浏览器会在末尾加正斜杠,可能取代id引用,不过可以用http://wickedlysmart.com/buzz/#Coffee

嵌套

  1. 适当嵌套元素,嵌套时要完全嵌套
  2. 嵌套元素要当心,不要把<a>元素嵌到另一个<a>元素中,会让访问者迷惑。不允许在<img>等void元素中嵌套其他内联元素。

工具

  1. Dreamweaver
  2. Hype(Tumult)
  3. Coda(Panic)
  4. Flux(The Escapers)
  5. Microsoft Expression Web
  6. Amaya (Open source, developed by the W3C)
  7. Eclipse (by the Eclipse Foundation)

三、HTML首部元素

  1. html 根元素

web页面的根元素,只有<head><body>能直接放在<html>标签中

  1. head 页面头部
    • head包含有关页面的信息,只能放置<title>,<meta><style>元素。
    • <meta> : 关于页面的信息,属性包括charset : 指定字符集,通常为utf-8
    • <title> : 页面标题
    • <style> : 页面样式,属性包括type: 样式类型, 一般为"text/css",如<style type="text/css">...</style>
    • 以前, 人们认为以后可能还会有其他样式。事实表明,完全用<style>不带任何属性,任何浏览器都知道你指的是CSS。

四、HTML页面主体

  1. body 主体元素 web页面的主体元素

  2. h1- h6 6级标题

    标题默认是粗体,例如: <h1>一级标题</h1>

  3. p 段落

    块元素,paragraph的缩写,例如: <p>...</p>

  4. a 超链接

    • 内联元素,at的缩写,如 <a href=""></a>
    • <a>元素的内容可以是文字,图像甚至块元素(html5)
    • href: hyper reference的缩写,指定链接地址
    • title: 所要链接页面的文本描述
    • target: 告诉浏览器使用一个不同的窗口,使用_blank作为目标,就会打开一个新的窗口显示页面。如果多个<a>元素都指定_blank作为target,那么每个链接都会在一个新的空窗口中打开,如果指定另一个名字,如Coffee,那么有相同目标名的所有链接都会在同一个Coffee窗口中打开。
    • <a>元素包围图像时,IE浏览器会在图像周围加一个边框,显示这是一个链接(Safari浏览器,不会这么做)
  5. em 强调

    内联元素,emphasize的缩写,例如: <em>强调</em>

  6. br 换行

    • void元素,break的缩写,例如<br>
    • <br>既不是块元素,也不是内联元素
  7. code 显示计算机程序代码

    块元素,例如: <code>...</code>

  8. pre 原样显示文本

    块元素,例如: <pre></pre>。通常显示的时候,会保留空格和空行。

  9. strong 加粗文本

    内联元素 例子: <strong>加粗</strong>

五、引用

  1. q 短引用

    作为现有段落的一部分,大部分浏览器会加引号,内联元素,quotation的缩写

  2. blockquote 长引用

    • 需要单独显示,<blockquote>创建了单独的一个文本块,另外把文字稍稍缩进,使它更像一个引用。它是个块元素。
    • 如果想引用一段或者多段文字,就要使用<blockquote>,不过如果只想把一个引用放在现有的文字里,作为其中一个部分,就可以使用<q>
    • 可以把<p>放到<blockquote>中,形成多个段落
    • 可以把<q>放到<blockquote>中,表示引用的引用
    • 缩进是某些浏览器显示<blockquote>的效果,不是所有的浏览器对<blockquote>都缩进。

六、列表

<ol><li>(或者<ul><li>)总是要一起使用,列表可以嵌套,例如:

1
2
3
4
5
6
7
<ul>
<li class="selected"><a href="">HOME</a></li>
<li><a href="">BLOG</a></li>
<li><a href="">INVENTIONS</a></li>
<li><a href="">RECIPES</a></li>
<li><a href="">LOCATIONS</a></li>
</ul>

li列表项

块元素,list item的缩写

ol 有序列表

块元素, ordered list的缩写,浏览器负责编号

ul 无序列表

块元素, unordered list的缩写

dl,dt,dd 定义列表

每一项都由一个定义术语和定义描述组成

1
2
3
4
5
6
7
<dl>
<dt>Burma Shave Sign...</dt>
<dd>Road signs common in the US</dd>
<dt>Route 66</dt>
<dd>Most famous road in the U.S. highway system</dd>
</dl>

Burma Shave Sign...
Road signs common in the US
Route 66
Most famous road in the U.S. highway system

七、字符实体character entity

  1. 用简单缩写来指定特殊字符,但并不保证在所有浏览器上都能显示

  2. 输入实体时都会用到&,例如字符>的缩写是&gt;,字符'<'的缩写是&lt;。如果内容中确实需要一个字符&,就要使用&amp

  3. 除了用实体名还可以用实体的数字编号比如&#100,并不是所有实体都有名字,所以这种情况下,只能使用数字。

  4. 详尽的字符实体清单:http://www.unicode.org/charts/

八、图像

img 图片

  1. void元素,image的缩写
  2. src: 必要属性,指定img的源文件位置,可以指定相对位置
  3. alt: 必要属性,指定描述这个图像的一些文本,可以在图像无法显示的时候显示文本,也可以帮视力障碍的用户,这个属性得加,不然无法通过html标准验证
  4. width: 指定图像宽度
  5. height: 指定图像高度
  6. 例子: <img src="" alt="" width="800" height="600">

图片格式

  1. Web上最常用的3种格式: JPEG, PNG 和 GIF
  2. 照片和复杂图像使用JPEG,支持1600万种不同颜色,有损格式,缩小文件时会丢掉图像信息,不支持透明度,不支持动画,文件较小,便于Web高效显示
  3. PNG,GIF适合单色图像和线条构成的图像,如logo,剪切画和图像中的小文本,都是无损格式,都支持透明度,都比相应的JPEG更大些
  4. PNG可以包含上百万种颜色,有PNG-8,PNG-24和PNG-32,选哪一种取决于你需要表示多少种颜色。PNG会压缩文件来缩小文件大小,不过不会丢掉信息,所以认为这种一种“无损”格式。
  5. GIF最多表示256种不同颜色,但是能支持动画

图片实践

  1. img属性中指定宽度和长度的原因是浏览器预先知道了长宽就可以在显示图像之前就开始建立页面布局,否则浏览器得先下载图像,知道大小,然后再重新调整布局。

  2. width和height也可以用来图片缩放,不过由于各种原因,还是不要这样达到目的的好。因为浏览器在调整图像之前还是必须得下载完整的大图像

  3. 图像宽度要小于800像素,是一个好经验。大多数人通常都会把浏览器宽度设置为800-1280像素,所以一般经验是将图像最大宽度设置为800像素。

  4. 图像可以作为指向其他Web页面的链接,将img放在a元素的内容中,如下所示:

    1
    2
    3
    <a href="html/seattle_classic.html">
    <img src="thumbnails/seattle_classic.jpg" alt="A classic iPod in Seattle, WA">
    </a>

  5. 分辨率,一般是96像素/英寸。习惯的标准是72像素/英寸ppi。CSS像素是1英寸的1/96(96 ppi)

    • 所以3”宽和高的图像,要使用288288的像素(963=288)
    • 英尺 用 ' 表示,英寸用 '' 表示
  6. 用蒙版处理logo的小技巧

    用蒙版处理logo的小技巧 用蒙版处理logo的小技巧2 用蒙版处理logo的小技巧3

九、容器

标记逻辑区

逻辑区就是页面上彼此相关的一组元素,divspan容器用来标记一组元素

div 块元素容器

  1. 在属于一个逻辑区的元素周围放置<div>开始和结束标记

  2. div中的元素也会从div继承一些属性(如font-size,color等)

  3. 可以用div为页面增加更多结构,进一步展示页面的底层逻辑结构,但不要为了加结构而不必要地增加结构,在完成任务的前提下让结构尽可能简单

  4. 你也可以嵌套结构,例如可以把cats,dogs的<div>放在一个pets<div>中,如:

    1
    2
    3
    4
    <div class="pets">
    <div class="cats">...</div>
    <div class="dogs">...</div>
    </div>

span 内联元素容器

类似于div,不过是针对内联元素的,建立内联内容的逻辑分组,如:

1
2
3
4
5
6
7
<ul>
<li><span class="cd">Buddha Bar</span>, <span class="artist">Claude Challe</span></li>
<li><span class="cd">When It Falls</span>, <span class="artist">Zero 7</span></li>
<li><span class="cd">Earth 7</span>, <span class="artist">L.T.J. Bukem</span></li>
<li><span class="cd">Le Roi Est Mort</span>, <span class="artist">Vive Le Roi!, Enigma</span></li>
<li><span class="cd">Music for Airports</span>, <span class="artist">Brian Eno</span></li>
</ul>
  • Buddha Bar, Claude Challe
  • When It Falls, Zero 7
  • Earth 7, L.T.J. Bukem
  • Le Roi Est Mort, Vive Le Roi!, Enigma
  • Music for Airports, Brian Eno

十、表格

table 表格

<table>标记开始一个表格,一行用<tr>开始,每个<th>分别是某一列的表头,表头是前后排列的。每个<td>元素包含表格中的一个单元格。例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<table>
<caption>Table</caption>
<tr>
<th>City</th>
<th>Date</th>
<th>Temperature</th>
<th>Altitude</th>
<th>Population</th>
<th>Diner Rating</th>
</tr>
<tr>
<td>Walla Walla, WA</td>
<td>June 15th</td>
<td>75</td>
<td>1,204 ft</td>
<td>29,686</td>
<td>4/5</td>
</tr>
<tr>
<td>Magic City, ID</td>
<td>June 25th</td>
<td>74</td>
<td>5,312 ft</td>
<td>50</td>
<td>3/5</td>
</tr>
</table>
//添加css
table {
margin-left: 20px;
margin-right: 20px;
border: thin solid black;
caption-side: bottom;//将标题放在底部
}

td, th {
border: thin dotted gray;
padding: 5px;
}

caption {
font-style: italic;
padding-top: 8px;
}

caption 标题

增加标题<caption>...</caption>, 放在<table>元素之下,<tr>元素之上(即使你后面要用css把它显示在下方),默认会显示在表格上方。

background-color 背景色

添加颜色, 设置背景色即可,如:

1
2
3
th {
background-color: #cc6600;
}

颜色交替

为各行指定交替的颜色, 能够更容易得区分各行, 可以先定义一个新类, cellcolor, 然后把这个类增加到你希望着色的各行(tr)上,如:

1
2
3
.cellcolor {
background-color: #fcba7a;
}

另外还可以用下面的nth-child伪类实现

nth-child 伪类

nth-child伪类是一种更高级地选择元素的方法,例如让偶数段落有红色背景,奇数段落有绿色背景:

1
2
3
4
5
6
p:nth-child(even){
background-color: red;
}
p:nth-child(odd){
background-color: green;
}

这个伪类还可以更加灵活,用数字n制定简单表达式,如奇偶数:

1
2
3
4
5
6
p:nth-child(2n){
background-color: red;
}
p:nth-child(2n+1){
background-color: green;
}

合并单元格

就是说有的单元格要跨越多行,可以使用rowspan属性,指定一个数据单元格占多少行,然后从这个单元格所跨越的其他行中删除相应的表格元素。表格元素还能跨多列,只要为td元素增加colspan属性,然后指定列数,跨多列时需要删除同一行中的表格数据元素,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<tr>
<td rowspan="2">Truth or Consequences, NM</td>
<td class="center">August 9th</td>
<td class="center">93</td>
<td rowspan="2" class="right">4,242 ft</td>
<td rowspan="2" class="right">7,289</td>
<td class="center">5/5</td>
</tr>
<tr>

<td class="center">August 27th</td>
<td class="center">98</td>


<td class="center">4/5</td>
</tr>

嵌套表格

表格里可以嵌套表格,只需要把另一个table元素放在一个td中,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<tr>
<td class="center">August 27th</td>
<td class="center">98</td>
<td class="center">
<table>
<tr>
<th>Tess</th>
<td>5/5</td>
</tr>
<tr>
<th>Tony</th>
<td>4/5</td>
</tr>
</table>
</td>
</tr>

处理表格双线

默认情况下每个单元格都有边框,会形成双线,分散注意力,可以在table中将border-spacing设置为0px,还可以用border-collapse的css属性来折叠边框,使单元格之间根本没有边框间距,这样浏览器会忽略所有边框间距,然后将紧挨的两个边框合并成一个边框,例如

1
2
3
4
5
6
7
table {
margin-left: 20px;
margin-right: 20px;
border: thin solid black;
caption-side: bottom;
border-collapse: collapse;
}

边框间距 边框间距设为0 折叠边框间距

其他实践

  1. 如果希望表头放在表格的左侧,可以把表格表头元素放在各行中,而不是都放在第一行中。
  2. html表格允许你用html标记指定表格的结构,而css表格则提供一种方法,可以用一种类似表格的方式显示块级元素。
  3. 需要在页面中创建表格数据时就用html表格,不过如果只需要对其他类型的内容使用一种类似表格的表现方式,就可以用css表格显示布局。
  4. 表格单元格确实有内边距和边框,不过单元格之间的空间border-spacing是针对整个表格定义的,不能单独设置每个表格单元格的外边距,不过可以在垂直方向和水平方向上设置不同的边框间距,如border-spacing: 10px 30px,10像素水平间距,30像素垂直边框间距。

十一、表单

表单form

  1. action属性包含Web服务器的url, method属性确定表单数据如何发送到服务器,如POST,另外input 是内联元素, 如果想要有换行用<br>

  2. 表单的name属性。它相当于表单和处理表单的服务器脚本之间的一个黏合剂。

    表单中name属性的作用
  3. value属性,可以为submit更改别的名字,为文本输入元素的输入域提供默认文本。<input>中可限制文本,用maxlength,但是<textarea>中没有办法限制用户输入多少文本。

  4. name="extras[]",这只是一个普通的表单元素名,名字里有没有中括号对于浏览器没有任何的影响。那为什么要使用这样的元素名呢?因为编写processorder.php服务器脚本所用的脚本语言(PHP)希望得到一点提示,想知道一个表单变量可能包含多个值。提供这个提示的做法就是在名字后面增加一个[]。

  5. 例子如下:

1
2
3
4
5
6
7
8
<form action="http://wickedlysmart.com/hfhtmlcss/contest.php" method="POST">
<p>Just type in your name (and click Submit) to enter the contest:<br>

First name: <input type="text" name="firstname" value=""><br>
Last name: <input type="text" name="lastname" value=""><br>
<input type="submit">
</p>
</form>

表单工作原理 表单元素如何工作

POSTGET请求

  1. 浏览器发送数据的方法主要有两种,POST和GET。POST和GET完成的任务是一样的,都是把表单数据从浏览器发送到服务器,不过采用了两种不同的方式,POST会打包你的表单变量,在后台把它们发送到服务器,GET也会打包你的表单变量,但是会把这些数据追加到URL的最后,然后向服务器发送一个请求。
  2. 那么什么时候使用post什么时候使用get呢?
    • 如果你希望用户能够对提交表单后的结果页面加书签,就必须使用GET,因为如果使用POST就无法加书签了。
    • 那什么时候需要加书签呢?假设服务器返回一个搜索列表,你可能希望用户对结果加书签,那么他们就能直接查看这些结果,而不用再填写表单。
    • 另外,如果你有一个处理订单的服务器脚本,可能不希望给这个页面加标签,因为否则每次他们返回这个标签时,都会重新提交这个订单。
    • 还有一种情况肯定不想用GET,比如你的表单中的数据是私有的,如信用卡或口令,url是明文看到的,所以不安全。最后,如果你用了textarea就应该用POST,因为可能会发送大量数据,get和post对数据量都有限制,但是post要宽松的多。
    POST和GET区别

可访问性

  1. 应该用<label>元素来标记那些标签,<label>元素可以提供页面结构的更多的信息,使你能更容易地使用css对标签设置样式,另外对于有视力障碍的人,也有助于他们使用的屏幕阅读器更准确地标识表单元素。

  2. 必须为表单元素增加一个id属性,然后增加一个label,设置其for属性为相应的id。例如:

    1
    2
    3
    4
    <input type="radio" id="whole_beantype" name="beantype" value="whole">
    <label for="whole_beantype">Whole bean</label><br>
    <input type="radio" id="ground_beantype" name="beantype" value="ground" checked>
    <label for="ground_beantype">Ground</label>

fieldlegend 分组

当表单变的越来越大时,在视觉上对元素分组会很有帮助,可以用fieldset做到,legend为这一组提供一个标签,例如:

1
2
3
4
5
<fieldset>
<legend>Ship to</legend>
<div class="tableRow">
表单内容
</fieldset>
Ship to
表单内容

passwords input 密码

输入的文本会加掩码,例如:

1
<input type="password" name="secret">

file input 文件

创建一个文件输入控件,使用这个元素的前提是必须使用POST方法, 例如:

<input type="file" name="doc">

多选菜单

为select元素增加布尔属性multiple,在屏幕上显示所有项,选择时同时按下Ctrl或Command键,可以选择多个选项,例如:

1
2
3
4
5
6
7
<select name="characters" multiple>
<option value="Buckaroo">Buckaroo Banzai</option>
<option value="Tommy">Perfect Tommy</option>
<option value="penny">Penny Priddy</option>
<option value="Jersey">New Jersey</option>
<option value="John">John Parker</option>
</select>

placeholder 提示

  1. 为填写表单的人提供提示, 比正常内容浅一些
  2. 大多数不同类型的input元素都可以使用
  3. 例如:<input type="text" placeholder="Buckaroo Banzai">

Required 必要

可用于任何表单控件, 指示一个域是必要的, 对于设置了这个属性的控件, 如果没有指定值, 就无法正常提交表单, 例如:<input type="text" placeholder="Buckaroo Banzai" required>

text input 文本输入

用type属性指示你希望得到一个"文本"输入, 大多数表单元素都需要一个名字, 服务器脚本将使用这个元素名, 用maxlength限制最大字符数, 例如创建一个单行控件:

<input type="text" name="fullname">

submit input 提交输入

创建一个按钮, 允许你提交表单, 点击该按钮时, 浏览器将表单发送到服务器进行处理。标签默认为"Submit"(提交), 或者"Submit Query"(提交查询), 用value属性制定提交按钮的名字, 例如:

<input type="submit">

radio input 单选按钮

创建包含多个按钮的控件, 一次只能选择一个按钮。给一组给定选项关联的单选按钮必须有相同的名字。每个选项可以有不同的值, 通常将单选按钮的标签放在元素右边,使用checked布尔属性默认选中某个元素,例如:

1
2
<input type="radio" name="hotornot" value="hot"> hot<br>
<input type="radio" name="hotornot" value="not" checked> not

hot
not

checkbox input 复选按钮

创建复选框控件,可以选中也可以不选中,允许选择0个或多个选项。给一组给定选项关联的单选按钮必须有相同的名字name。每个选项有不同的值value,通常将复选按钮的标签放在元素右边,使用checked布尔属性默认选中某个元素,例如:

1
2
3
<input type="checkbox" name="spice" value="salt">
<input type="checkbox" name="spice" value="Pepper">
<input type="checkbox" name="spice" value="Garlic" checked>

第一项
第二项
第三项

textarea 文本区

  1. <textarea> 元素会创建一个多行的文本区,如果文本在文本区中放不下,右边还会出现一个滚动条,非空元素。

  2. name 指定唯一的名字。

  3. rows 告诉浏览器文本区高度为多少字符,cols属性告诉浏览器文本区宽度为多少字符。

  4. 任何位于<textarea></textarea>之间的文本都是浏览器中文本区控件的初始文本。

  5. 例如:

    <textarea name="comments" rows="10" cols="48">初始文本</textarea>

select 菜单

  1. 创建一个菜单控件,从一组选项中做出选择

  2. name 指定名字

  3. option 元素的内容用作作为菜单项的描述

  4. 例子:

    1
    2
    3
    4
    5
    6
    7
    <select name="characters">
    <option value="Buckaroo">Buckaroo Banzai</option>
    <option value="Tommy">Perfect Tommy</option>
    <option value="penny">Penny Priddy</option>
    <option value="Jersey">New Jersey</option>
    <option value="John">John Parker</option>
    </select>

十二、html5表单控件

number input 数字输入

限制只能输入数字,用min,max来限制允许输入的数字, 例子:

<input type="number" min="0" max="20">

range input 范围输入

类似number,显示滑动条,step指定步长,例子:

<input type="range" min="0" max="20" step="5">

color input 颜色输入

单击时弹出颜色选择器,例子:

<input type="color">

date input 日期输入

日期选择器,例子:

<input type="date">

email input email输入

文本输入元素,在移动浏览器上,开始输入email时会得到一个方便输入email的定制键盘,例子 :

<input type="email">

tel input tel 输入

与email类似,在移动设备上弹出一个定制键盘, 例子 :

<input type="tel">

url input url 输入

和email,tel类似, 例子 :

<input type="url">

十三、html5新增元素

上面的都是属于html的标准的,html5在这个基础上又添加了一些新的元素,如article,nav,header,footer,time,aside,section,video等,虽然这些新元素用起来和原来的div一样,但是使用新元素,浏览器,搜索引擎和开发人员就能肯定该元素是什么,用最合适的元素完成任务。比如aside元素,在屏幕大小受限的移动手机上,浏览器知道这个内容是一个aside,你可能会看到内容被塞到页面最下面,让你首先看到最重要的内容。相反如果使用div就什么情况都可能发生。这些元素本身没有多少样式,不过可以为页面中的内容增加含义信息.

footer表明这段是页脚,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<footer>
© 2012, Starbuzz Coffee
<br>
All trademarks and registered trademarks appearing on
this site are the property of their respective owners.
</footer>
//相应的css也需要改变,把#footer 改成footer
footer {
background-color: #675c47;
color: #efe5d0;
text-align: center;
padding: 15px;
margin: 0px 10px 10px 10px;
font-size: 90%;
}

section

section将相关内容组织在一起,例如可以把饮料内容都放在一起,例如 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<section id="drinks">
<h1>BEVERAGES</h1>
<p>House Blend, $1.49</p>
<p>Mocha Cafe Latte, $2.35</p>
<p>Cappuccino, $1.89</p>
<p>Chai Tea, $1.85</p>
<h1>ELIXIRS</h1>
<p>
We proudly serve elixirs brewed by our friends
at the Head First Lounge.
</p>
<p>Green Tea Cooler, $2.99</p>
<p>Raspberry Ice Concentration, $2.99</p>
<p>Blueberry Bliss Elixir, $2.99</p>
<p>Cranberry Antioxidant Blast, $2.99</p>
<p>Chai Chiller, $2.99</p>
<p>Black Brain Brew, $2.99</p>
</section>

article 文章

article包含独立的内容,如一个新闻报道,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
<article>
<header>
<h1>Starbuzz uses computer science</h1>
<time datetime="2012-03-10">3/10/2012</time>
</header>
<p>
Have you ever noticed how efficient a Starbuzz Coffee
house is? The lines alway move fast, and despite the
astronomical number of different drinks any customer can
order, we have your drink up, hot (or cold if that's the
way you want it) and ready in seconds. How do we do it?
</p>
</article>

time 日期

  1. time元素有个重要的属性:datetimedatetime要用官方internet日期格式来写,如果内容没有按官方日期写,就必须有datetime属性。官方日期完整格式为yyyy-MM-dd hh:mm,可以指定一部分。例如: <time datetime="2012-02-18">2/18/2012</time>
  2. HTML5的语义化,其实很多标签都没有实际的意义。用来给机器识别以便于搜索引擎、爬虫解析。time元素没有datetime这个属性时,语义上的时间值定义为该元素的textContent(当然前提是要符合特定的格式)。如果没有,则必须写这个属性,例如:<time datetime="2016-08-05"><br>今天</time>天气不错
  3. 格林尼治标准时间(GMT)
  4. 协调世界时(UTC,Coordinated Universal Time )

header 元素

可以为article,section,aside增加header元素,可以增加一些内容,比如署名。通常,section和article都会有一个header,用来提供描述或介绍,即使只有一个标题也可以使用header,提供额外的语义含义,将文章的首部与其余的内容区分开。例如:

1
2
3
4
5
6
7
<section id="blog">
<article>
<header>
<h1>Starbuzz meets social media</h1>
<time datetime="2012-03-12">3/12/2012</time>
</header>
...

导航nav,创建一组链接,包围在一个无序列表中,使用一个类来标识被选中的一项,nav可以插入到页眉的下面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<nav>
<ul>
<li><a href="index.html">HOME</a></li>
<li class="selected"><a href="blog.html">BLOG</a></li>
<li><a href="">INVENTIONS</a></li>
<li><a href="">RECIPES</a></li>
<li><a href="">LOCATIONS</a></li>
</ul>
</nav>
//对应要为他们设置css样式,不然不符合期望
nav {
background-color: #efe5d0;
margin: 10px 10px 0px 10px;
}
nav ul {
margin: 0px;
list-style-type: none;
padding: 5px 0px 5px 0px;
}
nav ul li {
display: inline;
padding: 5px 10px 5px 10px;
}
nav ul li a:link, nav ul li a:visited {
color: #954b4b;
border-bottom: none;
font-weight: bold;
}
nav ul li.selected {//如果某个导航项正好对应我们所在的页面,它看起来会与其他导航项有所不同
background-color: #c8b99c;
}

其他html5元素

  1. mark:突出显示某些文本
  2. audio: 声音内容
  3. progress: 显示任务完成进度
  4. meter: 显示某个范围的度量
  5. figure: 定义类似照片,图表,甚至代码清单等独立的内容
  6. canvas:在页面中显示JavaScript绘制的图像和动画
  7. i:呈现斜体的文本

十四、视频

video元素

<video>可以用来播放视频,一般的格式如下:

1
2
<video controls autoplay width="512" height="288" src="video/tweetsip.mp4">
</video>
  1. autoplay,指定自动播放
  2. controls,提供一组控件来控制播放,暂停,调节音量等
  3. autoplaycontrols是"布尔属性",有就显示,没有就不会出现。注意autoplay属性,通常用户希望决定加载页面时是否播放视频,另外controls属性对于不同浏览器提供的控件有所不同
  4. poster属性可以在视频未播放时显示这个图像poster="images/poster.png",通常浏览器会显示视频第一帧,往往是黑屏
  5. preload用来细粒度地控制(fine-grained control)视频如何加载,实现优化。大多数情况下,浏览器根据autoplay和用户带宽决定加载多少视频,可以覆盖这种设置。preload取值:
    • none,则用户播放视频之前不加载视频

    • metadata,下载视频元数据,但不下载视频内容

      • 元数据是指从信息资源中抽取出来的用于说明其特征、内容的结构化的数据(如题名,版本、出版数据、相关说明,包括检索点等),用于组织、描述、检索、保存、管理信息和知识资源。

    • auto,让浏览器做决定

    • loop 属性,布尔属性,决定视频结束后是否自动重新开始播放视频

    • widthheight设置视频显示区,海报会缩放到指定宽度和高度,视频会保持宽高比,有多余则显示黑边

视频格式

  1. 一个视频文件包括两个部分,一个视频部分和一个音频部分,每个部分使用特定编码类型来编码,容器也有自己的格式和格式名,现在主要有3种格式的视频:mp4(H.264,aac) ,webm(vp8,vorbis) ,ogg(theora,vorbis) ,那么如何处理所有这些格式呢?

  2. HTML5规范允许采用任何视频格式。具体支持哪些格式由浏览器实现来确定。在video元素中可以对应每种格式分别使用一个<source>元素,浏览器从上往下找,直到找到它能播放的一种格式。

    1
    2
    3
    4
    5
    6
    <video controls autoplay width="512" height="288">
    <source src="video/tweetsip.mp4">
    <source src="video/tweetsip.webm">
    <source src="video/tweetsip.ogv">
    <p>Sorry, your browser doesn't support the video element.</p>//如果浏览器不支持视频,显示此文本
    </video>

视频选择

  1. source中可以具体的指定视频格式,为浏览器提供帮助,因为浏览器在决定是否能够播放一个文件之前还要做一些侦查工作,type指定视频文件的容器格式,codecs指定视频编码器和音频编码器,如果不知道codecs参数可以省略,例如:
1
<source src="video/tweetsip.ogv" type='video/ogg; codecs="theora, vorbis">

  1. MIME(多用途互联网邮件扩展,Multipurpose Internet Mail Extensions)
    • 常见形式是一个主类型加一个子类型,用斜线分隔。
    • 比如text/html、application/javascript、image/png等。
    • 在访问网页时,MIME type帮助浏览器识别一个HTTP请求返回的是什么内容的数据,应该如何打开、如何显示。
  2. 文件扩展名是什么?
    • 是操作系统用来标注文件格式的一种机制,用一个点号(.)和主文件名分隔开。
    • 由于历史原因,多数扩展名是三个字母。
    • 注意,这里说的是标注,而非定义,既然是标注,说明不是强制的。比如你用photoshop可以打开一个psd图像文件。把这个文件扩展名改为txt,再拖到photoshop窗口里,还是一样能打开,说明内容完全没有变化,变化的只是双击时的默认打开方式。
    1. 文件扩展名和MIME的异同
    • 两者有共同的用途:用来标注信息的格式。
    • 但应用场景完全不同:一个是操作系统中标注文件的,一个是邮件和HTTP协议中用来标注网络数据的。
  3. 如果你喜欢flash可以把flash放到<object>...</object>控件中,并放到source标记下面,如果浏览器不认识video元素,就会使用flash视频。

一、使用场景

  1. 以后的某天有个安排
    • 8月2日下午有个会议
    • 8月3日下午5点到7点有一台手术

二、使用步骤

  1. 在 Dock 或“应用程序”文件夹中找到“日历”。

  2. 通过多种方式添加事件

    • 连按(双击)日历上的任何位置可添加当时的某一事件。可通过显示的“检查器”窗口添加被邀请人、设置时间、地点和更多内容。

    • 拖动某一事件可重新安排该事件。

    • 连按某一现有事件可在“检查器”中对该事件进行编辑。

    • 可通过“日历”app 中的“快速事件”字段使用自然语言输入事件。点按“添加事件”按钮并输入说明该事件的文本,例如“这个星期五下午 5 点在 Apple 咖啡馆与查尔斯共进午餐”。“日历”app 将使用您输入的文字来创建新事件,并且时间、联系人和地点等字段都会为您填好。

    • 如需估计的行程时间、方向和天气,您需要打开“系统偏好设置”中的定位服务。

  3. 通知

    • 当某事件即将发生时,OS X 中的“通知”会及时通知您。如果您正忙,可以让“日历”通知稍后再次显示,方法是向右轻扫,或点按“稍后提醒”按钮。按住“稍后提醒”按钮可查看其他选项。

三、使用技巧

  1. 创建新日历
  • 默认情况下,OS X 的“日历”app 中包括两个日历:“工作”和“家庭”。如果想创建新日历,请从文件菜单中选取新建日历。在文本字段中键入日历的名称。例如,如果您有多个孩子,则最好为每个孩子单独创建一个日历来跟踪他们的日程安排。您可以点按“日历”按钮来查看和控制日历的显示方式。

  • 要更改某个日历的颜色或名称,请从日历列表中选择该日历,然后选取“编辑”>“显示简介”。

  • 要移除某个日历及其所有事件,请右键点按或按住 Control 并点按该日历的名称,然后从显示的快捷键菜单中选择“删除”。

  1. 设备间推送日历更新

    • 如果您有 iCloud 帐户,并且在多台设备和电脑上设置 iCloud 日历服务,则 iCloud 日历和提醒事项信息将在每台设备和电脑上都保持最新。
    • 在“系统偏好设置”中设置您的 iCloud 日历帐户。可在“日历”窗口中查看您基于 iCloud 的日历。
    • 在“系统偏好设置”中:
      • 点按“iCloud”。
      • 登录 iCloud。
      • 选中“日历”旁边的方框。
  2. 从其他服务添加日历

    • 您也可以从其他常见服务(包括 Exchange、CalDAV、Facebook 和 Yahoo)将约会添加到“日历”app 中的日历。(注:这个并不常用,例如Gmail收到一封会议通知的邮件,只能添加Google Calendar的事件。针对只有Google Calendar的事件,我们可以先给日历添加一个Google账户。)

    • 选取 Apple 菜单 () >“系统偏好设置”。

    • 选择“互联网帐户”。

    • 点按窗口底部的“添加帐户”(+) 按钮。

    • 选取您要使用的帐户类型,然后输入您的帐户凭证。

    • 确保已选择(选中)“日历”选项,以显示与“日历”app 中的此帐户相关联的事件。

  3. 生日和节假日

    • Mavericks 中的“日历”会显示从“通讯录”app 直接展开时显示的生日。对某个联系人的生日字段所做的任何更改都会自动显示在“生日”日历中。

  4. 公布日历(要让其他人查看某个日历)

    • 选取“编辑”>“共享日历”
    • 输入您要与其共享此日历的联系人列表或电子邮件地址中的联系人姓名。
    • 如果您希望任何人都能从互联网订阅您的日历,请选择“公共日历”选项。
    • 随后系统会提供您一个可以发送给他人的 URL,以便他们可以查看该日历。点按该 URL 旁边的“共享”按钮可将其直接发送给使用 OS X 内建共享选项的收件人。

  5. 订阅其他日历:订阅他人(例如家人或同事)的已公布日历。

    • 选取“文件”>“新建日历订阅”。
    • 输入要订阅的日历的 Web 地址 (URL),然后点按“订阅”。
    • 您订阅的日历会显示在“订阅”标题下的“日历”弹出式列表中。要对日历进行更改(例如其事件的颜色或显示在日历列表中的名称),请在日历列表中选择该日历,然后选取“编辑”>“显示简介”。
  6. 可以将日历打印出来

    • 文件>打印>继续>存储为PDF

一、使用场景

  1. 不需要指定时间的任务
    • 购物清单。
    • 工作中的任务清单。
    • 下载清单。
  2. 在[某个时刻]如闹钟那样[提醒]你[一件小事]
    • 下班时顺路买牛奶。
    • 早上八点记得擦黑板。
  3. 它还可以在某个时间点重复,但最好仅限一件小事
    • 每天早上六点喝第一本水。
    • 每天早上八点吃药。

二、使用步骤

  1. 找到【提醒事项】应用的图标并点击打开

  2. 打开提醒事项后我们可以看到它的操作界面,左侧可以添加相关的列表,将你的提醒事项进行分类,点击右上角的“+”号,就可以新建一个提醒事项了。

  3. 在新建了一个提醒事项后,点击后面“i”字符号就可以设置这个提醒事项的提醒时间,或者提醒位置。两种方式可以同时勾选,也可以只选其一。

    • 日期提醒:到了这个时间点,Mac/iphone会提醒你该做这个事了。
    • 位置提醒:当你的Mac/iphone到达某个你设置好的位置后会提醒你完成该项事件。

  4. 有时候,我们需要完成某些每天都做的事件,因而需要设置每天的提醒,我们在设置提醒事项的“日期提醒”时,可以看到“重复”一栏选项,选择“每天”即可。

  5. 当提醒时间到了后,Mac会在桌面的右上角弹出消息。

三、使用技巧

  1. 设置提醒日期和时间有点麻烦,可以用Siri。一些时间不会太久远的简单事项,如:明晚要打扫卫生,就可以直接呼出Siri:周四晚10点半提醒我打扫卫生。普通话不是太离谱的话,Siri识别效率都挺高的。

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment