06 css定位 position

158 阅读5分钟

为什么要用定位

可以让 盒子 自由的在某个盒子内部移动位置或者固定屏幕中的某个位置,并且可以压住其他盒子

定位 : 将盒子定在某个位置

定位的分类 position

定位 = 定位模式 + 边偏移

定位模式 : 指定一个元素在文档中的定位方式
边偏移 : 决定该元素的最终位置
定位模式 :
static : 静态定位
relative : 相对定位
absolute : 绝对定位
fixed : 固定定位
边偏移 : 就是说 定位的盒子移动到最终位置

top : 顶端偏移量
left : 左侧偏移量
right : 右侧偏移量
bottom : 底部偏移量

静态定位 static

是元素的默认方式,无定位 ;

就是 按照标准流的特性摆放位置,没有边偏移

相对定位 relative

特点

  • 是相对于自身的定位来说的

  • 会占有原来的位置 , 它下面的盒子不会往上面窜 (不会脱标

image.png image.png

绝对定位 absolute

特点

  • 是相对于 祖先元素来说的
  • 若 没有祖先元素 或者祖先元素没有定位,则移动的时候是以 浏览器文档 为基准的
  • 只要父级有定位,那么移动的时候 就 以 父级为基准了
  • 绝对定位 会脱标

没有父级或父级没有定位

image.png

此时 没有父级元素,所以 是 以浏览器为基准的

image.png

父级有定位

注 :也就是说 是以最近一级的有定位的元素( 若 父亲没有定位,而爷爷有定位,那么就 以 爷爷为基准 )

image.png image.png

脱标

image.png

image.png image.png

子绝父相

子集使用 绝对定位 , 那么父级要用相对定位

  • 子盒子绝对定位,那么就不会占有位置,可以放到父盒子里面的任意一个地方,不会影响其他的兄弟盒子

  • 父盒子需要加定位 用来显示子盒子只能在父盒子里面显示

  • 父盒子布局时,需要占有位置,所以父盒子只能是相对定位

注 : 子绝父项不是永远不变的,若父元素不需要占有位置,那么子绝父绝也会遇到

固定定位 fixed !!

是元素固定在浏览器可视区的位置 ; 主要使用场景是 : 可以在浏览器页面滚动时元素的位置不会改变

特点

  • 是以浏览器的 可视窗口 为参照点移动元素的
  • 跟父元素没有关系
  • 不会随着滚动条而滚动
  • 固定定位 不会占有原先的位置 (脱标

固定到版心右侧

image.png

image.png

粘性定位 sticky

特点

  • 是以浏览器的 可视窗口 为参照点移动元素的

  • 是占有原先位置的

  • 必须 添加 top left right bottom 任意一个

image.png

定位的叠放次序 z-index

在使用 定位布局时,可能会出现盒子重叠的情况,所以 我们使用 z-index来设置盒子的叠放次序

数字越高,越在前面

  • 数值可以是 正整数,负整数或者0 , 默认是auto ,数字越大,盒子越靠上

  • 若属性值相同,则按照书写规则,后来者居上

  • 数字后面不能加单位

  • 只有 定位的盒子才能加z-index

image.png

此时就是 谁最后一个写的 ,谁就在最上面

image.png

若我们利用 z-index时

image.png

image.png

定位扩展

绝对定位盒子居中

在没有加定位之前 :

image.png image.png

加了定位之后 : 此时就不能水平居中了

image.png

image.png

那么 让加了定位的盒子在浏览器中水平居中 :

必须给宽高

这个和版心放在右侧的案例差不多

1、首先因为加了定位,所以绝对定位的盒子 会贴着父盒子边缘 ; 所以 先走 父盒子的一半

image.png image.png

2、发现 走多了,所以再往前走 子盒子的一半

image.png

image.png

3、此时设置垂直居中 ,就也是 top走一半 , 然后再向上走高度的一半

image.png image.png

浮动元素不会压住标准流的文字

在 定位中 , 定位盒子会压住标准流的盒子

image.png

而在浮动中 ,给元素添加浮动,那么定位盒子就不会压住标准流的文字,但仍然会压住盒子

image.png image.png
浮动不会压住内容 ,是因为 浮动产生最初的目的 ,就是为了做文字环绕的

定位的特殊特性

  • 若给行内元素 添加了 定位,那么可以直接设置高度或者宽度

  • 若给块级元素添加定位 ,不给它高度或者宽度,那默认大小是 内容的大小

image.png

image.png

  • 脱标的盒子不会触发外边距塌陷的 (外边距合并)

隐藏显示

本质 : 让一个元素在页面上隐藏或者显示出来

display 显示隐藏元素 不会保留原来的位置

displaynone 隐藏元素
display : block 显示

none

image.png image.png

加了 display:none 后

image.png image.png

会发现 ,第一个框消失了,并且不会占有原来的位置

visibility 显示隐藏元素 会保留原来的位置

属性有 : inherit 继承父亲的
         visible : 可以看见
         hidden : 隐藏

hidden

image.png

image.png

overflow 溢出显示隐藏

是对溢出的部分进行设置

属性有 :
        visible :  默认, 显示
        auto : 自动,超出就有滚动条,没超出就没有
        hidden : 隐藏
        scroll : 总是显示滚动条

visible 可见

image.png image.png

auto 自动

image.png

image.png

hidden 隐藏

image.png image.png

scroll 总是显示滚动条

不管内容多少,总是显示滚动条

image.png

image.png

注 : 对于有定位的盒子 要谨慎使用 overflow:hidden ,因为它会隐藏多余的部分