If we use z-index combined with position: absolute; its possible to place the ::before of a element under itself. There is a good example on another question (jsfiddle.net/Ldtfpvxy).
Basically
<div id="element"></div>
#element { 
    position: relative;
    width: 100px;
    height: 100px;
    background-color: blue;
}
#element::after {
    content: "";
    width: 150px;
    height: 150px;
    background-color: red;
    /* create a new stacking context */
    position: absolute;
    z-index: -1;  /* to be below the parent element */
}
renders:

So the stacking context/order is defined by z-index. But when I apply z-index: 1; to the element and z-index: -1; to its ::before I cannot achieve the same thing. 
Only if I omit z-index from the element. 
Any ideas why this is? Is the element rendered after its ::before & ::after pseudos so they get the same z-index?
Working: https://jsfiddle.net/Ldtfpvxy/
Not working: https://jsfiddle.net/Ldtfpvxy/1/ (only added z-index: 1; to element)
 
     
     
     
    