Fransson werd geboren in Norrköping en verruilde op veertienjarige leeftijd Lindö FF voor IFK Norrköping. Op 1 april 2013 debuteerde hij in de Allsvenskan tegen Mjällby AIF.[3] Zijn eerste competitiedoelpunt volgde op 14 augustus 2014 tegen datzelfde Mjällby AIF. In 2015 had de middenvelder met vijf doelpunten in negenentwintig competitiewedstrijden een aandeel in de landstitel van Norrköping. In januari 2016 tekende Fransson een contract tot medio 2020 bij FC Basel.
Op 6 januari 2016 debuteerde Fransson voor Zweden in de vriendschappelijke interland tegen Estland. Bondscoach Erik Hamrén gunde hem een basisplaats en verving hem na 56 minuten voor Sebastian Eriksson.[4] Vier dagen later speelde hij zijn tweede interland in de oefenwedstrijd tegen Finland. Fransson kwam na 62 minuten in het veld als invaller voor Viktor Claesson.[5]