Ha disputato nove finali nel circuito maggiore vincendone tre, tra cui spicca il Masters 1000 di Cincinnati nel 2022, torneo che ha conquistato come nº 152 del ranking ATP, la seconda più bassa classifica con cui sia mai stato vinto un titolo di questa categoria, dietro solo a quella del monegasco Valentin Vacherot a Shanghai nel 2025.

Il suo miglior risultato nelle prove del Grande Slam sono stati i quarti di finale agli US Open 2020, mentre il miglior ranking ATP è stata la 12ª posizione raggiunta nel novembre del 2018.

Nel 2013 ha esordito nella squadra croata di Coppa Davis, con cui ha vinto il trofeo nell'edizione 2018. Ha inoltre vinto la Hopman Cup 2023 insieme alla connazionale Donna Vekić. Tra gli juniores ha vinto gli US Open 2013 e ha raggiunto il primo posto nella classifica mondiale di categoria.

Carriera Juniores Tra gli juniores ottiene ottimi risultati e si fa notare già al Trofeo Bonfiglio del 2012, quando a quindici anni raggiunge le semifinali prima di arrendersi a Gianluigi Quinzi; Nell'ottobre successivo vince il suo primo titolo di Grade A imponendosi in doppio nella Osaka Mayor's Cup. Il salto di qualità arriva l'anno successivo, al primo Slam stagionale in Australia raggiunge le semifinali e viene sconfitto da Thanasi Kokkinakis, ripetendo poi il risultato al Roland Garros, dove cede a Cristian Garín. In settembre vince il titolo juniores agli US Open prendendosi la rivincita su Kokkinakis, battuto in tre set in finale, grazie a questo risultato raggiunge la vetta della classifica mondiale di categoria. Il torneo newyorkese è l'ultimo giocato tra gli juniores, e chiude l'esperienza dopo aver vinto 5 titoli in singolare e 2 in doppio.

2012-2013: inizi tra i professionisti, primi titoli ITF ed esordio in Coppa Davis

Fa le sue prime apparizioni tra i professionisti nel circuito ITF Futures e vince i primi incontri nel febbraio 2012. Nell'aprile 2013 alza il suo primo trofeo da professionista vincendo il titolo in singolare al torneo Futures Great Britain F9, e nell'arco della stagione si impone in altre quattro finali Futures. A luglio debutta nel circuito maggiore con una sconfitta in tre set contro Horacio Zeballos nel torneo ATP di Umago, un match nel quale comunque mostra ottime qualità. A settembre fa il suo esordio in Coppa Davis con la squadra croata e viene sconfitto al primo incontro da Andy Murray. In novembre disputa per la prima volta un torneo Challenger a Yokohama e raggiunge i quarti di finale.

2014: vittoria su Nadal, primo titolo Challenger, prima semifinale ATP e top 100 del ranking Il 4 aprile 2014 vince il suo primo match di Coppa Davis battendo al quinto set il numero 21 del mondo Jerzy Janowicz nella sfida vinta 3-1 con la Polonia; consegue così il suo primo successo su un top 100 del ranking e contribuisce al passaggio del turno della Croazia. Subito dopo gioca il suo ultimo torneo ITF. A luglio vince il suo primo incontro nel circuito maggiore al torneo ATP di Umago superando in due set Édouard Roger-Vasselin, si spinge fino ai quarti di finale e viene sconfitto da Fabio Fognini. Il mese dopo supera per la prima volta le qualificazioni in un torneo del Grande Slam agli US Open, al primo turno del tabellone principale concede solo 7 giochi al nº 27 ATP Lukas Rosol e viene eliminato al secondo da Víctor Estrella Burgos.

Il 21 settembre vince il suo primo titolo dell'ATP Challenger Tour a Smirne battendo in finale Malek Jaziri con il punteggio di 6-1 6-7 6-4; a fine torneo porta il miglior ranking al 140º posto. Il 24 ottobre 2014, nei quarti di finale del torneo ATP 500 di Basilea ottiene la sua prima vittoria contro uno dei primi dieci giocatori del mondo, sconfiggendo per 6-2, 7-6 il nº 3 del ranking Rafael Nadal. Verrà poi eliminato in semifinale da David Goffin in tre set. L'ottimo torneo disputato gli consente di approdare per la prima volta in carriera nella top 100 della classifica mondiale, al 93º posto. Il 5 novembre i colleghi dell'ATP gli assegnano il premio all'esordiente dell'anno, riservato al giocatore più giovane della Top 100.

