Это можно использовать с помощью свойства backgroud-clip
.
Свойство background-clip CSS устанавливает, распространяется ли фон элемента под его рамкой, отступом или блоком содержимого.
MDN
Установите размер кнопки 40px x 90px и добавьте 3px отступа.
Затем при наведении установите background-clip: content-box
и цвет фона будет ограничен только содержимым, а не отступом.
преувеличенный пример ниже:
body {
background: lightgreen;
}
.button {
height: 30px;
width: 80px;
border-radius: 22px;
background: blue;
display: flex;
justify-content: center;
align-items: center;
margin: 2em;
padding: 8px;
border: 1px solid red;
color: white;
}
.button:hover {
background-clip: content-box;
}
<div class="button">Button</div>
Как видно из границы, размер кнопки не изменяется, а фон просто не распространяется на границу содержимого.