情景
假设现在需要展示侧边栏Sidebar和主要内容content。
希望Sidebar在左侧,content在右侧。
但是在html中,先解析到的元素会更早处理,所以我们希望在html代码文件中sidebar处于content的下面。
不过这好像是早期互联网留下的习惯,个人感觉一个侧边栏耽误不了多少时间。 后面去查了一下,把主要内容放前面有利于SEO,甚至有些搜索引擎对抓取长度有限制。
解决
absolute绝对定位
简单粗暴好理解。
float+width(calc)
使用float:right + calc空出左侧空间,然后侧边栏自然处于左侧。
float+负margin(不推荐)
该写法出自博客园,感觉是为了兼容性才这么搞的写法,calc比这写法简单多了。
float:right使其漂浮,使得二者在同一行具有可能性。- 负的margin使得content能让出内部空间以供外部布局。
width: 100%;使得元素不会由于负margin而变宽。同时float:right让其不会往左偏移。box-sizing:border-box+padding-left空出内部空间防止内容发生重叠。
负值margin会让这个元素以(原始空间+负margin)处理过后的空间进行布局,因此有些时候会出现诡异的布局情况。
比如下面这个,我100%宽度+负margin 20em,处理过后的空间宽度正好补足左侧的空隙,于是整个元素一下子往左偏移了。
如果把下面的主要内容改成非BFC,那么会发现第一个元素变高了,这是因为字符和图片等元素在初始布局的情况下不会重叠。
比较好的解决办法是,把上面这个浮动的文字清除浮动,防止其影响到我们下面的布局。