Labour and the Conservatives have both lost control of key councils in local elections across England.
Labour failed to take several targets from the Tories, including Wandsworth in London, but won back Plymouth and became the largest party in Trafford.
The Tories benefited from a collapse in UKIP’s vote in many areas, celebrating wins in Basildon and Peterborough.
The Lib Dems regained control of Richmond, in London, from the Tories and gained seats elsewhere.
A total of 4,371 seats are up for grabs in 150 local councils in what is the first England-wide test of political opinion since last year’s general election.
With more than half of results in so far, Labour have held on to 46 councils and took control of Plymouth from the Conservatives – a result Tory MP Johnny Mercer blamed on the government’s handling of defence issues.
But Labour lost control of Nuneaton and Bedworth in Warwickshire, after the Conservatives took eight of their seats, and Derby – where its council leader lost his seat to UKIP.
The Conservatives have won Basildon in Essex, which was previously under no overall control, benefiting from the implosion of the UKIP vote. They also held on in Swindon, despite a well-resourced Labour campaign.
Polling expert Professor Sir John Curtice said the Tories were performing relatively well in areas with a substantial Leave vote in the 2016 referendum, where they are picking up votes from UKIP, which did not stand candidates in many areas, while Labour were performing better in places where the Remain vote was stronger and with a higher proportion of younger voters.
Shadow Chancellor John McDonnell told the BBC Labour was looking for “incremental gains” to lay the foundations for the next general election rather than “big swings” in support. He criticised “some of the hype” during the campaign about Labour’s chances in London.
London Mayor Sadiq Khan, who said during the campaign there should be “no no-go areas” for Labour, said the party always had “a mountain to climb” to win places like Wandsworth and the party should be happy with boosting overall representation.
By BBC Political Editor Laura Kuenssberg
Before the full picture is clear, it looks as if Labour has moved on slightly since the general election.
But, in the words of Sir John Curtice, Jeremy Corbyn’s party has come out of this more or less “empty-handed”, and they can’t show the kind of progress they would be shouting about if they were truly convinced they were on a rapid march to Number 10.
The Tories have avoided the kind of wipe-out they feared and there will be huge relief in Conservative HQ this morning.
About two thirds of the results will be declared overnight. The rest are being counted during the day on Friday with results expected during the afternoon.
There was controversy earlier as some voters in Swindon, Woking and Bromley were reportedly prevented from voting after turning up without the required identity documents. The three areas were among five trialling voter ID in an initiative attacked by Labour. Turnout was up in Swindon, suggesting the ID pilot did not affect the vote there.
Labour is defending the highest number of seats – more than 2,200 – and throughout the campaign were talking up their prospects in London, where they made gains in last year’s general election.
Party sources say they still have a “fighting chance” of taking Barnet from the Conservatives but their hopes of seizing control of Wandsworth and Westminster, held by the Tories for decades, proved unfounded while the party lost ground in Hillingdon.
Labour also fell some way short in Kensington and Chelsea Council, where the Conservatives have been fiercely criticised for their handling of the Grenfell Tower disaster, although it did pick up a number of seats.
Energy minister Claire Perry said the Conservatives, who are defending about 1,350 seats, had been preparing to “batten down the hatches” after eight years in government but were not “taking the hit” they might have feared while International Trade Secretary Liam Fox said the results were at the “higher end” of expectations.
The Lib Dems are confident of winning back control of Kingston-upon-Thames, lost to the Tories four years ago, after taking neighbouring Richmond – which had a large majority in favour of the remaining in the EU.
The party also withstood a strong Conservative challenge to hold onto Sutton in south-west London – while it picked up nine seats in Kingston-upon-Hull.
Lib Dem culture spokeswoman Christine Jardine said the party had clearly “turned a corner” after the troubles of recent years and “people are coming back to us”.
It was also a positive night for the Greens, which took two seats off Labour in Sheffield, where the Labour-run council has been engulfed in a row over the felling of thousands of trees. The party, which is defending 31 seats, also added two new councillors in Trafford and one in Worcester.
It has been a different story for UKIP which has haemorrhaged support, losing nearly all of the council seats it won in 2014, when it broke through into local government for the first time.
The Eurosceptic party, which put up candidates in only 540 seats compared with 2,193 in 2014, lost all ten seats it contested in Basildon, five in Thurrock and seven in Dudley.
Former deputy chair Suzanne Evans hailed its success in winning three seats in Derby as a sign it could still “put the cat among the pigeons”, adding: “If UKIP does crumble I think you could still arguably make the case that it’s been one of the most successful political parties in history.”
In addition to the council polls, mayors are being elected in Watford, Hackney, Newham, Lewisham and Tower Hamlets while the first-ever mayor for the Sheffield City Region will also be chosen.
There are no local elections in Scotland, Wales and Northern Ireland. However, a parliamentary by-election for the Westminster seat of West Tyrone took place, with Sinn Fein retaining it.