position:relative 配合top-50%; 无效

id为son的元素设置position:relative后,left:-50%生效,top:-50%没有效果。为什么??
代码如下

<!doctype html>    
<html lang="zh-CN">
    <head>
        <meta charset="utf-8"/>
        <style type="text/css">
            #father{
                width:400px;
                height:400px;
                border:1px solid red;
                float:left;
                position:relative;
            }
            #trap{
                border:1px solid yellow;
                position:absolute;
                top:50%;
                left:50%;
            }
            #son{
                width:100px;
                height:100px;
                position:relative;
                top:-50%;
                left:-50%;
                background:blue;
            }
        </style>
    </head>
    <body>
        <div id="father">
            <div id="trap">
                <div id="son"></div>
            </div>
        </div>
    </body>
</html>
阅读 15.8k
7 个回答

这个我真的得回答下,之前我也遇到过类似的疑问,不啰嗦,直接上证据:
width的值是百分比的情况:
clipboard.png
height的值是百分比的情况:
clipboard.png
从上面两个解释来看,也就是说子元素设置的width或者height是百分比的值跟父元素的值有关,但是呢,设置width为百分比,不需要父元素明确设置width,但是子元素设置height百分比,父元素必须明确设置高度,原因看我上的两张图片解释。回过来说你的情况,left百分比值跟父元素宽有关,top跟父元素高有关,父元素width不用明确设置,但是height需要,因为你父元素没有设置高度,所以top没有起作用,但是left其作用,是因为父元素width不是强制性的,所以其中一种解决办法就是:给#trap元素设置高度height: 100px就生效啦

因为父元素没有设置高度

将父元素#trap设置宽度高度,然后将子元素#son的relative改成absolute

css:

           #father{
                width:400px;
                height:400px;
                border:1px solid red;
                float:left;
                position:relative;
            }
            #trap{
                border: 1px solid yellow;
                position: absolute;
                top: 50%;
                left: 50%;
                width: 100px;
                height: 100px;
            }
            #son{
                width: 100px;
                height: 100px;
                position: absolute;
                top: -50%;
                left: -50%;
                background: blue;
            }

trap没有高 不想用absolute就用margin-top=-50%;

没有对tarp设置高度,relative的top和left的百分比是相对于父级元素的,你没有对tarp设置高度,自然son的top值就为0了,也就没有效果了

水平垂直居中如果不考虑兼容可以考虑一下下面的方式。
`
div{

display:flex
justify-content:center
align-items:center

}
`

position:relative的元素使用的top:100px意思是相对于自己之前位置偏移的位移量,而如果采用百分比的话,采用的则是用父元素高度来计算的

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