position:fixed 不设置top和left就能相对于父元素定位?

我在看别人的博客的布局的时候,发现了一个有趣的问题,它的侧边栏的定位方式设置的是position:fixed,但是没有设置top和left的值,这个时候它没有相对于视口定位,而是相对于它的父元素定位了,我感到很疑惑,想知道这样的用法对不对?以及为什么position:fixed会这样?
图片描述

博客地址

阅读 11.8k
6 个回答

这个位置叫做 static position,就是脱离文档流之前的位置。没有设置定位时会用这个做默认值。

如果没有设置top left,可以相对父元素使用margin定位,且父元素的padding也是有用的,不同的是,该元素脱离了文档流

<!DOCTYPE html>
<html>
<head>
    <title>哈哈哈哈哈</title>
</head>
<style type="text/css">
    .container {
        width: 300px;
        height: 300px;
        background: blue;
        margin: 50px auto;
    }
    .inner {
        width: 100px;
        height: 100px;
        background: red;
        position: fixed;
        margin: 20px 50px;
    }
    .inner2 {
        width: 150px;
        height: 100px;
        background: yellow;
    }
</style>
<body>

<div class="container">
    <div class="inner">
        1这是什么
    </div>
    <div class="inner2">
        2222sjakxsjka哈哈哈这是什么
    </div>
</div>

</body>
</html>

表现出来是这样的:
图片描述

父级元素有transform属性 且不为none时,position:fixed就不是以可视窗定位了

在没有显示设置top和left值的时候,position:fixed元素的top和left会受到父元素margin和padding的影响。
我们可以看到这个时候$('.sidebar-menu-con').css('top')80px

使用position:fixed的时候,如果没有设置left、top属性的时候,会相对于父级元素进行定位,如果设置了left、top才会相对于窗口进行定位。

绝对定位,在没有设置left,top等属性的时候,会紧跟着父元素的content

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题