То, что вы хотите, не может быть сделано без JavaScript, но вы можете сделать наоборот: сделать ширину кнопки по умолчанию такой же ширины, как ширина, которая будет иметься при отображении жирным шрифтом.Одна хитрость для этого заключается в том, чтобы вставить жирный текст (незаметно), чтобы кнопка имела большую ширину.
Один из способов сделать это - поместить текст в атрибут и отобразить содержимое.атрибута в псевдоэлементе :: before.
В этом примере у меня есть две кнопки, одна с обработкой (которая всегда имеет «жирный» ширину) и для сравнения, одна ведет себя нормальным образом(т.е. становится шире, когда полужирный).
button:hover {
font-weight: bold
}
button::after {
content: attr(data-value);
}
button.launch::before {
content: attr(data-value);
visibility: hidden;
display: block;
height: 0;
font-weight: bold;
}
<button class="launch" data-value="This is example text"></button>
<hr>
<button data-value="This is example text"></button>
Надеюсь, это поможет в качестве обходного пути!