css 定位 position 以及float的一些额外特性
css定位及与float的对比
为什么需要定位?
1.浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子。
2.定位是让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。
定位组成
定位=定位模式 + 边偏移
定位模式:一个元素在文档中的定位方式
边偏移:决定该元素的最终位置
子绝父相
1.子级绝对定位,不会占位置,可以放到父盒子的里面的任何地方,不会影响其他的兄弟盒子。
2.父盒子需要加定位限制子盒子在父盒子内显示。(父亲需要保留原来的位置不能用absolute)
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.tb-promo {
position: relative;
width: 520px;
height: 280px;
margin: 100px auto;
}
/* 并集选择器可以集体声明相同的样式 避免代码重复 */
.prev,
.next {
position: absolute;
top: 50%;
margin-top: -15px;
width: 20px;
height: 30px;
background: rgba(0,0,0,.3);
text-align: center;
line-height: 30px;
color: #fff;
text-decoration: none;
}
.prev {
left: 0;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
}
.next {
/* 如果一个盒子既有left属性又有right属性,则默认会执行left属性 。同理 left bottom 会执行top */
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,.3);
border-radius: 7px;
}
.promo-nav li {
float: left;
width: 8px;
height: 8px;
background-color: #fff;
border-radius: 50%;
margin:3px;
}
</style>
<body>
<div class="tb-promo">
<img src="images/tb.jpg" alt="">
<a href="#" class="prev"> <</a>
<a href="#" class="next"> ></a>
<ul class="promo-nav">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</body>
固定定位
fixed也是飘起来 不影响标准流
固定在版心右侧:
{position:fixed;
left:50%;
margin-left: 50%的版心宽度的一半
}
sticky(粘性定位)
相对定位(relative)与固定定位(fixed)的混合
1.以浏览器的可视窗口为参照(固定的特性)
2.占有原来位置(相对的特性)
3.必须添加top left right bottom其中一个才有效(不然就当相对定位看)
导航栏
{
position:sticky;//兼容性差
top:0;
定位的叠放位置
z-index
1.默认 auto 可为正 可为负 数值越大 盒子越靠上
2.如果数值相同 后来者居上
注意
1.加了绝对定位和固定定位的盒子不能通过margin: 0 auto 水平居中
但是相对定位符合标准流 ,是可以用margin:auto的。
{
position:absolute;
left:50% ; //浏览器的一半 (或者父亲的一半)
//margin 负值 往左走 自己盒子宽度的一半
margin-left : -(盒子自己的一半);
2.定位特殊性
1)与浮动元素相似 行内元素(span等)添加绝对或者固定定位,可以直接设置高度和宽度。
2)块级元素添加绝对或者固定,如果不给宽度和高度,默认大小是内容的大小(不是标准流特性占一行)。
3)浮动元素、绝对定位(固定定位)元素都不会触发外边距合并问题。
3.定位的拓展
1)浮动元素只会压住它下面标准流的盒子 ,但是不会压住下面标准流盒子里面的文字(图片)。但是定位(绝对和固定)会全部压住。
【浮动之所以不会压住文字,因为浮动最初产生的目的是为了做文字环绕效果。文字会围绕浮动元素】
总结
relative 占位置
absolute 不占位置
fixed 不占位置
还没有评论,来说两句吧...