day010:CSS如何进行圣杯布局

圣杯布局如图:

​day010:CSS如何进行圣杯布局_圣杯布局

而且要做到左右宽度固定,中间宽度自适应。

1.利用flex布局

  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>Document</title>

  6. <style>

  7. *{

  8. margin: 0;

  9. padding: 0;

  10. }

  11. .header,.footer{

  12. height:40px;

  13. width:100%;

  14. background:red;

  15. }

  16. .container{

  17. display: flex;

  18. }

  19. .middle{

  20. flex: 1;

  21. background:yellow;

  22. }

  23. .left{

  24. width:200px;

  25. background:pink;

  26. }

  27. .right{

  28. background: aqua;

  29. width:300px;

  30. }

  31. </style>

  32. </head>

  33. <body>

  34. <div class="header">这里是头部</div>

  35. <div class="container">

  36. <div class="left">左边</div>

  37. <div class="middle">中间部分</div>

  38. <div class="right">右边</div>

  39. </div>

  40. <div class="footer">这里是底部</div>

  41. </body>

  42. </html>

2.float布局(全部float:left)

  1. <!DOCTYPE html>

  2. <html lang="en">

  3.  

  4. <head>

  5. <meta charset="UTF-8">

  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">

  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">

  8. <title>Document</title>

  9. <style>

  10. *{

  11. margin: 0;

  12. padding: 0;

  13. }

  14. .header,

  15. .footer {

  16. height: 40px;

  17. width: 100%;

  18. background: red;

  19. }

  20.  

  21. .footer {

  22. clear: both;

  23. }

  24.  

  25. .container {

  26. padding-left: 200px;

  27. padding-right: 250px;

  28. }

  29.  

  30. .container div {

  31. position: relative;

  32. float: left;

  33. }

  34.  

  35. .middle {

  36. width: 100%;

  37. background: yellow;

  38. }

  39.  

  40. .left {

  41. width: 200px;

  42. background: pink;

  43. margin-left: -100%;

  44. left: -200px;

  45. }

  46.  

  47. .right {

  48. width: 250px;

  49. background: aqua;

  50. margin-left: -250px;

  51. left: 250px;

  52. }

  53. </style>

  54. </head>

  55.  

  56. <body>

  57. <div class="header">这里是头部</div>

  58. <div class="container">

  59. <div class="middle">中间部分</div>

  60. <div class="left">左边</div>

  61. <div class="right">右边</div>

  62. </div>

  63. <div class="footer">这里是底部</div>

  64. </body>

  65.  

  66. </html>

这种float布局是最难理解的,主要是浮动后的负margin操作,这里重点强调一下。

设置负margin和left值之前是这样子:

​day010:CSS如何进行圣杯布局_圣杯布局_02

左边的盒子设置margin-left: -100%是将盒子拉上去,效果:

  1. .left{

  2. /* ... */

  3. margin-left: -100%;

  4. }

​day010:CSS如何进行圣杯布局_圣杯布局_03

然后向左移动200px来填充空下来的padding-left部分

  1. .left{

  2. /* ... */

  3. margin-left: -100%;

  4. left: -200px;

  5. }

效果呈现:

​day010:CSS如何进行圣杯布局_圣杯布局_04

右边的盒子设置margin-left: -250px后,盒子在该行所占空间为0,因此直接到上面的middle块中,效果:

  1. .right{

  2. /* ... */

  3. margin-left: -250px;

  4. }

​day010:CSS如何进行圣杯布局_圣杯布局_05

然后向右移动250px, 填充父容器的padding-right部分:

  1. .right{

  2. /* ... */

  3. margin-left: -250px;

  4. left: 250px;

  5. }

现在就达到最后的效果了:

​day010:CSS如何进行圣杯布局_圣杯布局

