Получить процент от наименьшего из размеров родительского элемента

Описание

То, что мне нужно очень похоже на vmin и vmax, но не одно и тоже.
К примеру, vmin возвращает процент от наименьшего из размеров экрана (точнее viewport, не смог точно переводить).
Мне нужно что-то, что возвращает процент от наименьшего из размеров родителя.

Вопрос

Есть ли такое, способ без костылей?
Ну... конечный вариант, есть способ с костылями?


Ответы (2 шт):

Автор решения: Gotha

вот мой кусок кривого кода. Юзается для масштаба по минимальной стороне ,а от переменой уже стили пляшут как хотят .Там и % можно получить который тебе нужно. Цифры это вроде конкретно под мой проект можешь удалить их или оставить я уже не помню почему именно такие они за масштаб значения отвечают вроде. меняй window на кого хочешь и будет счастье.

    var world_size = ()=>{
                          var  SIZE_PX
                           if(window.innerHeight*1.243 > window.innerWidth) SIZE_PX = ~~parseInt(window.innerWidth*0.805*0.97)/8
                            else                                            SIZE_PX = ~~parseInt(window.innerHeight*0.97)/8

                             document.body.style.setProperty('--world_size',  SIZE_PX+'px')    
    }
                         window.onload = world_size
                         window.addEventListener('resize',  world_size, true);

юзал как то так

chat_box {
    height: calc(var(--world_size)/2.2); 
     width: calc(var(--world_size)/2.2);
}
→ Ссылка
Автор решения: UModeL

Как я понял, Вам нужно добиться поведения схожего с object-fit: contain, только не для картинки, а для блока.

Предложу вариант с абсолютным позиционированием и автоотступами:

div#parent {
  position: fixed;
  inset: 0;
  /* For example only --> */ overflow: hidden; resize: both;
}

div#child {
  position: absolute;
  left: 0; right: 0;
  top: 0; bottom: 0;
  margin: auto;
  max-height: 100%;
  aspect-ratio: 1 / 1;
  /* For example only --> */ box-shadow: inset 0 0 0 3px #f00;
}
<div id="parent" style="background-color: rgb(200, 200, 200);">
  <div id="child" style="background-color: rgb(100, 100, 100);"> </div>
</div>

Чтобы посмотреть эффект в действии, измените размер родительского блока, ухватив его за правый нижний угол.

→ Ссылка