Интернетчик » site » CSS: ГЛОБАЛЬНАЯ УСТАНОВКА BOX-SIZING

CSS: ГЛОБАЛЬНАЯ УСТАНОВКА BOX-SIZING

CSS: ГЛОБАЛЬНАЯ УСТАНОВКА BOX-SIZING

  1. СВОЙСТВО BOX-SIZING
  2. КАК ЗАДАЁТСЯ ЗНАЧЕНИЕ СВОЙСТВА BOX-SIZING
  3. НАСЛЕДОВАНИЕ СВОЙСТВА BOX-SIZING
  4. ГЛОБАЛЬНАЯ УСТАНОВКА box-sizing + мини-сброс (Вариант 1)
  5. ГЛОБАЛЬНАЯ УСТАНОВКА box-sizing + мини-сброс (Вариант 2)
  6. «Авторитетное сравнение»
  7. Сравнение вариантов
  8. Заключение
  9. Как это работает
  10. Итог
  11. Суперитог

box-sizing (читается «бокс-сайз») — свойство, определяющее способ подсчёта браузером итоговых размеров блочного элемента. На практике существуют два основных значения, полностью исключающие друг друга: content-box и border-box:

1. СВОЙСТВО BOX-SIZING

• content-box
Значение «box-sizing» по умолчанию, мерим содержимое (content):
«Размер блока» = content.
• border-box
Складываем размеры содержимого: (content) + внутренние отступы (padding) + толщина рамки (border).
«Размер блока» = content + padding + border.
То есть border-box учитывает размеры блока по внешнему краю элемента.

2. КАК ЗАДАЁТСЯ ЗНАЧЕНИЕ СВОЙСТВА BOX-SIZING

Явно
content-box или border-box.
Наследование от родителя
inherit.
Сброс к начальному значению
initial (вернёт значение по умолчанию: box-sizing: content-box).

3. НАСЛЕДОВАНИЕ СВОЙСТВА BOX-SIZING

По умолчанию
Свойство box-sizing не наследуется.
Явное наследование
box-sizing: inherit; — наследует значение родителя при явном указании этого параметра.
Особенности наследования
Сделанное однажды наследование свойства box-sizing: inherit; нельзя остановить или отменить — лишь изменить для потомков.
Иными словами, механизм inherit невозможно отключить. В CSS нет правила или команды, которая отключает наследование box-sizing: inherit;, как, например, text-decoration: none;.

4. ГЛОБАЛЬНАЯ УСТАНОВКА box-sizing + мини-сброс. Вариант 1

/* Глобальная установка box-sizing + мини-сброс
   Вариант 1 [inheritance-based] */

html {
  /* Задаём базовое значение:
     — Стартовое значение для всех элементов
     (с чего всё начинается) */ 
  box-sizing: border-box; 
}

/* Устанавливаем наследование */
*, *::before, *::after {
  margin     : 0;
  padding    : 0;
  /* Каждый элемент берёт значение
     box-sizing у родителя:
     и так — на каждом уровне */
  box-sizing : inherit; 
}

/* Все элементы наследуют box-sizing от корня html
   (в нашем случае: border-box).
   Если элементу ниже по тексту явно задать content-box,
   это значение будет наследоваться всеми его потомками
   до нового явного изменения (переназначения).

 • Так работает вторая строка нашего кода:
   *, *::before, *::after { box-sizing: inherit; } */

5. ГЛОБАЛЬНАЯ УСТАНОВКА box-sizing + мини-сброс. Вариант 2

/* Глобальная установка box-sizing + мини-сброс
   Вариант 2 [direct assignment] */

*, *::before, *::after {
  margin     : 0;
  padding    : 0;
  /* Каждому элементу задаём значение сразу */
  box-sizing : border-box;
  /* Значение box-sizing задано каждому элементу,
     явно, напрямую и без наследования */
}

/* Все элементы получают box-sizing явно и напрямую
   (в нашем случае — border-box).
   Если элементу ниже явно задать content-box, это значение
   не будет наследоваться потомками,
   потому что для всех элементов применяется глобальное правило:
   *, *::before, *::after { box-sizing: border-box; }
   Поэтому любые отличные значения от базового (border-box)
   нужно задавать явно каждому элементу. */

