css中常用百分比计算

323 阅读2分钟

我们在切图仔:我的height:100%为什么没生效? 一文中讲了给height设置百分比的情况。其实其他属性本质上都是差不多的。
因此,一些重复的情况这里就不说了,请先阅读前文,再看本文。
本文直接讨论HTML5标准下的情况。

width

我们设置百分比percent,最终计算后的width是 基准 * percent。重点就是,这个基准是什么呢?

position:static(默认)|relative|sticky

与height不同的是,不管父元素有没有显示设置width,该元素的百分比基准都是父元素的实际content宽度

这是因为在不设置width的情况下,宽度会默认撑到最大(width:auto),所以元素始终会有一个实际宽度

其他情况如min-width一起作用的场景,都和height一致。

<!DOCTYPE html>
<html>
<body>
    <div style="width:200px;">
        <div>
        <div style="width:100%;background-color:#92cbe6;">
            实际能撑到200px
        </div>
    </div>
    </div>
</body>
</html>

position:absolute

与height一致,请看前文

position:fixed

与height一致,请看前文

padding/margin

对于四个方向的padding/margin,它的基准和本元素的width基准是一样的。那它自然也分上述三种情况,这里不再赘述
需要注意一点就是,垂直方向的百分比,这里的参照值也是width而不是height

<!DOCTYPE html>
<html>
<body>
    <div style="width:200px;">
        <div>
        <div style="width:100%;padding:10%;background-color:#92cbe6;">
            width=200px
            padding=20px
        </div>
    </div>
    </div>
</body>
</html>

background-position

它比较特殊,background-position的初始值就是百分比值0% 0%background-position的百分比值,取的基准值是一个减法计算值,由放置背景图的区域尺寸,减去背景图的尺寸得到,可以为负值

这个属性包括水平位置和垂直位置,它们分别参照宽度和高度。

定位left/right/top/bottom

left/right与本元素的width基准相同

top/bottom与本元素的height基准相同

font-size

基准值是直接父元素的font-size

line-height

基准值是元素本身的font-size

vertical-align

基准值是元素自身的line-height,兼容性不好

transform: translate

平移变换,在水平方向和垂直方向上也可以使用百分比,其基准值是变换的边界框的宽高。 例如,一个宽度为150px,高度为100px的元素,定义transform:translate(50%, 50%)的效果是transform:translate(75px, 50px);

注意,translate3d对应是还有第三个维度的,但是,第3个值不可以使用百分比(否则样式定义无效)