百度前端技术学院是一个为大学生创办的免费的前端技术实践、分享、交流平台。由百度校园招聘组、百度校园品牌部、百度前端技术部以及多个百度的前端团队联合创办。学院组织了一批百度在职工程师,精心编写了数十个实践编码任务,将技术知识点系统有机地串联在各个充满趣味与挑战的任务中,同学们通过实际地编码练习来掌握知识,再辅以互相评价、学习笔记等方式,加深对于学习内容的理解。在过去的三年中,百度前端技术学院累积吸引了上万名同学参加,并且有数十名同学在学习后,顺利加入了百度,成为了百度的前端工程师。

理解绝对定位

作者赖俊杰课程任务四:定位和居中问题5766次浏览152017-03-02 17:48

定义

CSS绝对定位设置为绝对定位的元素框从文档流完全删除,并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块,不占据空间。

效果

与 float 类似,会 block 化元素,能破坏元素的 line boxes。
与 float 不同的是,absolute 脱离了文档流。

脱离文档流
容器 absolute 后,容器会包裹子元素
子元素 absolute 后,容器的高度会塌陷
absolute 后的子元素,不会受无定位父容器的 overflow 所影响

无依赖的绝对定位

无依赖的绝对定位

不受 relative 限制的 absolute 定位,行为表现上是不使用 top / bottom / left / right 任何一个属性或是 auto 值

特点

  1. 位置跟随性
    原来什么位置,absolute 后还是什么位置,只是漂浮起来了

应用

配合 margin 进行精确定位
优点:1. 支持负值定位 ; 2. 兼容性IE6+

图标定位

原来的实现方案:

  • 容器 relative,子元素 absolute 定位

利用跟随性后:

  • 容器无定位,子元素 absolute 利用 margin 定位

有依赖的绝对定位

用法

  1. 位移
    top - left / top - right
    bottom - left / bottom - right
  2. 拉伸(IE7+)
    left - right / top - bottom

特点

  1. 与 width / height 相互替代
    很多情况下,绝对定位的拉伸和 width/height 是可以相互替代的
    width : 100% ; height : 100% ; <==> top:0; left:0; right:0; bottom:0;
    left:0; top:0 width:50%; <==> left:0; top:0; right:50%;

  2. 与 width / height 相互支持
    容器无需 width / height 值,内部元素亦可以拉伸;
    容器拉伸(宽高不固定),内部元素支持百分比 width / height 值;

  3. 相互合作性(IE8+)
    当尺寸限制、拉伸 与 margin:auto 同时出现时,就能实现绝对居中效果

    我们知道,左右外边距 auto 可以让块元素水平居中,但是需要注意的是,垂直方向上的上下外边距设置为 auto 是不可以的让块状元素垂直居中的。一是因为 auto 的作用是 自动分配剩余空间,块状元素在垂直方向上默认是不会自动填充父元素的 height 的。二是因为,正常流中的一个块元素的上下外边距设置为 auto 的化,它会自动设置为 0 。
    因此要想让元素垂直水平居中,就要让元素在上下方向上都自动填充,并利用绝对定位的拉伸就可以做到。
    原理是:通过absolute化子元素,设置上下左右为0;让其具有自动填充性,然后通过设置宽度,然后就有了剩余空间,然后再使用 margin:auto, 分配剩余空间。
    

遮罩

.container{
     /*容器不固定宽高*/
     display : inline-block;
     position : absolute;  
}

.cover{
     position : absolute;
     /*容器拉伸*/
     left:0;top:0;right:0;bottom:0;
     background-color:#fff;
     opacity: .5; filter:alpha(opacity=50);
}

左右半区翻图浏览

.prev,.next{
    /*覆盖容器的一半*/
    width:50%;
    /*上下拉伸*/
    position:absolute;top:0;bottom:0;
    background-image: ;
    outline:none;
}

.prev{cursor:url(),auto; left:0 }
.next{cursor:url(),auto; right:0}

高度自适应的九宫格

.page{
    position:absolute;
    left:0;top:0;right:0;bottom:0;
}

.list{
   float:left;
   height:33.3%;width:33.3%;
   position: relative;
}

垂直水平居中


p,img{
     position:absolute
     top:0;right:0;left:0;bottom:0;
     margin:atuo;
     width: 50%;
     height: 50%;
}

网页整体布局

优点:适合移动端
头部尾部以及侧边栏都是fixed效果,不跟随滚动
可以防止移动端使用position:fixed带来的问题

<!-- 遮罩与page平级 -->
<div class="page"></div>
<div class="overlay"></div>
html,body{height:100%}
.page{position:absolute;lefttoprightbottom:0;}

/*顶部、底部*/
header,footer{position;leftright:0}
header{height:48px;top:0}
footer{height:52px;bottom:0}

/*侧边栏*/
.aside{width:250px;position:absolute;left:0;top:0;bottom:0;

/*内容区*/
.content{position:absolute;top:48px;bottom:52px;left:250px;overflow:auto;}

/*遮罩层*/
.overlay{position;absolute;top,right,bottom,left:0;b-g:rgba(0,0,0.5);z-index;}

参考链接

CSS 相对|绝对(relative/absolute)定位系列(一)
CSS 相对/绝对(relative/absolute)定位系列(二)
CSS 相对/绝对(relative/absolute)定位系列(三)
absolute元素在text-align属性下的对齐显示
absolute绝对定位的非绝对定位用法

10条评论