兴平二年(195年),公孙瓒兼并了刘虞,刘虞旧部鲜于辅等招引乌桓,攻打公孙瓒,袁绍也派麴义出兵协助刘虞的儿子刘和,与鲜于辅等合兵,共集中十万大军,在鲍丘打败了公孙瓒,迫使他退保易京。麴义与公孙瓒相持岁余,军粮耗尽,士卒饥困,率余众数千人退走,公孙瓒趁势追击,将其击破,尽得其辎重。
袁绍有三子:长子袁谭、次子袁熙、三子袁尚。他宠爱后妻刘氏,对刘氏所生的袁尚特别偏爱,有意以袁尚为嗣,因此以长子袁谭为青州刺史,以次子袁熙为幽州刺史,以外甥高干为并州刺史,只留袁尚在身边。袁谭到达青州后,控制的地区只有平原,于是北排田楷,东攻孔融,曜兵海隅,整个青州落入袁氏手中。
北方的外族乌桓领丘力居在初平年间(191-193年)去世,儿子楼班尚幼,侄子蹋顿勇敢善战、善用谋略,代替楼班即位,统率三个郡的乌桓军。
建安初年(196年),袁绍与前将军公孙瓒对峙,蹋顿派遣使者到袁绍处,请求与袁绍和亲。随后,蹋顿派兵帮助袁绍,大败公孙瓒。袁绍封赏蹋顿、难楼、苏仆延、乌延等乌桓领,授予蹋顿等人单于印绶。后来,难楼、苏仆延率领部众推举楼班为单于,推举蹋顿为乌桓王。广阳郡人阎柔年轻时在乌桓、鲜卑游历,得到信任,利用鲜卑人杀了护乌桓校尉邢举并取而代之。袁绍抚慰了阎柔,命令他安定北部边郡。
兴平二年(195年)十月,汉献帝在杨奉等人的护卫下逃到曹阳,后面李傕率军穷追不舍。对于是否迎天子一事,史书中关于袁营的记载有异:按《三国志》,袁绍派郭图出使汉帝,回来后郭图就劝袁绍迎天子,袁绍却没有采纳;按《献帝传》,则是沮授力劝袁绍迎天子,然而郭图、淳于琼却阻止了他。关于不迎天子的原因及天子被曹操迎立时的态度,不同阵营史料记录有异:按敌方魏晋的《三国志》,是因为袁绍不承认董卓所立的刘协,但曹操抢了天子后他又开始后悔;按己方河北的《为袁绍讨豫州檄》,则是因为195年冀州被公孙瓒、臧洪等强敌夹击,袁绍无法从战事中抽身,证据是他派了从事中郎徐勋协助曹操迎立天子,并缮修郊庙,一路护送。
兴平二年(195年),曹操带献帝迁都于许,开始建立新的宗庙社稷制度。袁绍派谋军校尉应劭出使许都协助建设,着出《汉官礼仪故事》,许都新朝廷的朝廷制度、百官典式,多数是应劭所建立的。
建安元年(196年),曹操自领司隶校尉,录尚书事,自从定都于许后,天子被架空,权力归于曹氏。曹操以皇帝的名义下诏书指责袁绍:“地广兵多,专门树立私党;不见出师勤王,但见兵与他人互相攻伐。”
袁绍向献帝上书申诉道:“如果能让臣表明本心,无愧于先帝,那么纵使俯就刑刀、撩衣就汤镬,也心甘情愿。请陛下留意‘尸鸠之平’,杜绝谄谀污蔑,不要令臣抱恨于九泉之下。”
曹操自任为大将军,而任袁绍为太尉,封邺侯。太尉地位在大将军之下,袁绍深感屈辱,上表不受封拜。令他愤怒的是曹操几次差点死掉都是自己救了他,如今他却忘恩负义挟持天子命令自己。曹操大为惧怕,就将大将军职位让给袁绍。
建安二年(197年),曹操派孔融持天子符节出使邺城,拜袁绍为大将军,赐给他弓箭、符节、斧铁和一百虎贲,让他兼管冀州、青州、幽州、并州四个州。
袁绍每次接到诏书,总担心对自己不利,于是想要天子搬迁靠近自己,派人对曹操说许县低洼潮湿,洛阳又残缺被毁,应当将都城迁到甄城,以便靠近完整丰足的地区。曹操不答应。田丰建议袁绍直接攻打许都、奉迎天子,袁绍没有采纳,决意先解虎踞后方的决公孙瓒。
袁绍统治黄河以北的地区,全天下都害怕他的强大。
建安二年(197年),曹操在兵败宛城后以“袁绍的书信对自己不敬”为由提出攻打袁绍的想法,荀彧用“四胜四败”之辞鼓励曹操,建议曹操在图谋河北之前先解决吕布。
建安三年(198年),荆州牧刘表与袁绍深相结约,治中邓羲劝刘表倒向曹操,刘表以“内不失职进贡,外不背叛盟主,才是天下大义”为由拒绝。长沙太守张羡与刘表不和,答应使者背叛刘表投靠曹操。
公孙瓒接连败北后固守易京,他在易京的外围挖了十道壕沟,城内垒起许多土台,一般高五、六丈,高台上建楼。他自己居住在中间高达十丈的台楼上,以铁作门,身边只有侍奉他的姬妾,来往书信文书都要用绳索吊上吊下,几乎过着与世隔绝的生活。由于城内积谷甚多,防守严密,袁绍派遣大将进攻历年,也攻打不下。袁绍写信给公孙瓒(详见词条:与公孙瓒书),希望他放下旧怨与自己和解,公孙瓒不答应,反而增加了军备,积极应战。
建安三年(198年),袁绍亲领大军攻打幽州,所向披靡,进而围攻易京,公孙瓒派遣其子公孙续向黑山军求救。袁绍上架云梯,下挖地道,不断加强攻势,易京危如累卵,公孙瓒手下的将领有的投降、有的溃散。
建安四年(199年)春,公孙续和黑山军领张燕带领十万救兵分三路向易京进。公孙瓒派人给公孙续送密信,约定以点火为信号,内外夹击袁绍军。这封信被袁绍的哨兵截获了,袁绍命人修改了信中的辞句,并依照约定的信号点起火堆。公孙瓒以为救兵已到,领兵攻出来,遭到袁绍伏兵的痛击,又龟缩入城。袁绍加紧挖地道,一直挖到台楼下,先用柱子顶着楼基,然后火烧支柱,楼台也就随之崩塌了。公孙瓒无路可走,于是缢杀了姐妹妻子,然后引火自焚,这时袁绍的士兵冲到楼上将他的级斩下。至此,袁绍占据了幽州,兼并了公孙瓒的军队,自此袁绍统一黄河以北,虎踞四州,是当时最强的割据势力。
建安四年(199年)春,在公孙瓒未败之时,曹操与公孙瓒曾私下书信,约定从南北两边夹击袁绍。四月,曹操借口“协助袁绍攻打公孙瓒”渡河北上,实际上的目的是偷袭邺城。但由于公孙瓒提前溃败,而袁绍也知悉了曹操的图谋,曹军主力只来到河北的河内郡斩杀了臣属于袁绍的眭固,任命魏种统管河北地区后,便退军,屯到敖仓。袁绍将公孙瓒的头颅送到许都,曹操仿佛看到了自己。曹操曾在建安三年(198年)对刘备密言,刘备将密言转告给袁绍,袁绍得知曹操想要图谋自己。后来当曹操意识到之前是刘备将自己联合公孙瓒夹击袁绍的密谋透露出去时,后悔得自己咬破了舌头。
建安四年(199年)八月,公孙瓒之子公孙续与援军张燕部队汇合,袁绍以屠各为左校尉,带着大军向西,双方在太行山山谷之中大战。最后,公孙续被屠各杀死,张燕也被袁绍击败。同时,曹操出兵河北,攻打袁绍的冀州黎阳郡,同时派臧霸等攻下青州的齐、北海、东安等郡县,让于禁在河边屯军。九月,袁绍大军东归,曹操也退还许都,在官渡部署军队。
袁绍决定驱使十万精锐步兵和一万骑兵夺取许都,一举攻灭曹操。他任命审配、逢纪主持军事,田丰、荀谌、许攸充当谋士,颜良、文丑担任将帅,积极准备南下。当时,袁绍部下意见纷纭,沮授的意见与郭图和审配的完全相反,沮授建议以逸待劳,采取持久战,而郭图、审配则主张战决。袁绍采纳了郭、审的主张。
袁绍想要联合张绣和刘表对曹操进行夹击。他派使者到穰城联络张绣,被张绣拒绝。关于刘表的态度,史书记载有异,按《三国志刘表传》,刘表假惺惺答应了,实际上按兵不动,对双方争斗只打算作壁上观;按《三国志桓阶传》,刘表举全州之力支持袁绍,但因长沙太守张羡举三郡造反,刘表才未能出兵相助。
建安四年(199年),袁术想把帝号让给袁绍、去青州投靠袁谭,路过徐州时,曹操命令刘备拦截袁术。袁术中途病死。
建安五年(2oo年)正月,刘备杀徐州刺史车胄,徐州郡县纷纷跟随刘备背离曹操,策应袁绍。曹操害怕,领兵攻打刘备,并指出“袁绍见事迟,必不趁机出兵”。此处关于袁绍,史书记载有异:按《三国志袁绍传》田丰劝袁绍趁曹操攻刘备之机出兵,被袁绍以儿子生病为由拒绝,果然没有出兵;但是按《三国志于禁传》《三国志武帝纪》,袁绍当时立刻出兵攻击了屯兵河边的于禁,并随即在二月出兵攻打白马。
曹操害怕袁绍渡过黄河,就加紧攻打刘备,终于将刘备打败,刘备投奔袁绍,被袁氏礼待。田丰次进谏说:“作持久之计,不急开战,只要分兵袭扰河南。不出三年,可以安坐而战胜。”袁绍不听。田丰强行上谏违抗袁绍,袁绍认为他败坏军心,就将田丰关了起来。
建安五年(2oo年)二月,袁绍布檄文,指控曹操“滥杀无辜、忘恩负义、挟持天子、虐杀忠臣、盗窃王陵”。他派郭图、颜良、淳于琼包围白马,自己率领主力大军抵冀州黎阳,将要渡河。(此处关于袁绍派遣的将领人数记载有异,按《三国志袁绍传》,沮授劝袁绍不可只派颜良一人,袁绍不听,坚持只派一个,导致颜良孤身战死;按《三国志武帝纪》和《后汉纪》,袁绍派了郭图、淳于琼、颜良和提出建议的沮授四人一同攻打白马。)
四月,曹操声东击西,客将关羽于百万军中斩杀颜良,解白马之围,之后想迁徙民众撤向官渡,但民众并未离开。袁绍挥师渡河,追赶曹军。沮授建议停在延津渡口,袁绍不听,沮授于是说了很不吉利的话,接着装病告退,郭图等人趁机争权,袁绍于是把沮授监统的军队分成三部,其中两部分别交给郭图和淳于琼,设三位都督监军。袁绍渡河后,驻屯在延津南面。他派出刘备、文丑追赶撤离的曹军,被曹军以辎重诱敌之计而打败,大将文丑被斩,袁军中大为震恐。
曹军退还官渡后,渡河后的袁军主力向南推进到阳武。沮授对袁绍说:“北军人多,但英勇善战不如南军;南军粮少,物资储备不如北军。南军利于战,北军利于缓兵。所以应打持久战,拖延时日。”袁绍仍然不从,他命令部队逐渐逼近官渡,紧靠曹军扎营,军营东西绵延数十里。(注:《三国志袁绍传》前后记载有异,此处记载“沮授建议持久战,袁绍不从”,但后文记载双方“相持日久”,同时《三国志武帝纪》记载双方“相拒连月”,《后汉书》记载“相持百余日”,多处记载表明实际上袁绍的做法与沮授此处主张一致。)
八月,两军主力在官渡会战,曹军合战失利,十个人之中就有两三个人受伤,前线能战的兵将不足万人,于是躲进营垒中坚壁不出。袁绍修筑壁楼,堆起土山,从高处箭射击曹营。箭如雨下,曹军大为恐惧,将士只得蒙着盾牌走路。但壁楼、土山不久就被曹军的“霹雳车”轰毁了。袁绍又暗凿通往曹营的地道,曹军则在营中挖掘长沟进行防御。袁军的运粮车还遭到曹军的袭击。同时,袁绍先后派刘备、韩荀袭击许都,但是皆被曹仁击败,因此不再分兵复出。这是一场持久战,两军相持了一百多天,河南老百姓困苦不堪,纷纷背叛曹军,响应袁军。袁绍派遣使臣招降豫州诸郡,曹操统治的豫州在袁绍的外交攻势下四方瓦解、远近顾望,纷纷受命,唯有颍川郡、阳安郡仍坚持不动。因为粮食将要耗尽、局面无法支撑,曹操写信给荀彧,想要撤回许昌,被荀彧劝回。
然而,这种有利于袁绍的形势却突然急转直下。当时,袁绍派淳于琼带领万余人北迎运粮车,沮授建议增派蒋奇领一支人马在淳于琼外侧以防曹操偷袭。而谋士许攸则提出乘曹操倾军而出,轻骑奔袭许都的建议。然而,袁绍因之前派韩荀和刘备袭击许都失败,不想再分兵冒险。许攸向来贪财,袁绍不能满足,事有凑巧,在邺城的许攸许攸家族中有人犯法,被留守的审配抓进监狱,许攸大为不满,于是投奔曹操。许攸投敌后将袁军机密全部泄露,曹操于是亲自领兵赴乌巢,袭击淳于琼。曹操在夜里带领精锐骑兵到达乌巢,让军队假扮成袁军部队,骗过了乌巢守军,然后围屯放火,乌巢守军大为惊乱。
乌巢屯点起火后,袁军部将张合主张救淳于琼,他对袁绍说:“曹操亲自出马,必然得手,那么事情就无可挽回了。”郭图却别出心裁地说:“不如乘此时兵去进攻曹军大营。”
袁绍于是两路出兵,一路派将领高览、张合率领重兵攻击曹营;另一路派骑督韩莒子、吕威璜、赵叡等领轻骑部队救援乌巢。在淳于琼的万人守军遭受攻击时,袁绍派去增援的骑兵部队刚好到达,被曹军一并歼灭。