美文网首页
CSS的浮动与定位

CSS的浮动与定位

作者: 26d608950683 | 来源:发表于2016-07-21 15:38 被阅读0次

    1.文档流的概念指什么?有哪种方式可以让元素脱离文档流?

    将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流.(自己的理解是从头到尾按照文档的顺序,该在什么位置就在什么位置,也可以按照上面的意思理解,自上而下,自左到右的顺序)。
    通过float(浮动)或position(定位)来使元素脱离文档流。将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位。  
    需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。  
    而对于使用absolute positioning脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。


    2.有几种定位方式,分别是如何实现定位的,使用场景如何?

    4 种不同类型的定位。
    <li>static:默认值,没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
    <li>relative:生成相对定位的元素,相对于其正常位置进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。元素不会脱离文档流,其偏移的参考点为自身原本所在的位置。
    <li>fixed:固定定位,元素框的表现类似于将 position 设置为 absolute。其参考点为浏览器。
    <li>absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。元素将脱离文档流,参考位置为页面。

    z-index 层叠: 值越大,元素就会在外层,覆盖较小值的元素。默认值为零,但如果不设置的话,后面会自动挡住前面。

    img  {
      position:absolute;
      left:0px;
      top:0px;
      z-index:1;
      }```
    
    
    fixed和absolute表面上看起来没什么区别,都是固定定位,其实两者的区别就是所面对的参考系不同,举例说明:
    

    <html>
    <head>
    <meta charset="utf-8">
    <title>定位</title>
    <style type="text/css">
    div{
    width:50px;
    height:50px;
    background:red;
    }

    left{

    left:0px;
    top:100px;
    position:absolute;
    }

    right{

    right:0px;
    top:100px;
    position:fixed;
    }
    </style>
    </head>
    <body style="height:1000px;">
    <div id="left">absolute</div>
    <div id="right">fixed</div>
    </body>
    </html>```


    随着拉动浏览器滚动条,absolute会随之上下滚动,而fixed则固定在此位置不动。

    position:relative日常应用的时候一般是设置给position:absolute;的父层的,父层position:relative; 子层position:absolute;的话, 就是依照父层的边界进行定位的, 不然position:absolute 会逐层向上寻找设置了position:relative的元素边界, 直到body元素。


    3.position:relative和负margin都可以使元素位置发生偏移?二者有什么区别

    <li>position: relative仅仅是定位自身元素位置,不会对其他元素造成影响。
    <li>负margin则是改变了此元素的外部参考线,当有其他元素与之相邻时,会受到此参考线影响,从而受到影响。


    4.如何让一个固定宽高的元素在页面上垂直水平居中?

    <li>定位+负margin

    <html>
    <head>
        <meta charset="utf-8">
        <title>定位+负margin</title>
        <style>
            .position {
                height: 50px;
                width: 50px;
                background-color: yellow;
                position: absolute;
                top: 50%;
                left: 50%;
                margin-top: -25px;
                margin-left: -25px;
            }
        </style>
    </head>
    <body>
        <div class="position">position</div>
    </body>
    </html>
    

    5.浮动元素有什么特征?对其他浮动元素、普通元素、文字分别有什么影响?

    浮动最初是为了解决文字环绕的问题,浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。
    <li>元素浮动后,就会默认在浏览器中不占用位置。所以才会产生“覆盖”的情况。


    <li>若两个元素都设置为左浮,则会并列,因为此时都为浮动元素:


    6.清除浮动指什么? 如何清除浮动?

    <li>清除浮动指通过clear属性将之前浮动元素的影响消除。
    <li>清除浮动只能用于其本身,加在需要达到清除浮动效果的元素上。

    取值:
    1.none : 默认值。允许两边都可以有浮动对象
    2.left : 不允许左边有浮动对象
    3.right : 不允许右边有浮动对象
    4.both : 不允许有浮动对象
    eg:

    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css" media="screen">
            .container {
                width: 400px;
                height: 400px;
                border: 1px solid;
                margin: 0 auto;
            }
            
            .box {
                width: 80px;
                height: 80px;
            }
            
            .box1 {
                background: red;
                border: 1px solid;
                float: left;
            }
            
            .box2 {
                background: yellow;
                border: 1px solid;
                float: left;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="box1 box">1</div>
            <div class="box2 box">2</div>
        </div>
    </body>
    </html>```
    
    
    ![](https://img.haomeiwen.com/i2399926/eb92178cd546fc43.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    两个都为浮动元素,所以两个区块并列在一行。此时清除浮动 ,因为 1 在 2 的左边,所以对 2 加上“ float: left",就可以得到:
    ```     .box2 {
                background: yellow;
                border: 1px solid;
                float: left;
                clear: left;
            }```
    
    ![](https://img.haomeiwen.com/i2399926/9bd47c4af595490f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    此时虽然 1 还是浮动元素,但是相对于 2 来说,被“清除浮动”,那么就是一个块级元素,所以 2 在 1 的下边。
    ***
    **本文版权归本人和饥人谷所有,转载请注明来源**
    
    

    相关文章

      网友评论

          本文标题:CSS的浮动与定位

          本文链接:https://www.haomeiwen.com/subject/drlbjttx.html