文章目录
一、CSS定位
- 定位:将盒子定在某一位置所以定位也是在摆放盒子,按照定位的方式移动盒子
- 定位=定位模式+边偏移
- 定位模式
决定元素的定位方式,通过position属性设定
static是静态定位,relative是相对定位,absolute是绝对定位,fixed是固定定位 - 边偏移
定位盒子移动到最终位置
top/left/right/bottom(相对于父元素)
(一)静态定位static
语法: 选择器 {position: static;}
- 元素默认定位方式,无定位的意思
- 静态定位按照标准流特性摆放位置,没有边偏移
- 静态定位在布局时很少用到
(二)相对定位relative
语法:选择器{position: relative;}
- 元素在移动位置时,是相对于它原来的位置来说的
- 它是相对于自己原来的位置移动的
- 原来的位置继续占有,后面盒子仍以标准流的方式对待它(不脱标,保留原来位置)
(三)绝对定位absolute
语法:选择器{position: absolute;}
-
元素在移动位置时,是相对于它的祖先元素来说的
-
如果没有祖先元素或祖先元素没有定位,则以浏览器为准定位
-
如果祖先元素有定位(相对、绝对、固定定位),则以最近一级有定位祖先为参考点移动位置
-
绝对定位不再占有原来位置(脱标)
注意:子绝父相(子级是绝对定位的话,父级要用相对定位)
- 子级绝对定位,不会占有位置,可以放到父盒子里面任意地方,不会影响其他的兄弟盒子
- 父盒子需要加定位限制子盒子在父盒子内显示
- 父盒子布局时,需要占有位置,因此父级只能是相对定位
- 因为父级需要占有位置,因此是相对定位;子盒子不需要占有位置,则是绝对定位
(四)固定定位fixed
语法:选择器:{position: fixed;}
- 元素固定于浏览器可视区的位置
- 主要使用场景:可以在浏览器页面滚动时,元素的位置不变
- 以浏览器的可视窗口为参照点移动元素
- 跟父元素没有任何关系
- 不随滚动条滚动
- 固定定位不占有原先的位置
- 固定定位也是脱标的,可以看做是一种特殊的绝对定位
固定定位小技巧:固定在版心右侧位置
小算法:
- 让固定定位的盒子left:50%,走到可视区一半位置
- 让固定定位的盒子margin-left:版心宽度的一般距离,多走版心宽度的一半位置
(五)粘性定位sticky
语法:选择器{position: sticky; top: 10px;}
- 可以被认为是相对定位和固定定位的混合
- 以浏览器可视窗口为参照点移动元素(固定定位的特点)
- 粘性定位占有原先的位置(相对定位的特点)
- 必须添加top、left、right、bottom其中一个才有效
- 跟页面滚动搭配使用,兼容性较差,IE不支持
(六)定位叠放次序z-index
语法:选择器{z-index: 1;}
- 数值可以是正整数,负整数或0,默认为auto,数值越大,盒子越靠上
- 如果属性值相同,则按照书写顺序,后来居上
- 数字后面不能加单位
- 只有定位的盒子才有z-index
绝对定位的盒子居中
- 为了绝对定位的盒子不能通过margin: 0 auto水平居中
- 水平居中:left: 50%; margin-left: -盒子宽度的一半;
- 垂直居中:top: 50%; margin-top:-盒子高度的一半;
(二)定位特殊特性
- 绝对定位和固定定位也和浮动类似
- 行内元素添加绝对或相对定位,可以直接设置宽度和高度
- 块级元素添加绝对或相对定位,如果不给宽度或高度,默认大小是内容的大小
(三)脱标的盒子不会触发外边距塌陷
浮动元素,绝对定位(固定定位)元素的都不会触发外边距合并问题(脱离标准流)
(四)绝对定位(固定定位)会完全压住盒子
- 浮动元素不同,只会压住下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)
- 浮动产生的最初是为了做文字环绕效果的,文字会围绕浮动元素
- 绝对定位(固定定位)会压住下面标准流所有的内容