6月28日未明、両陣営ともに姉川畔に布陣を完了した。姉川を挟んで北側に浅井・朝倉連合軍、南側に織田・徳川連合軍である。
浅井軍は野村に陣を置き、第一陣に磯野員昌隊1千5百、第二陣に浅井政澄隊1千、第三陣に阿閉貞秀隊1千、第四陣は新庄直頼隊1千で、その背後に長政自ら3千5百の軍勢を率いて出陣している。
朝倉軍は三田村に布陣し、第一陣が朝倉景紀隊3千、第二陣が前波新八郎隊3千、第三陣が朝倉軍大将の朝倉景健隊4千という陣容だった。
それに相対する織田・徳川連合軍は、浅井軍の対岸に織田軍が布陣し、第一陣に坂井政尚隊3千、第二陣に池田恒興隊3千、第三陣に羽柴秀吉隊3千、第四陣に柴田勝家隊3千、第五陣は森可成隊3千、第六陣に佐久間信盛隊3千、そして本隊に信長が5千の兵を率いるという陣立てであった。
朝倉軍の対岸に徳川軍が布陣し、第一陣に酒井忠次隊1千、第二陣に小笠原氏助隊1千、第三陣に石川数正隊1千、第四陣が本隊で徳川家康2千という陣容に、稲葉一鉄隊1千が加勢する。
そして丹羽長秀・氏家卜全・安藤守就に5千の兵を与えて横山城の抑えとした。
ただし、この陣容や兵数については史書によって記述が異なる。
午前6時頃、三田村の徳川軍と朝倉軍の間で戦いの火ぶたが切られた。この衝突を合図に、織田軍と浅井軍の激突も始まり、両軍入り乱れての乱戦が展開されることになった。
朝倉軍と徳川軍の戦いでは、倍の兵数を擁する朝倉軍が優勢だったが、家康は押され気味の局面を打開するため、榊原康政に命じて姉川の川下から迂回させ、朝倉軍の側面から奇襲攻撃をかけさせたのである。これは朝倉軍にとって全く予期していなかったことで、それまで優勢だった朝倉軍がにわかに崩れはじめたのである。
時を同じくして行われていた織田軍と浅井軍の戦いでは、兵数で劣るはずの浅井軍先鋒・磯野隊が猛攻によって織田軍の第一陣、第二陣と突き破り、羽柴・柴田隊をも崩して信長本陣にも迫る勢いであったが、それを見て取った横山城監視役の命を受けていた氏家卜全・安藤守就らが遊軍となって浅井軍の左翼を突き、さらには稲葉一鉄隊が右翼側から挟撃したため浅井軍は退路を断たれることを恐れて浮き足だち、全軍が総崩れとなって小谷城に向けて敗走を始めたのである。
この中にあって、浅井方の将・遠藤直経はなんとしてでも信長の首級を挙げたいと思い、朋輩の三田村市左衛門の首を提げて織田将兵に扮し、信長本陣に紛れ込もうとしたが、竹中重隆に見破られて討ち取られたという。
戦闘は午前10時頃には浅井・朝倉軍の潰走によって大勢が決した。この合戦での死傷者数は史料によってまちまちであるため不詳であると言わざるを得ないが、双方共に多くの将兵を失って損耗が大きく、織田・徳川連合軍は浅井・朝倉連合軍を大依山や虎御前山まで追撃したものの、守兵2千を残す小谷城の攻略は断念せざるを得ず、後詰を失った横山城を降伏させるに止まった。しかし横山城を手中に納めた意義は大きく、ここに羽柴秀吉を入れて小谷城への抑えとした。
7月1日には佐和山城に逃れて籠もっていた磯野員昌を攻めたが、容易に陥落しなかったため周辺に諸将を配して長期包囲の態勢を固めた。
この後、信長は4日に上洛、8日に岐阜に帰った。
なお、この合戦を織田・浅井方の史料では野村の合戦、朝倉方では三田村の合戦、徳川方の史料では姉川の合戦と称している。