Morris began his career at Middlesbrough, having joined the club when he was eleven and made progress through the academy. He made his first-team debut on 5 January 2013 in an FA Cup tie away to Hastings United, a match that Middlesbrough won 4–1. He made his league debut on 4 May in a 2–0 defeat away to Sheffield Wednesday. Two months after making his debut, Morris signed his first professional contract with the club, which would keep him until 2016. On 21 November 2014, Morris signed for League Two club Burton Albion on a one-month loan. One day later, Morris made his debut, where he came on as a substitute for Adam McGurk, in a 1–0 victory over Luton Town. His impressive displays at Burton Albion prompted manager Jimmy Floyd Hasselbaink to tip him for greatness. On 13 December 2014, Morris provided an assist for Shane Cansdell-Sherriff to score the third goal in a 4–0 win over Hartlepool United. Despite Burton being keen to extend the loan it never materialised, and Morris returned to Middlesbrough, having made five appearances for Burton Albion. On 6 August 2015, Morris signed for Coventry City on a season-long loan, linking up again with Tony Mowbray, the manager under whom he had made his professional debut. He made six appearances, the last coming against Rochdale, for Coventry before being recalled by Middlesbrough on 26 October 2015. On 27 October 2015, Morris signed for League Two club York City on a one-month loan. On 28 January 2016, Morris signed for League One club Walsall on a two-month loan.
Shrewsbury Town
Morris was released from his Middlesbrough contract in order to join League One club Shrewsbury Town on 20 January 2017 on a contract until the end of 2016–17. He made his debut for the club the following day, as an 88th-minute substitute in a 1–0 home victory over Oldham Athletic. After featuring regularly to help the club escape relegation, he signed a two-year contract extension in June 2017. Morris joined Shrewsbury's League One rivals Wycombe Wanderers on 7 August 2018on loan until 3 January 2019.
Portsmouth
Morris signed for League One club Portsmouth on 14 January 2019 on a two-and-a-half-year contract for an undisclosed fee. He scored his first goal for Portsmouth in a 3–3 draw against Southend United on 16 February 2019. Morris was cup-tied for Portsmouth's win in the 2019 EFL Trophy Final.