.parent {
    width: 100%;
    margin: 20px;
    height: 350px;
    border-radius: 4px;
    overflow: hidden;
    cursor: pointer;
}
.child {
    height: 100%;
    width: 100%;
    background-size: contain;
    background-repeat: no-repeat;
    -webkit-transition: all 1s;
    -moz-transition: all 1s;
    -o-transition: all 1s;
    transition: all 1s;
}
.products-link {
    display: none;
    font-size: 18px;
    font-weight: bold;
    color: #ffffff !important;
    font-family: sans-serif;
    text-align: center;
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    height: 50px;
    cursor: pointer;
}
.parent:hover .child, .parent:focus .child {
    -ms-transform: scale(1.2);
    -moz-transform: scale(1.2);
    -webkit-transform: scale(1.2);
    -o-transform: scale(1.2);
    transform: scale(1.2);
}
.parent:hover .child:before, .parent:focus .child:before {
    display: block;
    background: linear-gradient(to bottom,rgba(126,206,213,0.40) 25%,rgba(126,206,213,0.90) 100%);
}
.parent:hover span, .parent:focus span {
    display: block;
}
.child:before {
    content: "";
    display: none;
    height: 100%;
    width: 100%;
    position: absolute;
    top: 0;
    left: 0;
    -webkit-transition: all 2s;
    -moz-transition: all 2s;
    -o-transition: all 2s;
    transition: all 2s;
}
.bg-one {
    background-image: url(https://cdn.mos.cms.futurecdn.net/vEcELHdn998wRTcCzqV5m9.jpg);
    background-repeat: no-repeat;
    background-position: center;
}<div class="parent">
    <a href="#">
       <div class="child bg-one">
          <span class="products-link">Title 1</span>
       </div>
    </a>
</div>What I'm trying to achieve is to show a transition effect for .parent:hover .child:before, .parent:focus .child:before, which will make the background gradient show up and have a transition time.
I've tried using the same method for my zoom-in effect for .parent:hover .child, .parent:focus .child, and it works.
I also want the same transition to work for the text but it's the same issue with the background-gradient.
So I'm wondering what's causing the transition effect to not work on the pseudo element(:before)?
