JavaRush /Курсы /Модуль 1: Web Core /Единицы измерения

Единицы измерения

Модуль 1: Web Core
13 уровень , 3 лекция
Открыта

4.1 Процентные значения

Процентные значения и относительные единицы в CSS играют важную роль в создании гибких и отзывчивых макетов. Они позволяют элементам адаптироваться к различным размерам экранов и изменяющимся условиям, обеспечивая лучшую совместимость и удобство использования.

Процентные значения используются для задания размеров элементов относительно размеров их родительских элементов. Это делает макет более гибким и адаптируемым.

Пример использования %:

CSS
    
      .container {
        width: 80%;
        margin: 0 auto;
        background-color: #f4f4f4;
      }

      .box {
        width: 50%;
        padding-top: 25%; /* Соотношение сторон 1:2 */
        background-color: #3498db;
        color: white;
        text-align: center;
        position: relative;
      }

      .box::before {
        content: "";
        display: block;
        padding-top: 50%; /* Соотношение сторон 2:1 */
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Пример использования %</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <div style="min-height: 200px;">
            <div class="container">
              <div class="box">Контент</div>
            </div>
          </div>
        </body>
      </html>
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Пример использования %</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <div class="container">
            <div class="box">Контент</div>
          </div>
        </body>
      </html>
    
  

Объяснение кода:

  • .container: задает ширину контейнера как 80% от ширины родительского элемента, центрируя его с помощью margin: 0 auto
  • .box: задает ширину блока как 50% от ширины контейнера. Высота блока определяется через padding-top, что обеспечивает соотношение сторон 1:2

4.2 Относительные единицы (em и rem)

Единица em — это относительная единица, которая зависит от размера шрифта родительского элемента. Если размер шрифта родителя изменяется, то em значения также изменяются.

Пример использования em:

CSS
    
      .parent {
        font-size: 16px;
      }

      .child {
        font-size: 1.5em; /* 1.5 * 16px = 24px */
        padding: 1em; /* 1 * 16px = 16px */
      }
    
  

Единица rem — это относительная единица, которая зависит от размера шрифта корневого элемента (html). Она не зависит от родительских элементов, что делает ее более предсказуемой и удобной для создания масштабируемых макетов.

Пример использования rem:

HTML
    
      <div class="container">
        Какой-то текст внутри контейнера
        <div class="box">
          Какой-то текст внутри коробки
        </div>
      </div>
    
  
CSS
    
      html {
        font-size: 16px;
      }

      .container {
        font-size: 1rem; /* 16px */
        padding: 2rem; /* 32px */
      }

      .box {
        font-size: 1.5rem; /* 24px */
        margin: 1rem; /* 16px */
      }
    
  

Сравнение em и rem:

  • em: зависит от размера шрифта родительского элемента, что может привести к каскадному эффекту при вложенности
  • rem: зависит от размера шрифта корневого элемента (html), что делает её более предсказуемой и простой в использовании

4.3 Комбинированное использование %

Использование относительных единиц (em и rem) в сочетании с процентами позволяет создать гибкие и адаптивные макеты, которые будут корректно отображаться на любых устройствах.

Пример: Комбинированное использование %

Создадим макет, в котором размеры элементов определяются с использованием процентов и относительных единиц.

CSS
    
      html {
        font-size: 16px;
      }

      .container {
        width: 80%;
        margin: 0 auto;
      }

      .header, .footer {
        background-color: #333;
        color: white;
        padding: 1rem;
        text-align: center;
      }

      .content {
        display: flex;
        gap: 1rem;
        margin: 1rem 0;
      }

      .sidebar {
        flex: 1 1 30%;
        background-color: #f4f4f4;
        padding: 1rem;
      }

      .main {
        flex: 1 1 70%;
        background-color: #e4e4e4;
        padding: 1rem;
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Комбинированное использование % и относительных единиц</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <div class="container">
            <div class="header">Заголовок</div>
            <div class="content">
              <div class="sidebar">Боковая панель</div>
              <div class="main">Основной контент</div>
            </div>
            <div class="footer">Футер</div>
          </div>
        </body>
      </html>
    
  

Объяснение кода:

  • html: устанавливает базовый размер шрифта для всего документа
  • .container: использует проценты для задания ширины контейнера и центрации его на странице
  • .header и .footer: используют rem для отступов, что делает их предсказуемыми
  • .content: использует Flexbox для расположения боковой панели и основного контента с зазором между ними
  • .sidebar и .main: используют проценты для задания ширины колонок и rem для отступов
1
Задача
Модуль 1: Web Core, 13 уровень, 3 лекция
Недоступна
Применение em
Применение em
1
Задача
Модуль 1: Web Core, 13 уровень, 3 лекция
Недоступна
Использование rem
Использование rem
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Vadim Makarenko Уровень 30
11 мая 2025
По поводу размеров, заданных %. Могу назвать, как минимум, CSS функцию traslate() - смещения объекта, значения к-й в % отсчитываются от СОБСТВЕННЫХ размеров элемента и не имеют отношения к родителю. Так что не всё так однозначно.
Ilona Уровень 23
23 марта 2025
Очень глючно работает валидатор при решении задач.