I'm having a hard time solving this mystery. I have created a "knockout text" effect and added a separator using :after to a h2. It looks great on everything I've tested it on except for Safari on iOS (10.3.2).
Link to fiddle with a broken and temporary fix.
h2.gradient {
color: #013c65;
font-weight: 600;
text-transform: uppercase;
font-size: 2em;
line-height: 1em;
background: linear-gradient(1deg, #800909, #332222);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-moz-background-clip: text;
-moz-text-fill-color: transparent;
-ms-background-clip: text;
-ms-text-fill-color: transparent;
background-clip: text;
text-fill-color: transparent;
}
h2.gradient:after {
content: '';
position: relative;
display: block;
height: .12em;
width: 2.5em;
background-image: linear-gradient(1deg, #800909, #332222);
top: .5em;
}
Looks like the problem seems to be with combining background-clip: text;
, text-fill-color: transparent;
, and with the pseudo element: display: block;
.
I am able to absolute position and display inline-block the pseudo element. For the time being, I've wrapped the header in <div class="special-heading">
and added separator after the div.
Would there be a reason why iOS doesn't like this or has anyone else experienced similar problems? I've found that adding a zero-width space ​
magically makes it work.
I'm thinking this might be a bug, however, because I am able to get the original method working occasionally with the web inspector open on my Mac.
Thanks for your thoughts!
I faced similar issue and found alternative solution in separate thread.
The idea is to change display property to inline: display: inline
. Doesn't require "HTML hacks".
Although this fix might not fit your layout needs, that's the only solution that worked for me from CSS perspective.