css3 关于position 感觉非常坑人

  1. position 定位基准问题,从父级的哪里,从子级的哪里?
    2.position 如果 加了 absolute 没加 left,right 会怎么样?
    3.position left 百分比 的 计算是 基于 父级的 contentWidth 还是 contentWidth + padding?
    4.position 和 width margin border 的一种计算, 以及 据此而完成居中的一种方式.

以上几个知识点,之前有碰到过,但一直很模糊, 这次整理一下.

  1. position 定位基准问题,从父级的哪里,从子级的哪里?
    基准是 从父级的padding和border的边界 开始算,
    从子级的margin外侧开始算.
  .wrapper{
      width: 300px;
      height: 300px;
      border: 100px solid black;
      padding: 100px;
      background-color: red;
      background-clip: content-box;
      position: relative;
      .son{
          width: 50px;
          height: 50px;
          position: absolute;
          background-color: #00f;
          left: 0;
          top: 0;
      }
  }

2.position 如果 加了 absolute 没加 left,right 会怎么样?
此时针对有定位的父子关系作答.
如果有 left,right 值, 包括0, 则子级不受父级padding 影响
如果没有设置left,right值, 则子级受到父级padding影响

  .wrapper{
      width: 300px;
      height: 300px;
      border: 100px solid black;
      padding: 100px;
      background-color: red;
      background-clip: content-box;
      position: relative;
      .son{
          width: 50px;
          height: 50px;
          position: absolute;
          background-color: #00f;
//        left:0; 可以进行对比
//        right:0;
      }
  }

3.position left 百分比 的 计算是 基于 父级的 contentWidth 还是 contentWidth + padding?

left ,right 的基准值是 contentWdith + padding ;
top,bottom的基准值是 contentHeight + padding;

但这里有个大坑.
当父子都没有定位时,
width,margin,padding 的百分比的基准值都是 父级的 contentWidth
height 的百分比基准值是 父级的contentHeight

而当父有 relative 子有 absolute 时,
计算发生改变.....!
width,margin,padding 的百分比的基准值 都与 left,的基准值相同,
均为 contentWidth + padding左+右;
height 的百分比基准值与top相同,
为 contentHeight + padding 上+下.

这尼玛,今天不是我偶然发现,我上哪知道这个坑啊.

  .wrapper{
      width: 300px;
      height: 300px;
      border: 100px solid black;
      padding: 100px 350px;
      background-color: red;
      background-clip: content-box;
      position: relative;
      .son{
          width: 50px;
          height: 50px;
          position: absolute;
          background-color: #00f;
          left: 10%;// left值为 100px
          top: 10%;// top 值为 50px
      }
  }

4.position 和 width margin border 的一种计算, 以及 据此而完成居中的一种方式.
绝对定位的其中一种居中方式

  .wrapper{
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      width: 100px;
      height: 100px;
      margin: auto;// 这个必须要设上
      
      background-color: #f00;
  }

他这里似乎是这么算的,只说x轴的
right 和 left 之间的 距离 = margin-left + margin-right + width
如果确定 right,left, 以及确定 width, 并且设置 margin = auto ,则 会自动计算出margin

如果

  .wrapper{
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      width: 100px;
      height: 100px;
      margin: auto;
      margin-left: 100px;
      
      background-color: #f00;
  }

会自动计算出 margin-right;

  .wrapper{
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      width: auto;
      height: 100px;
      margin: auto;
      margin-left: 100px;
      margin-right: 300px;
      
      background-color: #f00;
  }

会扣除margin-left 和 margin-right ,自动算出 width

  .wrapper{
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      width: auto;
      height: 100px;
      margin: auto;
      margin-left: 100px;
      margin-right: 300px;
      border: 1px solid black;
      border-left: 50px solid black;
      border-right: 80px solid black;
      padding-left: 50px;
      padding-right: 80px;
      background-color: #f00;
      background-clip: content-box;
  }

如果有border,padding, 则扣除之后,计算width


image.png

其实我对css没多少兴趣,不太喜欢这个,
感觉这东西易学难精,
关键是,看到源码什么的可能性比较少,
我不知其然, 很多东西都感觉是瞎猫碰死耗子.

你麻痹,本来学编程, 以为能掌握信息操作的本领,能节省大量时间精力,
没想到,是我做过的事情中最耗费时间的,
光写这么一篇笔记,就能耗费我两三个小时,你敢信?
我感觉时间流逝速度比之前快太多了,
一天很快就过去, 声明被缩短了.

解决的办法应该是, 学会更快的把思路展示出来, 有没有比敲字更快的文字输出方式?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,686评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,078评论 1 45
  • 不会用代码框,所以看着有些乱套,,,,html部分 <!DOCTYPE html> 迅雷看看 ...
    这就是个帅气的名字阅读 5,480评论 0 0
  • 很久之前,就有“享说”的雏形,但一直因为某些原因,更多是因为自己的懒惰和各种繁琐的事情,始终没有开始动手,在考虑着...
    Seilin阅读 1,891评论 5 3
  • 小的时候爸爸就比较崇尚作家。从爸爸嘴里说出作家这个词很有意思,他会说zuo佐家,故意把作家的作读成三声。所以很小我...
    清清世界阅读 1,033评论 0 1