Federer beats Nadal 7-6 (7-3) 1-6 6-3 6-4 to win the crucial semi-final match.
Federer’s win gives him a shot at a record-extending 21st Grand Slam, while denying Nadal the chance of a 19th.
Federer, 37, will meet Serbia’s top seed Djokovic at 14:00 BST on Sunday.
Federer’s eight Wimbledon titles are more than any other man in history and if he beats Djokovic he will match Martina Navratilova’s success in women’s singles.
Defending champion Djokovic, 32, goes for his 16th Grand Slam triumph after beating Spain’s 23rd seed Roberto Bautista Agut in four sets earlier on Friday.
Djokovic’s win ensured it would be a major final between two of the ‘Big Three’ in the men’s game for the first time since the Serb beat Federer in the 2015 showpiece at the All England Club.