Вы можете рассмотреть фон на главном элементе и сделать дочерний элемент позади.
.box {
background: rgba(255, 0, 0, 0.5);
}
.box>* {
position: relative;
z-index: -1;
}
.box:hover {
background: rgba(255, 0, 0, 0.8);
}
<div class="box">
<p>
Foo
</p>
<p>
Bar
</p>
</div>
Просто убедитесь, что в основном элементе не используется свойство, которое создаст контекст стека. По теме: Почему элемент со значением z-index не может покрыть своего потомка?