关于CSS absolute与relative不得不说的话

心得技巧 2025-08-04

写在开篇:

absolute说:relative,我这辈子都不想看见你!

为什么呢?它们明明那么相亲相爱,形影不离,这之中到底发生了什么不为人知的故事,竟然让absolute如此讨厌relative?

要想找到问题的答案,请跟我来。。。

relative对absolute的限制之一

absolute,拥有top、right、bottom、left四项技能,从此天高任鸟飞,海阔任鱼跃;本来想去哪儿就去哪儿,自由自在,生活是那么地美好。

直到有一天,在出去玩的路上,遇到一个relative,跳出来大喊一声;此山是我开,此树是我栽,要从此路过,留下买路财!

然后,我们可爱哒absolute小朋友就乖乖地屈服了。

但是无良的relative收到好处居然还不放行,死活不让absolute过去。。。额,这个故事就是这样子的。。。相信大家都懂的。。。

额,还是写个demo吧,看这里:

XML/HTML Code复制内容到剪贴板
  1. !DOCTYPEhtml
  2. html
  3. head
  4. metacharset=utf-8
  5. titlerelative对absolute的限制1/title
  6. style
  7. .box{
  8. width:500px;
  9. height:250px;
  10. background-color:pink;
  11. margin:30pxauto50px;
  12. line-height:250px;
  13. text-align:center;
  14. }
  15. .boxp{
  16. display:inline-block;
  17. vertical-align:middle;
  18. width:300px;
  19. font-size:16px;
  20. line-height:1.5;
  21. text-align:left;
  22. }
  23. .box2p{
  24. margin-left:30px;
  25. }
  26. .boximg{
  27. position:absolute;
  28. left:0;
  29. top:0;
  30. }
  31. .box2{
  32. position:relative;
  33. }
  34. /style
  35. /head
  36. body
  37. divclass=boxbox1
  38. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  39. p今天,absolute小朋友出去玩啦,开启left:0;top:0;这个组合技能,一切顺利,到达了天边。/p
  40. /div
  41. divclass=boxbox2
  42. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  43. p今天,absolute小朋友又出去玩啦,同样开启left:0;top:0;这个组合技能,但是天公不作美,出门就碰到relative这个坏家伙,于是止步于relative的地方。/p
  44. /div
  45. /body
  46. /html

relative对absolute的限制之二

上回说到,absolute小朋友用top、right、bottom、left四项技能出去玩的时候被relative半路给截住了。

这次absolute小伙伴吸取了教训,不用那四项技能了,用margin负值技能,一样能跑出去玩。

很好,虽然房子周围有overflow:hidden的魔法结界,但是我们的absolute小朋友直接无视之,从容通过,大家鼓掌!!!

但是,但是,但是那个无良的relative又来啦。

还好,还好,还好这次的是margin负值技能,absolute小朋友成功突破了relative的限制,跑出去啦。。。

额,好像有什么不对。。。

我跑出去那部分身体怎么不见啦?

demo在这里:

XML/HTML Code复制内容到剪贴板
  1. !DOCTYPEhtml
  2. html
  3. head
  4. metacharset=utf-8
  5. titlerelative对absolute的限制2/title
  6. style
  7. .box{
  8. width:500px;
  9. height:250px;
  10. background-color:pink;
  11. margin:50pxauto50px;
  12. overflow:hidden;
  13. }
  14. .boxp{
  15. margin:20px30px20px120px;
  16. text-align:left;
  17. }
  18. .boximg{
  19. position:absolute;
  20. margin-left:-30px;
  21. margin-top:-45px;
  22. }
  23. .box2{
  24. position:relative;
  25. }
  26. /style
  27. /head
  28. body
  29. divclass=boxbox1
  30. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  31. p今天,absolute小朋友出去玩啦。/p
  32. p鉴于上次用top、right、bottom、left技能的时候遇到了relative,导致出不去的尴尬,今天用的是margin负值技能。/p
  33. p虽然房子周围设置了overflow:hidden,但这位强大的小朋友依然跑出去啦。/p
  34. /div
  35. divclass=boxbox2
  36. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  37. p今天,absolute小朋友又出去玩啦,同样用的是margin负值技能。/p
  38. p房子周围也是设置了overflow:hidden属性的,但是这位强大的小朋友依然跑出去啦。/p
  39. p咦,什么情况,我房子外边的那部分身体呢?/p
  40. p我擦嘞,relative你什么时候来的?/p
  41. /div
  42. /body
  43. /html

经过这两次事件,absolute小朋友就开始讨厌relative小伙伴了,用一句耳熟能详的话来说就是,我再也不想看见你啦!

