Почему background перекрывает название кнопки?

Я хочу сделать эффект при наведении на кнопку, чтобы background плавно менялся слева на право, но он меняется и закрывает надпись на кнопке, как это исправить?

button:before {
    content:'';
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 42px;
    background:red;
    border-radius: 5px;
    transition: all 2s ease;
}

button:hover:before {
    width: 100%;
}


Ответы (2 шт):

Автор решения: BlackStar1991

Вы можете вынести текст, который находится в кнопке, на уровень выше. Например так:

<button>
  <span>
    Text
  </span>
</button>

А в стилях прописать

button span 
{ 
  position: relative;
  z-index: 2;
}
→ Ссылка
Автор решения: MyCatBulka

Вы можете добавить свойство z-index для :before, установив его значение меньше, чем у кнопки.

button {
    position: relative;
    z-index: 1;
}
button:before {
    content:'';
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 42px;
    background:red;
    border-radius: 5px;
    transition: all 2s ease;
    z-index: -1;
}
→ Ссылка