CSS 中的百分比

445 阅读3分钟

百分比,是一个相对值,不同属性的下的百分比,相对的计算基数则不同

font-size

font-size 中的百分比是相对于显式设置font-size的父元素(父元素未设置,继续向上)的,如果都没有找到,则使用页面默认font-size: 16px,该寻找过程有些类似冒泡的过程

举例说明:

<html>
  <body>
    <div class="container">
      <p class="p">一段内容</p>
    </div>
  </body>
</html>
  .p { font-size: 150%; }
  • 父元素未设置明显的font-size,则 p 元素 默认使用浏览器的字体大小作为基准,即16px,计算结果为 16px * 150% = 24px

  • 如果父元素设置了font-size

    .container { font-size: 24px; }
    

    则 p 元素基于 container,结果为 24px * 150% = 36px;

  • 如果父元素也设置为 百分比,则进行链式计算

      .container { font-size: 150%; }
    

    则 container 的计算结果为 16px _ 150% = 24px,p 则基于 container 的结果 24px _ 150% = 36px

line-height

line-height具有继承性,在没有显式的写明line-height时,则继承自父级元素,当显式的写明line-height为百分比时,则是相对于自身 font-size 的

举例说明:

<html>
  <body>
    <div class="container">
      <p class="p">一段内容</p>
    </div>
  </body>
</html>
.p {
  font-size: 24px;
}
  • 当父元素具有line-height,而元素自身没有显式指明 line-height 时,则使用继承 line-height

    .container {
      font-size: 16px;
      line-height: 150%;
    }
    

    该情况下,p 元素的line-height继承自父元素的 16px * 150% = 24px

  • 当元素自身具有line-height时,则使用自身的 font-size 进行计算

    .container {
      font-size: 16px;
      line-height: 150%;
    }
    
    .p{
      font-size: 24px;
      line-height: 150%;
    }
    

    该情况下,p 元素的 line-height 为 24px * 150% = 36px

width、height

width 和 height 的百分比是相对于其父元素的,但是当父元素没有显式的指明 width 和 height 时,当前节点的 width 和 height 则默认为 auto

在正常文档流下,父元素有显式的 width 和 height 时,百分比相对于 父元素的内容 width 和 height ,即 content;在绝对定位下,width 和 height 则相对于 父元素的内部总 width 和 height ,即 padding + content

margin、padding

margin 和 padding 的百分比都是相对于元素的 width 进行计算的

同样,在正常文档流下,是相对于 父元素的 content 的width 计算;在绝对定位下,则相对于 padding + content

transform

transform 中的百分比 是相对于元素本身的 width 和 height 进行计算的

所以解释了为什么在进行垂直居中时,推荐使用 transform ,而不能使用 margin,因为 transform 更适用于不定高的元素的垂直居中

border-radius

border-radius 的百分比 是相对元素的 width 和 height

举个例子:

  <div class="container"></div>
  .container {
    width: 300px;
    height: 200px;
    border-radius: 50%;
  }

top、right、bottom、left

在正常文档流下,即没有定位的情况下,以上属性无意义

在相对定位下,top 和 left 属性相对于当前位置的左上角为基准,bottom 和 right 则相对于当前位置的右下角为基准

在绝对定位下,以上属性是以向上最近一个不为静态定位的父元素为基准

参考

www.w3cplus.com/css/a-perce…

dangoying.ink/CSS%E4%B8%A…