博客列表 >框模型的样式设置和定位机制

框模型的样式设置和定位机制

暝皑祯π_π
暝皑祯π_π原创
2020年04月10日 16:59:09725浏览

1. 元素框与框模型属性

  • 无论什么元素, CSS 都会生成一个矩形框来显示,称为元素框
  • 每个元素在页面加载的时候都是一个框,只是默认的情况下,元素框的边框隐藏,背景透明,所以我们只看到了元素框里面的内容。也就是是说。
  • 元素框的中心区域是: 内容区(centent), 这是必须要有的
  • 其它区域,如内边距(padding), 边框(border) , 外边距(margin),背景(background)都是可选的。

元素框

序号 名称 描述
1 内容区content 必须要有,它的四周区域是可选的
2 内边距padding 内容与边框之间的填充区域
3 边框border 边框可以将内容区与外界进行隔离
4 外边距 margin 多个盒子之间的间隙
  • padding,margin,border 的每一条边都可以单独设置属性
  • padingmargin 是背景透明的,所以只能设置宽度,不能设置颜色与样式

border(边框)

  • padding 设置所有边的书写格式 -设置四条边的顺序为’顺时间方向’
序号 值数量 举例 描述
1 四值 border: 5px 10px 15px 20px 上 — 右 — 下 — 左
2 三值 border: 10px 5px 上 — (左右相等) — 下
3 双值 border: 5px 10px (上下相等) — (左右相等)
4 单值 border: 5px 上下左右全相等
  • 单独设置每条边的书写格式
名称 描述
padding-top:1px solid red 上边框的宽度,样式和颜色
padding-right:1px solid red 上边框的宽度,样式和颜色
padding-bottom:1px solid red 上边框的宽度,样式和颜色
padding-left:1px solid red 上边框的宽度,样式和颜色

元素框的宽度计算

  • margin-left + border-left + padding-left + content +padding-right + border-right + margin-right

元素框的高度计算

  • margin-top + border-top + padding-top + content + padding-bottom + border-bottom + margin-bottom

元素框的宽度的计算标准

名称 描述
box-sizing:content-box; 定义内容区为准来计算宽度
box-sizing:border-box; 定义边框区为准来计算宽度

display属性

  • display: 属性, 默认值inline,适用所有元素, 不能继承
  • display 改变的是显示方式, 并不能改变元素的本质
  • 例如,块级元素不允许做为行内元素后代, 并不会因为它显示为行内块而改变

重要术语

常规流

  • 默认从左到右, 从上到下渲染页面, 这也符合大多数语言的书写顺序
  • 可以通过: float / position / Flex / Grid 等布局方式,改变默认行为

非置换元素

  • 内容包含在当前文档中的元素,例如<p>,段落文本就在当前的 HTML 文档中

置换元素

  • 充当其它内容占位符的元素. 最常见的就是<img>
  • <img>通过src属性指向一张图片,渲染时该图片就会插入到该元素的位置
  • 类似的还有<input>, 通过type属性指定要插入的表单元素类型
  • 例如: <input type="radio">

根元素

  • 在 html 文档, 就是指<html>元素, xml 文档中, 可以是任何元素

块级框

  • 元素框在页面中,只有水平排列与垂直排列二种形式
  • 块级元素生成的框, 总是前后换行, 垂直/纵向/堆叠排列
  • 例如:段落<p>, 标题<h3>, 通用容器<div>
  • 任何元素通过display: block都可声明为块级框

行内框

  • 简单说, 就是前后不换行排列的元素,例如<span>,<strong>,<a>
  • 任何元素通过display: inline都可声明为行内框

行内块级框

  • 内部特征像块级框, 外部特征像行内框,既可设置宽高,又能水平排列
  • 行内块级框也置换元素非常相似: display: inline-bolck;

容纳块

  • 容纳块是一种特殊的元素框,或者理解为专门充当元素框父级的专用元素框
  • 每个元素框, 都必须相对于一个容纳块来放置
  • 所有, 容纳块, 就是元素框体的布局上下文
  • 在常规流布局中, 容纳块,是由离元素最近的那个生成列表/块级框/表格的祖辈元素的边界构成

横向格式化

涉及七个属性

