Blogger Information
Blog 6
fans 0
comment 0
visits 6299
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
CSS 盒模型、定位和传统布局
J
Original
720 people have browsed it

1.盒模型大小与位置的设置和计算

默认盒子大小计算公式: 内容区 + 内边距 + 边框。
盒子模型的排列位置由外边距(margin)决定,不影响盒子的大小。
宽度150px = 100px (width) + 40px(左、右内边距) + 10px(左、右边框)。
高度150px = 100px (height) + 40px(上、下内边距) + 10px(上、下边框)。

  1. <style>
  2. .box {
  3. /* 内容区 */
  4. height: 100px;
  5. width: 100px;
  6. /* 设置背景颜色 */
  7. background-color: lightgreen;
  8. /* 背景颜色只显示内容区 */
  9. background-clip: content-box;
  10. /* 外边距30px */
  11. margin: 30px;
  12. /* 设置内边距20px 内边距是透明的*/
  13. padding: 20px;
  14. /* 设置边框 */
  15. border: 5px solid #000;
  16. /* 自定义盒子计算公式,盒子内容区包括边框和内边距 */
  17. /* box-sizing: border-box; */
  18. }
  19. </style>
  20. <body>
  21. <div class="box">box</div>
  22. </body>

代码运行结果图:

2.box-sizing属性

box-sizing: 用来自定义盒子计算公式,盒子内容区是否计算内边距和边框。box-sizing:content-box(默认):盒子大小只计算内容区,当box_sizing:border-box,此时,盒子的大小包括内边距和边框,但总大小始终等于盒子的大小,此时的内容区大小会被压缩。

真正内容区的宽度: 200px(width) - 40px(左、右内边距) - 10(左、右边框) = 150px

  1. <style>
  2. .box {
  3. /* 内容区 */
  4. height: 200px;
  5. width: 200px;
  6. /* 设置背景颜色 */
  7. background-color: lightgreen;
  8. /* 外边距30px */
  9. margin: 30px;
  10. /* 设置内边距20px */
  11. padding: 20px;
  12. /* 设置边框 */
  13. border: 5px solid #000;
  14. /* 自定义盒子计算公式,此时盒子内容区包括边框和内边距 */
  15. box-sizing: border-box;
  16. }
  17. </style>
  18. <body>
  19. <div class="box">box</div>
  20. </body>

代码运行结果图:

3.绝对定位与相对定位的区别与应用

3.1绝对定位与相对定位的区别

绝对定位:元素的位置相对于最近的已定位父元素,如果没有就相对于当前窗口进行定位(body/html),参照物是它的父级包含块;
相对定位:定位元素是相对于元素的当前位置进行定位,参照物是它的当前位置。相对定位通常作为绝对定位父级的定位元素。

3.2绝对定位与相对定位的应用

  1. <style>
  2. .box.one {
  3. /* 内容区 */
  4. width: 300px;
  5. height: 300px;
  6. /* 背景颜色 */
  7. background-color: lightblue;
  8. /* 相对定位relative通常作为父级定位属性使用 */
  9. position: relative;
  10. /* 避免子元素margin影响到父级 */
  11. overflow: hidden;
  12. }
  13. .box.two {
  14. /* 内容区 */
  15. width: 100px;
  16. height: 100px;
  17. /* margin-top: 50px; */
  18. /* margin-left: 30px; */
  19. /* 背景颜色 */
  20. background-color: lightcoral;
  21. /* 绝对元素:参考物就是他的父级包含块(就是他的所有上级元素中具有具体定位属性的元素) */
  22. position: absolute;
  23. top: 0;
  24. left: 50px;
  25. }
  26. .box.three {
  27. /* 内容区 */
  28. width: 100px;
  29. height: 100px;
  30. margin-top: 100px;
  31. background-color: lightgreen;
  32. /* box3相对原来的位置,向右移了100px 向下100px,到了如图位置 */
  33. position: relative;
  34. top: 100px;
  35. left: 100px;
  36. }
  37. </style>
  38. <body>
  39. <div class="box one">
  40. <div class="box two">box2-绝对</div>
  41. <div class="box three">box3-相对</div>
  42. </div>
  43. </body>

代码运行结果图:

4. 固定定位与绝对定位的区别

