** 关于一个div在页面下的布局问题,已经困扰我很久很久了。**
当然此处换成span,section之类同样适用。
最近有了些新理解,在此做些记录。
** 在开始阅读本文前,强烈建议读读garychang的js获得浏览器宽高、屏幕宽高。**
讲得十分清楚,以下做些摘录
** 关于高度 **
1 | //浏览器窗口高度 |
** 关于宽度 **
1 |
|
哪怕只有一个div,布局也是涉及很多知识。对CSS没有一定的研究是很难讲清楚的。
限于自身水平,从
- position值为relative(主要讲这个)
- position值为absolute
- 页面有滚动条
这三方面进行讲解
** 相关环境 **
- 屏幕分辨率 1920 * 960
- 测试环境 chrome 浏览器
- 如果未特殊说明,浏览器是窗口最大化的
** position值为relative **
1 | html |
** 当top,left的值为100px时 **,会相对正常的位置在水平和垂直方向移动100px。如下
** 当top,left的值为10%时 **
chrome浏览器下默认margin为8px等,这些细枝末节抛开不讲。
这里有一个有意思的问题
** 第二个盒子模型中,top方向的值为20.391px,可实际页面上盒子在top方面并没有移动(那一个小空白是body的margin值) **
** left = (1920 - 8 * 2) x 0.1 ~ 190.391
**
** top = (200 + 2 * 2 ) x 0.1 ~ 20.391
**
用明白为什么20.391px的计算值为什么在页面没有效果,需要对CSS有一定了解。
就不慢慢科普了,直接上我的结论
** div的盒子在body盒子内部,此处的div的百分比依据body的值来计算的。**
** div的盒子在body盒子内部,此处的div的百分比依据body的值来计算的。**
** div的盒子在body盒子内部,此处的div的百分比依据body的值来计算的。**
**移动的参考点也是body形成的盒子的左上方第一个点来进行移动的 **
** body的样式这里使用的是user agent stylesheet(这里可以参考我的另一篇博文CSS中的层叠优先级)。也就是display取值为block。 **
** 所以这里body形成的是block级别的盒子,宽度为document.body.clientWidth,而高度为div撑起来的高度也就是div盒子的高度 **
** 这儿就很明白了。**
**body本身是没有高度,有宽度的 **
**body本身是没有高度,有宽度的 **
**body本身是没有高度,有宽度的 **
** 0 x 0.1 = 0 **
如果想进一步体会,可以把div去掉或者top值改为px单位,仔细观察下。
** position值为absolute **
这种情况,盒子脱离文档流。
百分比情况下,是相对于html定位的。因为body是static。
html宽度值为document.documentElement.clientWidth
** 页面有滚动条 **
这里又可以细分为水平方向,垂直方向的滚动条了
我粗暴的总结下
** 此时html的宽度就是document.documentElement.clientHeight。所有值的计算要先减去滚动条宽度再进行计算 **
** 写在最后 **
一直困扰我的就是position值为relative的情况。
网上也没查到相关资料。
好在通过这段时间的学习,搞定了。