我试图将text
div置于具有box
的{{1}} div之上。我尝试在文本div上使用inline block
。但是当浏览器屏幕缩小或扩展时,position: absolute
div的定位会变得混乱。如何解决这个问题?
text

.mainDiv {
margin: auto;
width: 100%;
padding: 10px;
left: 300px;
text-align: center;
}
.box {
background-color: red;
width: 100px;
height: 100px;
display: inline-block;
}
.text {
background-color: blue;
position: absolute;
top: 70%;
left: 45%;
}

答案 0 :(得分:2)
我假设您使用内联块将.box
置于.main-div
内。从技术上讲,使用您当前的html结构,您无法将.text
元素置于.box
元素的中心位置,但您可以将其置于.main-div
的中心位置,这与您的基本相同示例
我首先将position: relative
添加到.main-div
。绝对定位的元素基于其最近的具有定位上下文的祖先而定位。设置此方法的最简单方法是添加position: relative
。
然后使用.text
元素,您可以调整为:
.text {
background-color: blue;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50% );
}
这是有效的,因为top
和left
将顶部和左侧元素放置在其父级的顶部和左侧。因此,.text
的顶部将在.main-div
的50%开始,同样在左侧开始。这会使你的文字太远而且偏向左边。
transform: translate
值的工作方式不同 - 它们基于元素本身的大小。因此-50%
会将元素移回其宽度或高度的一半。通过在宽度和高度上设置它,我们移动.text
,使其顶部和左边不是50%,而是它的中心位于50%。
.mainDiv {
position: relative; /* added to make .text align relative to this, not the document */
margin: auto;
width: 100%;
padding: 10px;
/* left: 300px; (I removed this for demo purposes, but if you need it you can add it back in) */
text-align: center;
}
.box {
background-color: red;
width: 100px;
height: 100px;
display: inline-block;
}
.text {
background-color: blue;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50% ); /*pull the text left and up 50% of the text's size*/
}

<div class="mainDiv">
<div class="box"></div>
<div class="text">text</div>
</div>
&#13;
答案 1 :(得分:0)
文本的标记应首先写在框中。然后,您可以尝试使用block
代替inline-block
,然后将文字宽度设置为100%,显示block
和'margin:0 auto'。另外,如果可以的话,可以考虑使用适当的语义标签而不是div。此外,我怀疑top
和left
规则导致文本无法正确对齐。您不再需要position:absolute
。
答案 2 :(得分:0)
如果您愿意,可以将蓝色div
设为红色div
的孩子,这样蓝色div
将始终相对于红色div
。我还将position:relative
添加到红色div
,并将transform:translate
添加到蓝色div
。
如果我没弄错的话,这也是反应灵敏的,所以请尝试缩小浏览器。
.mainDiv {
margin: auto;
width: 100%;
padding: 10px;
left: 300px;
text-align: center;
}
.box {
background-color: red;
width: 100px;
height: 100px;
display: inline-block;
position:relative;
}
.text {
background-color: blue;
position: absolute;
left: 50%;
transform:translate(-50%, -100%);
}
<div class="mainDiv">
<div class="box">
<div class="text">text</div>
</div>
</div>
答案 3 :(得分:0)
.mainDiv {
text-align: center;
}
.box {
background-color: red;
width: 100px;
height: 100px;
display: inline-block;
margin-top: 19px;
}
.text {
background-color: blue;
position: absolute;
margin: -19px 0 0 36px;
}
<div class="mainDiv">
<div class="box">
<div class="text">text</div>
</div>
</div>