1864년(고종 1) 증광문과에 병과로 급제하고 이듬해 예문관검열 · 승정원주서를 거쳐 1866년 홍문관수찬이 되었다. 다음해에는 조만화(趙晩和)를 대신해 접위관(接慰官)이 되어 일본의 사신을 접대했고, 곧이어 1868년에는 평안남도암행어사가 되어 민정을 규찰하였다.
1869년 상호도감(上號都監)에서 도제조 이하를 시상할 때 우통례(右通禮)로 참가해 가자(加資)되었으며, 이듬해 승지를 지냈다.
그 뒤 1878년 성균관대사성 · 이조참의를 역임하고, 1881년 좌부승지로서 좌승지 박정양(朴定陽) 등과 함께 고종을 축출하고 왕위에 오르려던 이재선(李載先)을 제주도로 유배보내는 데 반대하고 극형을 주장하는 계(啓)를 올렸다.
1883년 이조참판, 1887년 시강원 겸 보덕을 지내고 1888년 한성부판윤이 되었다. 1889년에는 영조대왕옥책문(英祖大王玉冊文) 작성시 서사관(書寫官)으로 참여하였다.
이듬해 대왕대비가 사망하자 국장도감제조(國葬都監提調) · 예조판서에 임명되어 국장을 수행하다가 전례(典禮)의 절차에 대한 착오로 파직되었으나 곧 왕명에 의해 연임되었다. 다시 대호군으로서 중국의 사신을 호송하는 반송사(伴送使)를 맡았고, 이어 형조판서에 임명되었다.
1891년 한성부판윤에 재임명되고, 다음 해에는 선조대왕옥책문(宣祖大王玉冊文)의 서사관이 되었다. 1883년 공조판서를 거쳐 1884년 형조판서가 되었다. 그 해 국정을 개혁하기 위해 교정청을 설치했을 때 대호군으로 어윤중(魚允中) 등과 함께 교정청당상에 임명되고, 곧 이조판서 · 우찬성 등을 역임하였다.
1895년 중추원일등의관(中樞院一等議官)으로 칙임관(勅任官) 4등에 서임되었고, 1898년 궁내부특진관(宮內府特進官)이 되어 칙임관 2등이 주어졌다.
이듬해 장례원경(掌禮院卿)에 보직되어 왕실의 의례(儀禮)와 관련해 여러 차례 상주하였다. 다시 궁내부특진관이 되었으며, 1900년에는 창덕궁선원전제1실상량문(昌德宮璿源殿第一室上樑文)의 서사관으로도 활약하였다.
1904년 태의원경(太醫院卿)을 지내고, 이듬해 을사조약이 체결되어 보호국으로 전락하자 조약 반대의 소를 올려 매국노 박제순(朴齊純)이 의정서리(議政署理)가 되는 것은 불가(不可)하며, 조약을 배척해야만 국권을 회복할 수 있다고 주장하였다.
1910년 정헌(靖憲)이라는 시호가 주어졌다가 다시 효정(孝貞)으로 시호가 고쳐졌다.