Lucas Piazons lugna avslutning gav besökarna en välförtjänt 1-0 halvtid ledning.
Fulhams Floyd Ayite utnyttjade sitt slarviga försvar för att mata Tom Cairney, som sköt i den andra.
Vinsten lyfte Slavisa Jokanovic sida till inom sex punkter av de sex bästa, med ett spel i handen, medan City har förlorat 10 av sina senaste 13 ligan spel.
Milan Djuric hade utan tvekan värdarnas bästa chans innan pausen, men han ledde David Cotterills farliga kors snävt över crossbaren.
Besökarna hade tid på bollen tidigt och några prydliga passerar matade Piazon, som fint lyfte bollen förbi den on-rusande Fabian Giefer för öppnaren.
Ett dåligt avstånd från Adam Matthews ledde sedan till Fulhams andra, när Cairney surrade Ayites pass in i övre hörnet.
Fulham, som nu har vunnit fem av sina senaste sju matcher i alla tävlingar, kunde ha lagt till sin räkning, men Kevin McDonald såg ett hörn precis över baren.
Boos hälsade halvtid och heltid visslingar på Ashton Gate, liksom det andra målet, med Robins fans ventilerar sin frustration när de såg sin sida förlora för en 13: e gång i 17 liga matcher.
Bristol Citys huvudtränare Lee Johnson sade till BBC Radio Bristol: " Jag är uppenbarligen arg, sårad och besviken.
"Vi hade inte lagets energi idag. Jag måste hitta ett team och en formation som ger oss talang och energi att komma nära folk.
"Jag tror inte att vissa spelare gjorde tillräckligt, när det gäller energi. Men vi måste tillbaka till ritbordet.
"Jag förstår fansens frustrationer helt och hållet. 100%, jag är med dem."
Fulham manager Slavisa Jokanovic: "Vi spelade ett mycket bra spel. Vi vann tre poäng, vi tog en ren lakan och vi klippte avståndet mellan oss och de bästa lagen i mästerskapet.
"Jag måste vara nöjd med hur mitt lag slåss och hur de koncentrerade sig efter vår FA Cup exit för några dagar sedan.
"Lucas Piazon kämpar för varje boll. Han har jobbat mycket hårt hela säsongen och idag gjorde han ett mycket trevligt mål."
Matchen slutar, Bristol City 0, Fulham 2.
Andra halvlek, Bristol City 0, Fulham 2.
Försök missade. Bobby Reid (Bristol City) höger fotade skott utanför lådan är för hög. Hjälpt av Matty Taylor.
Offside, Bristol City. Gary O'Neil försöker ta sig igenom bollen, men Bobby Reid fångas offside.
Foul av Sone Aluko (Fulham).
Scott Golbourne (Bristol City) vinner en frispark i defensiva halvan.
Försening över. De är redo att fortsätta.
Försening i match Kevin McDonald (Fulham) på grund av en skada.
Handboll av Matty Taylor (Bristol City).
Försök missade. Kevin McDonald (Fulham) header från mitten av lådan är bara lite för hög. Hjälpt av Stefan Johansen med ett kors som följer ett hörn.
Hörnet, Fulham. Sammankallad av Aden Flint.
Hörnet, Fulham. Förföljd av Fabian Giefer.
Försöket räddades. Bobby Reid (Bristol City) höger fotade skott från utsidan rutan sparas i nedre högra hörnet. Hjälpt av Joe Bryan.
Tom Cairney (Fulham) vinner en frispark i den defensiva halvan.
Foul av Bailey Wright (Bristol City).
Substitution, Fulham. Sone Aluko ersätter Neeskens Kebano.
Ful av Kevin McDonald (Fulham).
Bobby Reid (Bristol City) vinner en frispark i den defensiva halvan.
Tim Ream (Fulham) visas det gula kortet för en dålig foul.
Ful av Tim Ream (Fulham). - (EN) Herr ordförande!
Milan Djuric (Bristol City) vinner en frispark på högerkanten.
Substitution, Fulham. Ryan Fredericks ersätter Lucas Piazon.
Neeskens Kebano (Fulham) vinner en frispark i anfallshalvan.
Foul av Bailey Wright (Bristol City).
Försök missade. Milan Djuric (Bristol City) vänster fotade skott från utanför lådan missar till höger. Hjälpt av Matty Taylor med ett nyckelkort.
Försök missade. Stefan Johansen (Fulham) vänster fotade skott utifrån lådan är bara lite för hög. Hjälpt av Kevin McDonald.
Försök blockerat. Matty Taylor (Bristol City) höger fotade skott från mitten av lådan är blockerad. Hjälpt av Milan Djuric med ett huvudkort.
Offside, Fulham. Tom Cairney försöker en genom boll, men Chris Martin fångas offside.
Neeskens Kebano (Fulham) vinner en frispark i den defensiva halvan.
Foul av Bailey Wright (Bristol City).
Substitution, Bristol City. Gary O'Neil ersätter Jens Hegeler.
Substitution, Fulham. Chris Martin ersätter Floyd Ayité.
Jens Hegeler (Bristol City) visas det gula kortet.
Tom Cairney (Fulham) vinner en frispark i den defensiva halvan.
Foul av Jens Hegeler (Bristol City).
Hörnet, Bristol City. Förföljd av Kevin McDonald.
Substitution, Bristol City. Lee Tomlin ersätter Adam Matthews.
Offside, Fulham. Tomas Kalas försöker en genom boll, men Floyd Ayité fångas offside.
Offside, Bristol City. Fabian Giefer försöker en genom boll, men Milan Djuric fångas offside.
Mål!  Bristol City 0 och Fulham 2. Tom Cairney (Fulham) vänster fotade skott från vänster sida av lådan till övre högra hörnet. Hjälpt av Floyd Ayité.
Fulham hävdade en tredje mästerskapsvinst i rad med en bekväm seger vid Ashton Gate som lämnade Bristol City bara två punkter över nedflyttningszonen.