css布局单位认识

217 阅读4分钟

一、单位名称

px:像素。 em:根据父元素的font-size来计算,自身有font-size的按自身来计算。 rem:根据根元素font-size计算。 vw:浏览器视窗宽度的x% vh:浏览器视窗高度的x%

二、单位定义

1)px    像素

能够定址和分配颜色值的最小单位

像素(Pixel):Picture Element(图形元素)的简称,屏幕颜色与强度的一个单位。像素其实是能够定址和分配颜色值的最小单位。

2)em 相对长度单位

em单位名称为相对长度单位。相对于当前对象内文本的字体尺寸。

个人理解:

如果有对象,标签    

样例文字

注意点: p未设置的样式会继承父级div的样式

div设置了字体大小为16px ,那么‘样例文字’ 的大小是相对div设置的16px来定义的,也就是的 16px = 1em,如果div内部元素要设置em单位样式的话,就是按照16px:1em来处理的,‘样例文字’ 大小默认就是1em (16px),如果给p文字设置了 2em 字体大小,实际上就是32px.

所以网页body设置文字大小为 16px , 内部全部使用em单位,都不使用px单位时 都按照 1em : 16px 计算;更改body 文字大小 会影响全局的样式。否则设置em单位就要看当前继承了哪个父级的px, 就以谁为准。

实际操作证明了是这么理解的,不存在只去找根元素的大小来计算,而是以继承了哪个父级元素的大小来计算的。那么,相对于当前对象内文本的字体尺寸计算em 就非常容易理解了。

3)rem 根据根元素font-size计算

个人理解:

特意去找了一下这个根指的是啥?

如果有对象,标签    

样例文字

;p设置了font-size:1rem,使用的是谷歌浏览器,默认字体是16px;

首先:以为body是根,遂更改了 font-size为 20px,字体没有变化。证明body不是根元素。

第二次:直接在最外层 设置了 ,字体没有变化; 当我设置为20px时,根元素找到了(这里有点菜了,基础知识来的),字体变化了,足以证明我的当前网页上默认字体确实是16px;。

根元素目前看来是:

实际证明:无论将父级设置了多大字体,只要不是改变根元素字体大小;字体虽设置了rem单位,但是不会改变大小,反之亦然。

还有种说法是  ,换算下来刚好 1rem对应10px 。 怎么计算的呢 10px * (1/16px) = 62.5 , 也就是说按照默认16px计算的。

4)vw:浏览器视窗宽度的x%

vw是一个长度单位,一个视口单位,是指相对于视口的宽度;视口会被均分为100单位的vw,则1vw等于视口宽度的1%

值得注意的是: 这里的vw宽度是和视口宽度有关系

实践证明:父级元素设置了百分比,例如 width:50%,子元素设置了vw 例如 width:60% ,分别加上boder 使用颜色区分开会发现,子元素的宽度超出了父级元素的宽度。

5)vh:浏览器视窗高度的x%

与vw同理

发现:

在布局时宽度不设置,默认会平铺整个屏幕,在浏览器内打开F12调试时(调试窗在左边),左右拖动与文档分割线时宽度会自适应;而设置了100vw时,宽度不会自适应,是以浏览器窗口宽度为准,左右拖动与文档分割线时没有变化;拖动浏览器窗口宽度会跟随变化。

高度的计算方式有点不一样,没有设置时是auto;一般设置铺满屏幕时,将html body 设置 100% ,我看有的也会设置成100vh; 

有趣的是,html body 都没有设置高度 ,内部子元素A设置了500px; 在A内部设置了一个子元素B,将B高度设置为100vh ,会直接超过A的高度,且直接忽视body的margin和padding ,超出body的高度,因为vh是视口高度。