固定定位: 元素的位置始终将当前的窗口做为定位父级,始终显示在当前页面上
绝对定位:一定要有一个定位父级/包含块,如果没有就相对于当前窗口进行定位(body/html)

  1. <style>
  2. .box.one {
  3. /* 内容区 */
  4. width: 300px;
  5. height: 200px;
  6. /* 背景颜色 */
  7. background-color: lightblue;
  8. /* 相对定位relative通常作为父级定位属性使用 */
  9. position: relative;
  10. /* 加一个margin让页面能够上下滚动 */
  11. margin-bottom: 1000px;
  12. }
  13. .box.two {
  14. /* 内容区 */
  15. width: 100px;
  16. height: 100px;
  17. /* margin-top: 50px; */
  18. /* margin-left: 30px; */
  19. /* 背景颜色 */
  20. background-color: lightcoral;
  21. /* 绝对元素:参考物就是他的父级包含块(就是他的所有上级元素中具有具体定位属性的元素) */
  22. position: absolute;
  23. top: 0;
  24. left: 50px;
  25. }
  26. .fix {
  27. width: 100px;
  28. height: 100px;
  29. background-color: lightgreen;
  30. position: fixed;
  31. top: 0;
  32. left: 350px;
  33. }
  34. </style>
  35. <body>
  36. <div class="box one">
  37. <div class="box two">绝对定位 top:0; left:50px</div>
  38. </div>
  39. <div class="fix three">固定定位 top0; left:350px</div>
  40. </body>

代码运行结果图:

5. 使用绝对定位实现垂直居中

为什么垂直居中如此困难?因为页面的宽度有限,而高度是无限的,并且允许用户翻页,所以无法确定页面的高度,可以通过使用绝对定位实现垂直居中。

  1. <style>
  2. .box {
  3. width: 200px;
  4. height: 200px;
  5. background-color: lightgray;
  6. /* 父级定位元素 */
  7. position: relative;
  8. }
  9. .box1 {
  10. width: 100px;
  11. height: 100px;
  12. background-color: lightcoral;
  13. /* 1.水平居中 */
  14. /* 子块的外边距让浏览器根据父级的宽度自动计算 */
  15. /* margin-left: auto; */
  16. /* margin-right: auto; */
  17. /* 2.垂直居中,使用绝对定位 */
  18. position: absolute;
  19. /* 定位起点 */
  20. top: 0;
  21. left: 0;
  22. /* 定位终点 */
  23. right: 0;
  24. bottom: 0;
  25. /* 使当前的元素定位的上下文充满整个父级容器 */
  26. /* 1.水平居中 */
  27. /* margin-left: auto; */
  28. /* margin-right: auto; */
  29. /* 2.垂直居中 */
  30. margin-top: auto;
  31. margin-bottom: auto;
  32. /* 简化 */
  33. margin: auto;
  34. }
  35. </style>
  36. <body>
  37. <div class="box">
  38. <div class="box1">居中</div>
  39. </div>
  40. </body>

代码运行结果图:

6. 使用绝对定位实现二列布局

二列布局:第一列绝对定位的起始点top:0;left:0;,宽度:width:200px;第二列起始点top:0;right:0,宽度:width:800px,再给个内边距padding:10px

注意:使用绝对定位,父级一定要有定位元素position:relative

html布局如下:

  1. <style>
  2. @import url(demo5.css);
  3. </style>
  4. <body>
  5. <!-- 页眉 -->
  6. <div class="header">
  7. <div class="content">
  8. <ul>
  9. <li><a href="">首页</a></li>
  10. <li><a href="">新闻</a></li>
  11. <li><a href="">视频</a></li>
  12. <li><a href="">地图</a></li>
  13. <li><a href="">贴吧</a></li>
  14. <li><a href="">学术</a></li>
  15. <li><a href="">更多</a></li>
  16. </ul>
  17. </div>
  18. </div>
  19. <!-- 主体 -->
  20. <div class="container">
  21. <div class="left">左侧</div>
  22. <div class="main">内容</div>
  23. </div>
  24. <!-- 页脚 -->
  25. <div class="footer">
  26. <div class="content">
  27. <p>Copyright © 2017-2020 *******.com 版权所有</p>
  28. </div>
  29. </div>
  30. </body>

