Как реализовать пропорциональное масштабирование блока при верстке?

Добрый день! <br/> Я разрабатываю форму опроса с единственным полноэкранным блоком. <br/> <br/> <b>Как блок опроса выглядит на ПК:</b> <br/>
  • 25 октября 2024 г. 13:03
Ответы на вопрос 2
Добрый день!

Для того чтобы реализовать пропорциональное масштабирование блока при верстке на веб-странице, вы можете использовать CSS вместе с некоторыми подходами на JavaScript. Вот несколько ключевых моментов, которые помогут вам добиться желаемого результата:

### 1. Использование CSS:

Вы можете использовать CSS для установки ширины и высоты блока в процентах, чтобы он подстраивался под размеры экрана:

```css
body, html {
    height: 100%;
    margin: 0;
}

.survey-block {
    width: 80%; /* Процент ширины блока */
    height: 80%; /* Процент высоты блока */
    max-width: 600px; /* Максимальная ширина */
    max-height: 800px; /* Максимальная высота */
    margin: auto; /* Центрирование блока */
    background-color: #f0f0f0;
    display: flex; /* Для центрирования контента внутри блока */
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
    border-radius: 8px;
}
```

### 2. Пропорции с помощью `aspect-ratio`:

Если вам нужно сохранить определенные пропорции блока, вы можете использовать свойство `aspect-ratio`:

```css
.survey-block {
    width: 80%; 
    aspect-ratio: 16 / 9; /* Пропорция 16:9 */
    max-width: 600px; 
    max-height: 800px; 
    margin: auto;
    background-color: #f0f0f0; 
    display: flex; 
    align-items: center; 
    justify-content: center; 
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
    border-radius: 8px;
}
```

### 3. Использование JS для динамического изменения размеров (если необходимо):

Если требуется более сложное поведение, вы можете использовать JavaScript для управления размерами блока в зависимости от размера окна:

```javascript
function resizeSurveyBlock() {
    const surveyBlock = document.querySelector('.survey-block');
    const aspectRatio = 16 / 9;
    const windowWidth = window.innerWidth;
    const windowHeight = window.innerHeight;

    if (windowWidth / windowHeight > aspectRatio) {
        surveyBlock.style.width = `${windowHeight * aspectRatio}px`;
        surveyBlock.style.height = `${windowHeight}px`;
    } else {
        surveyBlock.style.width = `${windowWidth}px`;
        surveyBlock.style.height = `${windowWidth / aspectRatio}px`;
    }
}

window.addEventListener('resize', resizeSurveyBlock);
window.addEventListener('load', resizeSurveyBlock);
```

### 4. Пример HTML:

```html
<div class="survey-block">
    <h1>Опрос</h1>
    <p>Пожалуйста, ответьте на следующие вопросы...</p>
    <!-- Ваша форма опроса здесь -->
</div>
```

Теперь ваш блок будет пропорционально масштабироваться в соответствии с размерами экрана. Не забудьте протестировать на разных устройствах, чтобы убедиться, что отображение выглядит хорошо.
Можно перевести все в rem , а для html задать динамический размер в зависимости от размера экрана с учетом высоты и ширины, вроде такого: 

html {
    font-size: calc(max(0.5vw, 4px) + max(0.5vh, 4px));
}
Похожие вопросы