面對巨大壓力,張世傑晝夜苦思破敵之策。有幕僚向張世傑建議應該先占領海灣出口,保護向西方的撤退路線。張世傑為防止士兵逃亡,否決建議,並下令盡焚陸地上的宮殿、房屋、據點;又將下令千多艘宋軍船只以“連環船”的辦法用大繩索壹字形連貫在海灣內,並且安排趙昺的“龍舟”放在軍隊中間。元軍以小船載茅草和膏脂等易燃物品,乘風縱火沖向宋船。但宋船皆塗泥,並在每條船上橫放壹根長木,以抵禦元軍的火攻。元朝水師火攻不成,以水師封鎖海灣,又以陸軍斷絕宋軍汲水及砍柴的道路。宋軍吃幹糧十余日,飲海水之士兵嘔泄。張世傑率蘇劉義和方興日大戰元軍,張弘範擒張世傑甥韓某,以其向張世傑三次招降不果。[10]
祥興二年(1279年)二月六日癸未,張弘範預備猛攻,元軍中有建議先用火炮,弘範認為火炮打亂宋軍的壹字陣型,令其容易撤退。明日,張弘範將其軍分成四份,宋軍的東、南、北三面皆駐壹軍;弘範自領壹軍與宋軍相去裏余,並以奏樂為以總攻訊號。首先北軍乘潮進攻宋軍北邊失敗,李恒等順潮而退。元軍假裝奏樂,宋軍聽後以為元軍正在宴會,稍微松懈了。[10]
正午時段,張弘範的水師於是正面進攻,接著用布遮蔽預先建成並埋下伏兵的船樓,以鳴金為進攻訊號。各伏兵負盾俯伏,在矢雨下駛近宋船。兩邊船艦接近,元軍鳴金撤布交戰,壹時間連破七艘宋船。宋師大敗,元軍壹路打到宋軍中央。這時張世傑早見大勢已去,抽調精兵,並已經預先和蘇劉義帶領余部十余只船艦斬斷大索突圍而去。[10]
祥興二年(1279年)三月十九日,崖山海戰結束,大宋王朝宣告滅亡。
趙昺的船在軍隊中間,四十三歲的陸秀夫見無法突圍,便背著八歲的趙昺投海,隨行十多萬軍民亦相繼跳海。戰後,十余萬具屍體浮海。張世傑希望奉楊太後(楊淑妃)的名義再找宋朝趙氏後人為主,再圖後舉;但楊太後在聽聞宋帝昺的死訊在後亦赴海自殺,張世傑將其葬在海邊。不久張世傑在大風雨中不幸溺卒於平章山下(約今廣東省陽江市西南的海陵島對開海面)。[10]
崖門海戰之後壹天,即二月七日早晨,海上浮屍10萬。陸秀夫的
陸秀夫背幼帝投海
屍體被百姓找到,安葬起來;而小皇帝趙昺的屍體則為元軍尋得,只見壹眉清目秀的小兒身穿龍袍,頭戴皇冠,身上還掛著壹個玉璽。元兵將玉璽交給張弘範,張弘範確認這小兒是趙昺,派人尋回,然而趙昺的屍體已經下落不明。據說被百姓埋葬在了廣東深圳赤灣村裏,至今仍存。[11]
崖山海戰後,宋室覆亡。元將張弘範命人在崖山巖壁上雕刻了“鎮國大將軍張弘範滅宋於此”十二個大字。 大明成化二十二年(1486年),禦史徐瑁對奇石上十二字深惡痛絕,命人除去,欲改書“宋丞相陸秀夫死於此”九字。而陳白沙認為宋亡時死者十數萬,不獨陸秀夫,宜書“宋丞相陸秀夫負帝沈此石下”。因爭辯不下,終未刻成。有傳說,陳白沙到崖門憑吊時,在碑首加上壹個“宋”字,成為“宋鎮國大將軍張弘範滅宋於此”。(此傳不實,陳白沙知張弘範雖屬漢人,但從未作宋將。)解放初,原鑿字奇石被航道部門炸毀。1964年秋,新會縣人委請田漢同誌書寫“宋少帝與丞相陸秀夫殉國於此”十三個行草大字,刻在近岸的奇石上。終於把這饒有紀念意義的碑石樹起