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

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

首先,什么是浮动?

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

浮动布局的兼容性比较好,但是浮动带来的影响比较多,页面宽度不够的时候会影响布局。

例举一个标准的浮动:

  1. <style type="text/css">
  2. .wrap1{max-width: 1000px;}
  3. div{
  4. min-height: 200px;
  5. }
  6. .left{
  7. float: left;
  8. width: 300px;
  9. background: red;
  10. }
  11. .right{
  12. float: right;
  13. width: 300px;
  14. background: blue;
  15. }
  16. .center{
  17. background: pink;
  18. }
  19.  
  20. </style>
  21. <div class="wrap1">
  22. <div class="left">left</div>
  23. <div class="right">right</div>
  24. <div class="center">浮动布局</div> <!-- 这里不能与上面的右浮动互换位置,否则会被块元素挤下一行-->
  25. </div>

效果如下:

    

那么它有什么特点呢

  • 对自身的影响

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

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

高度塌陷例子1:

  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 伪类(清除浮动)

  1. .container::after{
  2. content:'';
  3. clear:both;
  4. display:block;
  5. visibility:hidden;
  6. height:;
  7. }

效果如下     

      

高度塌陷例子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: 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"> <!--将容器里的行元素span改为块元素div-->
  32. <div class="left">left</div>
  33. <div class="center">center</div>
  34. <div class="right">right</div>
  35. </div>
  36. <div class="container" style="height: 200px;background: blue">
  37. </div>
  38. </body>
  39. </html>

效果如下:

      

解决办法给加上块元素样式清除浮动

  1. .center{display: inline-block;}
  2. .container::after{
  3. display: block;
  4. content: "";
  5. clear: both;
  6. }

即可实现效果如下:

        

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浮动布局的更多相关文章

  1. float浮动布局(慕课网CSS笔记 + css核心技术详解第四章)

    ---------------------------------------------------------------------- CSS中的position: CSS三种布局方式: 标准流 ...

  2. HTML定位和布局----float浮动

    1.定位体系一共有三种 (1)常规流: (2)浮动定位 (3)绝对定位 2.float属性常用的语法: (1)float:left:左浮动 (2)float:right:右浮动 (3)float:no ...

  3. inline-block布局VS浮动布局

        a.不同之处:对元素设置display:inline-block ,元素不会脱离文本流,而float就会使得元素脱离文本流,且还有父元素高度坍塌的效果     b.相同之处:能在某程度上达到一 ...

  4. 盒子模型、网页自动居中、float浮动与清除、横向两列布局

    1.CSS包含:标准文档流,浮动,绝对定位 标准文档流的特点:从上到下,从左到右,输出文档内容 盒子模型:块级元素(div ui li dl dt p)与行级元素(span strong img in ...

  5. 拜拜了,浮动布局-基于display:inline-block的列表布局——张鑫旭

    一.一抹前言 没有爱的日子,时间如指尖细沙,不知不觉就流逝了.写“CSS float浮动的深入研究.详解及拓展(一)”和“CSS float浮动的深入研究.详解及拓展(二)”似乎就在不久前,然而相隔差 ...

  6. IOS自己主动布局中的浮动布局(6)----MyFloatLayout横空出世

    https://github.com/youngsoft/MyLinearLayout 前言 在MyLayout的6大布局中,每种布局都有不同的应用场景. 且每种布局的子视图的约束机制不一样:线性布局 ...

  7. css盒子布局,浮动布局以及显影与简单的动画

    08.05自我总结 一.盒子布局 1.盒子布局的组成 margin border padding content 2.margin margin是外边距,控制盒子的显示位置相对于他的上一级 left. ...

  8. css float 浮动是个混球

    得说,在学习 CSS 的时候就一直在疑惑,横排布局干嘛要用 float 这种属性, 用了还会高度塌陷,怎么不发明些高级点的属性来完成横排布局呢, 甚至所有人都告诉我摒弃表格布局,浮动布局才是 DIV+ ...

  9. 归纳篇(一)CSS的position定位和float浮动

    近期会更新一系列博客,对基础知识再度做个巩固和梳理. 一.position定位 (一):position的属性 1.absolute:生成绝对定位的元素,相对于最近一级定位不是static的父元素来进 ...

随机推荐

  1. Docker中使用FlameGraph分析JVM应用性能

    开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...

  2. IDEA中创建maven web项目

    本文将带你一路从IDEA中maven的配置到创建maven web项目,掌握IDEA中maven的使用. 一.IDEA中配置maven 开发中一般我们使用自己下载的maven,不使用IDEA工具自带的 ...

  3. 063 Python必备库-从人机交互到艺术设计

    目录 一.概述 二.Python库之图形用户界面 2.1 PyQt5 2.2 wxPython 2.3 PyGObject 三.Python库之游戏开发 3.1 PyGame 3.2 Panda3D ...

  4. 从零开始开发IM(即时通讯)服务端(二)

    好消息:IM1.0.0版本已经上线啦,支持特性: 私聊发送文本/文件 已发送/已送达/已读回执 支持使用ldap登录 支持接入外部的登录认证系统 提供客户端jar包,方便客户端开发 github链接: ...

  5. 2019沈阳网络赛B.Dudu's maze

    https://www.cnblogs.com/31415926535x/p/11520088.html 啊,,不在状态啊,,自闭一下午,,都错题,,然后背锅,,,明明这个简单的题,,, 这题题面不容 ...

  6. Spring boot 集成 Druid 数据源

    Druid是阿里开源的一个JDBC应用组件,其中包括三部分: DruidDriver:代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource:高效可管理 ...

  7. js中的几种继承方法

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一. 继承:子承父业:一个原本没有某些方法或属性的对象,统一写方法,拿到了另外一个对象的属性和方法 下面是js中的几种继承方式 1.改变this ...

  8. 04: OpenGL ES 基础教程03 纹理

    前言 1:常用类: 1:纹理的作用 正文 一:常用类 上下文 顶点数据缓存 着色器 baseEffect 一:纹理 1.1:   纹理可以控制渲染的每个像素的颜色. 1.2: 纹素:与像素一样,保存每 ...

  9. JavaScript之基本概念(一)

    在我们学习一门编程语言之前,我们应该先了解它的一些基本概念,包括它是什么,它能用来干什么,怎么用等等.这部分内容建议学习时间一天. 一 何为‘JavaScript’ 1 .    什么是JavaScr ...

  10. jvm对象内存分配

    一.jvm简单结构图 1.jvm内存对象分配整体流程: 1.类加载子系统和方法区 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外, ...