Максимизировать родительский блок элемента с заданными соотношениями сторон

Описание

Такая вот ситуация…

…где внутренний серый блок является квадратом (с соотношениями сторон 1/1). Нужно подогнать размер родительского, белого блока за счет увеличения размеров серого блока, максимально как это возможно.

/* Main */

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background-color: var(--color-background);
}

body * {
  background-color: inherit;
}


/* Global */

*.layer {
  background-color: var(--color-foreground);
  box-shadow: 0 0 var(--size-shadow) 0px var(--color-shadow);
}

*.depth {
  background-color: var(--color-background);
  box-shadow: 0 0 var(--size-shadow) 0px var(--color-shadow) inset;
}


/* Local */

:root {
  --value-transparence: 50%;
  --color-foreground: rgb(255, 255, 255);
  --color-background: rgb(225, 225, 225);
  --color-shadow: rgba(0, 0, 0, var(--value-transparence));
}
<body style="position: fixed; inset: 0; display: grid; grid-template-columns: auto 1fr;">
  <menu class="layer" style="width: 40px; display: grid; grid-auto-rows: max-content; place-content: center;">
  </menu>
  <div style="display: flex; justify-content: center; align-items: center;">
    <div class="layer" style="width: fit-content; height: fit-content; display: grid; grid-template-rows: 1fr auto; gap: 1vmin; padding: 1vmin;">
      <canvas class="depth" style="height: 100%; aspect-ratio: 1 / 1;"></canvas>
      <div style="width: 40px; height: 40px; padding: 1vmin;">
        <img style="width: 100%; height: 100%;">
      </div>
    </div>
  </div>
</body>

Соотношение сторон с помощью aspect-ratio: 1 / 1; надо сохранить.

Вопрос

Я много чего попробовал: display: grid;, display: flex;, grid-template: 1fr / 1fr;… ничего не помогает. Можете подсказать решение данной проблеме?


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

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

Не могу давать комментарий пишу через ответ - можно ли у вас сделать одним блоком с внутренними отступами, а треугольнику дать абсолютную позицию? Или же можно попробывать через fit c внутренними отступами:

введите сюда кодCSS
    .block{
      width: fit-content;
      height: fit-content;
    }
→ Ссылка
Автор решения: Арман

Описание

Удалось решить проблему, но при display: flex;. То есть если белый блок не является flex контейнером, то ничего не получится. Если и найдете решение например для display: grid;, дополните мой ответ - я приму.

Ещё момент

Почему прикрепляю не запускающий код? Тот код, что работает у меня в Microsoft Edge, не работает во встроенном редакторе Stack Overflow. Вот как собственно у меня выглядит.

Ответ

А код собственно выглядит таким образом:

HTML

<body style="position: fixed; inset: 0; display: grid; grid-template-columns: auto 1fr;">
    <menu class="layer" style="width: 40px; display: grid; grid-auto-rows: max-content; place-content: center;">
    </menu>
    <div style="display: flex; justify-content: center; align-items: center; padding: calc(1vmin * 3);">
        <div class="layer" style="width: fit-content; height: 100%; display: flex; flex-direction: column; gap: 1vmin; padding: 1vmin;">
            <canvas id="view" class="depth" style="display: flex; height: 100%; aspect-ratio: 1 / 1;"></canvas>
            <div style="display: flex; flex-direction: row; gap: 1vmin;">
                <div style="display: flex; width: 40px; height: 40px; padding: 1vmin;">
                    <img style="width: 100%; height: 100%;" />
                </div>
                <div style="display: flex; width: 40px; height: 40px; padding: 1vmin;">
                    <img style="width: 100%; height: 100%;" />
                </div>
            </div>
        </div>
    </div>
</body>

CSS

/* Main */

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    background-color: var(--color-background);
}

body * {
    background-color: inherit;
}


/* Global */

*.layer {
    background-color: var(--color-foreground);
    box-shadow: 0 0 var(--size-shadow) 0px var(--color-shadow);
}

*.depth {
    background-color: var(--color-background);
    box-shadow: 0 0 var(--size-shadow) 0px var(--color-shadow) inset;
}


/* Local */

:root {
    --value-transparence: 50%;
    --color-foreground: rgb(255, 255, 255);
    --color-background: rgb(225, 225, 225);
    --color-shadow: rgba(0, 0, 0, var(--value-transparence));
}
→ Ссылка