Что влияет на высоту элемента

Ответ

Высота элемента определяется несколькими факторами:

  1. Высота контента - текст, изображения, дочерние элементы
  2. CSS-свойства:
    • height, min-height, max-height
    • padding (внутренние отступы)
    • border (толщина рамки)
    • box-sizing (влияет на расчет размеров)
  3. Поток документа - поведение соседних элементов
  4. Наследование - от родительских элементов
  5. Viewport units - vh, % относительно родителя

Пример:

.box {
  height: 200px; /* фиксированная высота */
  padding: 20px; /* увеличит общую высоту если box-sizing: content-box */
  border: 1px solid #000; /* +2px к высоте */
  box-sizing: border-box; /* padding и border включены в height */
}

Ответ 18+ 🔞

А, ну это же классика, блядь! Сейчас объясню, как эта хуйня работает, чтобы ты не ломал голову, как Герасим над судьбой Муму.

Смотри, высота любого элемента — это не просто цифра в CSS, которую ты тупо написал. Это, блядь, целая драма, как у Тургенева, только в коде. На неё влияет куча факторов, которые могут так наебать, что потом охуеешь, почему всё плывёт.

Во-первых, сам контент. Если ты в див запихнул текст на три экрана или картинку размером с лошадь, то что ты там по height ни пиши — ему, блядь, похуй, он будет тянуться, как жопа резиновая. Это основа, так сказать, натуральная высота.

Дальше идёт этот цирк с CSS-свойствами. Вот смотри, классика жанра:

.box {
  height: 200px; /* Ну, вроде как фиксированная высота, да? */
  padding: 20px; /* А это что? Это внутренние отступы, ёпта! */
  border: 1px solid #000; /* И рамка ещё, блядь! */
  box-sizing: content-box; /* И вот этот самый, сука, волшебный переключатель! */
}

Вот тут-то и собака зарыта, точнее, Муму утоплена! Если box-sizing стоит content-box (а это по умолчанию часто), то height: 200px — это только для контента! А padding сверху-снизу (20px+20px=40px) и border сверху-снизу (1px+1px=2px) приплюсуются сверху, блядь! Итого реальная высота блока будет 200 + 40 + 2 = 242 пикселя! И ты такой: «Почему у меня всё съехало, ёбаный в рот?!»

А если поставить box-sizing: border-box, то это уже мудрость, блядь. Ты говоришь: «Всё, сука, включая padding и border, должно влезть в эти 200px!». Контент внутри сожмётся, но общая высота останется ровно 200. Красота!

Ну и остальная хуйня: поток документа (соседние блоки могут толкаться), наследование (родитель может не дать вырасти), эти ваши vh и проценты, которые считаются от размера окна или родителя. Один сплошной пиздец, если не понимать, как что взаимодействует.

Короче, высота — это вам не хуй собачий, это комплексная характеристика. Нужно учитывать всё, а не тыкать одну цифру и удивляться, почему всё разъехалось, как кони на льду.