流的破坏与保护
css 正常文档流很难适应复杂布局的需要,于是就需要破坏流来实现想要的布局;破坏总是不好的,需要尽可能的把破坏的影响限制在特定范围内,此时就需要保护流。
float
float 的设计本意是想实现文字环绕图片的效果;然而却经常被用作一块一块的转头式布局。
float 的作用机制是文字环绕图片显示,文字实际指的是行框盒子的文字,每一行内联元素都有一个行框盒子。
浮动会带来两个问题,一是浮动会是父级容器塌陷,二是文字环绕
clear 清除浮动只能在一定程度上解决文字环绕效果,但解决不了高度塌陷问题。
来看看更好的解决方案 BFC
BFC
BFC(Block Formatting Context) 块级格式化上下文,形成一个封闭环境,不受外界影响,也不影响外界。
形成条件:
html 根元素;
float 值不为 None;
overflow 值为 auto,scroll 或 hidden;
display 值为 table-cell,table-caption 或 iniline-block;
postion 不为 relative 和 static
BFC 主要目的是利用流体特性,实现自适应布局, 所以最合适的是 overflow: hidden;
overflow
overflow 设置内容超出容器如何显示。有四个值
visible: 超出部分不被裁剪,显示在元素框之外
auto:没超出不裁剪,超出产生滚动条
scroll: 显示滚动条
hidden: 超出隐藏内容
overflow-x 和 over-flow-y
有个特性 overflow-x 和 overflow-y,中有一个是三个值(auto, scroll, hidden)中的一个,那么另外一个不能是 visible
锚点定位
两种方式,其一 通过 id 定位
<a href="#poem">有诗云</a>
<div id="poem">
<p> 满纸荒唐言,一把辛酸泪。</p>
<p> 都云作者痴,谁解其中味。</p>
</div>
其二 通过 name 定位,但必须是 a 标签
<a href="#red"> 这里</a>
<a name="red">悼红轩</a>
值得注意的是 overflow: hidden; 也可以这样定位。
absolute
元素一旦设置 position: absolute, 则 display 自动更新为 block
absolute 的包含块
absolute 是相对于最近非 static 的父级元素定位,这个父级元素称为包含块。
absolute 元素的表现为宽度自适应(内容占多大宽度就是多少宽度), 但最大宽度不会超过包含块的宽度。设置 white-space: no-wrap; 可以让文字突破限制。
包含块的边界是 padding box;
无依赖决定定位(不设置 left right top bottom)
当只设置 position: absolute 时,其位置不在相对其他元素定位,位置是默认的,但可通过 margin 调整;且仍旧脱离文档流
absolute 和 overflow 连用,滚动时 absolute 元素静止不动
absolute 和 clip
clip 必须和 absolute 和 fixed 连用才能起作用。
隐藏元素
position: absolute;
clip: rect(0, 0, 0, 0)
absolute 的流体特性
同时设置 left 和right 就表现为水平方向流体特性,竖直方向也一样
流体特性的特点就是自动充满可用空间。
relative
relative 得值 left right top bottom 的规则很好理解,就是相对自身定位;在四者同时存在时 top > bottom, left > right
尽量不要使用 relative, 确要使用影响也应限制在最小范围内。
fixed
fixd 相对 html 元素定位,层级最高,永远在最上面。