戰國中期,齊、秦兩強東西對峙,韓、魏兩國因連年遭受秦軍入侵,便倒向齊國,欲借強齊之力以抗秦;齊國與楚國籤訂盟約,聯合齊楚韓魏四國合縱伐秦。為了破壞四國合縱,在公元前305年,秦國與楚國聯姻;次年,又割讓上庸之地與楚國結盟。
公元前303年,齊國以楚國背叛盟約,不守信義為由,聯合韓、魏伐楚。楚國向秦國求援,並送太子橫入秦為質,秦國出兵救楚,三國聯軍聽聞秦國出兵,便下令撤軍。
公元前302年,入秦為質的太子橫和一秦國大夫起了衝突,失手將人打死,然後逃回了楚國,殺死官員已是大罪,不辭而別又失了禮節,秦國對此很氣惱,秦、楚關係決裂。
公元前301年,楚國沒有秦國做靠山,齊宣王任命匡章為將,再次率領韓、魏、齊三國聯軍攻打楚國,楚懷王派唐昧率軍迎戰,雙方在垂沙隔水列陣,對峙長達六個月。齊宣王見戰事毫無進展,空耗國力,便派使者到前線,催促匡章儘快渡河開戰。匡章對使者說道:「目前戰機尚未成熟,貿然開戰就是讓萬千弟兄們去送死,請恕我不能從命。」
匡章派人加快速度偵察到可以渡河的地方,由於河邊對岸有楚軍把守,開展偵查工作十分困難。這時有一個漁夫看到他們在找可以渡河的地方,就對他們說:「其實楚軍已經告訴你們答案了,凡是防守兵力少的肯定是水深的地方,重兵把守的地方就是你們要找的淺水之地。」
匡章知道後喜出望外,立即下令整理軍隊,挑選精兵趁黑夜渡河,向楚軍發動突然襲擊。楚軍這邊因為聯軍長時間無法渡河,已經放鬆警惕,遭到襲擊後倉促迎戰,最終楚軍大敗,楚將唐昧戰死。聯軍乘勝追擊,又迅速攻佔數城,楚國被迫向齊求和,派太子橫入齊為質。
垂沙之戰後,唐昧的部將莊蹻(讀敲)帶領部眾發動叛亂,攻破楚國都城郢都,戰敗加內亂,加重了楚國在這場戰役中的損傷。垂沙之戰,即是齊國對楚國的報復,也是秦、楚關係破裂的直接後果,楚懷王在外交上左右搖擺,反覆橫跳,最終釀成了孤立無援、只能挨打的局面。經過此次戰役,楚國國力削弱,再也無力與秦、齊爭霸。