CSS之定位
定位与浮动的区别:
浮动:可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子
定位:可以让盒子自由的在某个盒子内移动位置或者固定在屏幕中的某个位置,并且可以压住其他盒子
定位的组成
定位=定位模式+边偏移
定位模式 position
选择器 {position : 属性值;}
position有四个属性值:
1.**static:静态定位,**没有特殊的定位规则,遵循正常的文档流对象(极少使用)
2 relative:相对定位,相对于元素自身进行定位(参照物为元素原来的位置)
//原来在标准流的位置继续占有,后面的盒子依然以标准流的方式对待它(不脱标,继续保留原来的位置)
3.absolute:绝对定位,相对于最近的有定位的父元素进行定位
//如果没有祖先元素或者主线元素没有定位,则以浏览器为准定位(Document文档)
绝对定位不再占有原来的位置(脱标)
4.fixed:固定定位, 是元素固定于浏览器可视区的位置,相对于浏览器可视窗口进行定位,
使用场景:可以在浏览器页面滚动时元素的位置不会改变
//跟父元素没有关系,且不随滚动条滚动而滚动
固定定位也是脱标的,不再占有原来的位置
Tips:也可相对于版心定位:(重要)
1.让固定定位的盒子left:50%,走到浏览器可视区(也可看做版心)的一半位置
2.让固定定位的盒子 margin-left :版心宽度的一半距离,多走版心宽度的一半位置,就可以让固定定位的盒子贴着版心右侧对齐了
5.stichy: 粘性定位 被认为是相对定位和固定定位的结合体
语法:
选择器 { position : sticky ; top :10px ;}
//以浏览器的可视窗口为参照点移动元素(固定定位特点)
粘性定位占有原来的位置(相对定位特点)
必须添加 top left right bottom其中一个才有效
(跟页面滚动搭配使用,兼容性较差,IE不支持)
边偏移
即盒子移动到最终位置
有top bottom left right四个属性:如果一个盒子既有left属性也有right属性,则会默认执行Left属性(先左后右,先上后下)
子绝父相(重要!!!)
子级是绝对定位的话,父级要用相对定位
1.子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
2.子盒子需要加定位限制子盒子在父盒子内显示
3.父盒子布局时,需要占有位置,因此父亲只能是相对定位
//父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位
定位叠放次序 z-index
用于控制盒子的前后次序
语法: 选择器 { z-index :1;}
数值可以是正整数、负数或0,默认为auto,数值越大,盒子越靠上
如果属性相同,则按照书写顺序,后来居上
数字后面不能加单位
只有定位的盒子才有这个属性
绝对定位的盒子居中
加了绝对定位的盒子不能通过margin: 0 auto; 水平居中,但可以通过以下计算方法实现水平和垂直居中
1.让固定定位的盒子left:50%,走到父容器的一半位置
2.给margin-left 负值(自己盒子宽度的一半)往左边走
3.让固定定位的盒子top:50%,版心高度的一半位置
4.给margin-top 负值(自己盒子高度的一半)往上边走
定位的特殊特性
行内元素添加绝对或者固定定位,可以直接设置高度和宽度
块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小
脱标的盒子不会触发外边距塌陷(浮动元素,绝对定位(固定定位)元素的都不会触发外边距合并的问题)
绝对定位(固定位置)会完全压住盒子
浮动元素不同,只会压住它下面标准流的盒子,**但不会压住下面标准流盒子里面的文字(图片) ** 浮动可用于设置文字环绕