Born in Ashford in suburban Adelaide, Bradley made his senior debut in 1981 as a seventeen-year-old for Port Adelaide in the South Australian National Football League (SANFL), which proved to be Port's third premiership season in a row. In his second season, Bradley won Port Adelaide's Best and Fairest award, and won two more, in 1984 and 1985. Victorian Football League (VFL) club Essendon approached Bradley in 1981, but Bradley turned down the offer, wishing to remain in South Australia with Port Adelaide and to build on his promising cricket career. After 98 games with Port Adelaide, Bradley was recruited by VFL club Carlton in 1986 as part of a recruiting drive that also netted future captain Stephen Kernahan and Peter Motley.
Bradley had already played first class cricket for South Australia and various Australian junior sides and at first continued to play cricket for Victoria, although the increasing demands of football led him to retire from cricket after four first-class games. He played grade cricket for Port Adelaide until 1987/88 (originally returning to South Australia each summer after the football season to do so), and from 1988/89 until his retirement from cricket, he played district cricket in Victoria for the Melbourne Cricket Club. Bradley holds the distinction as the last active VFL/AFL player to win a Victorian district cricket premiership, achieving the feat in 1988/89.
Bradley won three Robert Reynolds Trophies as Carlton's Best & Fairest, in 1986, 1988 and 1993, as well as being a member of the 1987 and 1995 premiership sides. Bradley played with Carlton for seventeen seasons, acting as Kernahan's vice captain from 1990 until 1997, then captaining Carlton from 1998 to 2001. In this time, Bradley also represented Australia three times in the International Rules series, including as vice-captain in 2000 and captain in 2001. He broke Bruce Doull's Carlton games record in Round 1, 2002. Bradley's final AFL game, against Port Adelaide, was Round 19, 2002, polling 3 Brownlow Votes, at the age of 38 years, 9½ months, making him the sixth-oldest player in the history of the league. His final appearance overall was in the 2002 International Rules series.
In a senior career spanning 22 seasons, Bradley was renowned as one of the games tireless champions, and in particular his amazing fitness that meant he could play the physically demanding game of Australian rules football until the age of 38. For much of his career, Bradley played in the midfield, rotating into the forward line during games, where his nous allowed him both to score and assist many goals through his career. In his final few seasons, Bradley spent more time acting as a loose, sweeping half-back flanker, and much of Carlton's drive forward came from his play through the wings.
Bradley's services to the game have been officially recognised several times at the highest levels. He was immediately inducted into the Australian Football Hall of Fame in 2006, after the minimum three years of retirement. At Carlton, Bradley is an Official Legend of the club's Hall of Fame, and was selected on the wing in the club's Team of the Century. He was also selected on the wing in Port Adelaide's Team of the Century.
In November 2002, following Carlton's salary cap breach which lost the club valuable draft picks, Bradley had contemplated reversing his decision to retire and attempt to rebuild a club in crisis, but he eventually stood by his initial decision to retire from the game, which was made three weeks before the salary cap drama occurred.
In 2007, Bradley returned to Carlton as a part-time assistant coach.
Craig Bradley's 375 games for Carlton, including 24 finals, is a club record. It was also, at the time of his retirement, the fourth-highest number of games played by any player in the VFL/AFL, behind only Simon Madden (378), Kevin Bartlett (403) and Michael Tuck (426). As of April 2014, he is sixth all-time.
In addition to his time at Carlton, Bradley also played 98 games for Port Adelaide in the SANFL in 1981-85 (despite missing a large part of the 1983 season, touring England with the Young Australia cricket team), in a time where senior games in the SANFL were considered equivalent to those in the VFL. He also represented South Australia nineteen times – in most years of his career from 1983 up until 1999, which was the final season of State of Origin football. He also played in nine International Rules games for Australia, which are also considered to be senior games. As such, he played 501 senior Australian football games, which is an all-time world record as far as any historians can trace . Bradley also represented Carlton a further 27 times in the night series, which (unlike in the Western Australian and South Australian leagues) are not counted as senior games by the AFL. Bradley's 500th game was the first international rules test against Ireland at Croke Park in 2002.