1894年1月30日,一直停泊在荣成湾的日本联合舰队二十一艘军舰(留四餿警戒运输船),在南帮炮台两军激战时,于凌晨2时启航开向威海,7时抵达百尺崖南,先后配合陆军轰击杨峰岭、所前岭炮台。南帮炮合陷落后,北洋舰队因威海港东口暴露在敌军陆路炮火之下,遂移至西口。
于是,日鱼雷艇得以破坏东口障碍物,且入港袭击北洋舰只在此不利的情况下,北洋舰队本应冲破日军舰队的封锁,出到海上,拚力一战。清廷早在1月23日即曾电谕李秉衡:“现在贼踪逼近南岸,其兵船多只,难保不闯入口内,冀逞水陆夹击之诡谋。我海舰虽少,而铁甲坚利则为彼所无,与其坐守待敌,莫若乘间出击,断贼归路。”李鸿章于同一天电告丁汝昌:“若水师至力不能支时,不如岀海拚战。即战不胜,或能留铁舰等退往烟台。”邓世昌却表示:“海军如败,万无退烟之理,惟有船没人尽而已。旨屡催出口决战,惟出则陆军将士心寒,大局更难设想。”他决定株守港內,既不出战,又不转移。
1月30日,李鸿章再次电告丁汝昌、戴宗骞∶北洋舰队应冲岀威海,“设法保船”。“万一刘(公)岛不保,能挟数舰沖岀,或烟台,或吴淞,勿被倭全灭,稍赎重愆。否则,事急时将船凿沉,亦不贻后患。”但是,丁汝昌仍迟不执行2月3日,日舰及占据南帮炮台的日军以大炮水陆合击刘公岛及北洋舰队,双方相持竟日。刘公岛清军伤亡甚众。当夜,日鱼雷艇队闯入东口袭击北洋舰只,“定远”中雷重伤,不久自毁。但日军也有五艘鱼雷艇被击沉“定远”毁后,丁汝昌移督旗于“镇远”舰。
5日,日军又水陆一起发炮轰击,炸毁日岛弹药库及地阱炮。清军发炮还击,击伤日舰两艘。6日凌晨,日鱼雷艇又入东口,袭沉“来远”、“威远”及“宝筏”号。7日,管带王登瀛私率十二艘鱼雷艇从西口逃岀,遭日舰追击,全部被俘。此时,刘公岛电讯已中断,形势岌岌可危。在北洋舰队服役的洋员唆使部分民族败类鸣枪过市,公开要求投降,引起刘公岛居民惶惧,军心涣散。
9日,“靖远”被敌击沉。当天,刘步蟾自杀。此时,北洋舰队尚有“镇远”、“济远”、“平广丙”以及“镇中”等大小舰船十艘,但弹药将尽。10日,丁汝昌命令沉船,由于洋员的阻挠,无人执行。11日,丁汝昌得到烟台密信,知李秉衡已远逃莱州,陆路增援已无希望,便召开会议,研究突围。当即遭到洋员瑞乃尔(德国炮师)、马格禄以及小撮民族败类营务处道员牛昶炳等的坚决反对,迫使丁汝昌、张文宣等相继自杀。12日晨,一群贪生怕死之徒盗用丁汝昌名义,向日本舰队投降。
于是,北洋舰队尚存的“镇远济远”、“平远”等十艘舰艇以及刘公岛炮台和军资器械,全被日军所掳。日军从荣成湾登陆至占领威海卫军港,为时仅三个星期。和辽东半岛之战一样,清军在山东半岛之战中仍然采取消极防御的被动挨打方针,作战指导上产生了一连串的失误。首先,由于对日军攻占旅大之后的战略企图判断错误,在战略防御部署上重奉天而轻山东,山海关内外重兵云集,山东方面则不但没有增加,反而抽兵(总兵章高元所率嵩武军八营)北援辽东,以致日军由荣成西进时,山东清军无足够数量的预备队可供调遣,不得不从威海附近分兵堵截,造成顾此失彼的被动态势。
其次,山东清军在部署上分兵把口,以致处处兵单,尤其是没有汲取日军于花园口登陆从侧后进犯旅大的教训,对敌人从远处登陆进行侧后攻击的可能性缺乏预计;当得知日军已从荣成方向登陆后,又未能及时集中兵力,组织有力的反击,致使登陆之敌得以两路并进,直扑威海。
此外,李鸿章死守其保船避战的错误方针,既规定北洋海军¨不得岀大洋浪战”,又不准陆路各军半渡而击,主观地认为只要固守大小炮台依仗“能击四面”的新式大炮,即可使日军“断不敢近”,这无异于把战场主动权拱手授之于人,而使自己立于未战先败之地,加上丁汝昌最后抱定“惟有船没人尽而已”的愚蠢打算,拒不执行出口决战和突围退却的指示终于酿成北洋海军坐以待毙、全军覆灭的可悲结局。
恩格斯在评论俄土锡诺普海战时指出,土军分舰队的覆灭,是土耳其方面犯了一系列令人难以置信的错误造成的。“考虑到失败绝对不可避免,因此只要风向许可,土耳其分舰队也许最好是起锚并倾全力向俄军攻击。这样做,虽然不可避免地要牺牲几艘舰船,但是至少可以保存部分舰船。北洋舰队重蹈土耳其分舰队的覆辙,同样是犯了一系列错误的结果。