Colon pitched eight innings in all, walking none and striking out eight. Colon, now 8-9, threw 88 pitches -- 71 for strikes -- and lowered his ERA to 4.09.
The White Sox tied the game up at 1-1 in the second on a homer by Carlos Lee, his 19th of the season.
And took the lead in the third when an errant throw by third baseman Damion Rolls on an Aaron Rowand infield-single allowed Miguel Olivo to score from second.
The homer by Lee extended his hitting streak to 11 games, during which he's batting .359 (14-39), with five homers and 12 RBIs.
The Sox scored in each of the next three innings and every inning with the exception to the first and seventh. They went up 4-1 on a Paul Konerko two-run double in the fourth and went up 6-1 on a Frank Thomas two-run homer in the fifth.
Thomas, who now has 401 career homers, drove in his 59th RBI in the sixth with a soft single to right field, giving the Sox the 7-1 lead. Rowand put up the final runs with a two-run homer in the eighth, scoring Olivo.
Despite limited playing time since being called back up in early June, Rowand has more than doubled his average to .267, up from .133. He is batting .429 (12-28) over his last eight games.
Tampa Bay starter Joe Kennedy went 4 1/3 innings for the game, giving up five earned runs.
Kelly Wunsch threw a scoreless ninth inning to finish the game.
The Sox have Monday off before starting an important three-game series against the first-place Kansas City Royals on Tuesday at 7:05 p.m. CT. Mark Buehrle is scheduled to start. The Royals have yet to announce who will start. The game will be televised on Fox Sports Net.