CSS常用单位
CSS的长度单位主要有%、px、in、cm、ch、mm、ex、pt、pc、em、rem、vw、vh、vmin、vmax,按照单位的计算方式大致可以分为绝对长度单位、相对长度单位、百分比单位。
绝对长度单位
px 像素
通常而言,一个CSS像素代表屏幕设备的一个像素点,但是对于高分辨率屏幕而言一个CSS像素往往占多个设备像素,也就是说有多个屏幕像素点来表示1px,1px = 1in / 96。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t1{
 width: 1px;
 }
 </style>
 
 <section>
 <div id="t1"></div>
 </section>
 
 | 
in 英寸
1in = 2.54cm = 96px。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t2{
 width: 1in;
 }
 </style>
 
 <section>
 <div id="t2"></div>
 </section>
 
 | 
cm 厘米
1cm = 10mm = 96px/2.54 ≈ 37.8px。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t3{
 width: 1cm;
 }
 </style>
 
 <section>
 <div id="t3"></div>
 </section>
 
 | 
mm 毫米
1mm = 0.1cm = 3.78px。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t4{
 width: 1mm;
 }
 </style>
 
 <section>
 <div id="t4"></div>
 </section>
 
 | 
pt 磅
1pt = 1/72in ≈ 0.0139in = 1/722.54cm = 1/7296px ≈ 1.33px。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t5{
 width: 1pt;
 }
 </style>
 
 <section>
 <div id="t5"></div>
 </section>
 
 | 
pc 派卡
1pc = 1/6in = 12pt  = 1/6*96px = 16px。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t6{
 width: 1pc;
 }
 </style>
 
 <section>
 <div id="t6"></div>
 </section>
 
 | 
相对长度单位
em
em表示元素的font-size属性的计算值,如果用于font-size属性本身,相对于父元素的font-size,若用于其他属性,相对于本身元素的font-size,需要注意的是,使用em可能会出现1.2 * 1.2 = 1.44的现象,若父元素font-size属性设置为16px,下一级元素设置为1.2em,经计算实际像素为16px * 1.2 = 19.2px,再下一级元素若继续设置为1.2em则经计算为16px * 1.2 * 1.2 = 23.04px,这是因为父级的基准font-size属性被计算重设为另一个值,在子元素中使用em时需要根据父元素的font-size重新计算子元素的em值。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t7 > div{
 background-color: blue;
 font-size: 2em;
 width: 5em;
 }
 </style>
 
 <section class="except">
 <div id="t7">
 <div>文字</div>
 </div>
 <button onclick="emChange()">改变字体大小</button>
 </section>
 
 <script type="text/javascript">
 function emChange(){
 document.getElementById("t7").style["font-size"] = "20px";
 }
 </script>
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 
 | <section class="except" style="font-size: 10px;"><div style="font-size: 2em">
 <div>Test</div>
 <div style="font-size: 2em">
 <div>Test</div>
 </div>
 </div>
 </section>
 
 | 
rem
rem单位都是相对于根元素html的font-size来决定大小的,根元素的font-size相当于提供了一个基准,当页面的size发生变化时,只需要改变font-size的值,那么以rem为固定单位的元素的大小也会发生相应的变化。由于所有元素都是以根元素的font-size为基准进行计算的,也就不存在em的1.2 * 1.2 = 1.44现象。rem不是只对定义字体大小有用,可以使用rem把整个网格系统或者UI样式库基于HTML根元素的字体大小上,这将带来更加可预测的字体大小和比例缩放,实现响应式的布局。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | <style type="text/css">html{
 font-size: 15px;
 }
 
 div{
 height: 30px;
 background-color: blue;
 }
 
 #t8 > div{
 background-color: blue;
 font-size: 2rem;
 width: 6rem;
 }
 </style>
 
 <section class="except">
 <div id="t8">
 <div>文字</div>
 </div>
 <button onclick="remChange()">改变字体大小</button>
 </section>
 
 <script type="text/javascript">
 function remChange(){
 document.getElementsByTagName("html")[0].style["font-size"] = "20px";
 }
 </script>
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 
 | <section class="except"><div style="font-size: 2rem">
 <div>Test</div>
 <div style="font-size: 2rem">
 <div>Test</div>
 </div>
 </div>
 </section>
 
 | 
ex
ex是指所用字体中小写x的高度,但不同字体x的高度可能不同,对于很多字体来说1ex ≈ 0.5em,所以很多浏览器在实际应用中取em值一半作为ex值,ex单位在实际中常用于微调。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | <style type="text/css">#t9{
 font-size: 1ex;
 }
 </style>
 
 <section class="except">
 <div id="t9">文字</div>
 <span style="font-size: 1em">文字</span>
 </section>
 
 | 
ch
ch与ex类似,这一单位代表元素所用字体中0这一字形的宽度,更准确地说是0这一字形的预测尺寸,如果无法确定0字形的大小,则必须假定其宽为0.5em高为1em,也就是取em值的一半作为ch值。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | <style type="text/css">#t10{
 font-size: 1ch;
 }
 </style>
 
 <section class="except">
 <div id="t10">文字</div>
 <span style="font-size: 1em">文字</span>
 </section>
 
 | 
