博客列表 >css 盒模型

css 盒模型

空瓶子
空瓶子原创
2020年12月21日 16:36:59712浏览

css 盒模型

1.实例演示 box-sizing 属性; 2. 实例演示常用的元素居中方式

  1. 关于 css 盒模型
    • 盒模型是使用 div 和 css 对网页元素进行控制是的一个非常重要的概念
    • 盒模型就是在 css 中,所有元素都包含在一个矩形框内,而这个矩形框就是称为盒模型
    • 盒模型描述了元素及属性在页面布局中所占的空间代销,因此盒模型可以影响其他元素位置及大小
    • 盒模型由 margin(外边距)、border(边框)、padding(内边距)、content(内容)几个部分组成
    • 盒模型还具备高度和宽度两个辅助属性
  2. 影响盒子大小的因素 width 与 heigth 和 padding、border
    一个盒子的实际大小是由 content、padding、border、margin 组成
    在 css 中可以通过设置 width 或 heigth 属性来控制 content 部分的大小
    还可以设置盒子的 padding、border 的大小
    测试代码

    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>关于盒子padding和border</title>
    7. <style>
    8. :root {
    9. font-size: 10px;
    10. }
    11. .box {
    12. width: 10em;
    13. height: 10em;
    14. background-color: skyblue;
    15. }
    16. /* 设置padding和border属性 */
    17. .box {
    18. padding: 1em;
    19. border: 1px solid #000;
    20. background-clip: content-box;
    21. }
    22. </style>
    23. </head>
    24. <body>
    25. <div class="box"></div>
    26. </body>
    27. </html>

    效果演示

    通过 box 的 width 和 heigth 属性,设置了盒子的宽为 100px,高为 100px;
    设置盒子的 padding:10px 和 borderpx
    此时盒子的宽和高为 122(100+10 2+1 2) * 122 的正方形

  3. 关于 box-sizing 控制盒子计算方式
    这种盒子模型,最早是由微软的 IE 浏览器实现的,称之为 IE 盒子模型
    css 代码

    1. .box {
    2. /* content-box: w3c标准盒子模型,width/height不含padding/border */
    3. box-sizing: content-box;
    4. /* border-box:padding,border计算在盒子大小内 */
    5. box-sizing: border-box;
    6. }

    演示效果

    border-box:padding,border 计算在盒子大小内

  4. 关于 margi 属性对盒子的影响
    margi 属性用于设置页面中元素(盒子)与元素(盒子)之间的距离大小,不影响盒子本身大小
    测试代码
    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>margin对盒子位置的影响</title>
    7. <style>
    8. html {
    9. font-size: 10px;
    10. }
    11. .box {
    12. width: 10em;
    13. height: 15rem;
    14. background-color: skyblue;
    15. padding: 1em;
    16. border: 1px solid black;
    17. background-clip: content-box;
    18. }
    19. /* 垂直排列 */
    20. .box:first-of-type {
    21. margin: 1em;
    22. }
    23. .box:nth-of-type(2) {
    24. margin: 1.5em;
    25. }
    26. /* 水平排列 */
    27. .box {
    28. float: left;
    29. }
    30. </style>
    31. </head>
    32. <body>
    33. <div class="box"></div>
    34. <div class="box"></div>
    35. </body>
    36. </html>
    效果演示

    当页面内的盒子垂直排列时,两个盒子的外边距重叠了、外边距大的那个会撑开两个盒子的距离

    当页面内的盒子水平排列时,两个盒子的外边距会累加
  5. 全局的盒子大小的设置
    css 代码
  1. <style>
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. /* 全局使用IE盒子模型 */
  6. box-sizing: border-box;
  7. }
  8. body {
  9. border: 1px solid red;
  10. height: 100vh;
  11. }
  12. </style>

