Hi Sam,
Your first issue is that you’re doing far too much css. CSS works using the idea of a cascade, that is properties assigned lower down in the file overwrite properties written higher up, e.g.,
.myclass {
propA: 1;
propB: 1;
propC: 1;
}
.myclass:hover {
propA: 2;
}
.myclass{
propB: 3;
}
In this case, when no mouse over, elements with the attribute class=”myclass” will have the properties propA as 1, propB as 3, and propC as 1. When the mouse is over the element, propA is 2, propB is 3, and propC is 1.
Hence, as you just want to change the image being used as background on hover (in the before content), you just want the css:
.bop-nav-search:hover::before {
background-image: url(white-image-url);
}
to be put in after the not on hover stuff. Example.
In terms of safari, I can’t really help you. You could do some browser detection stuff (probably js) and come up with a different set up for safari; you could try using the z-index property as it sounds like the ::before content is possibly coming in over the top of the ordinary content; or, you could abandon safari as the worst browser in the world (I mean this – I would posit that modern day safari is worse than IE ever was).
Cheers,
Joe