二月六日癸未,张弘范预备猛攻,元军中有建议先用火炮,弘范认为火炮打乱宋军的一字阵型,令其容易撤退。明日,张弘范将其军分成四份,宋军的东、南、北三面皆驻一军;弘范自领一军与宋军相去里余,并以奏乐为以总攻讯号。首先北军乘潮进攻宋军北边失败,李恒等顺潮而退。元军假装奏乐乐,宋军听后以为元军正在宴会,稍微松懈了。正午时段,张弘范的水师于是正面进攻,接著用布遮蔽预先建成并埋下伏兵的船楼,以鸣金为进攻讯号。各伏兵负盾俯伏,在矢雨下驶近宋船。两边船舰接近,元军鸣金撤布交战,一时间连破七艘宋船。宋师大败,元军一路打到宋军中央。这时张世杰早见大势已去,抽调精兵,并已经预先和苏刘义带领余部十余只船舰斩断大索突围而去。赵昺的船在军队中间,四十三岁的陆秀夫见无法突围,便背着八岁的赵昺跳海自杀。随行十多万军民亦相继跳海自杀。《宋史》记载七日后,十余万具尸体浮海。张世杰希望奉杨太后的名义再找宋朝赵氏后人为主,再图后举;但杨太后在听闻宋帝昺的死讯在后亦赴海自杀,张世杰将其葬在海边。不久张世杰在大风雨下溺死于平章山下(约今广东省阳江市西南的海陵岛对开海面)。
崖山之战是宋对蒙古侵略最后一次有组织的抵抗。此战之后,中国在历史上第一次完全沦陷于外族。崖山之战也是中国历史的重要的转折点。中国独立发展的进程被打断,曾经高度发达的经济、文化、科技、科举与世族相结合的官僚制度、开始受限的皇权、先进的政治制度等等都中断了,文明落后的蒙古人统治的元朝开始实行封闭、保守、轻工商业和更加集权的制度,并正式以程朱理学为科举的主要内容和政府的官方思想;而之后推翻蒙元建立的明朝又走向保守封闭的道路。不少外国的史学家将宋朝灭亡视为古典意义中国的结束,所谓崖山之后,已无中国。
二王南逃
元军在襄樊之战大破宋军以后,直逼南宋首都临安(今浙江杭州),德祐二年(1276年)宋朝朝廷求和不成,于是5岁的小皇帝宋恭帝投降。宋度宗的杨淑妃在国舅杨亮节的护卫下,带着自己的儿子即宋朝二王(益王赵昰、广王赵昺)出逃,在金华与大臣陆秀夫、张世杰、陈宜中、文天祥等会合。接着进封赵昰为天下兵马都元帅,赵昺为副元帅。元军统帅伯颜继续对二王穷追不舍,于是二王只好逃到福州。不久,刚满7岁的赵昰登基做皇帝,改元“景炎”,尊生母、宋度宗的杨淑妃为杨太后,加封弟弟赵昺为卫王,张世杰为大将,陆秀夫为签书枢密院事,陈宜中为丞相,文天祥为少保、信国公并组织抗元工作。
祥兴二年(1279年),元将张弘范大举进攻以赵昺为首的南宋小朝廷。后来在不久以前攻占广州的西夏后裔李恒也带领援军也加入战事。相传起初宋军兵力约有20万,战船千多艘;元军只有10万人(一说为30万),战船数百艘,北方人不习海战,多晕眩不支。这时宋军中有建议认为应该先占领海湾出口,保护向西方的撤退路线。张世杰为防止士兵逃亡,否决建议,并下令尽焚陆地上的宫殿、房屋、据点;又将下令千多艘宋军船只以“连环船”的办法用大绳索一字形连贯在海湾内,并且安排赵昺的“龙舟”放在军队中间,坐镇指挥。元军以小船载茅草和膏脂,乘风纵火冲向宋船。但宋船皆涂泥,并在每条船上横放一根长木,以抵御元军的火攻。元朝水师火攻不成,以水师封锁海湾,又以陆军断绝宋军汲水、砍柴的道路。宋军吃干粮十余日,口干舌燥,许多士兵以海水解渴,脸部浮肿,大量呕泄。张世杰率苏刘义、方兴日大战元军,张弘范擒张世杰甥韩某,以其向张世杰三次招降不果。