效果演示

  1. 关于 content
  • 文档流
    css 代码
  1. <style>
  2. html {
  3. font-size: 10px;
  4. }
  5. .box {
  6. width: 10em;
  7. /* 应该使用内容将元素的高度撑开,而不是直接设置它的高度 */
  8. height: 15em;
  9. background-color: skyblue;
  10. border: 1px solid #000;
  11. }
  12. .box {
  13. /* 默认属性 */
  14. overflow: visible;
  15. /* 超出盒子大小的元素部分会被隐藏 */
  16. overflow: hidden;
  17. /* 使用滚动条 */
  18. overflow: scroll;
  19. /* 根据盒子内元素大小是否超过盒子高度来决自动使用滚动条功能 */
  20. overflow: auto;
  21. }
  22. </style>

  1. 关于元素的居中问题
  • 元素水平居中问题
    代码
  1. <style>
  2. .box {
  3. width: 15em;
  4. height: 15em;
  5. border: 1px solid #000;
  6. }
  7. /* 1. 行内或行内块水平居中 */
  8. .box {
  9. text-align: center;
  10. }
  11. /* 2. 块元素的水平居中 */
  12. .box > div {
  13. width: 5em;
  14. height: 5em;
  15. background-color: yellow;
  16. }
  17. /* 使用margin来实现块的水平居中,挤压式的居中 */
  18. .box > div {
  19. /* auto:这个值由浏览根据上下文自动计算 */
  20. /* margin-left: auto;
  21. margin-right: auto; */
  22. margin: 0 auto;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="box">
  28. <!-- <a href="">php.cn</a> -->
  29. <!-- <img src="https://img.php.cn/upload/course/000/000/001/5fae261f9c169870.png" width="150" alt=""> -->
  30. <div></div>
  31. </div>
  32. </body>

效果演示

  • 元素的垂直居中问题
    行元素垂直居中
    代码
  1. <style>
  2. html {
  3. font-size: 10px;
  4. }
  5. .box {
  6. width: 20em;
  7. height: 30em;
  8. background-color: skyblue;
  9. border: 1px solid black;
  10. }
  11. /* 行元素垂直居中 */
  12. .box a {
  13. line-height: 30em;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <div class="box">
  19. <a href="">PHP中文网</a>
  20. </div>
  21. </body>


因为行内块元素有他自己的宽高,在页面布局的元素垂直居中时;这里可以吧行内块元素看成一个“特殊”的块元素
块元素和行内块元素的垂直居中问题
代码

  1. <title>块元素和行内块元素的垂直居中</title>
  2. <style>
  3. html {
  4. font-size: 10px;
  5. }
  6. .box {
  7. width: 30em;
  8. /* 不要给高度,这个高度应该由padding挤出来 */
  9. /* height: 40em; */
  10. background-color: skyblue;
  11. border: 1px solid black;
  12. }
  13. .box div {
  14. width: 10em;
  15. height: 10em;
  16. background-color: blue;
  17. }
  18. .box {
  19. padding: 5em 0;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div class="box">
  25. <!-- <img
  26. src="https://inews.gtimg.com/newsapp_ls/0/12931162834_295195/0"
  27. alt=""
  28. style="width: 100px"
  29. /> -->
  30. <div></div>
  31. </div>
  32. </body>

效果演示

  • 水平且垂直的解决方案
    代码
    1. <style>
    2. html {
    3. font-size: 10px;
    4. }
    5. .box {
    6. width: 15em;
    7. height: 15em;
    8. border: 1px solid black;
    9. }
    10. .box {
    11. position: relative;
    12. }
    13. .box > div {
    14. width: 5em;
    15. height: 5em;
    16. background-color: yellow;
    17. }
    18. .box div {
    19. position: absolute;
    20. top: 0;
    21. left: 0;
    22. right: 0;
    23. bottom: 0;
    24. margin: auto;
    25. }
    26. </style>
    27. </head>
    28. <body>
    29. <div class="box">
    30. <div></div>
    31. </div>
    32. </body>
    效果演示
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议