文章目录
- 定位
- 为什么要使用定位
- 定位的组成
- 定位模式
- 静态定位:按照标准流特性摆放,没有边偏移
- 相对定位:元素在移动位置的时候,是相对于它原来的位置来说的
- 绝对定位:在移动位置的时候相对与祖先元素
- 固定定位:元素固定于浏览器可视区的位置。浏览器随页面滚动时元素的位置不会改变
- 粘性定位:相对定位和固定定位的混合
- 子绝父相
- 边偏移
- 定位的叠放次序z-index(z轴)
- 定位的特殊特性
- demo(轮播图)
定位
为什么要使用定位
- 某个元素可以在一个盒子内移动位置,并压住其他盒子
- 滚动窗口时,盒子固定在屏幕
定位的组成
定位:将盒子定在一个位置,所有定位也是在摆放盒子,按照定位的方式移动盒子。
定位=定位模式+边偏移
定位模式用于指定一个元素在文档中的定位方式,边偏移决定了该元素的最终位置。
定位模式
position:static | relative | absolute | fixed | sticky
默认:静态定位 |相对定位 | 绝对定位 | 固定定位 | 粘性定位
静态定位:按照标准流特性摆放,没有边偏移
相对定位:元素在移动位置的时候,是相对于它原来的位置来说的
- 相对于原来的位置移动
- 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保留原来位置)
因此,相对定位没有脱标,它最典型的应用就是给绝对定位当爹
绝对定位:在移动位置的时候相对与祖先元素
- 如果没有祖先元素或祖先元素没有定位,则以浏览器为准定位
- 如果祖先元素有定位,则会依据最近一级祖先元素为参考移动
- 脱标(比浮动飘的高)
居中算法:加了==绝对定位的盒子不能通过margin:0 auto;==水平居中
- 让绝对定位的盒子left:50%,走到父盒子的一半;
- margin负值,往回走盒子宽度的一半。
垂直居中同理
固定定位:元素固定于浏览器可视区的位置。浏览器随页面滚动时元素的位置不会改变
- 以浏览器可视窗口为参照
- 跟父元素没有任何关系
- 不随滚动条滚动
- 脱标
**固定定位小技巧:**固定到版心右侧
- 让固定定位的盒子left:50%,走到浏览器可视区即版心的一半;
- 让固定的盒子margin-left:版心宽度的一半距离,多走版心宽度的一半位置。
粘性定位:相对定位和固定定位的混合
- 以浏览器可视窗口为参照移动(固定定位)
- 占有原先位置(相对定位)
- 必须添加top、left、right、bottom
例如:将页面滚动到一定的位置后元素变为固定定位效果(IE)
子绝父相
- 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
- 父盒子加相对定位,占有位置
边偏移
定位的盒子移动的最终位置、有top、bottom、left、right属性
如果一个盒子同时又四个属性,执行先左后右,先上后下
定位模式 | 是否脱标 | 移动位置 |
---|---|---|
static静态定位 | 否 | 不能使用边偏移 |
relative相对定位 | 否 | 相对于自身位置偏移 |
absolute绝对定位 | 是 | 带有定位的父级 |
fixed固定定位 | 是 | 浏览器可视区 |
sticky粘性定位 | 否 | 浏览器可视区 |
定位的叠放次序z-index(z轴)
- 数值可以是正整数、负整数、0,越大越靠上
- 属性值相同则后来者居上
- 数字后不能加单位
- 只有定位的盒子才有z-index属性
定位的特殊特性
与浮动类似
- 行内元素添加绝对或固定定位,可以直接设置宽度和高度
- 块级元素添加绝对或固定定位,如果不给宽度或高度,默认大小是内容的大小
- 脱标都不会触发边距塌陷
与浮动不同
- 绝对定位和固定定位会压住下面的文字和内容
demo(轮播图)
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.tb-promo {
position: relative;
width: 520px;
height: 280px;
margin: 100px auto;
}
.tb-promo img {
width: 520px;
height: 280px;
}
/*并集选择器可以集体声明相同样式*/
.prev,
.next {
position: absolute;
/*绝对定位盒子垂直居中*/
top: 50%;
margin-top: -15px;
/*绝对定位可以直接设置宽度和高度*/
width: 20px;
height: 30px;
background: rgba(0, 0, 0, 0.3);
text-decoration: none;
text-align: center;
line-height: 30px;
color: #fff;
}
.prev {
left: 0;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
}
.next {
right: 0;
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
}
.promo-nav {
position: absolute;
bottom: 15px;
left: 50%;
margin-left: -35px;
width: 70px;
height: 13px;
background: rgba(255, 255, 255, 0.3);
border-radius: 7px;
}
.promo-nav li {
float: left;
width: 8px;
height: 8px;
background-color: #fff;
border-radius: 50%;
margin: 3px;
}
.promo-nav .select {
background-color: #ff5000;
}
<div class="tb-promo">
<img src="image/tb.jpg" alt="">
<!--左侧按钮-->
<a href="#" class="prev"><</a>
<!--右侧按钮-->
<a href="#" class="next">></a>
<!--圆点-->
<ul class="promo-nav">
<li class="select"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>