css样式如下:

  1. * {
  2. /* 初始化 */
  3. padding: 0;
  4. margin: 0;
  5. box-sizing: border-box;
  6. }
  7. /* a标签 */
  8. a {
  9. color: black;
  10. /* 开启浮动 */
  11. float: left;
  12. /* 去掉a标签的下划线 */
  13. text-decoration: none;
  14. padding: 0 20px;
  15. /* 设置行高与父级高度一样,达到居中效果 */
  16. line-height: 40px;
  17. }
  18. /* 鼠标覆盖a标签 */
  19. a:hover {
  20. background-color: lightcoral;
  21. /* color: white; */
  22. }
  23. li {
  24. /* 去掉li标签前面的样式 */
  25. list-style: none;
  26. }
  27. /* 页眉页脚 */
  28. .header,
  29. .footer {
  30. height: 40px;
  31. background-color: lightblue;
  32. }
  33. .content {
  34. width: 1000px;
  35. height: 40px;
  36. /* background-color: lightgreen; */
  37. /* 居中显示 */
  38. margin: auto;
  39. line-height: 40px;
  40. }
  41. /* 第一个content元素 */
  42. .content:last-of-type {
  43. /* 文本居中显示 */
  44. text-align: center;
  45. }
  46. /* 主体 */
  47. .container {
  48. width: 1000px;
  49. /* 最小宽度600 */
  50. min-height: 600px;
  51. background-color: lightgray;
  52. /* 上下边距10 左右边距自动 */
  53. margin: 10px auto;
  54. /* 设置父级定位,作为子元素的定位元素 */
  55. position: relative;
  56. }
  57. /* 左侧 */
  58. .container .left {
  59. width: 200px;
  60. height: 600px;
  61. background-color: yellow;
  62. /* 绝对定位 */
  63. position: absolute;
  64. /* 起始点 默认值*/
  65. /* top: 0; */
  66. /* left: 0; */
  67. }
  68. /* 内容区 */
  69. .container .main {
  70. width: 800px;
  71. height: 600px;
  72. background-color: lightgreen;
  73. /* 加个边距 */
  74. padding: 10px;
  75. /* 背景裁切 */
  76. /* background-clip: content-box; */
  77. /* 绝对定位 */
  78. position: absolute;
  79. /* 起始点 */
  80. /* top: 0; */
  81. right: 0;
  82. }

代码运行结果图:

7. 使用浮动实现三列布局

三列布局: 使用float这个属性实现三列布局
注意: 浮动布局,父级高度塌陷,需要使用overflow:hidden隐藏溢出,转成BFC块。
html代码如下:

  1. <style>
  2. @import url(demo6.css);
  3. </style>
  4. <body>
  5. <!-- 页眉 -->
  6. <div class="header">
  7. <div class="content">
  8. <ul>
  9. <li><a href="">首页</a></li>
  10. <li><a href="">新闻</a></li>
  11. <li><a href="">视频</a></li>
  12. <li><a href="">地图</a></li>
  13. <li><a href="">贴吧</a></li>
  14. <li><a href="">学术</a></li>
  15. <li><a href="">更多</a></li>
  16. </ul>
  17. </div>
  18. </div>
  19. <!-- 主体 -->
  20. <div class="container">
  21. <div class="left">左侧</div>
  22. <div class="main">内容</div>
  23. <div class="right">右侧</div>
  24. </div>
  25. <!-- 页脚 -->
  26. <div class="footer">
  27. <div class="content">
  28. <p>Copyright © 2017-2020 *******.com 版权所有</p>
  29. </div>
  30. </div>
  31. </body>

CSS样式表如下:

  1. * {
  2. /* 初始化 */
  3. padding: 0;
  4. margin: 0;
  5. /* 自定义盒子计算公式 */
  6. box-sizing: border-box;
  7. }
  8. /* a标签 */
  9. a {
  10. color: black;
  11. /* 开启浮动 */
  12. float: left;
  13. /* 去掉a标签的下划线 */
  14. text-decoration: none;
  15. padding: 0 20px;
  16. /* 设置行高与父级高度一样,达到居中效果 */
  17. line-height: 40px;
  18. }
  19. /* 鼠标覆盖a标签 */
  20. a:hover {
  21. background-color: lightcoral;
  22. /* color: white; */
  23. }
  24. li {
  25. /* 去掉li标签前面的样式 */
  26. list-style: none;
  27. }
  28. /* 页眉页脚 */
  29. .header,
  30. .footer {
  31. height: 40px;
  32. background-color: lightblue;
  33. }
  34. .content {
  35. width: 1000px;
  36. height: 40px;
  37. /* background-color: lightgreen; */
  38. /* 居中显示 */
  39. margin: auto;
  40. line-height: 40px;
  41. }
  42. /* 第一个content元素 */
  43. .content:last-of-type {
  44. /* 文本居中显示 */
  45. text-align: center;
  46. }
  47. /* 主体 */
  48. .container {
  49. width: 1000px;
  50. /* 最小宽度600 */
  51. /* min-height: 600px; 浮动布局父元素高度失效 */
  52. background-color: lightgray;
  53. /* 上下边距10 左右边距自动 */
  54. margin: 10px auto;
  55. /* border: 5px solid #000; */
  56. /* 隐藏溢出内容 转成BFC块*/
  57. overflow: hidden;
  58. }
  59. /* 左右侧公共属性 */
  60. .container .left,
  61. .container .right {
  62. width: 200px;
  63. min-height: 600px;
  64. background-color: yellow;
  65. }
  66. /* 左侧 */
  67. .container .left {
  68. float: left;
  69. }
  70. /* 右侧 */
  71. .container .right {
  72. float: right;
  73. }
  74. /* 内容区 */
  75. .container .main {
  76. float: left;
  77. width: 600px;
  78. min-height: 600px;
  79. background-color: lightpink;
  80. }

代码运行结果图:

8. 圣杯布局的思想,用圣杯布局实现三列布局

