© Getty Images
Chances were few and far between in the opening 20 minutes, resulting in Danijel Subasic not making a save until the 21st minute, when Zanev tried to provide another cross for Bulgaria.
The visitors started to see more of the ball as the opening half progressed, allowing Ivan Rakitic to set up Croatia's first shot of the night with a corner to the head of Domagoj Vida, but his header was off target.
Rakitic was involved again shortly before the break as Croatia continued to apply the pressure, eventually finding Olic to head in the opening goal of the tie.
Bulgaria started the second half brightly as they pushed to get back on level terms, but the visitors cleared a Popov delivery shortly after the restart.
Popov continued to test the Croatia defenders later in the half, curling the ball in for Nikolay Bodurov, but his header failed to test Subasic.
The visiting keeper did have to intervene moments later as Andrej Galabinov delivered the ball back in for the hosts, but Subasic parried clear before Bulgaria could get their shot away.
Popov took a shot on himself late on as the hosts continued to press for an equaliser, but Subasic remained alert to keep Croatia ahead and seal the victory.
The result leaves Croatia top of Group H with wins from both matches so far, while Bulgaria sit third.