Openers Niroshan Dickwella and Danushka Gunathilaka hit sublime centuries to help Sri Lanka humble Zimbabwe by eight wickets in the third one-day international in Hambantota on Thursday.

However, the win has come at a cost with the home side fined by the International Cricket Council for maintaining a slow over-rate earlier in the day.

Sri Lanka were deemed to be one over short of the target - factoring in time allowances - meaning captain Angelo Matthews was fined 20 per cent of his match fee and his teammates each forced to hand over 10 per cent of their payments for the day.

If a Mathews-led Sri Lankan side commits another over-rate offence within the next 12 months then the skipper will face a suspension.

— Mazher Arshad (@MazherArshad) July 6, 2017

Chasing 311 for victory, the hosts rode on a 229-run opening stand between Dickwella (102) and Gunathilaka (116) to canter home in 47.2 overs and earn a 2-1 lead in the five-match series.

The left-handed batting duo got their maiden ODI hundreds to overshadow Zimbabwe opener Hamilton Masakadza's sparkling 111 in the visitors' 8-310 after being put into bat first.

While wicketkeeper-batsman Dickwella hit 14 boundaries during his stay, Gunathilaka smashed 15 fours and a six to flay the Zimbabwe attack at the Mahinda Rajapaksa International Cricket Stadium.

Quick Single: Zimbabwe cricketer hospitalised in SL

"It was a fantastic effort by the boys. After losing the first game, we had our backs against the wall and we came back well," captain Mathews said.

"The way Dickwella and Gunathilaka batted, we could have chased 350 on that wicket," he said of his team that hunted down a 300-plus run target for the first time on home soil.

Off-spinner Malcolm Waller got Dickwella trudging back to the pavilion and left-arm orthodox Sean Williams cleaned up Gunathilaka, who received the Player-of-the-Match award, in an otherwise disappointing show by the Zimbabwe bowlers.

Upul Tharanga (44) and Kusal Mendis (28) then steered the team home with an unbeaten 75-run stand as the batting duo survived a dropped catch each as fielding lapses also hurt the visitors.

"The bowlers came back pretty well after the start that they (Zimbabwe) got. Hamilton played brilliantly, credit should go to him as well but the bowlers did well to keep them to 310," said Mathews.

Mathews also praised Tharanga, who is unbeaten in the series so far, for being "an absolute team man" after he once again dropped down the order to allow Dickwella and Gunathilaka open the innings.

Earlier Masakadza put on a crucial 127-run partnership for the second wicket with Tarisai Musakanda (48) before Sri Lankan bowlers struck back to check Zimbabwe's surge.

Masakadza's 98-ball knock, laced with 15 fours and a six, had Zimbabwe eyeing 350-plus at one point before a middle-order collapse pulled them back.

Teenage leg-spinner Wanindu Hasaranga, who took a hat-trick on his ODI debut in the second match in Galle, and paceman Asela Gunaratne grabbed two wickets each.

Sean Williams contributed with a gutsy 43 while cameos from wicketkeeper-batsman Peter Moor (24) and Sikandar Raza (25 not out) helped Zimbabwe cross the 300-run mark.

"We need to get runs on the board batting first, but 310 was enough, we just need to get better with the field...Our bowling was probably under par (as well)," Zimbabwe skipper Graeme Cremer said.

The action now shifts to the fourth ODI on Saturday at the same venue.