#css #firefox #aspect-ratio
#css #firefox #соотношение сторон
Вопрос:
Я создал простой div со свойством соотношения сторон, установленным как дочерний элемент другого div. Внутренний div должен заполнять все возможное пространство (но при этом соблюдать переданное соотношение сторон).
Он работает, как и ожидалось, в браузерах на основе chromium, но в Firefox кажется, что он игнорирует соотношение сторон, когда установлено значение width: 100%, а внутренний div растягивается.
.box {
width: 100%;
max-height: 100%;
aspect-ratio: 1 / 1;
border: 2px dashed black;
background-color: lightblue;
}
.container {
height: 50vh;
}
<div class="container">
<div class="box">
Sample content
</div>
</div>
Комментарии:
1. Почему вы устанавливаете ширину на 100%, если вы не хотите, чтобы она была шириной 100%?
2. @xdumaine я хочу, чтобы оно было шириной 100%, пока не будет достигнута максимальная высота.
Ответ №1:
это aspect-ratio
слабое объявление, поэтому то, что вы получаете в Firefox, можно считать правильным, потому что элемент соблюдает width
и max-height
предшествует aspect-ratio
. Я бы даже сказал, что поведение Chrome является неправильным.
Стоит отметить, что aspect-ratio
только установите предпочтительное соотношение сторон ref, чтобы обеспечить аналогичное поведение элементу изображения, который имеет внутреннее соотношение сторон. Это никогда не предназначалось для принудительного изменения соотношения элементов.
Используйте изображение в вашем примере, и вы получите тот же результат, что и в Firefox
.box {
width: 100%;
max-height: 100%;
/*aspect-ratio: 1 / 1;*/
}
.container {
height: 50vh;
}
<div class="container">
<img src="https://picsum.photos/id/237/300/300" class="box">
</div>
Приведенное выше даст вам растянутое изображение, которое подтверждает правильное поведение Firefox
Ответ №2:
Использование max-width: 100% вместо этого отлично работает для меня в Chrome и firefox:
.box {
max-width: 100%;
max-height: 100%;
aspect-ratio: 1 / 1;
border: 2px dashed black;
background-color: lightblue;
}
.container {
height: 50vh;
}
<div class="container">
<div class="box">
Sample content
</div>
</div>