博客列表 >盒模型的大小、定位及其计算方法

盒模型的大小、定位及其计算方法

天涯
天涯原创
2020年06月18日 15:27:141830浏览

盒模型的大小、定位及其计算方法


盒模型的大小与定位

盒模型是一个具有上(top)、右(right)、下(bottom)、右(left)、高(high)、宽(weitgh)及内边距(padding)、边框(border)、外边距(margin)属性的块元素,可作为容器容纳其它元素。如:DIV

代码示例:

  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. /* 给盒子设置宽、高 、背景色*/
  9. div{
  10. width: 200px;
  11. height: 200px;
  12. background-color: green;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <!-- 一个空盒子 -->
  18. <div></div>
  19. </body>
  20. </html>

运行效果:盒模型


用于盒模型定位的样式属性

属性名 释义 属性值
top 上定位 距离值,如:20px。仅当position不为static时生效
right 右定位 距离值,如:20px。仅当position不为static时生效
bottom 下定位 距离值,如:20px。仅当position不为static时生效
left 左定位 距离值,如:20px。仅当position不为static时生效
padding 内边距 距离值,如:10px 20px 10px 20px。以上右下左方向填值
borber 边框 线宽、线样式、颜色,如:2px solid red
margin 外边距 距离值,如:10px 20px 10px 20px。注意:margin相对的是带定位属性的父元素,不一定是上级父元素,注意父元素的position设定。如多个同级元素或相对一个定位父元素时,margin会出现层叠,以数值大的为准。
background-clip 盒尺寸 1、默认值border-box,以box为参照;2、content-box以内容区为参照

如想单独设置上内边柜,可以使用:padding-top:20px。还有padding-rightpadding-bottompadding-leftbordermargin同理。

居中定位方法演示

先写一个body:

  1. <!-- 父盒子 -->
  2. <div class="container">
  3. <!-- 子盒子 -->
  4. <div class="item"></div>
  5. </div>

再设置样式:

  1. <style>
  2. /* 改变父元素为定位元素 */
  3. .container {
  4. width: 300px;
  5. height: 300px;
  6. background-color: lightgreen;
  7. /* 设置相对定位,父元素必须 */
  8. position: relative;
  9. }
  10. /* 设置子元素居中 */
  11. .container .item {
  12. width: 100px;
  13. height: 100px;
  14. background-color: violet;
  15. /* 通过绝对定位来实现垂直居中 */
  16. position: absolute;
  17. /* 让当前元素绝对定位的上下文充满整个父级容器 */
  18. /* 左上角开始 */
  19. top: 0;
  20. left: 0;
  21. /* 右下角结束 */
  22. right: 0;
  23. bottom: 0;
  24. /* 水平垂直居中 */
  25. margin: auto;
  26. }
  27. </style>

显示效果:
盒子居中

用JS获取盒模型大小、定位的计算

获取盒子大小的方法

  1. clientWidth 获取宽度(不含滚动条的宽度)
  2. clientHeigth 获取高度(不含滚动条)
  3. clientLeft 获取左坐标
  4. clientTop 获取顶坐标
  5. offsetWidth 获取宽度(含滚动条的宽度)
  6. offsetHeigth 获取高度(含滚动条)
  7. scrollWidth 获取滚动条宽度
  8. scrollHeigth获取滚动条高度
  9. scrollTop获取可视顶部到html顶部的距离,即当前可以上向滚动的距离

    盒模型定位

  10. style.left 用来改变当前元素的左坐标
  11. style.top 用来改变当前元素的顶坐标

演示代码:

  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. .box {
  9. width: 200px;
  10. height: 180px;
  11. padding: 10px;
  12. border: 2px solid #000;
  13. margin: 10px;
  14. background-color: lightgreen;
  15. background-clip: content-box;
  16. }
  17. .pos {
  18. position: relative;
  19. top: 30px;
  20. left: 50px;
  21. }
  22. body {
  23. margin: 0;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div class="box pos"></div>
  29. </body>
  30. <script>
  31. //获取box元素
  32. const box = document.querySelector(".box");
  33. // 1. 内容区大小与位置
  34. // 大小 = width / height + padding
  35. console.log('clientWidth:'+box.clientWidth);
  36. console.log('clientHeight:'+box.clientHeight);
  37. // 更多的时候用来获取可视区大小: 视口
  38. console.log('documentElement.clientWidth:'+document.documentElement.clientWidth);
  39. console.log('documentElement.clientHeight:'+document.documentElement.clientHeight);
  40. // 2. 当前元素的定位偏移量,与定位有关
  41. // 定位父级
  42. console.log('offsetParent:'+box.offsetParent);
  43. // 这个元素现在是一个真正的盒子,包括了内容,padding, border
  44. // 真实宽度: 加上border
  45. console.log('offsetWidth:'+box.offsetWidth);
  46. console.log('offsetHeight:'+box.offsetHeight);
  47. console.log('offsetLeft:'+box.offsetLeft);
  48. console.log('offsetTop:'+box.offsetTop);
  49. // 3. 当前文件的滚动大小
  50. // 视口大小: 可视区大小
  51. // 文档大小: 当前html的大小
  52. // 通过视口大小 < 文档大小, 所以,要通过滚动条才能看到全部html文档的内容
  53. // 获取html元素
  54. const html = document.documentElement;
  55. html.style.height = "600px";
  56. // 当前文档的高度
  57. console.log('scrollHeight:'+html.scrollHeight);
  58. // 当前可视区的高度
  59. console.log('clientHeight:'+html.clientHeight);
  60. // 获取滚动条
  61. // 234 + 366 = 600
  62. console.log('scrollTop:'+html.scrollTop);
  63. // 滚动时注意观察控制台显示的滚动数值
  64. document.addEventListener("scroll", function (ev) {
  65. console.log('scrollTop:'+ev.target.documentElement.scrollTop);
  66. });
  67. </script>
  68. </html>

控制台数据如下:
盒子定位

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