无法在屏幕上居中反应组件

时间:2020-05-14 05:56:21

标签: javascript html css reactjs

我有一个模式窗口,在用户单击时打开。我正在尝试将其居中并使用标准CSS代码:

.layout: {
    position: "absolute";
    left: "50%";
    top: "50%";
}

但是它使元素居于其父对象的中心,我也不知道为什么,因为父对象的位置是静态的(因此绝对值应该从屏幕边缘算起,而不是从父屏幕的边缘算起)。如何解决? 这是模态窗口的结构:

<div class="layout">
    <div class="window">
        <!--some code --!>
    </div>
</div>

3 个答案:

答案 0 :(得分:3)

如果要在整个屏幕上居中,则固定位置将是您的选择,并且不要使用硬编码像素来居中,而是使用Transform属性,就像这样

.layout {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%); 
}

如果要在某个部分或div中居中,请使用绝对位置

.layout {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%); 
}

但是在绝对条件下,将position: relative赋予其父项。

如果您将使用transform: translate(-50%, -50%);,则无需担心项目的高度或宽度(以硬编码像素为单位),如果元素的高度和宽度会增加或减少,则项目的对齐方式将会变形

在固定位置的情况下检查以下示例,

.layout {
 	position: fixed;
 	top: 50%;
 	left: 50%;
 	transform: translate(-50%, -50%); 
}
<div class="layout">
    <div class="window">
        <!--some code --!>
        ABC
    </div>
</div>

答案 1 :(得分:1)

在这种情况下,如果使用绝对或固定定位,则需要设置元素居中宽度的一半宽度和高度的负边距。如果您想将元素设置为与整个屏幕相关,则最好使用“固定”位置

.element {
    width: 300px;
    height: 300px;
    position: fixed;
    top: 50%;
    left: 50%;
    margin-left: -150px;
    margin-top: -150px;
}

如果您需要更灵活的解决方案,则在不知道弹出窗口的大小的情况下,请使用transform: translate(-50%, -50%);代替空白。

但更好的解决方案是使用flexboxes tr https://alligator.io/css/centering-using-flexbox/

答案 2 :(得分:1)

CSS position: absolute属性相对于最近定位的父节点定位它。如果要相对于视口放置元素,则应使用position: fixed

您可以找到有关此属性here的选项的更多信息。