background-size は max() や min() を許容するので 最大サイズと 可変サイズを合わせて min() すれば いいのではないでしょうか?(なんなら calc() で計算してもいいかもしれません。
例えばこう
このコードだと 幅が 100% か 500px の 小さい方なので 500px 未満になると その幅に合わせて小さくなります。高さは auto なので 幅に 比率を合わせます
css
1:root {
2 background-image: url(https://picsum.photos/id/0/300/300);
3 background-repeat: no-repeat;
4 background-position: center center;
5 background-size: min(100%, 500px) auto;
6}
参考
追伸
background-size の仕様を確認したら background-size: 数値
は background-size: 数値 auto
の省略形だそうで、 上記の例だと background-size: min(100%, 500px);
でも全く同じ動作しますね。
In the following example, the background is shown with a width of 3em and its height is scaled proportionally to keep the original aspect ratio:
css
1div {
2 background-image: url(image2.png);
3 background-repeat: repeat; /* default */
4 background-size: 3em } /* = '3em auto' */
EXAMPLE14 - CSS Backgrounds and Borders Module Level 3