2015: due semifinali ATP e 33º nel ranking

Nel 2015 si conferma uno dei più promettenti tennisti del circuito: è l'anno in cui per la prima volta prende parte a tutti gli Slam ed entra tra i primi 40 della classifica mondiale. Eliminato al primo turno al suo esordio agli Australian Open, all'ATP 500 dei Dubai Tennis Championships ottiene la sua seconda vittoria in carriera contro un top ten, sconfiggendo nei quarti di finale il nº 3 del mondo Andy Murray con il punteggio di 6-1 6-3; perderà il giorno seguente in semifinale contro il nº 2 Roger Federer. In primavera debutta anche nei tornei Masters 1000 raggiungendo il secondo turno a Indian Wells e Miami, mentre viene eliminato al primo turno a Montecarlo.

Dopo aver raggiunto i quarti all'Estoril, non supera le qualificazioni agli Internazionali d'Italia e raggiunge la seconda semifinale stagionale a Nizza, nella quale viene sconfitto da Leonardo Mayer. Alla sua prima partecipazione al Roland Garros si spinge fino al terzo turno superando Querrey e lo specialista della terra battuta Robredo, prima di perdere nuovamente contro Mayer. A Wimbledon esce di scena al secondo turno per mano di Seppi, che si impone al quinto set. Con i quarti di finale raggiunti a Umago porta il miglior ranking alla 33ª posizione mondiale.

La seconda metà dell'anno è più avara di soddisfazioni, raggiunge il secondo turno al Cincinnati Open e i quarti di finale a Winston-Salem, mentre al debutto agli US Open viene eliminato al primo turno in quattro set da Nadal. Subito dopo vince il suo secondo titolo Challenger a Barranquilla e contribuisce con due successi nel play-off di Coppa Davis contro il Brasile alla permanenza della Croazia nel Gruppo mondiale. Eliminato al secondo turno nei Masters 1000 di Shangai e Parigi, chiude la stagione alla 44ª posizione mondiale.

2016: prime finali ATP e finale in Coppa Davis

Il 2016 si apre con la sua prima finale in carriera nel circuito ATP a Chennai, sconfigge tra gli altri Roberto Bautista Agut e nel match che assegna il titolo cede al nº 4 del mondo Stan Wawrinka per 6-3, 7-5. Eliminato al primo turno degli Australian Open, supera un turno negli ATP 500 di Rotterdam e Dubai e contribuisce alla vittoria in Davis in Belgio superando nell'incontro decisivo Coppejans, dopo aver perso il primo singolare con Goffin. Raggiunge poi il terzo turno nel Masters 1000 di Indian Wells, dove elimina Pouille e Bellucci prima di cedere al nº 7 del mondo Berdych.

Ad aprile raggiunge la seconda finale ATP a Marrakech, dove approfitta del ritiro di Bolelli, supera Mathieu e Veselý prima di cedere a Delbonis per 6-2, 6-4. Dopo aver nuovamente disputato i quarti all'Estoril, come l'anno precedente raggiunge il terzo turno al Roland Garros con le vittorie su Fritz e Tomić prima della sconfitta subita contro Bautista Agut. Eliminato al primo turno a Wimbledon, nei quarti di finale di Davis giocati fuori casa contro gli Stati Uniti, perde il primo singolare contro John Isner e regala alla Croazia l'accesso alla semifinale vincendo l'incontro decisivo contro Jack Sock. Fa quindi il suo esordio olimpico ai Giochi di Rio de Janeiro e perde al primo turno.

Agli ottavi di finale a Cincinnati ottiene il terzo successo in carriera contro un top 10 sconfiggendo Nadal con un perentorio 6-1, 6-3, prima di essere costretto al ritiro contro Čilić per un problema al ginocchio nel suo primo quarto di finale in un Masters 1000. Dopo l'eliminazione al primo turno agli US Open, nella semifinale di Davis vinta a Zara contro la Francia viene battuto da Gasquet. Subito dopo è costretto a interrompere la stagione per sottoporsi a un intervento chirurgico al ginocchio, non potrà così prendere parte alla finale di Davis a Zagabria persa contro l'Argentina.

2017: primo titolo ATP