请给absolute自由

absolute小朋友天生就会飞,使用top、right、bottom、left想去哪儿就去哪儿。

absolute小朋友还会margin负值精确定位,想怎么玩就怎么玩。

absolute小朋友那么可爱,不信你看:

这么Q,这么萌,为什么要被限制住呢,宝宝向往天空和自由啊!啊!啊!啊!啊!

absolute说:relative,我再也不想看见你了!

但是,理想很丰满,现实很骨感。。。

absolute是不可能得偿所愿的,在定位的时候,或多或少都会使用relative来限制absolute,毕竟absolute实在太会飞了,不限制不行的啊。

不过,限制归限制,这只是relative和absolute两个人的恩怨,千万不要影响到其它花花草草。

所以,我们在使用relative+absolute定位的时候,要遵循relative影响最小化原则

来个例子,如下:

XML/HTML Code复制内容到剪贴板
  1. !DOCTYPEhtml
  2. html
  3. head
  4. metacharset=utf-8
  5. titlerelative影响最小化/title
  6. style
  7. *{
  8. margin:0;
  9. }
  10. .wraper{
  11. width:800px;
  12. margin:50pxauto;
  13. background-color:#ccc;
  14. border:3pxsolidgreen;
  15. }
  16. .box{
  17. width:500px;
  18. margin:50pxauto;
  19. background-color:orange;
  20. border:3pxsolidblack;
  21. }
  22. img{
  23. border:1pxsolidblue;
  24. margin:10px;
  25. }
  26. p{
  27. padding-left:10px;
  28. margin:10px;
  29. }
  30. .absolute{
  31. position:absolute;
  32. }
  33. .box2.absolute{
  34. margin-left:-3px;
  35. margin-top:-3px;
  36. }
  37. .box3.absolute{
  38. margin-top:-3px;
  39. margin-left:450px;
  40. }
  41. .box4.relative{
  42. position:relative;
  43. border:2pxsolidred;
  44. }
  45. .box4.absolute{
  46. top:-10px;
  47. right:-10px;
  48. }
  49. /style
  50. /head
  51. body
  52. divclass=wraper
  53. divclass=boxbox1
  54. imgsrc=http://image.tia**njimed*ia.com/uploadImages/2012/237/4134F4528419.jpgalt=Apicturestyle=width:50px;height:30px/
  55. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  56. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  57. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  58. p这是没有任何定位,正常流的样子。/p
  59. p后续。。。/p
  60. /div
  61. /div!--关闭wraper--
  62. divclass=wraper
  63. divclass=boxbox2
  64. imgclass=absolutesrc=http://image.tia**njimed*ia.com/uploadImages/2012/237/4134F4528419.jpgalt=Apicturestyle=width:50px;height:30px/
  65. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  66. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  67. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  68. p如果我们要将图像定位到黑色边框的左上角,应该怎么办?/p
  69. p很简单,绝对定位,不加任何偏移量,用margin微调,完成!/p
  70. /div
  71. /div!--关闭wraper--
  72. divclass=wraper
  73. divclass=boxbox3
  74. imgclass=absolutesrc=http://image.tia**njimed*ia.com/uploadImages/2012/237/4134F4528419.jpgalt=Apicturestyle=width:50px;height:30px/
  75. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  76. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  77. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  78. p如果我们要将图像定位到黑色边框的右上角,应该怎么办?/p
  79. p第一种方法,像刚才那样,直接绝对定位,再用margin调整;
  80. 这种方法需要消耗一点脑细胞,算一算到底应该位移多少像素。/p
  81. /div
  82. /div!--关闭wraper--
  83. divclass=wraper
  84. divclass=boxbox4
  85. divclass=relative
  86. imgclass=absolutesrc=http://image.tia**njimed*ia.com/uploadImages/2012/237/4134F4528419.jpgalt=Apicturestyle=width:50px;height:30px/
  87. /div
  88. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  89. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  90. imgsrc=http://imgsrc.*ba**idu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpgalt=Apicturestyle=width:100px;height:150px/
  91. p第二种方法,就是大家喜闻乐见的relative+absolute定位啦。/p
  92. p不过,看在absolute那么讨厌relative的面子上,relative就只欺负它一个就好了,千千万万不要影响到其它花花草草。/p
  93. p具体来说,给这个需要定位的图像外加一层div,设置relative,让这个relative只影响需要绝对定位的元素。/p
  94. prelative影响最小化!/p
  95. /div
  96. /div!--关闭wraper--
  97. /body
  98. /html