CSS长度单位px % vh vw vmin vmax rem em ex ch对比

CSS长度单位px % vh vw vmin vmax rem em ex ch对比

CSS长度单位px % vh vw vmin vmax rem em ex ch对比

随着web的发展,网页需求的增加,网页设计师对网页设计的要求越来越高,迎来了html5与css3的出现,那么css3中有哪些长度计量单位呢,常见的有px % vh vw vmin vmax rem em ex ch,那么他们有什么不同呢,今天我们来分析一下:

一、px和%及pt

像素与百分比是我们最熟悉的一种css计量单位,

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

pt全称为point,但中文不叫“点”,它大小为1/72英寸。所以它是一个自然界标准的长度单位,也称为“绝对长度”。

百分比%是相对于父元素的计量单位,三者的示例代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8" />

    <style>
        h1 {
            margin: 10px 0;
            font-size: 16px;
        }
        ul {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        li {
            margin-top: 8px;
            background: #ccc;
        }
        .in {
            width: 1in;
        }
        .pt {
            width: 72pt;
        }
        .pc {
            width: 6pc;
        }
        .px {
            width: 96px;
        }
        .cm {
            width: 2.54cm;
        }
        .mm {
            width: 25.4mm;
        }
    </style>
</head>
<body>
    <h1>单位转换对比:</h1>
    <ul>
        <li class="in">1in</li>
        <li class="pt">72pt</li>
        <li class="pc">6pc</li>
        <li class="px">96px</li>
        <li class="cm">2.54cm</li>
        <li class="mm">25.4mm</li>
    </ul>
    <p>
        1in = 2.54cm = 25.4 mm = 72pt = 6pc = 96px
    </p>
</body>
</html>

二、em和rem

em

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

如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8" />

    <style>
        body {
            font-size: 14px;
        }
        h1 {
            font-size: 16px;
        }
        .size1 p {
            font-size: 1em;
        }
        .size2 p {
            font-size: 2em;
        }
        .size3 p {
            font-size: 3em;
        }
    </style>
</head>
<body>
    <h1>假定当前默认字体尺寸是14px,n em即为14px字体尺寸的n倍:</h1>
    <ul>
        <li class="size1">
            <strong>1em</strong>:
            <p>
                1em大小的文字
            </p>
        </li>
        <li class="size2">
            <strong>2em</strong>:
            <p>
                2em大小的文字
            </p>
        </li>
        <li class="size3">
            <strong>3em</strong>:
            <p>
                3em大小的文字
            </p>
        </li>
    </ul>
</body>
</html>


rem

em单位被定义为当前字体大小。例如,如果你在body元素上设置一个字体大小,那么在body元素内的任何子元素的em值都等于这个字体大小。
<body>
    <div class="test">
        Test
    </div>
</body>
<style>
    body {
        font-size: 14px;
    }
    div {
        font-size: 1.2em;
        // 计算后的实际大小为  14px * 1.2= 16.8px
    }
</style>

在这里,我们说这个div将有一个1.2em的font-size。它是所继承的字体大小的1.2倍,在这个例子中为14px。结果为16.8px.

但是,当你在每个元素内都级联em定义的字体大小将会发生什么?在下面的代码片段中我们应用和上面一模一样的CSS.每个div从它们的父节点继承字体大小,带给我们逐渐增加的字体大小。

<style>
    body {
        font-size: 14px;
    }
    div {
        font-size: 1.2em;
        
    }
</style>

<body>
    <div>
        Test <!-- 14 * 1.2 = 16.8px -->
        <div>
            Test <!-- 16.8 * 1.2 = 20.16px -->
            <div>
                Test <!-- 20.16 * 1.2 = 24.192px -->
            </div>
        </div>
    </div>
</body>

CSS长度单位px % vh vw vmin vmax rem em ex ch对比

虽然在某些情况下可能需要这个,但是通常你可能想基于一个唯一的度量标准来按比例缩放。在这种情况下,你应该用rem。rem中的"r"代表"root";这等同于font-size基于根元素进行设置;在大多数情况下根元素为html元素。

<style>
    html {
        font-size: 14px;
    }
    div {
        font-size: 1.2rem;
    }
</style>

<body>
    <div>
        Test <!-- 14 * 1.2 = 16.8px -->
        <div>
            Test <!-- 16.8 * 1.2 = 20.16px -->
            <div>
                Test <!-- 20.16 * 1.2 = 24.192px -->
            </div>
        </div>
    </div>
</body>

CSS长度单位px % vh vw vmin vmax rem em ex ch对比
在上一个示例中三个嵌套的div的字体大小计算结果都为16.8px。

对网格布局的好处

rem不是只对定义字体大小有用。比如,你可以使用rem把整个网格系统或者UI样式库基于HTML根元素的字体大小上,然后在特定的地方使用em比例缩放。这将带给你更加可预测的字体大小和比例缩放。

.container {
      width: 70rem; // 70 * 14px = 980px
}
从概念上讲,像这样一个策略背后的想法是为了允许你的界面随着你的内容按比例缩放。然而,这可能不一定对每个案例都有意义。

三、vh和vw

响应式网页设计技术很大程度上依赖于比例规则。然而,CSS比例不总是每个问题的最佳解决方案。CSS宽度是相对于最近的包含父元素。如果你想使用显示窗口的宽度或高度而不是父元素的宽度将会怎么样?这正是vh和vw单位所提供的。

vh等于viewport高度的1/100.例如,如果浏览器的高是900px,1vh求得的值为9px。同理,如果显示窗口宽度为750px,1vw求得的值为7.5px。

这些规则表面上看起来有无尽的用途。例如,做一个占满高度的或者接近占满高度的幻灯片,可以用一个非常简单的方法实现,只要用一行CSS:

.slide {
     height: 100vh;
}


设想你想要一个占满屏幕宽度的标题。为做到这一点,你将会用vw来设置一个字体大小。这个大小将会随着浏览器的宽度按比例缩放。

四、vmin 和 vmax


vh和vm总是与视口的高度和宽度有关,与之不同的,vmin和vmax是与这次宽度和高度的最大值或最小值有关,取决于哪个更大和更小。例如,如果浏览器设置为1100px宽、700px高,1vmin会是7px,1vmax为11px。然而,如果宽度设置为800px,高度设置为1080px,1vmin将会等于8px而1vmax将会是10.8px。

所以你什么时候可能用到这些值?

设想你需要一个总是在屏幕上可见的元素。使用高度和宽度设置为低于100的vmin值将可以实现这个效果。例如,一个正方形的元素总是至少接触屏幕的两条边可能是这样定义的:

.box {
   height: 100vmin;
   width: 100vmin;
}


vmin

如果你需要一个总是覆盖可视窗口的正方形(一直接触屏幕的四条边),使用相同的规则只是把单位换成vmax。

.box {
    height: 100vmax;
    width: 100vmax;
}
vmax

这些规则的组合提供了一个非常灵活的方式,用新的、令人兴奋的方式利用你的可视窗口的大小。

五、ex 和 ch


ex和ch单位,与em和rem相似,依赖于当前字体和字体大小。然而,与em和rem不同的是,这两个单位只也依赖于font-family,因为它们被定为基于特殊字体的法案。

ch 

被定义为0字符的宽度

ch单位,基本的概念是,给定一个等宽字体的字体,一个N个字符单位宽的盒子,比如width:40ch;,可以一直容纳一个有40个0字符的长度。示例代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8" />

    <style>
        h1 {
            margin: 10px 0;
            font-size: 16px;
        }
        div {
            overflow: hidden;
            width: 10ch;
            background: #ccc;
        }
    </style>
</head>
<body>
    <h1>定义一个宽度正好能装下10个0的容器:</h1>
    <div>
        0000000000
    </div>
</body>
</html>

ex单位被定义为"当前字体的x-height或者一个em的一半"。给定的字体的x-height是指那个字体的小写x的高度。通常,这是这个字体的中间的标志。

ex

x-height:小写字母x的高度

对于这种单位有很多的用途,大多数是用于排版的微调。例如,sup元素,代表上标,可以用相对定位和一个1ex的底部值在行内被推高。类似地,你可以拉低一个下标元素。浏览器默认支持这些利用上标和下标特性的vertical-align规则,但是如果你想要更精细的控制,示例代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        sup {
            position: relative;
            bottom: 1ex;
        }
        sub {
            position: relative;
            bottom: -1ex;
        }
    </style>
</head>
<body>
    上标<sup>€</sup> 下标<sub>‰</sub>

</body>
</html>


{{collectdata}}

网友评论0