CSS: Почему фиксированный элемент НЕ начинается в верхней части страницы в этом примере?

#css #html #stylesheet

#css #HTML #таблица стилей

Вопрос:

В этом примере, почему фиксированный заголовок # (вверху) не начинается в верхней части страницы, но в этом примере это так?

Единственное отличие заключается в том, что я изменил «margin» #content на «padding» вместо этого (повторно).

Итак, почему это крошечное изменение оказывает огромное влияние? Как мне поместить фиксированный заголовок # вверху страницы, все еще используя «margin» для #content?

Комментарии:

1. включение top: 0 может помочь…

2. @Kasturi это так. Не уверен, почему это так, хотя иначе я бы добавил ответ для OP lol

Ответ №1:

Это из-за сокращающейся маржи.

Если верхние и нижние поля прямоугольника соприкасаются, то поля могут прорваться через него. В этом случае положение элемента зависит от его взаимосвязи с другими элементами, поля которых сворачиваются.

В этом случае margin может нажать вниз #header (который имеет position: fixed ), если вы не присвоите ему top значение, отличное от значения по умолчанию auto .

Способ исправить это — добавить overflow: hidden в #wrapper : http://jsfiddle.net/CyaJ8/6 /

Это работает, потому что:

Поля элементов, которые устанавливают новые контексты форматирования блока (такие как значения с плавающей точкой и элементы с ‘overflow’, отличные от ‘visible’), не сворачиваются вместе со своими дочерними элементами в потоке.

Комментарии:

1. Я понимаю, что поля сворачиваются, как описано здесь: ghz.me/6l Но почему это толкает фиксированный элемент вниз? Я не совсем понимаю. Я понимаю, что будет соблюден самый большой вертикальный интервал между двумя элементами на одном дочернем уровне, которые примыкают друг к другу. Как это влияет на фиксированный элемент?

2. @trusktr: Признаюсь, я не могу до конца разобраться в мучительных технических деталях спецификаций W3, чтобы точно ответить на то, что происходит. Лучшее, что я могу сделать, это сказать, что это определенно связано с уменьшением полей.

3. да, это так сложно. это почти как неписаное правило. Однако он достаточно прост в использовании top .

Ответ №2:

Добавление

 #header { top: 0; }
  

должно решить проблему.