隆安元年(397年),青兖二州刺史王恭以讨伐王国宝之名起兵,成功逼使司马道子赐死王国宝并处死王绪。
当时司马元显十六岁,担任侍中,很厌恶王恭,劝说父亲司马道子讨灭他。司马道子于是以司马元显为征虏将军,并将自己原卫将军府(曾纳入骠骑将军府)和徐州刺史府属僚拨给司马元显。
隆安二年(398年),王恭以讨伐司马道子心腹谯王司马尚之的借口再度举兵,更联同了荆州刺史殷仲堪、广州刺史桓玄、豫州刺史庾楷。面对如此情形,司马元显力主司马道子讨伐,但司马道子没有对策,不知所为,只得终日喝酒,将讨伐之事都交托给司马元显。司马元显虽然年轻,但聪明且多所涉猎,果断敏锐,以社稷安危为已任,连与他一起开会讨论的人都称他有晋明帝神武之风。司马元显于是受命为征讨都督、假节,统率王珣、谢琰等对抗王恭,司马尚之亦参战。
起初司马尚之击败了庾楷,但荆州来赴的桓玄及后却大败司马尚之等人,并且进军石头城。司马元显于是从竹里撤还建康,并率王恺、桓放之、温详等守戍石头城抵抗桓玄等,又以王珣和谢琰分戍北郊及宣阳门守备。另一方面,司马元显得知王恭部下北府军将领刘牢之对王恭甚为忿恨,于是派了庐江太守高素去游说他叛离王恭,并许诺事成后以刘牢之接任王恭之位。刘牢之最终归降朝廷,并倒戈进攻王恭,致使王恭兵败被擒,再押解京城处死了他。
王恭死后,殷仲堪等荆州军团退守寻阳,拒绝接受朝廷任命。由于朝廷不知荆州军团的虚实,于是司马元显仍以严兵相拒,情势紧张,内外忧惧。司马道子命司马元显领甲杖百人入殿防卫。不久,加司马元显散骑常侍、中书令,兼领中领军,持节、都督如故。同年殷仲堪终接受朝廷安抚,各还其州,危机才得以解决。
隆安三年(399年),司马道子患病,同时亦沉溺饮酒,每天都在酒醉中。司马元显知道父亲的声望已不再,于是暗示朝廷解除其司徒及扬州刺史职务,并自任扬州刺史。司马道子知道后大怒但不能作什么。司马元显自以年轻,不想短时间内接受父亲两项重要职位,于是以琅邪王司马德文为司徒。同时司马元显信任庐江太守张法顺,以其为谋主,又树立自己的党羽,桓谦以下的门阀权贵子弟都与其交往。
司马元显当时为增加兵源,于是下令三吴各公卿以下,原为官奴而被门阀转为荫客的人移置建康,号称为“乐属”,但惹来当地门第士族的不满。
孙恩就正值当时三吴民心不稳,于是自海岛进攻上虞,及后更攻陷会稽,三吴八郡皆响应孙恩。面对如此局面,朝廷内外戒严,司马元显以中军将军讨伐孙恩,并命谢琰率兵讨伐。不久谢琰与刘牢之暂时击退孙恩,八郡稍为安定,加司马元显录尚书事。当时司马道子父子皆录尚书事,但司马道子已经将朝政都交了给司马元显处理,于是住西府的司马元显被称“西录”,每天拜访的人众多,门庭若市;而称“东录”的司马道子府则门可罗雀。但司马元显并无良师益友,亲信都好阿谀奉承的奸佞小人,都称他为一时英杰、风流名士。司马元显于是渐渐变得骄傲豪侈,更暗示礼官建立礼仪,以自己德高望重且总掌国事,应该受最大的恭敬。接着公卿以下见司马元显都下拜,其生母刘氏更获加号会稽王夫人,赐金章紫绶。而当时因为战事频生,国库虚耗枯竭,但司马元显聚敛钱财,比皇室还富有。
隆安四年(400年),孙恩再度从海岛进攻,驻守会稽的徐州刺史谢琰战死,司马元显于是求领徐州刺史,加侍中、后将军、开府仪同三司、都督扬豫徐兖青幽冀并荆江司雍梁益交广十六州诸军事。同年十二月戊寅日,有彗星出现在天津,司马元显以此解录尚书事,但又加授尚书令。当时吏部尚书车胤不满司马元显骄傲放纵,于是去见司马道子,请他禁抑司马元显。司马元显知道后就去问司马道子究竟和车胤说了什么,但司马道子不答。司马元显一直追问,司马道子于是怒道:“你想幽禁我,不让我和朝士见面!”司马元显认为车胤离间其父子,于是暗中派人谴责车胤,车胤吓得自杀。
隆安五年(401年),孙恩再度进攻,被刘牢之击退后沿海北上,进逼京口,司马元显以栅阻断孙恩水军过石头城,又率兵拒战,但屡战不利,建康危急,只因北府军将领刘裕击败孙恩,最终令孙恩北走江北才解决危机。不过同时,荆州刺史桓玄借孙恩威胁京师的机会,声言率兵讨伐。司马元显在孙恩军退后就下诏书阻止桓玄,桓玄唯有罢兵。不过司马元显对桓玄十分畏惧,张法顺亦劝司马元显出兵消灭桓玄。司马元显于是派张法顺到京口联结刘牢之,但刘牢之有迟疑之色。张法顺回去后就认为刘牢之有貮心,建议司马元显杀了他。司马元显拒绝。
元兴元年(402年)正月,司马元显升骠骑大将军、征讨大都督,都督十八州诸军事,加侍中、黄钺、班剑二十人,并下诏讨伐桓玄,命刘牢之为前锋都督。当时张法顺建议司马元显逼刘牢之杀桓谦以示其忠心,亦可除了桓谦这个桓玄耳目,但司马元显认为没有刘牢之就不可能打败桓玄,而且若刘牢之不肯,战前诛杀大将不利人心,认为不可取,于是拒绝。不过当时司马元显有意尽诛诸桓,只因桓脩舅王诞劝阻司马元显才没成事。司马元显亦决定以桓谦代桓玄为荆州刺史,以其父桓冲在荆州的名望博取荆州人支持。
司马元显的大军将出发时,桓玄从兄骠骑长史桓石生派使者飞马告知桓玄,桓玄便决定顺江抵抗,更传檄京师,列举司马元显罪状。二月丙午日,晋安帝在西池为司马元显饯行,及后司马元显就登船准备出发,但却迟迟未发。桓玄到寻阳时仍未见朝廷军队,于是十分高兴,士气上升。而原先答应当内应的庾楷被桓玄发现图谋,被囚禁,而朝廷亦派了齐王司马柔之以驺虞幡命桓玄罢军,但被桓玄前锋所杀。二月丁卯日,桓玄至姑孰,派军击败并俘虏司马尚之,司马休之弃城逃走。前锋都督刘牢之却怕击败桓玄后会不容于司马元显,竟想借桓玄除去司马元显后再伺机消灭桓玄,所以一直不肯出军。而刘牢之亦因司马元显日夜酒醉而未得见,安帝饯行时亦未见司马元显对其礼待重视,所以于三月就投降了桓玄。
时桓玄逼近建康,司马元显才打算出发,但听到桓玄已到新亭后弃船,退屯于国子学堂。在宣阳门外列阵,但军中有言桓玄已到,司马元显于是打算领兵回宫城,但桓玄军队中有人拔刀从后大叫:“放仗!”司马元显军队自溃,司马元显僚属皆已散走,唯张法顺伴随。司马元显入相府向司马道子问计,但司马道子只能对其哭泣。桓玄随后派毛泰收捕司马元显,并缚他于舫前数落他,司马元显只得说:“是被王诞、张法顺误了。”
桓玄入京执掌朝政,将司马元显交付廷尉,于是杀害了司马元显及其六个儿子,司马尚之、庾楷、张法顺、毛泰等皆被处死。紧接着桓玄又指使御史杜竹林以毒酒害死其父司马道子。
元兴三年(404年),刘裕举义兵击败桓玄,大将军、武陵王司马遵承制追赠太尉,赐谥为忠。
晋孝武帝:元显夙令光懋,乃心所寄,诚孝性蒸蒸,至痛难夺。
司马道子幕僚:有明帝神武之风。
《晋书》叙述:1、聪明多涉,志气果锐。 2、元显性苛刻,生杀自己。
《晋书》史臣曰:元显以童丱之年,受栋梁之寄,专制朝廷,陵蔑君亲,奋庸琐之常材,抗奸凶之臣寇,丧师殄国。不亦宜乎!斯则元显为安帝之孙强,道子实晋朝之宰嚭者也。列代之崇建维城,用籓王室;有晋之分封子弟,实树乱阶。