Torna alle competizioni all'inizio del 2017 ed esce al primo turno a Chennai. Vince il primo match stagionale a metà febbraio a Rotterdam contro Chačanov prima di essere eliminato da Čilić. A Miami elimina Granollers e il nº 8 del mondo Thiem, cedendo poi al tie break decisivo contro Mannarino al terzo turno. Il 16 aprile 2017 vince il suo primo titolo del circuito maggiore all'ATP 250 di Marrakech battendo in finale Philipp Kohlschreiber con il punteggio di 5-7, 7-6, 7-5. Al Madrid Open fallisce le qualificazioni, ma grazie al ritiro di Richard Gasquet entra in tabellone come lucky loser. Dopo aver superato Miša Zverev e Pierre-Hugues Herbert, al terzo turno coglie la sua prima vittoria contro un nº 1 del mondo, battendo Andy Murray con un doppio 6-3. Raggiunge così per la prima volta i quarti di finale in un Masters 1000 e viene eliminato in due set da Dominic Thiem. Torna poi in campo a Lione e viene sconfitto da Nikoloz Basilašvili.

Al Roland Garros viene eliminato al secondo turno da Steve Johnson. Esce quindi al primo turno sia al torneo di Adalia che a Wimbledon. A Montreal viene sconfitto al secondo turno da Rafael Nadal e a Cincinnati perde al primo turno contro Basilashvili. Torna a disputare i quarti di finale a Winston-Salem battendo Donald Young e John Isner, prima di arrendersi a Jan-Lennard Struff. Agli US Open elimina Jiří Veselý al primo turno e al secondo il nº 6 del mondo Alexander Zverev, sconfitto in quattro set, e al terzo turno raccoglie solo 9 giochi contro Kevin Anderson. A fine stagione perde al secondo turno a Basilea e al Paris Masters contro Čilić. Si qualifica per le Next Generation ATP Finals di Milano come testa di serie nº 4, arriva in semifinale eliminando Karen Chačanov, Daniil Medvedev e Jared Donaldson e viene sconfitto da Andrej Rublëv in tre set. Chiude l'annata al 48º posto della classifica ATP.

2018: primo titolo ATP 500, prima finale Masters 1000, nº 12 del ranking e trionfo in Coppa Davis

Fa il suo esordio stagionale a Doha e al primo turno elimina il nº 10 del mondo Pablo Carreño Busta, raggiunge i quarti e viene di nuovo sconfitto da Rublev. Esce di nuovo al primo turno agli Australian Open, torna protagonista nel primo turno di Coppa Davis vinto 3-1 contro il Canada imponendosi in entrambi i singolari. Esce nei quarti anche a Dubai a Indian Wells raggiunge per la prima volta la semifinale in un Masters 1000 battendo nei quarti di finale al tie-break decisivo il nº 9 del mondo Kevin Anderson; viene eliminato dal nº 1 Roger Federer, che si impone con il punteggio di 5-7, 6-4, 6-4. Al successivo Miami Open esce nei quarti di finale per mano di Alexander Zverev. Perde quindi il primo singolare contro Michail Kukuškin nella sfida vinta 3-1 contro il Kazakistan. I risultati più significativi dei tornei primaverili su terra battuta sono i terzi turni raggiunti a Madrid e al Roland Garros, dove viene eliminato rispettivamente da Dominic Thiem e Diego Schwartzman.

Il 24 giugno vince sull'erba di Halle il suo secondo titolo in carriera, il primo di categoria 500; al primo turno elimina in due set il nº 3 del mondo Alexander Zverev e vince la finale contro il nº 1 del mondo Roger Federer con il punteggio di 7–6(6), 3-6, 6-2, risultato con cui entra nella top 20 del ranking. Eliminato al turno di esordio a Wimbledon, inizia la stagione sul cemento americano con le eliminazioni al secondo turno nei Masters 100 di Toronto e Cincinnati, sconfitto rispettivamente da Marin Čilić e Nick Kyrgios. Agli US Open 2018 raggiunge per la prima volta in carriera gli ottavi di finale in un Grande Slam, e viene eliminato dal futuro finalista e nº 3 del mondo Juan Martín del Potro. Sempre a settembre risulta decisivo nella semifinale di Coppa Davis a Zara contro gli Stati Uniti, nel primo singolare ha la meglio su Steve Johnson e soprattutto battendo in rimonta al quinto set Frances Tiafoe nell'ultimo match, regalando alla Croazia il punto del 3-2 e l'accesso alla finale.