白馬の戦い
白馬の包囲を解いた曹操は、その住民を移住させ合流しようとした。袁紹はそれを阻止するため、将軍の文醜に渡河を命じた。文醜は劉備と共に延津の南まで来たが、ちょうどそのときに白馬からの輜重部隊がやってきた。曹操と荀攸はこれを利用し、文醜の軍の秩序が乱れたのを待って襲撃しようとした。果たして文醜の軍は略奪を始め、当初は5・6000人いた騎兵も600に満たない数まで減少した。これをみた曹操は文醜の軍に攻撃を加え、散々にこれを破り、文醜を戦死させた。
名将として知られていた顔良・文醜を一戦で斬った曹操軍の勇名は轟いた。
その間に曹操は許の地に献帝を迎え、天下に号令をかける大義名分を手にすることになった。袁紹は曹操の風下に立たされることを嫌い、理由をつけて曹操の政治に干渉したが、袁紹には公孫瓚、曹操には袁術・呂布・劉表・張繡といった強敵が近隣に存在していたため、両者の亀裂は決定的なものにはならなかった。
199年3月、袁紹は公孫瓚を易京の戦いで滅ぼした。その間にも各地に勢力を広げ、冀州・青州・并州・幽州の四州を治める河北最大の勢力となった。さらに北方の周辺民族である烏桓の勢力と友好関係を結び後顧の憂いを断ち、曹操との対決姿勢を露骨にした。一方、曹操も197年秋9月に袁術を陳国の戦いで大敗させ、さらに198年には張繡・劉表と呂布に対し攻勢に出て、12月には下邳城の戦いで呂布を滅亡させた。曹操は袁紹の官職を剥奪するなど、その勢力圏を脅かす調略を行い、両者の全面対決は避けられなくなりつつあった。
このように曹操は局地的な勝利を積み重ねたものの、袁紹の主力は未だに健在であり、さらに袁氏の本籍である豫州においてはほとんどの郡が袁紹に呼応する動きを見せていた。劉備は袁紹の命令で豫州の黄巾の残党を集め曹操の背後を脅かした。さらに袁術の勢力を吸収した揚州の孫策も不穏な動きを示しており、許都を狙うという風聞がもっぱらであった。
戦力と物量で勝る袁紹に対し、曹操は官渡への戦略的撤退を余儀なくされた。袁紹は黄河を渡って陽武まで進出した。関羽は旧主の劉備の消息が判明したため、曹操の下を去っている。
于禁や徐晃といった諸将の奮戦や、荀彧・鍾繇・李通・趙儼らの後方支援にもかかわらず、曹操は目だった戦術的な勝利も得られぬまま兵糧が先に枯渇する状況に陥ってしまった。しかし、袁紹陣営の内情は、既に南下策の是非をめぐって田豊と沮授が相次いで遠ざけられるなど配下同士の対立が深刻であった。袁紹は200年冬10月に淳于瓊ら5名の将に命じて烏巣において兵糧の輸送に従事させたが、袁紹に見切りをつけた許攸は密かに陣を抜け出し、曹操に袁紹軍の輸送作戦を知らせ、淳于瓊らの攻撃を勧めた。曹操はこの進言を受けて烏巣を襲撃し、これを成功させた(烏巣の戦い)。袁紹はこのときも郭図と張郃が対立するなど統制を欠き、作戦が一貫しないまま軍を動かし、結局、烏巣の兵糧を失うと同時に多くの軍勢を失い、敗走を余儀なくされた。