🍇定位
1.static定位
- 默认值,即没有定位,遵循正常的文档流对象。静态定位的元素不会受到 top, bottom, left, right影响。
2.relative定位
- 相对原本的位置
1.元素开启相对定位后,如果不设定偏移量(top,bottom,left,right)本身则不会发生任何变化,也不会使其它元素脱离原来的位置。通常水平垂直方向各设定一个,如设定(left,top)
2. 参照与元素在原本位置上进行定位的
3. 相对定位会提升元素层级
4. 相对定位不会改变元素的性质,块元素还是块元素,行内元素还是行内元素
5. 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保持原来的位置),最典型的应用是给绝对定位当爹的
4.absolute定位
- 相对于最近的已定位父元素,如果没有祖先元素或者祖先元素没有定名位,则以浏览器为准定位
- 元素开启绝对定位后,本身位置不会发生任何变化,但会使其它元素脱离原来的位置(脱标)。故绝对定位会改变元素的性质,行内元素变成块元素,块的宽高会被内容撑开即与内容的宽高一样。
- 绝对定位会提升元素层级
- 绝对定位元素是相对于其包含块(即当前元素最近的开启了定位的祖先元素)进行定位的,若无位置相对于html
- 开启了绝对定位后,水平方向的布局(margin-left+border-left+padding-left+width+padding-right+margin-right)等式就相当与多了left与right(它们默认值是auto)若等式不满足时,会自动调整,故开启定位后想让它在水平中间,就让left与right等于0,而margin-left与margin-right设置为auto.
绝对定位的盒子居中方法
- 加了绝对定位的盒子不能通过margin:0 auto水平居中,但可通过一下计算实现水平和垂直居中
1.left:50%;(让盒子的左侧移动到父级元素的水平中心位置)
2.margin-left:-100px;(让盒子向左移动自身宽度的一半)
🍇子绝父相:子级使用绝对定位,父级则需要相对定位
3.fixed定位
- 大部分特点与绝对定位一样,不同的是元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动
1.left:50%;(让盒子的左侧移动到父级元素的水平中心位置)
2.margin-left:-100px;(让盒子向左移动自身宽度的一半)
固定定位小技巧
- 固定在版心右侧 1.让固定定位的盒子left:50%(即走到版心的一半位置) 2.让固定定位的盒子margin-left:版心宽度的一半距离(就可让盒子贴着版心右侧对齐)
4.sticky定位
- 粘滞定位,大部分特点与相对定位一样,不同的是sticky可以在元素到达某个位置时将其固定。
5.重叠的元素(z-index)
- 可以覆盖页面上的其它元素。
z-index的值越大,层级越高也就越优先显示,若层级一样,则优先显示靠下的元素,而祖先元素的层级再高也不会盖住后代元素。
🍇淘宝焦点图布局制作案例
- 大盒子可类名为:tb-ad
- 里面放一张图片
- 左右两个按钮用链接即可,左箭头prev,右箭头next
- 底侧小圆点ul继续做,类名ad-nav
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>淘宝焦点图</title>
<style>
* {
margin: 0;
padding: 0;
}
li{
list-style: none;
}
.tb-ad {
/* 相对定位可直接auto */
position: relative;
width: 761px;
height: 425px;
background-color: pink;
margin: 100px auto;
}
.tb-ad img {
width: 761px;
height: 425px;
}
/* 把公共部分放到并集选择器 */
.prev,
.next {
/* 会压住图片,用绝对定位,加了定位不用模式转换,就可设置宽和高 */
position: absolute;
width: 27px;
height: 44px;
background: rgba(0, 0, 0, .7);
top: 50%;
margin-top: -22px;
text-align: center;
/* 行高等于高度 */
line-height: 44px;
color: #fff;
text-decoration: none;
}
.prev {
left: 0;
border-radius: 0 22px 22px 0;
}
.next {
right: 0;
border-radius: 22px 0 0 22px;
}
.ad-nav{
position: absolute;
width: 100px;
height: 20px;
left: 50%;
margin-left: -50px;
bottom: 15px;
background-color: rgba(255, 255, 255, .3);
border-radius: 10px;
}
.ad-nav li{
float: left;
width: 10px;
height: 10px;
margin: 4px 5px;
background-color: #fff;
border-radius: 50%;
}
/* 不要忘记权重问题 */
.ad-nav .seleceted{
background-color: #ff5000;
}
</style>
</head>
<body>
<div class="tb-ad">
<!-- 用相对路径 -->
<img src="tb-pic1.jpg">
<!-- 左侧按钮,用绝对定位做 -->
<a href="#" class="prev"><</a>
<a href="#" class="next">></a>
<ul class="ad-nav">
<li class="seleceted"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</body>
</html>