Примечание. Даже если этот ответ принят, ответ ниже является более точным и в настоящее время поддерживается во всех браузерах, если у вас есть возможность использовать фоновое изображение.
Нет, в CSS нет единственного способа сделать это в обоих направлениях. Вы можете добавить
.fillwidth {
min-width: 100%;
height: auto;
}
Чтобы элемент всегда имел его ширину 100% и автоматически масштабировал высоту до соотношения сторон, или обратное:
.fillheight {
min-height: 100%;
width: auto;
}
чтобы всегда масштабировать до максимальной высоты и относительной ширины. Чтобы сделать то и другое, вам нужно определить, является ли соотношение сторон выше или ниже, чем у контейнера, а CSS не может этого сделать.
Причина в том, что CSS не знает, как выглядит страница. Он устанавливает правила заранее, но только после этого элементы визуализируются, и вы точно знаете, с какими размерами и коэффициентами вы имеете дело. Единственный способ обнаружить это с помощью JavaScript.
Хотя вы не ищете JS-решение, я все равно добавлю его, если кому-то оно может понадобиться. Самый простой способ справиться с этим с помощью JavaScript - добавить класс, основанный на разнице в соотношении. Если отношение ширины к высоте поля больше, чем у изображения, добавьте класс «fillwidth», иначе добавьте класс «fillheight».