Как скрыть псевдоэлемент за пределами родителя?

Нужно реализовать заливку кнопки "под углом". Для этого использую before, который представляет собой прямоугольник, повернутый на определенный угол, размеры которого увеличиваются, если навести курсор на кнопку.

.auth {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

.button {
  position: relative;
  display: inline-block;
  vertical-align: top;
  padding: 20px 45px;
  font-size: 13px;
  font-weight: 600;
  color: #fff;
  text-decoration: none;
  text-transform: uppercase;
  text-align: center;
  color: #191919;
  /* background-color: #fff; */
  background-color: transparent;
  border: 1px solid #191919;
  border-radius: 5px;
  cursor: pointer;
  outline: 0;
  transition: background-color 0.2s linear, color 0.2s linear;
}

.button:hover {
  color: #fff;
  /* background-color: #191919; */
}

.button::before {
  position: absolute;
  left: -50%;
  top: -100%;
  transform: rotate(-10deg);
  z-index: -1;
  display: block;
  width: 100%;
  height: 100%;
  overflow: hidden;
  content: '';
  background-color: red;
  transition: width 0.2s linear, height 0.2s linear;
}

.button:hover::before {
  width: 160%;
  height: 250%;
}
<div class="auth">
  <button class="button" type="submit">Войти</button>
</div>

Как сделать так, чтобы прямоугольник не отображался за пределами кнопки?


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

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

задай родителю overflow: hidden

.auth {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

.button {
  position: relative;
  display: inline-block;
  vertical-align: top;
  padding: 20px 45px;
  font-size: 13px;
  font-weight: 600;
  color: #fff;
  text-decoration: none;
  text-transform: uppercase;
  text-align: center;
  color: #191919;
  /* background-color: #fff; */
  background-color: transparent;
  border: 1px solid #191919;
  border-radius: 5px;
  cursor: pointer;
  outline: 0;
  transition: background-color 0.2s linear, color 0.2s linear;
  overflow: hidden
}

.button:hover {
  color: #fff;
  /* background-color: #191919; */
}

.button::before {
  position: absolute;
  left: -50%;
  top: -100%;
  transform: rotate(-10deg);
  z-index: -1;
  display: block;
  width: 100%;
  height: 100%;
  overflow: hidden;
  content: '';
  background-color: red;
  transition: width 0.2s linear, height 0.2s linear;
}

.button:hover::before {
  width: 160%;
  height: 250%;
}
<div class="auth">
  <button class="button" type="submit">Войти</button>
</div>

→ Ссылка
Автор решения: Zhihar

не подойдет ли вам маскироване и клипирование?

https://www.w3.org/TR/2012/WD-css-masking-20121115/

http://htmlbook.ru/css/clip

→ Ссылка