序号 属性 默认值 描述
1 margin-left auto 左外边距, 正负均可
2 border-left 0 左边框
3 padding-left 0 左内边距
4 width auto 内容区宽度, 必须正值
5 padding-right 0 右内边距
6 border-right 0 右边框
7 margin-right auto 右外边距, 正负均可
  • 这七个属性影响着块级框的横向布局
  • 本个属性相加应该等于父元素容纳块的宽度,而这个宽度就是父元素的 width 值
  • 七个属性中,只有内容区和左右外边距,允许设置auto,其它属性要么 0,要么具体值

纵向格式化

与横向格式化一样,也涉及七个属性

序号 属性 默认值 描述
1 margin-top auto 上外边距, 正负均可
2 border-top 0 上边框
3 padding-top 0 上内边距
4 height auto 内容区高度, 必须正值
5 padding-bottom 0 下内边距
6 border-bottom 0 下边框
7 margin-bottom auto 下外边距, 正负均可

纵向外边距二大特征

上下外边距的auto会被解析为0

  • 横向格式化时, 左右外边距值为auto时, 由浏览器根据父元素空间自动计算
  • 纵向格式化时, 上下外边距值为auto时, 浏览器会将它强制设置为0
  • 这也是块元素无法直接设置”垂直居中”的原因(水平居中可以轻易实现)

纵向外边距会出现折叠现象

  • 当多个元素框垂直方向排列时, 会出现纵向外边距折叠现象
  • 此时, 二个元素框的上下外边距为 PK, 最终大者胜出

div 的 float(漂浮)和 position(定位)

漂浮(float)

  • float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素
序号 属性 描述
1 left 往左漂浮
2 right 往右漂浮
3 clear 清除漂浮

position

  • 这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不同的是每种定位方式的基准选择不一样。
序号 属性 描述
1 static 静态定位,默认值
2 relative 相对定位,相对于元素原来的位置
3 absolute 绝对定位,选择包含它的父级选择基准
3 fixed 固定定位,选择视口为选择基准

案例

  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>Document</title>
  7. <style>
  8. body {
  9. height: 2000px;
  10. background-image: url(bg.jpg);
  11. background-repeat: no-repeat;
  12. }
  13. /* 设置一个框,margin设置margin:auto使它在页面居中 */
  14. .box {
  15. width: 800px;
  16. height: 500px;
  17. margin: auto;
  18. border: 1px solid;
  19. }
  20. /* z这是一个漂浮在右边的框,padding的背景色等于content的背景色,剥box1的总高度为131px*/
  21. .box1 {
  22. width: 100px;
  23. height: 100px;
  24. background-color: lightskyblue;
  25. border: 1px solid;
  26. margin-top: 20px;
  27. padding-top: 10px;
  28. float: right;
  29. /* 相对定位,配合top,left,right,bottom使用 */
  30. position: absolute;
  31. top: 200px;
  32. /* 因为box的margin被浏览器强制为boody的宽度,所有定位700px没有靠着右边 */
  33. left: 700px;
  34. }
  35. .box2 {
  36. width: 100px;
  37. height: 100px;
  38. border: 1px solid;
  39. /* 单独设置右边框的样式 */
  40. border-right: 5px solid yellow;
  41. background-color: lightslategrey;
  42. }
  43. .box3 {
  44. width: 100px;
  45. height: 100px;
  46. background-color: lime;
  47. /* 固定定位,配合top,left,right,bottom使用 */
  48. position: fixed;
  49. right: 0;
  50. bottom: 0;
  51. }
  52. </style>
  53. </head>
  54. <body>
  55. <div class="box">
  56. <div class="box1"></div>
  57. <div class="box2"></div>
  58. </div>
  59. <div class="box3"></div>
  60. </body>
  61. </html>

总结

  • 1.框模型的几大属性
    • margin(外边距)
    • border(边框)
    • padding (内边距)
    • content (内容区)
  • margin margin padding 属性的每条边都可以单独设置

  • 2 注意宽度的计算方式和计算公式

  • 3 display 改变的只是它的显示方式,并不能元素的本质
  • 4 块的浮动改变元素的排列方式
  • 5 用 position 定位时,注意位基准的选择
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议