somecontent
There are a lot of questions on S.O. that cover the answer to how to fix this (add top: 0), but none of them attempt to actually explain the reasoning behind th
With position: fixed, your header element is removed from the document flow.
The first in-flow element is main, which has margin-top: 90px in your code.
The parent of this element is body, which normally has a default margin: 8px (see HTML default style sheet).
Due to CSS margin collapsing, the body element's margin-top: 8px is collapsed with the main element's margin-top: 90px.
As a result, both elements, now having the same margin, shift down 90px.
html {
background-color: green;
height: 100%;
}
body {
background-color: pink;
height: 100%;
}
header {
position: fixed;
border: 1px solid red;
}
main {
margin-top: 90px;
background-color:yellow;
}
Project Header
somecontent
jsFiddle
The reason the fixed header moves is as follows:
position: fixed is the viewport...top, bottom, left and right) have an initial value of auto, which keeps the element where it normally would be if it were in the document flow.position: absolute or position: fixed (another form of position: absolute), you're specifying the type of positioning you want... but you're not positioning it anywhere.top: 0.html {
background-color: green;
height: 100%;
}
body {
background-color: pink;
height: 100%;
}
header {
position: fixed;
border: 1px solid red;
top: 0px; /* NEW */
}
main {
margin-top: 90px;
background-color:yellow;
}
Project Header
somecontent
jsFiddle