网页布局——float浮动布局

Posted jing-tian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网页布局——float浮动布局相关的知识,希望对你有一定的参考价值。

我的主要参考资料是[Object object]的文章

float 布局应该是目前各大网站用的最多的一种布局方式了,但是也特别复杂,这里详细讲一下

首先,什么是浮动?

浮动元素是脱离文档流的,但不脱离文本流,这是什么意思呢,用过 word 的应该知道有一种图片环绕的方式是文字环绕吧,就是这种效果。

那么它有什么特点呢

  • 对自身的影响
    • float 元素可以形成块,如 span 元素。可以让行内元素也拥有宽和高,因为块级元素具有宽高
    • 浮动元素的位置尽量靠上
    • 尽量靠左(float:left)或右(float:right),如果那一行满足不了浮动元素的宽度要求,则元素会往下掉
  • 对兄弟元素的影响
    • 不影响其他块级元素的位置
    • 影响其他块级元素的文本
    • 上面贴非 float 元素
    • 旁边贴 float 元素或者边框
  • 对父级元素的影响
    • 从布局上 “消失”
    • 高度塌陷

什么是高度塌陷,举个例子吧

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *
 9     margin: 0;
10     padding: 0;
11 
12 .container
13     width: 200px;
14     background-color:red;
15 
16 
17 .left
18     background-color: yellow; 
19     float: left;    /*float会将行元素转变成块元素display:inline-block;*/
20     height: 50px;
21     width:50px;
22 
23 .right
24     background-color: yellow; 
25     float: right;    /*float会将行元素转变成块元素display:inline-block;*/
26     height: 50px;
27     width:50px;
28 
29 </style>
30 <body>
31     <div class="container">       
32         <span class="left">left</span>
33         <span>center</span>
34         <span class="right">right</span>
35     </div>
36     <div class="container" style="height: 200px;background: blue">      
37     </div>
38 </body>
39 </html>

效果如下 :

        技术图片

从图中可以看出,两个 float 元素虽然包含在第一个 container 中,但是却超出了第一个 container 的范围,在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。
但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。

解决办法有下面几种

      1.父元素设置 overflow: auto 或者 overflow: hidden

效果如下
        技术图片

      2.给父元素加一个 after 伪类(清除浮动)

    .container::after
        content:‘‘;
        clear:both;
        display:block;
        visibility:hidden;
        height:0; 
    

效果如下     

      技术图片

1.设计一个两栏布局

首先我们要明白为什么可以用 float 实现布局。其实上面的例子我们大概就可以看出来了,黄红黄这不就是一个标准的三栏布局吗。其实并没有,我们看看下面的例子

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *
 9     margin: 0;
10     padding: 0;
11 
12 .container
13     width: 400px;
14     height: 200px;
15     margin: 10px auto;
16 
17 
18 .left
19     background-color: yellow; 
20     float: left;
21     height: 100%;
22     width:100px;
23 
24 .right
25     background-color: red; 
26     height:100%;
27 
28 </style>
29 <body>
30     <div class=container>       
31         <div class=left></div>
32         <div class=right></div>
33     </div>
34 </body>
35 </html>

  效果如下:

      技术图片

 

2.设计一个三栏布局

讲完两栏布局再讲一下三栏布局,思路主要是左边一个浮动元素,右边一个浮动元素。这里有个小问题,中间的元素要写在最后,因为中间元素假设有块级元素的话,会影响右边浮动元素的定位,这里演示一下

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *
 9     margin: 0;
10     padding: 0;
11 
12 .container
13     width: 400px;
14     height: 200px;
15 
16 
17 .left
18     background-color: yellow; 
19     float: left;
20     height: 100%;
21     width:100px;
22 
23 .right
24     background-color: green; 
25     float: right;
26     height: 100%;
27     width:100px;
28 
29 .middle
30     background-color: red; 
31     margin-left: 100px;
32     margin-right: 100px;
33     height:100%;
34 
35 .container::after
36     content: ‘‘;
37     display: block;
38     visibility: hidden;
39     clear: both
40 
41 
42 </style>
43 <body>
44     <div class=container>       
45         <div class="left"></div>
46         <div class="middle"></div>
47         <div class="right"></div>
48     </div>
49 </body>
50 </html>

  效果如下:

      技术图片

因为浮动元素会把块级元素的位置空出来,所以这里右边的浮动元素把上面的位置空了下来,所以正确的写法应该是:
  

1      <div class=container>       
2         <div class="left"></div>
3         <div class="right"></div>    <!-- 掉换了位置-->
4         <div class="middle"></div>    
5      </div> 

  效果如下:

      技术图片

这样我们就实现了最基本的三栏布局

以上是关于网页布局——float浮动布局的主要内容,如果未能解决你的问题,请参考以下文章

div+css里面左浮动 右浮动 到底是啥意思??

二十浮动(float)

网页布局

网页布局基础-浮动整理

0023 浮动:float清除浮动

什么是浮动float