圣杯布局的步骤:

  • 内容区必须优先渲染,DOM结构中将主体写到前面
  • 中间主体内容区必须自适应,占据整个容器的全部空间
  • 内容区左右全部浮动(左浮动float:left)
  • 通过给左右两侧设置margin的负值,使它们回到容器的正确位置上
  • 给容器设置左右的padding,宽度与左右两侧宽度相等,将左右区域挤出来
  • 再给左右两侧通过相对定位,将它们最终放到正确的位置上

html 代码如下:

  1. <link rel="stylesheet" href="demo7.css" />
  2. <body>
  3. <!-- 页眉 -->
  4. <div class="header">
  5. <div class="content">
  6. <ul>
  7. <li><a href="">首页</a></li>
  8. <li><a href="">新闻</a></li>
  9. <li><a href="">视频</a></li>
  10. <li><a href="">地图</a></li>
  11. <li><a href="">贴吧</a></li>
  12. <li><a href="">学术</a></li>
  13. <li><a href="">更多</a></li>
  14. </ul>
  15. </div>
  16. </div>
  17. <!-- 主体 -->
  18. <div class="container">
  19. <div class="main">
  20. 央视网消息(焦点访谈):2020年过了一大半,我们经受的考验一个接一个。突如其来的新冠肺炎疫情,给中国出了一道“加试题”,我们一边抓全面抗疫,一边抓经济社会发展的运行和恢复。经过艰苦卓绝的努力,二季度中国经济增速已经由负转正。但是,新冠肺炎疫情仍然在全球肆虐,错综复杂的内外环境仍然存在不确定性。中国经济面临的形势到底是怎样的?下一步我们如何应对?7月30日,习近平总书记主持召开中共中央政治局会议,分析研究当前经济形势,部署下一段的经济工作。
  21. </div>
  22. <div class="left">左侧</div>
  23. <div class="right">右侧</div>
  24. </div>
  25. <!-- 页脚 -->
  26. <div class="footer">
  27. <div class="content">
  28. <p>Copyright © 2017-2020 *******.com 版权所有</p>
  29. </div>
  30. </div>
  31. </body>

CSS代码如下:

  1. * {
  2. /* 初始化 */
  3. padding: 0;
  4. margin: 0;
  5. /* 自定义盒子计算公式 */
  6. box-sizing: border-box;
  7. }
  8. /* a标签 */
  9. a {
  10. color: black;
  11. /* 开启浮动 */
  12. float: left;
  13. /* 去掉a标签的下划线 */
  14. text-decoration: none;
  15. padding: 0 20px;
  16. /* 设置行高与父级高度一样,达到居中效果 */
  17. line-height: 40px;
  18. }
  19. /* 鼠标覆盖a标签 */
  20. a:hover {
  21. background-color: lightcoral;
  22. /* color: white; */
  23. }
  24. li {
  25. /* 去掉li标签前面的样式 */
  26. list-style: none;
  27. }
  28. /* 页眉页脚 */
  29. .header,
  30. .footer {
  31. height: 40px;
  32. background-color: lightblue;
  33. }
  34. .content {
  35. width: 1000px;
  36. height: 40px;
  37. /* background-color: lightgreen; */
  38. /* 居中显示 */
  39. margin: auto;
  40. line-height: 40px;
  41. }
  42. /* 第一个content元素 */
  43. .content:last-of-type {
  44. /* 文本居中显示 */
  45. text-align: center;
  46. }
  47. /* 主体 */
  48. .container {
  49. /* 加一个虚线 */
  50. /* border: 5px dotted #000; */
  51. /* 用overflow:hidden转成BFC块,使父级元素包住浮动的子元素 */
  52. overflow: hidden;
  53. /* 左右挤出200内边距给左右两侧 */
  54. padding: 10px 200px;
  55. }
  56. /* 主体下所有元素 */
  57. .container > * {
  58. /* 最小高度 */
  59. min-height: 600px;
  60. /* 所有元素浮动 */
  61. float: left;
  62. }
  63. /* 左右侧加一个200px的宽度,背景色 */
  64. .container .left,
  65. .container .right {
  66. width: 200px;
  67. background-color: yellow;
  68. }
  69. /* 主体内容区宽度必须自适应100% */
  70. .container .main {
  71. width: 100%;
  72. background-color: lightpink;
  73. }
  74. /* 将左侧元素放在内容区左侧 */
  75. .container .left {
  76. margin-left: -100%;
  77. /* 相对定位,往左200px */
  78. position: relative;
  79. right: 200px;
  80. }
  81. /* 将右侧元素放在内容区右侧 */
  82. .container .right {
  83. margin-left: -200px;
  84. /* 相对定位,往右200px */
  85. position: relative;
  86. left: 200px;
  87. }

代码运行结果图:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:不错
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post