CSS深入理解之absolute 笔记

absolute和float的相同特性表现

  • 破坏性:
  • 包裹性:

absolutefloat不能同时存在,对float元素添加absolute会去除浮动;对absolute元素使用float无效。

absolute、float和relative的关系


absoluterelative是分离的对立的,单独使用absolute时,功能更加强大。例如下图,给关闭按钮添加absolute可以摆脱overflow的限制,无论是滚动还是隐藏。

无依赖的absolute

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

定位的行为表现

  • 脱离文档流
  • 位置跟随(原来在什么位置,之后还在什么位置)
  • 去除浮动(使原来的浮动无效)

配合 margin/padding 进行精确定位

  1. 支持负值定位
  2. 兼容性强,可以兼容IE6

这种无依赖的absolute定位是:不影响其它布局的绝对定位下的相对定位之王,它是独立的,不依赖于父元素的,不会被其它元素的变化所影响,更易于维护。

无依赖的 absolute 最佳实践

  1. 图片图标文字的布局


.icon-recom {
    position: absolute;  /*无依赖的绝对定位*/
    line-height: 20px;
    padding: 0 5px; /*利用padding调整位置*/
    background-color: #f60;
    color: #fff;
    font-size: 12px;

tips:使用注释去除空白节点的小技巧

<span class="icon-recom">推荐</span>
     <img width="280" height="160" alt="分享" src="111.jpg"><!--
  --><i class="icon-vip">vip</i>
  1. 下拉列表框的布局


 .course-sidebar-result { display: none; 
    width: 260px;
    position:absolute; /* 脱离文档流,不影响或不受其它元素影响*/
    margin: 39px 0 0 -1px; /*具体定位*/
    padding-left: 0;
    list-style-type: none;
    border: 1px solid #e6e8e9;
    background-color: #fff;
    box-shadow: 0px 1px 2px #d5d7d8;
    font-size: 12px;
}
  1. 居中、边缘定位


<div class="loading-x">
      &nbsp;<img src="http://img.gif" class="loading" alt="加载中...">
</div>
/**css部分**/
.loading-x {
    height: 0;
    margin-top: 20px;
    text-align: center; /*设置空白占位符居中*/
    letter-spacing: -.25em;
    overflow: hidden;
}
.loading {
    position: absolute; /* 脱离文档流,且位置跟随*/
    margin-left: -26px; /*图片宽度的一半*/
}
<div class="course-fixed-x">
    &nbsp;
    <div class="course-fixed">
           <a href="./diaocha" class="goto_top_diaocha"></a>
           <a href="./app" class="goto_top_app"></a>
           <a href="./feedback" class="goto_top_feed"></a>
    </div>
</div>
/**css部分**/
.course-fixed-x {
    height: 0;
    text-align: right; /*空白占位符右对齐*/
    overflow: hidden;
}
.course-fixed {
    display: inline; /*默认是block,会在下一行显示*/
    position: fixed; /*无依赖定位,不需要计算,不受其它元素影响*/
    margin-left: 20px; 
    bottom: 100px;
}
  1. 文本图标对齐与定位


  • 星号与图标定位对齐
<div class="regist-group">
    <label class="regist-label"><span class="regist-star">*</span>登录邮箱</label>
    <div class="regist-cell">
        <input type="email" class="regist-input"><span class="regist-remark regist-warn">
        <i class="icon-warn"></i>邮箱格式不准确(演示)</span>
    </div>
</div>
/****CSS****/
.regist-star {
    position: absolute;
    margin-left: -1em;
    font-family: simsun;
    color: #f30;
}
.regist-warn > .icon-warn {
    position: absolute;
    margin-left: -20px;
}
  • 文本定位
<div class="regist-cell">
   <input type="password" class="regist-input"><span class="regist-remark">请输入6-16位密码,区分大小写,不能使用空格</span>
</div>
/***CSS***/
.regist-remark {
    position: absolute;
    line-height: 21px;
    padding-top: 9px;
    color: #666;
}

absolute 和层级

  • 由于absolute脱离文档流,所以网页中的动画尽量作用在绝对定位元素上。
  • absolute元素在垂直空间,遵循后来居上原则,后面的绝对定位元素会在前面的绝对定位元素之上。
  • z-index误区:绝对定位元素都需要z-index控制垂直位置。
    1. 如果只有一个绝对定位元素,不需要z-index,会自动覆盖普通元素。
    2. 如果两个绝对定位元素,控制DOM的前后顺序,达到需要的效果,依然不需要z-index。
    3. 如果多个绝对定位交错,很少见,使用z-index:1控制即可。
    4. 如果非弹框类的绝对定位元素z-index>2,z-index冗余,需优化。

absolute 和 top/left/right/bottom

在有position:relative/absolute/fixed/sticky限制时,定位以限制容器为准,没有时,以整个页面容器为准。

只有一个方向的定位时,如:top,只会垂直方向移动,水平方向保持原来坐标。四个方向同时存在时,元素是直接拉伸。

top/left/right/bottom 与 width/height

相互替代性

例如,已知页面现有样式html,body{height:100%},实现一个全屏自适应的50%黑色半透明遮罩层,通常实现如下:

.overlay{
  position:absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
}

但还可以这样:

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

绝对定位方向如果是对立的(如:leftVSright,topVSbottom),元素会被拉伸。

通常情况下,absolute元素的拉伸和width/height时可以相互替代的。

position:absolute;left:0;top:0;width:50%;

等同于:

position:absolute;left:0;top:0;right:50%;

拉伸特性只有IE7以上的浏览器支持

差异性——绝对定位拉伸更强大

例如实现一个距离右侧200px全屏自适应容器层。使用拉伸:

position: absolute;left: 0;right: 200px;height: 100%;

但,使用width只能使用css3的calc计算:

position:absolute;left:0;width:calc(100%-200px);

相互支持性

  1. 外部容器无需固定的width/height值,内部元素亦可拉伸;
.container { /*外部容器*/
    display: inline-block; /*使容器具有包裹性 */
    position: relative; /*限制cover层的范围*/
}
.cover { 
    position: absolute; 
    left: 0; top: 0; right: 0; bottom: 0;
    background-color: green;
    opacity: .5;
}
  1. 外部容器拉伸,内部元素支持百分比width/height值。
  • 通常情况下:元素百分比height要想起作用,需要父级容器的height值不是auto
  • 绝对定位拉伸下:即使父容器的heightauto只要父容器绝对定位拉伸,就可以设置百分比值。例如:
.page{ /*父容器绝对定位拉伸*/
  position: absolute;
  left: 0;top: 0; right: 0; bottom: 0; 
}
.list{
  float:left;
  height:33.3%; /*可以设置百分比值*/
  width:33.3%;
  position:relative;
}

相互合作性

如果绝对定位拉伸和height/width同时存在,width/height设置的尺寸优于left/top/right/bottom拉伸的尺寸。例如:

position:absolute;top:0;left:0;right:0;width:50%; /*实际宽度是50%而不是100%,和顺序没有关系*/

使用尺寸限制、绝对定位拉伸及margin:auto,实现元素的绝对居中效果(IE8+支持)。

.image {
    position: absolute;
    left: 0;
    right: 0;
    margin: auto;
    /* width: 50%; */
}

absolute 与网页整体布局

  1. body降级,子元素升级
    升级子div(假设类名为page)作为最顶层容器,设置全屏拉伸。
.page{position:absolute;left:0;top:0;right:0;bottom:0}
  1. 各模块——头尾、侧边栏(pc端)各居其位
header, footer { position: absolute; left: 0; right: 0;} /*宽度100%拉伸*/
header {height: 48px; top:0;}
footer { height: 52px; bottom:0;}
aside { position: absolute; left: 0; top: 0;bottom: 0; width: 250px;} /*高度100%拉伸*/
  1. 内容区域想象成body
.content{
  position:absolute;
  top:48px;
  bottom:52px;
  left:250px; /*假如有侧边栏*/
  overflow:auto; /*超出部分滚动*/

此时头部尾部以及侧边栏都是fixed效果,不跟随滚动,避免了移动端position:fixed实现的诸多问题。

  1. 全屏覆盖与page平级
.overlay{ /*遮罩层*/
  position:absolute;
  top:0;right:0;left:0;bottom:0;
  background-color:rgba(0,0,0,0.5);
  z-index:9;
}
<div class="page"></div>
<div class="overlay"></div>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,722评论 1 92
  • CSS 定位 CSS有三种基本的定位机制:普通流,浮动,绝对定位(absolute, fixed):普通流是默认定...
    _空空阅读 5,717评论 0 15
  • 之前介绍过CSS浮动float详解,本篇介绍的绝对定位absolute和浮动float有部分相似性。如果能理解浮动...
    张歆琳阅读 96,585评论 39 192
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,727评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,301评论 0 11