Uruguay forward Edinson Cavani replied for Napoli with his 100th Serie A goal and 17th of the season to take his side level on points with Lazio in second place.
Napoli and Lazio both have 43 points from 21 games, five behind Juventus who thumped Udinese 4-0 on Saturday.
Giampaolo Pazzini scored twice, the second an exquisite lesson in close control, to give AC Milan a 2-1 win over Bologna while bottom club Siena ended a run of six successive defeats by beating Sampdoria 1-0.
Fourth-placed Inter drew 1-1 at AS Roma as Argentina forward Rodrigo Palacio scored in first-half stoppage time to cancel out a controversial penalty converted by Francesco Totti for the hosts.
Those results meant that Milan climbed above Roma into sixth place with 34 points, two behind Fiorentina and five adrift of Inter.
Fiorentina and Napoli served up a dismal opening half-hour, punctuated by cynical fouls, bickering and five yellow cards, before Roncaglia inadvertently put the hosts in front in the 33rd minute.
From just inside his own half, the Argentine defender floated a long ball forward into the Napoli penalty area where it was completely misjudged by De Sanctis, flew over the goalkeeper's head and bounced into the goal.
The usually dependable De Sanctis also collided with a defender while Roncaglia sheepishly celebrated.
Cavani spared Napoli's blushes nine minutes later when he scored with a glancing header following a low free-kick from the left.
It was his 66th league goal in only two-and-a-half seasons with Napoli to add to 34 goals in just over three seasons with Palermo.
Napoli could have won it in the second half but were denied by Fiorentina goalkeeper Neto who produced a miraculous save to stop Goran Pandev's header from six metres on the line.
Milan and Bologna also produced a dreary opening which matched the conditions on a foggy winter's afternoon at a sparsely-occupied San Siro.
Pazzini brought the game to life just after the hour when he scored with a shot which took a deflection of Mikael Antonsson.
He shone through the gloom again in the 82nd minute when he controlled Kevin-Prince Boateng's low cross with his back to goal, flicked the ball backwards over his marker, turned and placed his shot past Federico Agliardi.
Bologna, beaten 3-2 by Inter Milan in the Italian Cup in midweek after fighting back from 2-0 down, again sprung into life after going two goals behind and pulled one back with a Philippe Mexes own goal two minutes later.
Siena remained bottom with 14 points despite their win but are now only two points behind Palermo and three adrift of Genoa thanks to a 71st-minute header from 35-year-old Albania forward Erjon Bogdani against Sampdoria.
Genoa lost 2-0 at home to Catania with Argentine Gonzalo Bergessio scoring after four minutes and his compatriot Pablo Barrientos adding another in the 86th.
Marco Boriello produced an extr
Thank you for reading 5 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1