IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    CSS中的百分比

    dwqs发表于 2015-09-25 04:53:35
    love 0

    CSS支持多种单位形式,如百分比、px、pt、rem等,百分比和px是常用的单位,随着移动端和响应式的流行,rem、vh、vw也开始普遍使用,这些单位你可能未必知道,想了解?可以戳此文:CSS:7个你可能不认识的单位。

    今天在SegmentFault社区碰到了两个关于百分比计算的问题,一个是在translate中使用百分比的时候,是相对于哪个DOM元素的大小计算的;另外一个是在padding、margin等中使用百分比时,百分比又是怎么转为px的呢?

    对于第一个,移动距离是根据自身元素的大小来计算的:

    [The percentage] refer[s] to the size of the element’s box

    具体参考:css3 translate in percent (自备梯子)

    对于第二个,我认为percentage转px应该是浏览器根据css规定来完成的,但是具体怎么算呢?

    Example 1: Margins

    1. <div style="width: 20px">
    2. <div id="temp1" style="margin-top: 50%">Test top</div>
    3. <div id="temp2" style="margin-right: 25%">Test right</div>
    4. <div id="temp3" style="margin-bottom: 75%">Test bottom</div>
    5. <div id="temp4" style="margin-left: 100%">Test left</div>
    6. </div>

    得到的offset如下:

    1. temp1.marginTop = 20px * 50% = 10px;
    2. temp2.marginRight = 20px * 25% = 5px;
    3. temp3.marginBottom = 20px * 75% = 15px;
    4. temp4.marginLeft = 20px * 100% = 20px;

    然后,我又测试了padding,原以为padding的值会根据应用了该属性的相关元素来计算,但让我惊讶的是,padding也是根据应用该属性的父元素的宽来计算的,跟margin表现一致。(再插一句:当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,元素竖向的百分比设定也是相对于容器的宽度,而不是高度。)

    但有一个坑,上面都是对于未定位元素。好奇的我又很好奇,对于非静态定位元素的top, right, bottom, 和left的百分比值又怎么计算呢?

    Example 2: Positioned Elements

    1. <div style="height: 100px; width: 50px">
    2. <div id="temp1" style="position: relative; top: 50%">Test top</div>
    3. <div id="temp2" style="position: relative; right: 25%">Test right</div>
    4. <div id="temp3" style="position: relative; bottom: 75%">Test bottom</div>
    5. <div id="temp4" style="position: relative; left: 100%">Test left</div>
    6. </div>

    得到的offset如下:

    1. temp1.top = 100px * 50% = 50px;
    2. temp2.right = 100px * 25% = 25px;
    3. temp3.bottom = 100px * 75% = 75px;
    4. temp4.left = 100px * 100% = 100px;

    对于定位元素,这些值也是相对于父元素的,但与非定位元素不同的是,它们是相对于父元素的高而不是宽。

    when the parent element does not have a height, then percentage values are processed as auto instead

    虽然有点困惑,但只需要记住:对于margin和padding,百分比按照父元素的宽计算,对于定位元素,则按照父元素的高计算。

    文章的最后,推荐一个网站:http://www.css3.com,上面有很多关于CSS问题的资源。对于文章提到的属性,你可以戳下面的链接去看详细的内容:
    Margin-Top
    Margin-Right
    Margin-Bottom
    Margin-Left

    Padding-Top
    Padding-Right
    Padding-Bottom
    Padding-Left

    Top
    Right
    Bottom
    Left

    本文根据@Louis Lazaris的《CSS: Using Percent for Margin and Padding》所译,整个译文带有我自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://mattsnider.com/css-using-percent-for-margin-and-padding/

    淡忘~浅思猜你喜欢

    如何实现CSS居中?--CSS居中常用方法

    一道关于CSS选择器优先级的题

    CSS 最核心的几个概念

    【译】编写更好的CSS必备的40个工具

    浏览器的CSS Hacks
    无觅

    转载请注明:淡忘~浅思 » CSS中的百分比



沪ICP备19023445号-2号
友情链接