Can anyone tell me why position:fixed cause the element to be wider than the browser or other content on the page and causing horizontal scrolling?
Here is the code HTML
It's because the width is differently applied to relative
and fixed
elements depending on the container margin
and the style property that are parent-inheritable - respective to their position
property such as (you guess right) width
.
Due to, if you don't use any CSS reset like this ugly fella *{margin:0; padding:0;}
the body
tag will have it's default 8px margins (http://www.w3.org/TR/CSS2/sample.html),
header
being fixed, without any top
, left
, right
or bottom
value will be positioned to the nearest available place -> but will inherit the original document/viewport size, making it REALLY 90% wide, just positioned at the 10px 'body' margin offset.
To test add top:0; left:0;
for the fixed header
http://jsbin.com/ETAqADu/1/edit
.container
being a block
level DIV element set to relative
position, will be 90% width of the available parent usable width, which is the body
innerWidth (not counting the 10 + 10px margins (X axis))
Result: logically header
will be 20px wider than .container
because position fixed moves your element out of your body
flow.
Fix: logically, control your parent (body
) element default margin by setting to 0