百分比单位
百分号
当度量单位设置为百分比时,即可使浏览器组件宽高随着浏览器的大小相应变化。  
- 子元素的height或width中使用百分比,是相对于子元素的直接父元素,width相对于父元素的width,height相对于父元素的height。
- 子元素的top和bottom如果设置百分比,则相对于直接非static定位的父元素的高度,同样子元素的left和right如果设置百分比,则相对于直接非static定位父元素的宽度。
- 子元素的padding如果设置百分比,不论是垂直方向或者是水平方向,都相对于直接父亲元素的width,而与父元素的height无关。
- 子元素的margin如果设置成百分比,不论是垂直方向还是水平方向,都相对于直接父元素的width。
- 设置border-radius为百分比,则是相对于自身的宽度,还有translate、background-size等都是相对于自身的。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t11{
 width: 50%;
 }
 </style>
 
 <section>
 <div id="t11"></div>
 </section>
 
 | 
vh vw vmin vmax
- vh: 相对于视窗的高度,- 1vh等于视窗高度的- 1%。
- vw: 相对于视窗的宽度,- 1vw等于视窗宽度的- 1%。
- vmin:- vw和- vh中的较小值。
- vmax:- vw和- vh中的较大值。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 
 | <style type="text/css">div{
 height: 30px;
 background-color: blue;
 }
 
 #t12{
 background-color: #fff;
 }
 
 #t12 > div:nth-child(1){
 width: 50vh;
 }
 
 #t12 > div:nth-child(2){
 width: 50vw;
 }
 
 #t12 > div:nth-child(3){
 width: 50vmax;
 }
 
 #t12 > div:nth-child(4){
 width: 50vmin;
 }
 </style>
 
 <section class="">
 <div id="t12">
 <div></div>
 <div></div>
 <div></div>
 <div></div>
 </div>
 </section>
 
 | 
代码示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 
 | <!DOCTYPE html><html>
 <head>
 <title>CSS单位</title>
 <style type="text/css">
 html{
 font-size: 15px;
 }
 
 section {
 margin: 10px 0;
 }
 
 div{
 height: 30px;
 background-color: blue;
 }
 
 .except div{
 height: auto;
 background-color: #fff;
 }
 
 #t1{
 width: 1px;
 }
 
 #t2{
 width: 1in;
 }
 
 #t3{
 width: 1cm;
 }
 
 #t4{
 width: 1mm;
 }
 
 #t5{
 width: 1pt;
 }
 
 #t6{
 width: 1pc;
 }
 
 #t7{
 background-color: #fff;
 font-size: 10px;
 }
 
 #t7 > div{
 background-color: blue;
 font-size: 2em;
 width: 5em;
 }
 
 #t8 > div{
 background-color: blue;
 font-size: 2rem;
 width: 6rem;
 }
 
 #t9{
 font-size: 1ex;
 }
 
 #t10{
 font-size: 1ch;
 }
 
 #t11{
 width: 50%;
 }
 
 #t12{
 background-color: #fff;
 }
 
 #t12 > div:nth-child(1){
 width: 50vh;
 }
 
 #t12 > div:nth-child(2){
 width: 50vw;
 }
 
 #t12 > div:nth-child(3){
 width: 50vmax;
 }
 
 #t12 > div:nth-child(4){
 width: 50vmin;
 }
 </style>
 </head>
 <body>
 <section>
 <div id="t1"></div>
 </section>
 
 <section>
 <div id="t2"></div>
 </section>
 
 <section>
 <div id="t3"></div>
 </section>
 
 <section>
 <div id="t4"></div>
 </section>
 
 <section>
 <div id="t5"></div>
 </section>
 
 <section>
 <div id="t6"></div>
 </section>
 
 <section class="except">
 <div id="t7">
 <div>文字</div>
 </div>
 <button onclick="emChange()">改变字体大小</button>
 </section>
 
 <section class="except" style="font-size: 10px;">
 <div style="font-size: 2em">
 <div>Test</div>
 <div style="font-size: 2em">
 <div>Test</div>
 </div>
 </div>
 </section>
 
 <section class="except">
 <div id="t8">
 <div>文字</div>
 </div>
 <button onclick="remChange()">改变字体大小</button>
 </section>
 
 <section class="except">
 <div style="font-size: 2rem">
 <div>Test</div>
 <div style="font-size: 2rem">
 <div>Test</div>
 </div>
 </div>
 </section>
 
 <section class="except">
 <div id="t9">文字</div>
 <span style="font-size: 1em">文字</span>
 </section>
 
 <section class="except">
 <div id="t10">文字</div>
 <span style="font-size: 1em">文字</span>
 </section>
 
 <section>
 <div id="t11"></div>
 </section>
 
 <section class="">
 <div id="t12">
 <div></div>
 <div></div>
 <div></div>
 <div></div>
 </div>
 </section>
 
 </body>
 <script type="text/javascript">
 function emChange(){
 document.getElementById("t7").style["font-size"] = "20px";
 }
 
 function remChange(){
 document.getElementsByTagName("html")[0].style["font-size"] = "20px";
 }
 </script>
 </html>
 
 | 
参考
| 12
 3
 4
 5
 6
 7
 
 | https://www.jianshu.com/p/ebbf64b83f49https://www.runoob.com/cssref/css-units.html
 https://www.cnblogs.com/niuyaomin/p/12319211.html
 https://developer.mozilla.org/zh-CN/docs/Web/CSS/length
 https://www.cnblogs.com/liujunhang/articles/10686823.html
 https://blog.csdn.net/VickyTsai/article/details/102960594
 https://www.w3cplus.com/css/7-css-units-you-might-not-know-about.html
 
 |