博客列表 >盒模型的设置与布局

盒模型的设置与布局

麻明山
麻明山原创
2020年08月07日 16:30:13957浏览

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

页面布局单元就是盒子

盒子的大小:

宽 =左右margin+左右border+左右padding+width
高 =上下margin+上下border+上下padding+height

盒子由四个部分组成

内容(content)——里装的东西
填充(padding)——抗震的辅料
边框(border) ——盒子本身
边界(margin) ——盒子之间的空隙
如图所示:

盒子的位置由margin属性决定

margin-left:左边界
margin-right:右边界
margin-top:上边界
margin-bottom:下边界

2.box-sizing解决了什么问题

定义宽度和高度是否包含padding和border的属性
1、content-box:border和padding不计算入width之内,即width直接就是内容区的宽度
2、border-box:border和padding计算入width之内,即内容区实际宽度是width去除padding和border之后的宽度

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style type="text/css">
  7. div{
  8. width: 50px;
  9. height: 50px;
  10. margin: 10px;
  11. padding: 10px;
  12. border: 10px solid blue;
  13. }
  14. #bs{
  15. box-sizing: border-box;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div></div>
  21. <div id="bs"></div>
  22. </body>
  23. </html>

运行结果


3. 绝对定位与相对定位的区别与应用,实例演示

绝对定位,是相对于浏览器窗口来定位的,是固定的,不会跟屏幕一起滚动。
相对定位,是相对于其原本的位置来定位的。
先设置三个盒子

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>绝对定位与相对定位</title>
  6. </head>
  7. <body>
  8. <div class="div1" style="background-color: aqua; width: 100px; height: 100px;">
  9. </div>
  10. <div
  11. class="div2"
  12. style="background-color: darkorange; width: 100px; height: 100px;"
  13. >
  14. </div>
  15. <div
  16. class="div3"
  17. style="background-color: blue; width: 100px; height: 100px;"
  18. >
  19. </div>
  20. </body>
  21. </html>

运行效果如下图:

给div2设置position属性为absolute:

  1. <div
  2. class="div2"
  3. style="
  4. background-color: darkorange;
  5. width: 100px;
  6. height: 100px;
  7. position:absolute;
  8. top:20px;
  9. left:50px;
  10. "
  11. >
  12. </div>

效果如下:

4. 固定定位与绝对定位的区别是什么,实例演示

相对定位的偏移参考元素是元素本身,不会使元素脱离文档流。
运行代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>固定定位与绝对定位</title>
  7. </head>
  8. <style type="text/css">
  9. .rel {
  10. width: 200px;
  11. height: 200px;
  12. background: red;
  13. position: relative;
  14. top: 100px;
  15. left: 100px;
  16. }
  17. </style>
  18. <body>
  19. <div class="rel">相对定位</div>
  20. 这是一个盒子模型<br />
  21. 这是一个盒子模型<br />
  22. 这是一个盒子模型<br />
  23. 这是一个盒子模型<br />
  24. 这是一个盒子模型<br />
  25. 这是一个盒子模型<br />
  26. 这是一个盒子模型<br />
  27. 这是一个盒子模型<br />
  28. 这是一个盒子模型<br />
  29. 这是一个盒子模型<br />
  30. </body>
  31. </html>

相对定位效果图:

绝对定位元素以父辈元素中最近的定位元素为参考坐标,如果绝对定位元素的父辈元素中没有采用定位的,那么此绝对定位元素的参考对象是html,元素会脱离文档流。
运行代码:

  1. .abs {
  2. width: 200px;
  3. height: 200px;
  4. background: red;
  5. position: absolute;
  6. top: 100px;
  7. left: 100px;
  8. }

绝对定位效果图:

5. 为什么垂直居中如此困难, 使用绝对定位如何实现?

