有关定位

写在前面

作为一个前端初学者,最近研究floatposition,感觉好像发现了新大陆,之前对float做了一次总结,现在再给position做一个总结。因为floatposition:absoluteposition:fixed都会使元素脱离文档流,滥用也许会导致一些未知的效果。特别对于初学者来说,养成习惯尤为重要,有时候遇到不能理解的事情,觉得随手一个定位肯定能解决,但是又怕会有什么后续影响而不敢使用,畏手畏脚。所以这里稍微进行了总结,如有漏缺,望读者指出。

什么是定位(position)?

定义和用法

position 属性规定元素的定位类型。

可能的值

描述
absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 left, top, right以及 bottom属性进行规定。
fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 left, top, right以及 bottom属性进行规定。
relative 生成相对定位的元素,相对于其正常位置进行定位。因此,left:20;会向元素的 LEFT 位置添加 20 像素。
static 默认值。没有定位,元素出现在正常的流中(忽略top, bottom, left, right 或者z-index 声明)。
inherit 规定应该从父元素继承 position 属性的值。

其中,position:static是默认值,position:inherit属性用的比较少也暂且不提,这里主要说一下position:relativeposition:absoluteposition:fixed三个属性。

相对定位(position:relative)

给元素设置了相对定位后会激活四个属性:

  1. left
  2. right
  3. top
  4. bottom

这四个属性在未激活时也可以设置,但是没有任何效果。

给予了相对定位的元素不会脱离文档流,元素会带有自己本身的性质,在未设置leftrighttopbottom属性时对元素本身没有任何影响。在文本流中,任何元素都被限制了自己本身的位置。而我们可以通过 CSS 去改变元素本身的位置,可以通过 margin或者float来给元素实现位移,但那不算是真正的位移。真正的位移则是通过定义四元素用来控制元素相对于自己本身位置的偏移量。

实验代码如下:
HTML

    <div class="div_1 div_common"></div>
    <div class="div_2 div_common"></div>
    <div class="div_3 div_common"></div>

CSS

        .div_common{
            width: 100px;
            height: 100px;
        }
        .div_1{
            background: red;
        }
        .div_2{
            background: pink;
            position: relative;
            top: 10px;
            left: 10px;
        }
        .div_3{
            background: blue;
        }

效果图:

效果图

可以看见,给予了相对定位的元素,并没有影响它周围的元素,因为元素本身并未脱离文档流,所以元素本身的位置得以保留。需要注意的是,哪怕给予位移的值过大,看似让元素脱离了文档流,其实元素依然在文档流的中,依然留在于原来的位置,这样会在原位出现一片空白。定位的原点会以块元素左上的原点进行定位,所有的位移计算都将以这个点作为基础来进行元素的推动。

绝对定位(position:absolute)

对象会从文档流中脱离,不但会激活leftrighttopbottom四个属性以外,还会激活z-index属性,可以通过z-index设置元素的层级(默认层级为0)。

注意点:

  • 绝对定位会选取其最近一个设有定位的父级对象进行绝对定位,如果对象的父级没有设置定位属性,position:absolute元素将以body坐标原点进行定位。
  • 绝对定位一般配合相对定位一起使用。因为分辨率或窗口大小一旦改变,绝对定位的元素就有可能会移动位置影响设计效果,毕竟开发者无法确定所有人的分辨率都和开发时制作页面使用的分辨率是一样的。
  • 一般情况为了消除绝对定位带来的影响,都会给父级元素设置一个相对定位(relative),但是注意,是给父级设置,虽然说给上上级或者上上上级设置也可以,但是可能会存在不必要的影响,最好就是直接给父级设置。
  • 绝对定位会使元素完全脱离文档流(比浮动元素的层级又高了半级)。
  • 会使内联元素重新支持宽高
  • 可以由内容(浮动元素)撑起宽高
  • 给元素设置相对定位绝对定位都可以清除子元素的浮动。
z-index

定义和用法

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

可能的值

描述
auto 默认。堆叠顺序与父元素相等。
number 设置元素的堆叠顺序。
inherit 规定应该从父元素继承 z-index 属性的值。

注意:

  1. 此属性仅仅作用于position 属性值不为 static的对象。
  2. 带有定位属性的元素层级默认会比未带定位属性的元素层级高(包括相对定位)。
  3. 较大number值的对象会覆盖在较小number 值的对象之上。如果定位对象的此属性具有同样的 number值,那么将依据它们在HTML文档中声明的顺序层叠。
  4. z-index可以设置负数,但是一旦设置负数,会被默认层级的元素盖住,就算容器内只有绝对定位元素,也将无法设置点击事件,所以慎用负数。
  5. 父级元素是永远无法放在子级元素之上的。
  6. 不同父元素的两个子级进行层级的对比,比较的层级为带有定位属性的父元素的z-index : number值的大小。

固定定位(position:fixed)

性质几乎跟绝对定位一样。唯一的差别在于参考于整个浏览器(屏幕)进行定位。使用固定定位会使元素固定在浏览器的某个地方。但是日常使用比较少。

另:IE 6不支持固定定位。

什么时候该用浮动?什么时候该用定位?

我有前端朋友告诉我,对于初学者来说,能用浮动就尽量不要用定位。然而这激起了笔者的好奇心,那什么时候用浮动,什么时候用定位呢?

其实,两者都是按照需求使用。浮动只需要注意清除浮动,如果开发时需要考虑兼容性问题就多加考虑 IE 6 的双边距等兼容性。而使用绝对定位时记得给父级元素添加relative属性限制住绝对定位属性,并不会造成太大的影响。

这里需要引入一些常用布局的方式:

1. 普通布局
顾名思义,也叫自然布局,主要是依照元素本身的特性,从左到右,从上到下的进行布局。

2. 浮动布局
相对于普通布局,该布局元素会脱离普通布局也是流布局,相当于浮动元素会在普通布局之上进行界面的布局。可能会导致的问题就是会有普通布局的部分被浮动布局元素给遮挡,解决办法为清除浮动。浮动布局中浮动的范围是根据父元素的位置进行浮动位置定位。

3. 绝对布局
常用的positionabsolute时的元素会进行绝对布局。一般会将参考位置元素设置为 position:relative来进行布局。

除此之外还有固定布局、页面自适应布局等布局方式,因与本文无关所以不多加赘述。


通过比较我们可以发现,floatposition更适合用来做网页的布局,因为如果使用position来进行布局,就需要为页面上每一个元素来设置 xy 坐标来进行定位,然后最后对不同分辨率的显示器显示效果还不尽人意。而float就显得比较灵活。很多网页都可以使用float来进行整体布局。但是在有些地方,使用 relativeabsolute布局可以实现更好的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,751评论 1 92
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,833评论 0 6
  • 1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动元素 浮动元素是设置float...
    Volcaner阅读 350评论 0 0
  • 想开一家汽车美容店,朋友们帮我起个店名吧,三个字或四个字的,若中意的,有红包哦
    董小姐爱绿色阅读 78评论 0 0
  • 模拟类型和实例 期望 该记录重放验证模型 经常与严格的期望严格和非严格Mock 记录期望的结果将调用与特定实例匹配...
    欧阳冉冉阅读 13,512评论 0 2