He made his claim to fame as Tristan Thorn in the movie Stardust. Later in his career, he played Owen Sleater in Boardwalk Empire and Ishmael in Moby Dick. In 2015, he landed the role of the title character in the Netflix series Daredevil.
He received his drama training at Sherborne School in Dorset.
He appeared in Stone of Destiny as Ian Hamilton.
He lived with his brother and his dog Dickon for many years. In October of 2016, he and his girlfriend Samantha Thomas had their first child, a daughter.
He had a reoccurring role on the HBO series Boardwalk Empire, which featured Steve Buscemi.