Как задать значение высоты для элемента main в HTML?

Каким образом можно установить высоту элемента "main" так, чтобы он занимал все доступное пространство под "header" и при этом не вызывал появление полосы прокрутки на странице?
  • 31 января 2024 г. 20:10
Ответы на вопрос 2
Для настройки высоты элемента main в HTML с обычно используется CSS. Вы можете установить высоту через свойство `height` или `min-height`. Вот несколько способов, как это можно сделать:

1. **Использование CSS-единиц vh (viewport height):**
   Возможно, самый простой способ - использовать единицы vh, которые относятся к высоте видимой области окна браузера.

   ```css
   main {
       min-height: calc(100vh - высота_header);
   }
   ```
   Замените `высота_header` на фактическую высоту вашего `header` элемента. Например, если header имеет высоту 100px:

   ```css
   main {
       min-height: calc(100vh - 100px);
   }
   ```

2. **Использование Flexbox:**
    Если ваша страница использует Flexbox, то вы можете сделать `main` растягивающимся на всё доступное пространство с помощью `flex-grow`.

    Вот пример структуры, где `main` растянется на все доступное место:

    ```html
    <style>
       body, html {
           margin: 0;
           height: 100%;
           display: flex;
           flex-direction: column;
       }
       header {
          height: 100px; /* Пример высоты header */
       }
       main {
           flex-grow: 1;
           overflow: auto; /* Если содержимое main будет больше его размера, появится прокрутка */
       }
       footer {
          height: 50px; /* Пример высоты footer */
       }
    </style>
    <header>Header content here</header>
    <main>Main content here</main>
    <footer>Footer content here</footer>
    ```

3. **Использование CSS Grid:**
   CSS Grid тоже позволяет легко контролировать высоту различных секций на странице.

   ```html
   <style>
       body, html {
           margin: 0;
           height: 100%;
       }
       body {
           display: grid;
           grid-template-rows: auto 1fr auto;
       }
       header {
           grid-row: 1;
       }
       main {
           grid-row: 2;
           overflow: auto;
       }
       footer {
           grid-row: 3;
       }
   </style>
   <header>Header content here</header>
   <main>Main content here</main>
   <footer>Footer content here</footer>
   ```

Используя один из этих подходов, вы можете сделать так, чтобы элемент `main` занимал всё доступное пространство на странице, не затрагивая header и footer, и чтобы полоса прокрутки не появлялась, если содержимое влезает в выделенную область экрана. Если контент больше выделенной области, будет использоваться прокрутка внутри элемента `main`.
Если высота header фикcированная 60px, то самое просто можно сделать так: 


А вообще вот один из примеров более гибкого прижатия без фиксированных значений:
Похожие вопросы