Размеры блока

Размеры блока — это комплексная величина и складывается из значений разных свойств. Ниже рассмотрим особенности формирования ширины и высоты блока.

Ширина блока

Ширина блока представляет собой сумму значений следующих свойств:

На рис. 1 схематично изображены свойства, влияющие на ширину блока. При этом какие-то свойства могут отсутствовать и на размер влияние не оказывают.

Ширина блока

Рис. 1. Ширина блока

Обратите внимание, что свойство width задаёт ширину содержимого, а не всего блока целиком. Если значение width не задано, то оно по умолчанию устанавливается как auto. В этом случае ширина блока будет занимать всю доступную ширину при сохранении значений padding, border и margin. Под доступной шириной в данном случае подразумевается ширина содержимого родительского блока, а если родителя нет, то ширина окна браузера.

В примере 1 показано создание блока, занимающего всю доступную ширину. При изменении ширины окна браузера ширина блока будет соответствующим образом подстраиваться.

Пример 1. Ширина блока

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Ширина</title> <style> .block { background: #FFFAC0; /* Цвет фона */ padding: 20px; /* Поля вокруг текста */ border: 2px solid #EF8031; /* Параметры рамки */ margin: 10px; /* Отступы */ } </style> </head> <body> <div class="block">Лев ревёт только в том случае, когда сообщает, что территория принадлежит ему или провозглашает себя царём природы.</div> </body> </html>

Результат данного примера показан на рис. 2.

Блок, занимающий всю ширину

Рис. 2. Блок, занимающий всю ширину

Если свойство width задано, то его значение добавляется к общей ширине блока. В качестве примера рассмотрим следующий стиль.

div {
  width: 400px; /* Ширина содержимого */
  padding: 10px; /* Поля вокруг текста */
  border: 4px solid black; /* Параметры рамки */
  margin: 7px; /* Значение отступов */
}

Ширина блока в данном случае будет равна 442 пикселя; эта величина получается складыванием значения ширины содержимого плюс поле слева, граница слева и отступ слева, плюс поле справа, граница справа и отступ справа. Суммируем все числа.

Ширина = 400 + 10 + 10 + 4 + 4 + 7 + 7 = 442

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

Высота блока

Высота блока формируется по тем же правилам, что и ширина. А именно, высота складывается из значений следующих свойств:

Если свойство height не указано, то оно считается как auto, в этом случае высота содержимого вычисляется автоматически. На рис. 3 показаны свойства, влияющие на высоту блока.

Высота блока

Рис. 3. Высота блока

Несмотря на схожесть принципов построения ширины и высоты, у них есть некоторые различия.

1. Если содержимое превышает размер блока при заданном height, то содержимое отображается поверх блока (рис. 4).

Превышение размеров блока

Рис. 4. Превышение размеров блока

Чтобы избежать подобного поведения, свойство height лучше не задавать, тогда высота блока будет вычисляться автоматически. Впрочем, бывают случаи, когда высота должна быть чётко указана, тогда рекомендуется добавить свойство overflow — значение auto устанавливает полосы прокрутки при необходимости (пример 2), а значение hidden скрывает всё, что не помещается в заданные размеры.

Пример 2. Использование overflow

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Высота</title> <style> .block { background: #C5DF94; /* Цвет фона */ height: 50px; /* Высота */ padding: 10px; /* Поля вокруг текста */ overflow: auto; /* Добавляем полосы прокрутки */ } </style> </head> <body> <div class="block"> <p>Лев ревёт только в том случае, когда сообщает, что территория принадлежит ему или провозглашает себя царём природы.</p> <p>Охотничий участок льва может иметь длину и ширину до тридцати километров.</p> </div> </body> </html>

Результат данного примера показан на рис. 5. Высота блока задана явно и если содержимое не помещается в блок по высоте, то появляется вертикальная полоса прокрутки.

Полосы прокрутки в блоке

Рис. 5. Полосы прокрутки в блоке

2. Установка значения высоты в процентах обычно не приводит к каким-либо заметным результатам, поскольку высота родителя браузером не вычисляется. Чтобы проценты начали работать, высота родителя должна быть задана явно. В примере 3 показано, как задать высоту блока в процентах.

Пример 3. Высота блока

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Высота</title> <style> html, body { height: 100%; /* Высота */ margin: 0; /* Убираем отступы у веб-страницы */ } .block { background: #C5DF94; /* Цвет фона */ height: 100%; /* Высота */ padding: 20px; /* Поля вокруг текста */ box-sizing: border-box; /* Алгоритм подсчёта размеров */ } </style> </head> <body> <div class="block">Лев ревёт только в том случае, когда сообщает, что территория принадлежит ему или провозглашает себя царём природы.</div> </body> </html>

Результат данного примера показан на рис. 6. Здесь для <div> родителем выступает элемент <body>, поэтому для него устанавливаем значение height равным 100%. В то же время на <body> действуют те же правила, что и на <div>, поэтому для родителя <body>, которым является <html>, также требуется поставить значение height равным 100%. Только в этом случае высота блока в процентах будет зависеть от высоты веб-страницы.

Высота блока в процентах

Рис. 6. Высота блока в процентах

Алгоритм блочной модели

Ширина блока формируется из значений width, padding, border и margin. Считать итоговую ширину не всегда удобно, особенно когда в качестве значений встречается комбинация пикселей и процентов. Для изменения алгоритма подсчёта ширины и высоты блока применяется свойство box-sizing со значением border-box. После добавления этого свойства к блоку значение width включает в себя padding и border (но не margin). Таким образом, свойство width будет задавать ширину всего блока, а не содержимого как раньше. В примере 4 показано изменение вида поля для поиска, чтобы оно занимало всю доступную ширину веб-страницы.

Пример 4. Использование box-sizing

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Ширина</title> <style> body { background: #D6C2AD; /* Цвет фона */ } [type="search"] { box-sizing: border-box; /* Ширина не учитывает padding и border */ width: 100%; /* Ширина */ border: 1px solid #666; /* Параметры рамки */ padding: 10px; /* Поля вокруг текста */ } </style> </head> <body> <input type="search" placeholder="Поиск по сайту"> </body> </html>

Результат данного примера показан на рис. 7.

Ширина поля для поиска в процентах

Рис. 7. Ширина поля для поиска в процентах

Перейти к заданиям

Автор: Влад Мержевич
Последнее изменение: 05.08.2023

Создайте форму, показанную на рис. 1.

Рис. 1

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Вход на сайт</title> <style> body { background: #B6D554; /* Цвет фона */ } .login { background: #fff; /* Цвет фона формы */ width: 300px; /* Ширина формы */ margin: auto; /* Выравниваем по центру */ padding: 30px; /* Поля вокруг */ box-shadow: 0 0 5px rgba(0,0,0,0.5); /* Параметры тени */ box-sizing: border-box; /* Ширина не учитывает padding */ } .login div { margin-top: 15px; /* Отступ снизу */ } .login div:first-child { margin: 0; } .login input, .login button { padding: 10px; /* Поля вокруг */ box-sizing: border-box; /* Ширина не учитывает padding */ width: 100%; /* Ширина */ } </style> </head> <body> <form class="login" action="/example/handler.php"> <div><input name="login" placeholder="Логин"></div> <div><input type="password" name="pass" placeholder="Пароль"></div> <div><button>Войти</button></div> </form> </body> </html>

Создайте веб-страницу, как показано на рис. 1. Ширина и высота блока заданы в пикселях.

Рис. 1

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Модальное окно</title> <style> body { background: #497775; /* Цвет фона веб-страницы */ } .modal { background: #fff; /* Цвет фона */ width: 300px; /* Ширина */ height: 200px; /* Высота */ overflow: auto; /* Полосы прокрутки при необходимости */ margin: auto; /* Выравниваем по центру */ padding: 20px; /* Поля вокруг текста */ box-sizing: border-box; /* В ширине не учитываем padding */ border-radius: 5px; /* Радиус скругления уголков */ box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); /* Параметры тени */ } </style> </head> <body> <div class="modal"> Венгры страстно любят танцевать, особенно ценятся национальные танцы, при этом центральная площадь жизненно превышает туристический символический центр современного Лондона. </div> </body> </html>