流动布局

流动模型(Flow),即文档流,浏览器打开HTML网页时,从上往下,从左往右,逐一加载。
在正常情况下,HTML元素都会根据文档流来分布网页内容的。

文档流有2大特征:
① 块状元素会随着浏览器读取文档的顺序,自上而下垂直分布,一行一个的形式占据页面位置。
② 行内元素会随着浏览器区队文档的顺序,从左往右水平分布,一行多个的形式占据页面位置。行内元素摆放满一行以后才会到下一行继续排列。

  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <title></title>
  5. <style>
  6. div{ border: 1px solid #f00; margin: 4px; }
  7. .d3{ width: 100px; }
  8. </style>
  9. </head>
  10. <body>
  11. <div>d1</div>
  12. <div>d2</div>
  13. <div class="d3">
  14. <span>span1</span>
  15. <a>a1</a>
  16. <a>a2</a>
  17. <span>span2</span>
  18. </div>
  19. </body>
  20. </html>

浮动模型

要学习浮动模型的布局模式,就要了解CSS提供的浮动属性(float)。浮动属性是网页布局中最常用的属性之一,通过浮动属性不但可以很好的实现页面布局,而且还可以依靠它来制作导航栏等页面功能。

简单浮动:

  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <title>简单浮动</title>
  5. <style>
  6. .c1{
  7. width: 200px;
  8. height: 200px;
  9. background-color: indianred;
  10. float: left;
  11. }
  12. .c2{
  13. width: 300px;
  14. height: 200px;
  15. background-color: orange;
  16. float: left;
  17. }
  18. .c3{
  19. width: 400px;
  20. height: 200px;
  21. background-color: lightblue;
  22. float: left;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="c1"></div>
  28. <div class="c2"></div>
  29. <div class="c3"></div>
  30. </body>
  31. </html>

字围效果

  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <title>字围效果</title>
  5. <style>
  6. .c1{
  7. width: 200px;
  8. height: 200px;
  9. background-color: indianred;
  10. }
  11. .c2{
  12. width: 300px;
  13. height: 200px;
  14. background-color: orange;
  15. float: left;
  16. }
  17. .c3{
  18. width: 400px;
  19. height: 400px;
  20. background-color: lightblue;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div class="c1">111</div>
  26. <div class="c2">222</div>
  27. <div class="c3">333</div>>
  28. </body>
  29. </html>

当一个元素被设置浮动后,将具有以下特性:

  1. 任何申明为float 的元素都会自动被设置为一个行内块状元素,具有行内块状元素的特性。
  2. 假如某个元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。
  3. 在标准浏览器中如果浮动元素a脱离了文档流,那么排在浮动元素a后的元素将会往回排列占据浮动元素a本来所处的位置,使页面布局产生变化。
  4. 如果水平方向上没有足够的空间容纳浮动元素,则转向下一行。
  5. 字围效果:文字内容会围绕在浮动元素周围。
  6. 浮动元素只能浮动至左侧或者右侧。
  7. 浮动元素只能影响排在其后面元素的布局,却无法影响出现在浮动元素之前的元素。

清除浮动

网页布局中,最常用的布局便是浮动模型。但是浮动了以后就会破坏原有的文档流,使页面产生不必要的改动,所以我们一般在浮动了以后,达到目的了,就紧接着清除浮动。

在主流浏览器(如Firefox)下,如果没有设置height,元素的高度默认为auto,且其内容中有浮动元素时,在这种情况下元素的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的情况,叫“浮动溢出”,为了防止这个现象的出现而进行的CSS处理操作,CSS里面叫“清除浮动”。

  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <title></title>
  5. <meta charset="utf8">
  6. <style>
  7. .box{
  8. border: 1px solid red;
  9. }
  10. .c1{
  11. width: 200px;
  12. height: 200px;
  13. background-color: #336699;
  14. float: left;
  15. }
  16. .c2{
  17. width: 200px;
  18. height: 200px;
  19. background-color: orange;
  20. float: right;
  21. }
  22. .footer{
  23. width: 100%;
  24. height: 60px;
  25. background-color: yellowgreen;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="box">
  31. <div class="c1"></div>
  32. <div class="c2"></div>
  33. </div>
  34. <div class="footer"></div>
  35. </body>
  36. </html>

clear是css中专用于清除浮动的,常用的属性值有以下几个:

描述
left 在左侧不允许浮动元素。
right 在右侧不允许浮动元素。
both 在左右两侧均不允许浮动元素。
none 默认值。允许浮动元素出现在两侧。
  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <title>简单浮动</title>
  5. <style>
  6. .c1{
  7. width: 200px;
  8. height: 200px;
  9. background-color: indianred;
  10. float: left;
  11. /*float: right;*/
  12. }
  13. .c2{
  14. width: 300px;
  15. height: 200px;
  16. background-color: orange;
  17. float: left;
  18. clear: left;
  19. /*clear: both;*/
  20. }
  21. .c3{
  22. width: 400px;
  23. height: 200px;
  24. background-color: lightblue;
  25. float: left;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="c1"></div>
  31. <div class="c2"></div>
  32. <div class="c3"></div>
  33. </body>
  34. </html>

清除浮动解决父级塌陷问题:

  1. .clearfix:after { /*在类名为“clearfix”的元素内最后面加入内容*/
  2. content: "."; /*内容为“.”就是一个英文的句号而已。也可以不写。*/
  3. display: block; /*加入的这个元素转换为块级元素。*/
  4. clear: both; /*清除左右两边浮动。*/
  5. visibility: hidden; /*可见度设为隐藏。注意它和display:none;是有区别的。*/
  6. /* visibility:hidden;仍然占据空间,只是看不到而已;*/
  7. line-height: 0; /*行高为0;*/
  8. height: 0; /*高度为0;*/
  9. font-size:0; /*字体大小为0;*/
  10. }
  11. 整段代码就相当于在浮动元素后面跟了个宽高为0的空div,然后设定它clear:both来达到清除浮动的效果。
  12. 之所以用它,是因为,你不必在html文件中写入
  13. <div class="head clearfix"></div>

此外,还给父元素加上溢出隐藏属性(overflow: hidden;)来进行清除浮动。

  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <title></title>
  5. <meta charset="utf8">
  6. <style>
  7. .header{
  8. border: 1px solid red;
  9. /*height: 80px;*/
  10. }
  11. .c1{
  12. width: 200px;
  13. height: 60px;
  14. background-color: #336699;
  15. float: left;
  16. }
  17. .c2{
  18. width: 100px;
  19. height: 60px;
  20. background-color: orange;
  21. float: left;
  22. }
  23. .c3{
  24. width: 100px;
  25. height: 80px;
  26. background-color: lightskyblue;
  27. float: right;
  28. }
  29. .content{
  30. width: 100%;
  31. height: 60px;
  32. background-color: gray;
  33. }
  34. /*清除父级塌陷*/
  35. .clearfix:after{
  36. display: block;
  37. content: "";
  38. clear: both;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div class="header clearfix">
  44. <div class="c1"></div>
  45. <div class="c2"></div>
  46. <div class="c3"></div>
  47. </div>
  48. <div class="content">
  49. content...
  50. </div>
  51. </body>
  52. </html>