3.float布局(左边float: left, 右边float: right)

  1. <!DOCTYPE html>

  2. <html lang="en">

  3.  

  4. <head>

  5. <meta charset="UTF-8">

  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">

  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">

  8. <title>Document</title>

  9. <style>

  10. *{

  11. margin: 0;

  12. padding: 0;

  13. }

  14. .header,

  15. .footer {

  16. height: 40px;

  17. width: 100%;

  18. background: red;

  19. }

  20. .container{

  21. overflow: hidden;

  22. }

  23.  

  24. .middle {

  25. background: yellow;

  26. }

  27.  

  28. .left {

  29. float: left;

  30. width: 200px;

  31. background: pink;

  32. }

  33.  

  34. .right {

  35. float: right;

  36. width: 250px;

  37. background: aqua;

  38. }

  39. </style>

  40. </head>

  41.  

  42. <body>

  43. <div class="header">这里是头部</div>

  44. <div class="container">

  45. <div class="left">左边</div>

  46. <div class="right">右边</div>

  47. <div class="middle">中间部分</div>

  48. </div>

  49. <div class="footer">这里是底部</div>

  50. </body>

  51.  

  52. </html>

4. 绝对定位

  1. <!DOCTYPE html>

  2. <html lang="en">

  3.  

  4. <head>

  5. <meta charset="UTF-8">

  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">

  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">

  8. <title>Document</title>

  9. <style>

  10. *{

  11. margin: 0;

  12. padding: 0;

  13. }

  14. .header,

  15. .footer {

  16. height: 40px;

  17. width: 100%;

  18. background: red;

  19. }

  20. .container{

  21. min-height: 1.2em;

  22. position: relative;

  23. }

  24.  

  25. .container>div {

  26. position: absolute;

  27. }

  28.  

  29. .middle {

  30. left: 200px;

  31. right: 250px;

  32. background: yellow;

  33. }

  34.  

  35. .left {

  36. left: 0;

  37. width: 200px;

  38. background: pink;

  39. }

  40.  

  41. .right {

  42. right: 0;

  43. width: 250px;

  44. background: aqua;

  45. }

  46. </style>

  47. </head>

  48.  

  49. <body>

  50. <div class="header">这里是头部</div>

  51. <div class="container">

  52. <div class="left">左边</div>

  53. <div class="right">右边</div>

  54. <div class="middle">中间部分</div>

  55. </div>

  56. <div class="footer">这里是底部</div>

  57. </body>

  58.  

  59. </html>

5.grid布局

  1. <!DOCTYPE html>

  2. <html lang="en">

  3.  

  4. <head>

  5. <meta charset="UTF-8">

  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">

  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">

  8. <title>Document</title>

  9. <style>

  10. body{

  11. display: grid;

  12. }

  13. #header{

  14. background: red;

  15. grid-row:1;

  16. grid-column:1/5;

  17. }

  18.  

  19. #left{

  20. grid-row:2;

  21. grid-column:1/2;

  22. background: orange;

  23. }

  24. #right{

  25. grid-row:2;

  26. grid-column:4/5;

  27. background: cadetblue;

  28. }

  29. #middle{

  30. grid-row:2;

  31. grid-column:2/4;

  32. background: rebeccapurple

  33. }

  34. #footer{

  35. background: gold;

  36. grid-row:3;

  37. grid-column:1/5;

  38. }

  39. </style>

  40. </head>

  41.  

  42. <body>

  43. <div id="header">header</div>

  44. <div id="left">left</div>

  45. <div id="middle">middle</div>

  46. <div id="right">right</div>

  47. <div id="footer">footer</footer></div>

  48.  

  49. </body>

  50.  

  51. </html>

看看grid布局,其实也挺简单的吧,里面的参数应该不言而喻了。

另外说一点,到2019年为止,grid现在绝大多数浏览器已经可以兼容了,可以着手使用了。

​day010:CSS如何进行圣杯布局_圣杯布局_07

当然,还有table布局,年代比较久远了,而且对SEO不友好,知道就可以,这里就不浪费篇幅了。

 

 

​day010:CSS如何进行圣杯布局_圣杯布局_08