Hernandez fired the visitors ahead on 26 minutes with a sweetly struck left-footed shot from 20 yards that picked out the top corner after he had been afforded too much space.
The impressive Patrick Bamford doubled the advantage with a close-range header on 57 minutes after Hernandez had got past Callum O’Dowda to cross from the right.
And any doubt about the outcome was erased on 72 minutes when a Mateusz Klich shot was deflected into the path of Jack Harrison, who fired in from eight yards.
Andreas Weimann grabbed a consolation for City on 79 minutes when his low right-footed shot from inside the area took a deflection past Kiko Casilla.
But it was a well-merited three points for the visitors, cheered on by more than 2,200 travelling fans.
City set up with Famara Diedhiou as a lone central striker, supported by Kasey Palmer from midfield and it was a similar plan from Leeds with Klich pushing forward to support Bamford.
The home side had the first effort at goal on seven minutes when Palmer fired straight at Casilla with a 30-yard free-kick, having been brought down.
Bamford might have put Leeds in front on 15 minutes after a poor clearance by new City goalkeeper Dan Bentley, but the striker shot wide from a dangerous position.
Casilla had to be alert to race from his goal and rob Weimann, but it was Leeds looking more dangerous and Forshaw had a shot blocked by Tomas Kalas.
After the Hernandez goal, the game went quiet for a spell. But City were starting to threaten down the flanks and good work from winger O’Dowda led to Josh Brownhill’s low shot being well saved by the diving Casilla.
Forshaw shot wide when he might have tested Bentley from just outside the box and the visitors were good value for their interval lead.
Referee Tim Robinson was busy at the start of the second half, booking City’s Marlon Pack and Palmer, along with Leeds’ Forshaw and Hernandez in the space of ten minutes.
Bamford’s goal then gave Marcelo Bielsa’s team breathing space and they were looking the fitter and sharper side as Jack Harrison and Forshaw sent shots wide.
Lee Johnson had seen enough and made a double change on 63 minutes, sending on Jamie Paterson and Niclas Eliasson for O’Dowda and Palmer.
City played some of their best football after Harrison’s third goal for Leeds, Matty Taylor having replaced Diedhiou to loud cheers from home fans. But it was too little too late.