深入理解css之absolute
在慕课网上看到的张鑫旭大神的视频,做的笔记,以便日后翻看。
绝对定位与float
1.绝对定位和float有一样的特性,都有包裹性,和破坏性。
2.absolute和relative
如果不把他们俩放在一起,absolute越独立越强大。
relative和absolute是分离的,对立的,绝不是什么兄弟关系!
独立的absolute可以摆脱overflow的限制,无论是滚动还是隐藏
<div class=”scroll”>
<a href=”javascript:;” class=”close” title=”关闭”></a>
<img src=”mm1″ />
<img src=”mm2″ />
</div>
当两个图片高度超出容器大小时,这里的a标签里面是禁止不动的。
3.无依赖的absolute定位
无依赖的意思
不受relative限制的absolute定位,行为表现上是不使用top/right/bottom/left任何一个属性或使用auto作为值!
定位的行为表现
1.脱离文档流
2.保持占位
absolute特性表现
1.去浮动
2.位置跟随
配合margin的精确定位
1.支持负值定位
2.超赞的兼容性
4.实例
1.图片图标绝对定位覆盖
<a>求课<i class=”icon-hot”></i></a> .icon-hot{position:absolute;width:28px;height:11px;margin:-6px 0 0 2x;background:url();}
用margin负值和position实现。
2.下拉框最佳实践
<div>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</div>
.ul{position:absolute;width:260px;margin:39px 0 0 -1px;padding-left:0;list-style-type:none;border:1px solid #ccc;background-color:#fff;box-shadow:0px 1px 2px #d5d7d8;font-size:12px;}
3.居中以及边缘对齐定位
<div>
<img src=”loading.gif” class=”course-loading” />
</div>
div{text-align:center;}
img{position:absolute;margin-left:-26px;}-26是图片自身宽度的一半
这里之所以会居中显示是因为, 是个占位符,也是个字符。text-align是对这个空格起作用的。
4.各种对齐溢出技巧
表单注册的时候的*可以考虑使用position:absoluter实现绝对定位,margin-left:负值
表单前面的图表可以使用position:absoluter实现
使用绝对定位后的溢出不会被截取,超出后不会被截取
总结:无依赖绝对定位为页面布局与重构提供了更加广阔的选型新思路
5.脱离文档流
回流与重绘,动画尽量作用唉绝对定位元素上
两个absolute时候遵循后来者居上的原则 z-index潜在误区,误区:绝对定位元素都需要z-index控制层级,确定显示的垂直位置。
绝对定位和z-index无依赖
1.如果只有一个绝对元素定位元素,自然不需要z-index自动覆盖普通元素
2.如果两个绝对元素,控制DOM六的前后顺序达到需要的覆盖效果,依然无z-index;
3.如果多个绝对定位交错,非常少见,z-index:1控制
4.如果非弹框类的绝对定位元素z-index>2必定z-index冗余,请优化
6.绝对定位的left/right/top/bottom
这些属性都要配合使用,双双配对的。如果设置了left:0;top:0;盒子就会位于窗口的左上角。
当父容器有relative/absolute/fixed/sticky是绝对定位会根据父元素来计算。
当只设置一个属性的时候,它只能在一个方向上起作用。
当四个属性同时设置的时候,如果不设置宽高,会把容器拉开。设置了宽高后,优先left,top
7.left/top/right/bottom与width/height
实现一个全屏自适应的50%黑色半透明遮罩层。
通常是
.overlay{
position:absolute;
width:100%;
height:100%;
left:0;
top:0;
}
另外的实现方案:
.overlay{
position:absolute;
left:0;
top:0;
right:0;
bottom:0;
}
没有任何宽度,没有高度。实现宽高满屏效果
首先,相互替代性
很多情况下,absolute的翅膀拉伸和width/height是可以相互替代的。
position:absolute;left:0;top:0;width:50%;
等同于
position:absolute;left:0;top:0;right:50%;
注意:爆裂拉伸特性IE7+支持
差异所在-拉伸更强大
实现一个距离右侧200像素的全屏自适应的容器层。
使用拉伸直接:
position:absolute;left:0;right:200px;
但是,width只能使用CSS3 calc计算
position:absolute;left:0;width:calc(100%-200px);
相互支持性
1.容器无需固定width/height值,内部元素亦可拉伸;
实现遮罩层
2.容器拉伸,内部元素支持百分比width/height值。
通常状况 元素百分比height要想起作用,需要父容器的height值不是auto
绝对定位拉伸下,即使父级容器的height值是auto,只要容器绝对定位拉伸形成,百分比高度值也是支持的。
高度自适应布局:
.page{
position:absolute;
left:0;
top:0;
right:0;
bottom:0;
}
.list{
float:left;
height:33.3%;
width:33.3%;
position:relative;
}
当left:0;right:0;width:50%时,的实际宽度是50%而不是100%
合作性。
当尺寸限制,拉伸以及margin:auto同时出现的时候,就会有绝对定位元素的绝对居中效果!
8.absolute网页整体布局 适合移动web的布局策略
与fixed,relative一样,absolute设计的初衷确实是定位。
与fixed,relative不同的是,absolute包含更多特有且强大的特性。如果仅仅是使用其实现一些覆盖与定位,则大材小用了。
absolute与整体布局
1.body降级,子元素升级
升级的子div类名.page{position:absolute;left:0;top:0;right:0;bottom:0}
绝对定位受限于父级,因此
html,body{height:100%}才能起作用
2.各模块-头尾,侧边栏各居其位
header,footer{position:absolute;left:0;right:0;}
header{height:48px;top:0;}
footer{heigth:52px;bottom:0;}
aside{width:250px;position:absolute;left:0;top:0;bottom:0;}
3.内容区域想象成body
.content{
position:absolute;
top:48px;
bottom:52px;
left:250px;
overflow:auto;
}
此时的头部尾部以及侧边栏都是fixed效果,不跟随滚动,避免了移动端position:fixed实现的诸多问题。