De gemeente Zonhoven heeft een oppervlakte van 39,34 km² met 4 buurgemeenten. In het noorden vormt de A2-E314 de scheidingslijn met Houthalen-Helchteren. In het oosten loopt de grens met Genk achter het natuurgebied de Teut en in het zuidoosten ligt het Provinciaal Domein Bokrijk, dat op het grondgebied van Genk ligt. In het zuiden vormt de Slangbeek gedeeltelijk de grens met Hasselt. Zonhoven in het westen en noordwesten aan de gemeente Heusden-Zolder. Hier loopt de grens dwars door het Vijvergebied Midden-Limburg richting het Kasteel Vogelsanck, dat in Heusden-Zolder ligt. De dichtstbij gelegen kernen zijn Houthalen en Meulenberg in het noorden, Winterslag in het oosten, Kiewit in het zuiden, Bolderberg in het westen en Zolder in het noordwesten.
Het natuurgebied de Teut in het noordoostelijke deel van de gemeente behoort tot het Limburgs Hoogplateau. Op de Teut liggen enkele kleine en middelgrote vijvers. Het zuidelijk deel van de Teut wordt Molenheide genoemd. De Teut wordt getypeerd door heidelandschappen en kunstmatige bebossing. De ondergrond bestaat uit zand en er zijn niveauverschillen van tientallen meters. Het hoogste punt van Zonhoven, op de Molenheide, bevindt zich 78 meter boven zeeniveau.
Het niveau daalt tot 30-35 meter in zuidwestelijke richting tot in het Vijvergebied Midden-Limburg, dat tot de Demervallei behoort. Dit gebied is zeer bosrijk en vormt het grootste aaneengesloten vijvergebied van België. De vijvers worden gebruikt voor commerciële visteelt. De Platwijers is een natuurreservaat in dit gebied en tevens de benaming voor het Zonhovense gedeelte ervan. Dit westelijke gedeelte van Zonhoven heeft een zandleemachtige ondergrond.
Drie valleien doorsnijden de hellende zandbodem van Zonhoven: de vallei van de Laambeek in het noorden, die van de Zonderikbeek in het midden en die van de Slangbeek in het zuiden. De Laambeek en Slangbeek vormen voor enkele kilometers de grens van Zonhoven met respectievelijk Houthalen-Helchteren en Hasselt. De Zonderikbeek staat bij Zonhovenaren bekend als de Roosterbeek. Deze beek ontspringt tussen Houthalen-Oost en Zwartberg en stroomt door de Teut. In het centrum van Zonhoven is ze overwelfd. Ze vormt ook deels de grens tussen de gehuchten Halveweg en Terdonk. De drie waterlopen monden alle in de Demer uit en maken deel uit van het stroomgebied van de Schelde.