May 10, 2020
Sometimes you have content in a before element that you want to appear on top of a background image but behind other elements on the page. In my situation I had an image with a css triangle used as a mask over the image but wanted text to be able to appear on top of the triangle.
The image below shows what I was going for. There is a white triangle masking
the image and the text is visible on top of the triangle even though it is
position absolute. The key here is making sure the :before element has
z-index: 0
and any of the text elements are either in a flex
container or
have position: relative
with z-index: 1
.
<div class="body-wrapper"><h1 class="heading">@itwasmattgregg</h1></div>
.body-wrapper {background-image: url('https://codegregg.com/images/matt.jpg');background-size: contain;background-position: right;background-repeat: no-repeat;height: 600px;position: relative;}.body-wrapper::before {content: '';position: absolute;top: 0;height: 0;width: 0;z-index: 0;right: 440px;border-top: 600px solid #fff;border-right: 160px solid transparent;}.heading {z-index: 1;position: relative;}