1、CSS 最开始针对的是 web文档,其中整体布局中垂直方向居中的需求不足,没实现这个需求的语法。
2、基于 CSS 布局模型来制定垂直居中规则有困难。
比如:
·同一个容器内有浮动、有相对定位、有流内内容,垂直居中如何界定中线?
·每个元素自身又如何对齐?如果一个元素既浮动又垂直居中要怎么定位?要不要触发 BFC?要不要创建包含块?
·把一个底下的元素居中了缩小了容器高度,中线变了,前面的是不是又要重新计算?到底先算哪个?

要利用绝对定位的方法进行垂直剧中,要求元素具有固定的宽度和高度,如果没有固定的宽度和高度就无法实现,因为需要利用top和left的值进行定位。

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

父级区块设置为相对定位,左右两个区块分别使用绝对定位。
代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>使用绝对定位实现二列布局</title>
  7. <style type="text/css">
  8. .container {
  9. position: absolute;
  10. left: 0;
  11. right: 0;
  12. margin: auto;
  13. max-width: 500px;
  14. }
  15. .left {
  16. position: absolute;
  17. top: 0;
  18. left: 0;
  19. width: 200px;
  20. height: 500px;
  21. background-color: red;
  22. }
  23. .right {
  24. position: absolute;
  25. top: 0;
  26. right: 0;
  27. width: 300px;
  28. height: 500px;
  29. background-color: green;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div class="container clear">
  35. <div class="left">左侧</div>
  36. <div class="right">右侧</div>
  37. </div>
  38. </body>
  39. </html>

运行结果:

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

html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>使用浮动实现三列布局</title>
  7. <style>
  8. @import url(007.css);
  9. </style>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <div class="left">left</div>
  14. <div class="main">middle</div>
  15. <div class="right">right</div>
  16. </div>
  17. </body>
  18. </html>

css代码

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  5. a {
  6. text-decoration: none;
  7. color: #555555;
  8. }
  9. li {
  10. list-style: none;
  11. }
  12. a:hover {
  13. color: blue;
  14. }
  15. .content {
  16. width: 900px;
  17. margin: auto;
  18. }
  19. .content:first-of-type li {
  20. float: left;
  21. padding: 0 20px;
  22. line-height: 50px;
  23. }
  24. .footer {
  25. text-align: center;
  26. line-height: 50px;
  27. }
  28. .container {
  29. width: 900px;
  30. background-color: #f98;
  31. margin: 10px auto;
  32. border: 5px solid #aaaaaa;
  33. overflow: hidden;
  34. }
  35. .container > .left {
  36. width: 300px;
  37. background-color: darkcyan;
  38. min-height: 600px;
  39. }
  40. .container > .right {
  41. width: 200px;
  42. background-color: crimson;
  43. min-height: 600px;
  44. }
  45. .container > .left {
  46. float: left;
  47. }
  48. .container > .right {
  49. float: right;
  50. }
  51. .container > .main {
  52. width: 400px;
  53. min-height: 600px;
  54. background-color: lightgreen;
  55. float: left;
  56. }

运行效果

8. 默写出圣杯布局的思想,并用圣杯布局实现三列布局

三列都是浮动元素,为保证主体区优先显示并自适应,默认100%宽度,将主体放在前面,将左右区块的margin属性设为负值,左侧设为-100%,右侧设置与其宽度相等的负值。主体左右padding值设置相应宽度。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>圣杯布局</title>
  6. <style type="text/css">
  7. .left,
  8. .main,
  9. .right {
  10. float: left;
  11. position: relative;
  12. min-height: 600px;
  13. }
  14. .main {
  15. width: 100%;
  16. background-color: forestgreen;
  17. }
  18. .container {
  19. padding-left: 200px;
  20. padding-right: 300px;
  21. }
  22. .left {
  23. margin-left: -100%;
  24. left: -200px;
  25. width: 200px;
  26. background-color: sandybrown;
  27. }
  28. .right {
  29. margin-left: -300px;
  30. right: -300px;
  31. width: 300px;
  32. background-color: mediumslateblue;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div class="container">
  38. <div class="main">杯身</div>
  39. <div class="left">左侧</div>
  40. <div class="right">右侧</div>
  41. </div>
  42. </body>
  43. </html>

运行效果

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议