【问题标题】:CSS: Relative position in absolute position in a relatively positioned divCSS:相对定位的div中绝对位置的相对位置
【发布时间】:2015-05-31 02:08:00
【问题描述】:

我有一个外部“容器”div,我想在其中放置内部 div,而内部 div 又将包含垂直和水平居中的文本(以“p”元素的形式)。它看起来像这样:

蓝色部分:外容器部分

绿色:“内部 div”,如您所见,其黑色文本实际上是垂直和水平居中的。

我通过相对定位实现了这一点:

<div class="container" id="c">
        <div id="node1" class="node" style="position: relative; top: 50px; left: 50px;"><p class="numtext" id="node1text">1</p></div>
        <div id="node2" class="node" style="position: relative; top: 100px; left: 100px;"><p class="numtext" id="node2text">2</p></div>
        <div id="node3" class="node" style="position: relative; top: 150px; left: 150px;"><p class="numtext" id="node3text">3</p></div>
</div>

我使用的 CSS 的相关部分如下:

div.container {
    margin-left: auto;
    margin-right: auto;
    position:relative;
    overflow-y: auto;
}

div.node {
    border-radius: 50%;
    text-align: center;
}

p.numtext {
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
    line-height:100%; /* This vertically centers the text in the parent div, found on stackoverflow */
}

到目前为止,一切都很好。但是,问题是如果我去掉中间的“2”节点,“3”节点的位置也会改变! (同样,如果我删除“1”节点,其他 2 的位置会发生变化。)它会稍微向上和向左移动,但不会一直移动到 2 之前的位置。见图片:

然而,代码中的其他所有内容都完全相同!所以我认为相对定位与它有关,我是对的;如果我改变了它(例如,div 行现在看起来像:)

<div id="node1" class="node" style="position: absolute; top: 50px; left: 50px;"><p class="numtext" id="node1text">1</p></div>

我得到了一些非常不同的外观:

实际上,这看起来更接近代码“应该”输出的内容,因为节点之间的距离很小,看起来更像 50 像素(作为参考,每个节点的大小为 75.6 像素)。但是,很明显,文本的垂直对齐方式是不正常的,并且有充分的理由 - 节点 [green] 现在绝对定位,因此“相对”定位的文本现在相对于容器定位 [浅蓝色],而不是节点(我认为我没有正确解释,但我指的是类似于这种情况,我认为:Absolute positioning inside absolute position)。

所以,我认为我需要保持所有三个元素(外部 div、内部 div 和内部文本)相对定位,但我不知道如何使内部 div 的位置相互独立。有什么想法吗?

我也愿意放弃相对定位的想法,绝对定位内部 div 和文本,但我仍然需要文本在绿色圆圈内居中(但请注意,圆圈也可以改变大小[以及文本连同它们],并且文本可能有多个数字,也许我以后甚至可能想切换到不同的字体,所以确保垂直对齐似乎是一个困难的问题。

【问题讨论】:

  • 这段代码太乱了。你为什么要定位文本?它是圆的子...不需要定位。您需要做的就是将 p 的 line-height 设置为圆的高度和 text-align center 的高度。这将解决数字问题。
  • @SeanStopnik 你的意思是 "line-height="100%" text-align="center" 吗?我刚试过(删除

    中的所有其他 CSS),它没有用- 数字仍然没有在圆圈内垂直对齐。我还尝试将 line-height 设置为 75.6px(因为这是圆圈的高度)。它不起作用。

  • 无法编辑我之前的评论,但实际上这些给出的结果与我上面的场景完全相同 - 如果圆圈相对定位,文本看起来很好,但删除一个圆圈后,下面的圆圈会移动.如果圆圈是绝对定位的,则文本水平居中,但文本顶部位于圆圈底部。
  • 无法重现您的第一个结果:.node 默认情况下将占据父级的整个宽度(它们是 div),但事实并非如此。请提供一个小提琴
  • 它略微向上和向左移动,但不是一直到 2 之前的位置 => 可能是由于 空格 如果你的 @ 987654330@ 元素是inline-block。请参阅我的代码笔 codepen.io/anon/pen/xGgPMm,它应该会向您显示问题(每对 .node 之间有 4px 的空白)

标签: javascript html css


【解决方案1】:

如果我错了,请纠正我,但这不是你想要做的吗?

http://jsfiddle.net/h2h6qro4/

.container {
    position: relative;
    width: 300px; /* for demo only */
    margin: 0 auto;
}

.circle {
    position: absolute;
    width: 60px; /* whatever your circle size */
    line-height: 60px; /* whatever your circle size */
    text-align: center;
    border-radius: 50%;
    background: #a0f4b6;
}

.circle-1 {
    top: 50px;
    left: 50px;
}

.circle-2 {
    top: 100px;
    left: 100px;
}

.circle-3 {
    top: 150px;
    left: 150px;
}

【讨论】:

  • 是的!我现在明白了 - 当我设置

    行高时这不起作用,所以我只是删除了

    并设置了 div 的行高而不是 div 的高度。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多