zoukankan      html  css  js  c++  java
  • position

    参考链接:https://www.cnblogs.com/coffeedeveloper/p/3145790.html#html

    Position属性:

    Position的属性值共有四个static、relative、absolute、fixed。

    Static

    所有元素在默认的情况下position属性均为static,而我们在布局上经常会用到的相对定位和绝对定位常用的属性top、bottom、left、right在position为static的情况下无效。其用法为:在改变了元素的position属性后可以将元素重置为static让其回归到页面默认的普通流中。

    就是不写position属性, 正常排列的情况下其实就是用到position 的 static 

    Relative

    俗称的相对定位,重点在于对相对理解。我们此前说过每个元素在页面的普通流中会有“占用”一个位置,这个位置可以理解为默认位置,而相对定位就是将元素偏离元素的默认位置,普通流中依然保持着原有的默认位置,并没有脱离普通流,只是视觉上发生的偏移。

    就是在本应在的位置的基础上,通过 top left 来控制元素的偏移,但是不会影响周围其他元素位置的改变

    遇到的问题点:relative 不会改变元素本身的属性,因此如果元素本身width 100%, 那么向右偏移 100px后,会出现子元素内容超出父元素的情况。

    解决办法:在子元素加了一个 margin-right :100px

    块状元素示例:

    <style type="text/css">
    div{ width: 100px; height: 50px; line-height: 50px; text-align: center; color: #fff; }
    </style>
    <div style="background: blue">A</div>
    <div style="background: red; position: relative; top: 20px; left: 20px;">B</div>
    <div style="background: green">C</div>

    行内元素示例:

    <style type="text/css">
    strong { background: #808080; }
    em { background: #ffd800; }
    span { background: #b6ff00; position: relative; top: 10px; left: 10px; width: 100px; }
    </style>
    <strong>strong</strong><em>em</em><span>span</span>

    在这里是有对span进行width属性的赋值(为100px)。但是我们可以看到span在运用了relative这个position属性值后,依然对width属性无效,换而言之,position: relative并没有改变行内元素的Display属性,这个概念非常重要(注意与接下来的absolute的区别)

    Absolute

    俗称的绝对定位,绝对定位是相对而言的,怎么理解呢?应用了position: absolute的元素会循着节点树中的父(祖)元素来确定“根”,然后相对这个“根”元素来偏移。如果在其节点树中所有父(祖)元素都没有设置position属性值为relative或者absolute则该元素最终将对body进行位置偏移。应用了position: absolute的元素会脱离页面中的普通流并改变Display属性(重点)

    示例:

    <body style="background: yellow;">
        <div style="background: #fff">
            A
            <div style="background: #81b6ff">
                A - 1
                <div style="background: #b6ff00;">
                    A - 2
                </div>
            </div>
        </div>
    </body>

    现在我们对A-2这个div设置绝对定位(Top: 0, Left: 0),而没有对它的父元素(A、A-1)设置任何的position值

    <body style="background: yellow;">
        <div style="background: #fff">A
            <div style="background: #81b6ff">A - 1
                <div style="background: #b6ff00; position: absolute; top: 0; left: 0;">
                    A - 2</div></div></div></body>

    可以看到(A-2)最终是根据body来产生了位移,让我们对比分别设置一下父元素position。 并且 A-2 宽度改变了

    从上面的图,我们可以总结以下几个结论。

    1)块状元素在position(relative/static)的情况下width为100%,但是设置了position: absolute之后,会将width变成auto(会受到父元素的宽度影响)。

    2)元素设置了position: absolute之后,如果没有设置top、bottom、left、right属性的话,浏览器会默认设置成auto,而auto的值则是该元素的“默认位置”。即设置position: absolute前后的offsetTop和offsetLeft属性值不变。
    特殊情况:

      • Firefox的话会直接将top、left设置成offsetTop和offsetLeft的值而非auto。
      • IE7下的表现更类似于float,会附加到父元素的末尾。

    一些的position小知识

    •  应用了position: relative/absolute的元素,margin属性仍然有效,以position:relative来举例。如果设置了left、top、bottom、right的属性,建议大家不要设置margin数据,因为很难精确元素的定位,尽量减少干扰因素。
    • position: absolute忽略根元素的padding
    • 在IE6/7中设置position属性后会导致z-index属性失效
    • 行内元素在应用了position:absolute之后会改变display。
    • 因此,要注意到relative是并没有改变行内元素的呈现模式,而absolute是会改变行内元素的呈现模式,如果设置了absolute并不需要显式的的将元素display改成block。
    • 应用了position: absolute / relative之后,会覆盖其他非定位元素(即position为static的元素),如果你不想覆盖到其他元素,也可以将z-index设置成-1。

    Fixed

    在很长的时间里,这个属性值因为兼容性问题,并没有得到非常广泛的应用(IE6未实现该属性值)。fixed和absolute有很多共同点:

    1. 会改变行内元素的呈现模式,使display之变更为block。
    2. 会让元素脱离普通流,不占据空间。
    3. 默认会覆盖到非定位元素上。

    fixed与absolute最大的区别在于:absolute的”根元素“是可以被设置的,而fixed则其”根元素“固定为浏览器窗口。即当你滚动网页,其元素与浏览器窗口之间的距离是恒定不变的。

    Float属性

    float的属性值有none、left、right,有几个要点:

    1. 只有横向浮动,并没有纵向浮动。
    2. 当元素应用了float属性后,将会脱离普通流,其容器(父)元素将得不到脱离普通流的子元素高度。
    3. 会将元素的display属性变更为block。
    4. 浮动元素的后一个元素会围绕着浮动元素(典型运用是文字围绕图片),与应用了position的元素相比浮动元素并不会遮盖后一个元素。
    5. 浮动元素的前一个元素不会受到任何影响(如果你想让两个块状元素并排显示,必须让两个块状元素都应用float)。

    与position的兼容性问题

    1)元素同时应用了position: relative、float、(top / left / bottom / right)属性后,则元素先浮动到相应的位置,然后再根据(top / left / bottom / right)所设置的距离来发生偏移。

    2)元素同时应用了position: absolute及float属性,则float失效。

    3)第一个元素应用了position之后会覆盖着接下来的float元素(如果两个元素所处的位置相同)

    4)同时应用position: absolute和float: left会导致清除浮动无效(position: relative则可以清除浮动)。
    常用的清除浮动的方法有两种:

      1. 通过在容器中添加一个标签,设置该标签的样式为 clear: both
      2. 容器设置overflow: hidden
    猪猪侠要努力呀!
  • 相关阅读:
    IOS之推送通知(本地推送和远程推送)
    IOS,苹果内购和添加广告
    CSS3选择器、背景、边框、文本
    CSS2D旋转、过渡、动画
    JavaScript Array、Date、String
    那些不常用却很有的CSS
    纯CSS打造兼容各种浏览器的几何图形
    安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
    关于使用Html.RenderPartial和Html.Partial显示分部视图时提示参数错误的BUG
    学习从实践开始之jQuery插件开发:对话框插件开发
  • 原文地址:https://www.cnblogs.com/mlllily/p/11008495.html
Copyright © 2011-2022 走看看