6. «Авторитетное сравнение»

7. Сравнение вариантов

Вариант 1 (inheritance-based)

Принцип работы: изменил значение у элемента-родителя → это значение пошло от родителя вниз ко всем вложенным дочерним элементам, пока не задали новое значение box-sizing (не переопределили).

Вариант 2 (direct assignment)

На практике чаще используют Вариант 1.

8. Заключение

Главное отличие вариантов 1 и 2: наследование свойства box-sizing по дереву DOM:

9. Как это работает

Вариант 1 [inheritance-based] (наследование)

Вариант 2 [direct assignment] (напрямую)

10. Итог

11. Суперитог

Если сжать до предела:

Главное различие между вариантами — это не способ задания свойства, а тип управления поведением внутри дерева.

Вариант 1 (inherit)

Ты управляешь не элементами, а потоками значений.

Любое изменение — это не просто точечная правка, а вмешательство в распространение значения.

Ты задаёшь не состояние элемента, а направление, по которому это состояние будет жить дальше.

Это означает:

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

/* ──────────────────────────────────────────────────── */ /* ──────────────────────────────────────────────────── */ /* ──────────────────────────────────────────────────── */ /* ──────────────────────────────────────────────────── */ /* ──────────────────────────────────────────────────── */ /* АРХИВНЫЕ ТЕКСТЫ ┌─ Вариант 1 [inheritance-based] │• Наследование свойства есть. │• Наследование задано глобально, в строке: │ *, *::before, *::after { box-sizing: border-box; } │• Создаются цепочки наследования │ от родителя к потомку (дочернему элементу): │ — Значение box-sizing задаётся в корне html и наследуется: │ дочерний элемент берёт текущее значение у своего родителя через inherit, │ заданный глобально. │• Значение передаётся вниз по дереву └────────────────────── ┌─ Вариант 2 [direct assignment] │• Наследования свойства нет. │• Цепочек наследования не существует. │ — Значение box-sizing задаётся сразу всем элементам индивидуально, │ напрямую через глобальный селектор

  • и псевдоэлементы *::before, *::after. └────────────────────── • Вариант 1 [inheritance-based] — наследование есть (через html и inherit), Значение box-sizing задаётся в html и распространяется вниз по DOM-дереву, через inherit, который заставляет элемент использовать значение родителя. • Вариант 2 [direct assignment] — наследования нет. Значение box-sizing задаётся отдельно каждому элементу напрямую через глобальный селектор
  • . ───────────────────────────────────────────────────────────── ••• ПРАКТИКА (как это работает) На практике, разница между вариантами проявляется не просто в наличии/отсутвствии механизма наследования, а в том, что происходит, если изменить box-sizing внутри дерева: ───────────────────── •• Вариант 1 [inheritance-based]: • Есть цепочка наследования. • Если где-то в дереве задать: box-sizing: content-box;, то — это значение становится новым для этого элемента и автоматически передаётся всем его потомкам При этом: • актуальное значение у родителя может меняться сколько угодно раз, и каждый раз становится новым источником вниз по дереву. • значение можно снова переопределять на любом уровне, и каждый раз оно будет дальше идти вниз по дереву. • Получается слоистый пирог, где каждый раз, заданное свойство наследуется до тех пор, пока не будет задано иное. •• То есть: переопределили — новое значение пошло дальше снова переопределили — снова пошло дальше •• Девиз: "изменил здесь → пошло дальше вниз, пока снова не переопределили" ───────────────────── •• Вариант 2 [direct assignment]: • Нет Цепочки наследования. • Если где-то в дереве задать: box-sizing: content-box;, то — это значение влияет только на этот элемент, и потомки — НЕ получают это значение • Потому что для них снова применяется глобальное правило: *, *::before, *::after { box-sizing: border-box; } •• Девиз: "изменил здесь — здесь и закончилось. надо пять раз под ряд — задавай пять раз под ряд. Наследования нет, свойство не передается вниз" ──────────────────────────────────────────────────── */ /* ──────────────────────────────────────────────────── End. 00-01-box-sizing.css Final 09.05.2026г. ─────────────────────────────────────────────────────── ─────────────────────────────────────────────────────── ─────────────────────────────────────────────────────── */