袁绍连年进攻公孙瓒,不能攻克,就写信给公孙瓒,想与他解开过去的仇怨,互相联合。公孙瓒不予理睬,反而增强防备。袁绍于是大举增兵,向公孙瓒进攻。袁绍大军长驱直入,到达易京城门,公孙瓒派儿子到黑山求救,又打算率步骑突围,依托西南山,统辖黑山一带的军队转战冀州,断袁绍后路。部将共靖劝公孙瓒说:“现今全军都瓦解了,其所以能在这里坚持的人,都考虑其家乡有眷属,以将军作为依靠啊。将军若在这里长久坚持下去,袁绍必然被迫撤退;撤退后,周围的老百姓又重新归顺你。如果将军离开这个地方,部队失去了立足之地,易京的陷落,就指日可待了。将军失掉这个地方,无所依托地转战各处,那会有什么成就呢!”公孙瓒于是决定不突围了,待援兵到后里应外合消灭袁绍。
春季,黑山军首领张燕与公孙续率兵十万,分三路援救公孙瓒,张燕的援军还未到,公孙瓒秘密派使者送信给公孙续,让他率五千铁骑到北方低洼地区埋伏,点火作为信号,公孙瓒打算自己出城夹击袁绍围城部队。袁绍的巡逻兵得到这封书信,袁绍就按期举火,公孙瓒以为援军已到,就率军出战,袁绍的伏兵发动进攻,公孙瓒大败,回城继续坚守。袁绍围城部队挖掘地道,挖到公孙瓒部队固守的城楼下,用木柱撑住,估计已挖到城楼的一半,便纵火烧毁木柱,城楼倾倒。袁绍用这种方法逐渐攻到公孙瓒所住的中京。公孙瓒自料必定不能幸免,就绞死自己的姊妹、妻子、儿女,然后放火自焚。袁绍催促士兵登上高台,斩公孙瓒。
建安四年(199年)春,袁绍平定了幽州地区,并占了冀、幽、并、青四州的地方,拥有军队数十万,成了北方最大的军阀。从此,袁绍更加骄傲,对朝廷进贡的次数和数量越来越少。六月,袁绍挑选了精兵十万,战骑一万,企图出击曹操的许都。
袁绍的三军监军沮授向他劝谏说:“最近为讨伐公孙瓒,用兵好几年,百姓已很疲乏贫困,仓库中已没有积蓄,不能再用兵打仗了。最好的办法,一方面致力于发展生产,让百姓休养生息,另一方面派人去向汉献帝报告我们讨伐公孙瓒的胜利。如果曹操从中阻拦,那就向天下宣布,说曹操阻隔我们尊奉皇帝的路,使曹操处于孤立无援的境地。然后我们就出兵进驻黎阳,慢慢地经营并发展河南地区,扩充船只,整理好一切作战的器械,再分头不断派出精锐骑兵,骚扰曹操的边境,使曹操不得安宁,而我们却以逸待劳,不费力气,稳可打败曹操。”沮授还说道:“曹操尊奉天子来命令天下,现在我们出兵伐曹,就等于伐天子了。这与义理相违背。再说决定战争的胜负,在于有无万全之策,而不在于表面暂时的强弱现象。曹操在国内政令畅行无阻,士兵又很精练,决不会像公孙瓒那样固守一方,坐着等待我们去进攻。如今放弃万全稳重的计策而去兴无名之师,我实在为袁公心焦啊!”这个建议未被野心勃勃、骄傲自大的袁绍接受。袁绍为了夹击曹操,还特意派人去联络荆州的刘表和穰城的张绣。然而,曹操已使刘表保持中立,将张绣也拉到自己身边。
曹操得知袁绍要来进攻的消息,立即与谋士郭嘉、荀5热朔治鏊方的态势。郭嘉认为曹操必胜,袁绍必败。理由是:第一,袁绍出兵进攻许昌,对汉献帝来说乃是一种叛逆举动,不得人心;曹操却是以天子之命作为号召,所以能够得到各方的支援。第二,袁绍多疑刻薄,对有才能的人不敢信任,曹操却敢于大胆用人,一些有远见、有才能的人都可以被选用。第三,袁绍想法虽多,却优柔寡断,曹操一旦确定了方略,就坚决实施,而且能够随机应变。第四,袁绍的部下争权夺势,钩心斗角,袁绍是非不分,赏罚不明;曹操能明断是非,不受迷惑,赏罚分明。第五,袁绍喜欢虚张声势,不懂得兵法,曹操却很会用兵。根据郭嘉以上的分析,曹操遂决定对袁绍采取积极防御的战略方针。
许都的将领们听说袁绍要来进攻,见袁绍兵多势众,心里有点害怕。曹操说:“我知道袁绍的为人,志向很大而智谋短浅,外表勇武而内心胆怯,猜忌刻薄而缺少威信,人马虽多而调度无方,将领骄横而政令不一。他的土地虽然广大,粮食虽然丰足,却正是为我们预备的。”
东汉建安四年十二月,当曹操正在部署对袁绍作战的时候,刘备杀死徐州刺史车胄,占据下邳(今江苏省邳县东),与袁绍相呼应,企图合力进攻曹操。曹操为了避免两面作战,决定先去亲征刘备。他的部将们都说:“与您争天下的是袁绍。现在袁绍正要来进攻我们,我们反倒丢开袁绍东攻刘备,如果袁绍乘虚来攻,怎么办?”曹操说:“刘备的才智超过一般人,今日不攻,将来一定会形成大患。”郭嘉完全赞同曹操的决定,认为:“袁绍天资迟钝而不果断,就是来攻也不会很快。目前刘备新起,还没有取得民心,乘机剿除,一定可以很快将其击败。”曹操于是率兵东进,迅速夺取下邳,擒获关羽,迫使刘备逃往青州,后投靠袁绍。
就在曹操亲征刘备之际,田丰向袁绍建议:“现在曹操和刘备正在交兵,一时不能结束,如果我们乘机攻打曹操的背后,一出兵就能获得全胜。”当时,袁绍推说儿子有病,不采纳他的意见,因此没有出兵。田丰用手杖敲地,沉痛地叹息说:“碰上这样一个难得的机会,却以小孩子生病为由而坐失良机,多可惜啊!我们要灭曹的大事算是完了!”直到东汉建安五年(公元200年)正月,曹操击败刘备回到官渡后,袁绍才考虑进袭许昌。这时,田丰认为时机已失,许昌不再是空虚的了,而且曹操善于用兵,变化不定,不能轻视他而贸然出兵。于是,田丰建议作持久打算,指出:“我们可以依靠黄河和太行山诸险,以青、幽、冀、并四州的人力物力,再集合各地割据势力,牵制曹操,对内则专心治理农业,为战争作好准备。然后,在适当的时候挑选精锐兵力组成几路军,进攻曹操的薄弱部位,经常骚扰黄河以南地区,曹操救右面,就攻其左面,救左面,就攻其右面。这样,使敌人疲于来回奔跑,百姓也难以安心生产。我们可以不费多少气力,不出三年的时间就可轻取许昌。如果不用这一有把握取胜的策略,而把成败付诸于一次决战,万一战败,就难以挽回了。”骄横的袁绍仍未采纳田丰的建议,而且因为田丰说话不太客气,一怒之下将田丰逮捕入狱。接着,袁绍就向各州郡发布了讨伐曹操的文告,准备大举进攻许昌。
沮授在出军前,召集宗族,把自己的家产分给族人,其弟诅宗对他说:“曹操的兵马比不上我军,您还害怕什么呢?!”沮授说:“凭曹操的智慧与谋略,又挟持天子号令天下,以此作为资本,我们虽战败公孙瓒,但士兵已十分疲惫不堪,加上主公骄傲,将领奢侈,全军覆没,就在这一仗了。”
东汉建安五年二月,袁绍进军黎阳,准备渡过黄河,寻找曹军主力作战。他首先派颜良前往白马(今河南省滑县东黄河南岸),攻打东郡太守刘延,企图夺取渡河要点。沮授又劝道:“颜良性情急躁狭隘,虽然骁勇,但不可让他独当一面。”袁绍不听。四月,曹操自官渡(今河南中牟东北)北上援救刘延,他的谋士荀攸向他建议采用声攻击西的计策,引兵延津,以分散袁绍的兵力,然后再派精骑回袭白马。曹操接受了他的建议。袁绍听说曹军要渡河,果然急忙引兵西来。曹操见袁绍中计,率军调头前往白马,当曹军距白马仅有十余里时,颜良才发觉,仓皇迎战,被关羽(此时在曹操军中效命)取了首级,袁军顿时溃败。曹操解除白马之围后,不敢久留,迁徙白马的百姓沿黄河向西南撤退。
袁绍要渡过黄河进行追击,沮授劝阻他说:“胜负之间,变化无常,不能不慎重考虑。如今应当把大军留驻在延津,分出部分军队去官渡,如果他们告捷,回来迎接大军也不晚,如果大军渡河南下。万一失利,大家就没有退路了。”袁绍仍然不听他的劝告。沮授在渡河时叹息着说:“主公狂妄自大,下边将领只会贪功,悠悠黄河,我们能成功吗?”于是,沮授称病辞职。袁绍不批准,但心中怀恨,就又解除沮授的兵权,把他所率领的军队拨归郭图指挥。然后,袁绍便派文丑与刘备追击曹军。文丑、刘备渡河后,向南急追,一直追到酸枣(今河南延津西南)以北的南阪。曹操早就在此等候,把辎重全丢在袁军要通过的道路上,乘袁军抢辎重、队伍混乱之际,突然发起反击,杀死文丑,歼灭袁军数千人。文丑与颜良都是袁军中有名的大将,两次交战,先后被曹军杀死,袁绍军中士气大伤。