CSS常用单位
CSS的长度单位主要有%、px、in、cm、ch、mm、ex、pt、pc、em、rem、vw、vh、vmin、vmax,按照单位的计算方式大致可以分为绝对长度单位、相对长度单位、百分比单位。
绝对长度单位
px 像素
通常而言,一个CSS像素代表屏幕设备的一个像素点,但是对于高分辨率屏幕而言一个CSS像素往往占多个设备像素,也就是说有多个屏幕像素点来表示1px,1px = 1in / 96。
1 2 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。
1 2 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。
1 2 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。
1 2 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。
1 2 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。
1 2 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值。
1 2 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>
|
1 2 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根元素的字体大小上,这将带来更加可预测的字体大小和比例缩放,实现响应式的布局。
1 2 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>
|
1 2 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单位在实际中常用于微调。
1 2 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值。
1 2 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等都是相对于自身的。
1 2 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中的较大值。
1 2 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>
|
代码示例
1 2 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>
|
参考
1 2 3 4 5 6 7
| https://www.jianshu.com/p/ebbf64b83f49 https://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
|