Причина?
Я бы предположил (необразованным), что это вызвано субпикселями при масштабировании.Он не может быть частью пикселя, поэтому он выбирает значение целого пикселя;Расчетное значение родителя на 1 пиксель больше, чем значение, данное детям в некоторых масштабах.
Обходной путь
Снимите границу с самой кнопки div и поместите ее на псевдо- ::after
элемент, поэтому граница и фон являются дочерними.Граница теперь масштабируется в соответствии с градиентом фона.
Пример
.Button {
width: 200px;
height: 30px;
cursor: pointer;
padding: 0.8rem;
position: relative;
margin-top: 10px;
transition: color 0.2s;
}
.Button::before {
content: '';
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-image: linear-gradient( to right, green 0%, blue 100%);
opacity: 0.2;
transition: opacity 0.2s;
}
.Button:hover::before {
opacity: 0.5;
}
.Button:active::before {
opacity: 1;
}
.Button::after {
content: '';
border-style: solid;
border-image: linear-gradient( to right, green 0%, blue 100%);
border-image-slice: 1;
border-width: 1px;
position: absolute;
left: 0;
right: 0;
bottom: 0;
top: 0;
}
html {
height: 100%;
display: table;
margin: auto;
}
body {
background: black;
display: table-cell;
vertical-align: middle;
color: white;
font-family: sans-serif;
}
Click it:
<div class="Button"></div>