为何position: absolute对.profession元素不生效?
嘿,我来帮你捋捋这个问题!你遇到的情况其实是对position: absolute的工作机制有点小误解,咱们一步步拆解清楚:
首先,position: absolute的元素确实会脱离正常文档流,但如果不给它设置top/left/right/bottom这些偏移属性,它并不会自动跑到页面左上角,而是会停留在它原本在文档流里的位置(只是不再占据空间而已)。
看你的代码结构,.profession这个span原本紧跟在.name这个h1标签后面:
<h1 class="name">Denis <br> Novik</h1> <span class="profession"> UX | UI Designer <br>24 years old, Minsk </span>
而你给.name设置了margin-left:251.04px,这就导致.profession在文档流里的初始位置是.name的下方偏右区域。当你给它加上position: absolute但没加偏移属性时,它就停在了这个初始位置,看起来像是在页面中间,这才让你误以为absolute没生效。
那怎么解决呢?很简单,给.profession加上明确的偏移属性就行。比如你想让它跑到页面左上角,就修改CSS:
.profession { font-family:'Gilroy-Medium'; font-size:18px; line-height:22px; position:absolute; top: 0; /* 距离视口顶部0px */ left: 0; /* 距离视口左侧0px */ }
这样它就会相对于初始包含块(也就是整个视口的左上角)定位了。
另外补充个小知识点:如果未来你想让它相对于某个父元素定位,只需要给那个父元素设置position: relative(或者其他非static的定位值),这时候.profession的偏移就会以这个父元素为基准,而不是整个页面。
至于你提到的margin: 0 0没用的问题:因为.profession在文档流里时,会受到前面.name的margin影响,而且span是行内元素,默认布局规则也会让它的位置受周围块级元素限制,所以光靠margin没法让它跑到左上角,必须用定位的偏移属性来精准控制。
备注:内容来源于stack exchange,提问作者thunderman

