Как настроить холст в родительском div?

У меня есть холст внутри div:

<div class = "preview"><canvas id = "cropped" width = "2480" height = "2003"></canvas></div>

Блок Div меньше, чем сторона холста. Как автоматически подогнать холст в двух случаях:

  1. Автоподбор ширины холста пропорционален родительской ширине div
  2. Автоподгонка высоты холста пропорциональна родительской высоте div

Я пробовал так:

public autofit = (orientation: RegistryOrientation) => {
    let previews = document.getElementsByClassName('preview');

    if (previews.length > 0) {
        let preview = previews[0];
        let width = preview.clientWidth;
        let height = preview.clientHeight;

        if (orientation === RegistryOrientation.album) {
            this.imgCanvas.style.width = width + 'px';
            this.imgCanvas.style.height = 'auto';
        } else if (orientation === RegistryOrientation.book) {
            this.imgCanvas.style.height = height + 'px';
            this.imgCanvas.style.width = 'auto';
        }
    }
};
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
26
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете просто использовать символ «%», чтобы обозначить пропорциональную высоту родителя. Например (в вашем CSS):

#cropped {
  width: 100%;
  height: 80%;
}

Конечно, вместо использования файла CSS или тега стиля вы также можете просто вызвать cropped.style.width и cropped.style.height.

fravolt 18.03.2022 09:55

Я хочу разместить весь холст пропорциональным. Так что я не понял, почему вы установили 80% для высоты и 100 для ширины

Mamkad 18.03.2022 10:03

Это были просто примеры процентов, чтобы показать, что вы можете сделать их пропорциональными (а не только 100%). Если я сейчас, в своем локальном тестовом файле, установлю размеры div на 50vw и 50vh (чтобы сделать их равными 50% размеров экрана), холст автоматически заполнит 100% ширины и 80% высоты. Я думаю, вы должны иметь возможность использовать проценты вместо пикселей, чтобы решить вашу проблему :)

fravolt 18.03.2022 10:10

просто убедитесь, что холст считает свою ширину и высоту входными данными

jujiyangasli 18.03.2022 10:21

Уверен, это то, что вы хотите:

div {
  border: 1px solid red;
  width: 200px;
  height: 200px;
  resize: both;
  overflow: hidden;
}

canvas {
  border: 1px solid blue;
  aspect-ratio: 1 / 1;
  box-sizing: border-box;
  max-width: 100%;
  max-height: 100%;
  margin: auto;
}
<div><canvas width = "1000" height = "1000"></canvas></div>

У меня соотношение 3/4, или ширина 4, или высота 4. зависит от случая

Mamkad 18.03.2022 10:21

Должно работать, пока вы меняете aspect-ratio и ширину и высоту холста.

soshimee 18.03.2022 14:04

Другие вопросы по теме