CSS 定位

231 阅读3分钟

CSS定位和布局的区别

定位是垂直于平面的,布局是基于屏幕平面上的

一个div的分层

内联子元素
浮动元素
块级子元素
border
background

浮动元素会脱离文档流,会比其它元素高一点点,但是比文字低,文字最高
文字最高,但是会按出现的先后顺序,后出现的高

position

用于指定一个元素在文档流中的位置,有五个取值

static 默认值,待在文档流里

position:static;

relative 相对定位,升起来一点,但不脱离文档流;原来在的位置不变,显示的位置偏离

position:relative;
top:10px;
lest:10px;

用于给 aboslute元素做爸爸,配合 z-index 使用(相对定位)

z-index属性,制定了一个具有定位属性的元素以及其子代元素的z-order
当元素之间重叠时候,z-order决定哪个元素覆盖在其余元素的上方

每一个元素的 z-index 默认值都是 auto
z-index:auto;      auto计算出来的值是0,但不能直接写0
z-index:0/1/2/;    出现在内联子元素上面(文字上面)
z-index:-1/-2/-3;  出现在background下面

absolute 绝对定位,定位基准是祖先里的非staic元素

在它要定位的祖先元素上加position:relative;才能绝对定位,是基于这个祖先进行绝对定位

使用场景:脱离原来位置,另起一层,比如对话框的关闭按钮,鼠标提示等;

配合 z-index 使用(右上角的关闭键,鼠标悬浮提示代码)
练习代码:http://js.jirengu.com/kidor/1/edit?html,css,output 

button span{display:none;}button           里面的span默认看不见
button:hover span{display:inline-block;}   鼠标悬浮时,显示span

定位absolute相对于它的祖先元素中最近的一个定位元素进行定位的
(position不是static就是定位元素)

有人认为absolute是相对于revative的绝对定位
有些些浏览器不写top/left会位置错乱
left:100%;
left:50%;
transfrom:translateX(-50%);(加负margin 居中)

fixed 固定定位,定位基准是viewport(有诈)

相对于视口定位(可以看见的区域)
使用场景:烦人的广告,回到顶部按钮

配合z-index使用(手机上别用这个属性,坑多)

坑在哪:如果position:fixed;
所在的那个元素的container有一些特殊属性(transform:scale(0.9);)
练习代码:http://js.jirengu.com/hawuq/1/edit?html,css,output

sticky 粘滞定位

开始时按文档流排序,下滑是会粘在屏幕上方
很多浏览器不支持

层叠上下文

如果对一个元素使用了position,那么这个元素就出现在定位元素上

z-index:1/2/3,以文字为基准,z-index:-1/-2/-3,以background为基准

每一个层叠上下文都是一个新的小世界,这个小世界里的z-index跟外界的无关
处在同一个小世界的z-index才能比较

层叠上下文练习代码:http://js.jirengu.com/tijar/1/edit?html,css,output

详细资料点击:定位元素 position