那些年 程序员的样子

float你所不知道的事

2017-08-21  本文已影响31人  bo_bo_bo_la

一、简介

        float浮动,起源于图片与文字的环绕形式。类似于Word里面的文字居左,居右或者文字浮于图片之上。有三个属性值:left左浮动、right右浮动和none不浮动。利用浮动布局可以解决元素与元素之间的无缝衔接,不用考虑块级标签不能同行排列的特性,更不用考虑行级标签代码换行被解析的困扰,即不用在给其父级设置font-size=0这样的操作。大大的减少了我们的代码体积。

1.1、float带来的困扰

        如果元素设置float属性,则这个元素会脱离文档流,即在HTML中不占用任何位置,也就是说浮动元素不会撑开其父级的高度,并且它原有的位置会被下一个元素所占用,但是由于其是浮动元素,所以它的层级会比普通元素高。导致元素会覆盖掉下面的元素。而且设置成float元素之后不会继承其父级的宽高,即使该元素是块级元素也不会。

1.2、解决办法

       1.2.1、上面说过,float元素会脱离文档流,不占用位置,所以如果其父级的高是auto的话,这会导致父级的高为0,所以第一种解决办法给父级一个高度。

       1.2.2、如果元素为float,则可以在其后面写上一个clear:left | right | both;这一样式,(从左至右)表示,清除上一同级元素的左浮动 | 右浮动 | 两边浮动。但是这一方法不推荐使用。在实际项目开发过程中,使用float的次数很多,如果每一次都需要在float元素之后再写一个清除浮动的话,会造成代码冗余,导致体积较大。

       1.2.3、借助伪类。element::after{ content:”“; display: block;},元素后面加上伪类::after,表示在该元素之后所编写的样式,不占用HTML里面任意一个空间,而且如果将该方法写在外部样式表里面也可以起到重复利用的效果,这样即能达到目的,又能减少代码的堆积

二、巧用float

2.1、eg1:利用HTML、CSS编写一段代码,实现一段固定,一段自适应。

要求:一端固定的元素宽为240px,margin=10px;另一端宽度自适应与浏览器的宽度

代码如下:

<!doctype html>

<html>

    <head>

        <meta charset="utf-8" />

        <title>一段固定,一段自适应</title>

        <style>

             .one {

                   width: 240px;

                   height: 600px;

                   background: red;

                   float:left;

             }

            .two {

                   height: 500px;

                   background: blue;

                   margin-left: 250px;

             }

        </style>

    </head>

    <body>

        <div class="one"></div>

        <div class="two"></div>

      </body>

 </html>

        分析:第一个盒子左浮动,导致其脱离文档流,不占用body里面任何空间,所以第二个盒子会继承其父级所有的宽度,但这样的效果不是我们想要的,所以给第二个盒子加上一个margin-left:250px(one盒子的宽240px + margin值10px);

eg2:利用HTML、CSS实现两端固定,中间自适应的效果

        要求:两端固定的宽度为240px,margin:10px;中间的盒子自适应浏览器的宽度

        代码如下:

        .one {

           width: 240px;

           height: 600px;

           background: red;

           float:left;

         }

        .two {

            width:240px;

            height: 600px;

            background: blue;

            float:right;

          }

        .middle {

            height:500px;

           background: black;

           margin: 0 250px;

        }

    <body>

         <div class="one"></div>

         <div class="two"></div>

       <div class="middle"></div>

    </body>

分析:原理跟例1很像,需要注意的就是body里面的<div class="middle"></div>的书写顺序,HTML代码的执行顺序是自上而下,如果将Middle写在two之前,则Middle会将整个HTML填满,导致two换行右浮动,所以要将Middle写在two之后。

一段固定,一段自适应

上一篇 下一篇

猜你喜欢

热点阅读