【问题标题】:Positioning two child divs one centered and other top-right/bottom-right inside another div将两个子 div 定位在另一个 div 中,一个居中,另一个右上角/右下角
【发布时间】:2013-02-28 01:02:34
【问题描述】:

我在容器div 中有两个divs,我试图将一个子div 放置在中心(垂直和水平),另一个放置在容器的左上角/右下角。

两个孩子divs 都只包含文本。我尝试了一些方法,并且能够单独应用这两种样式,即如果两个 divs 中只有一个存在,它将按要求工作。我无法弄清楚如何让两种样式同时应用。我尝试过使用位置和 z-index,但由于我对CSS 的了解有限,我一直无法取得突破。

更新:我希望文本相对于外部容器居中。

HTML

Top left works
<div class="container">
    <div class="topLeft">value</div>
</div>
Center Works
<div class="container">
    <div class="center">label</div>
</div>
Both don't work simulaneously
<div class="container">
    <div class="topLeft">value</div>
    <div class="center">label</div>
</div>

CSS

.container {
    border-width:1px;
    width:200px;
    border-style:solid;
    display:table;
    height:300px;
}
.center {
    text-align:center;
    display:table-cell;
    vertical-align:middle;
    z-index:5;
}
.topLeft {
    text-align:left;
    display:table-cell;
    vertical-align:top;
    z-index:10;
}

演示

http://jsfiddle.net/jugal/E5zGw/

我主要针对 IE8+ 和 chrome,如果需要可以灵活地更改 html 和 css

【问题讨论】:

  • 绝对定位?
  • 您需要定位 2 个内部元素,一个左上角,另一个居中?
  • 是的@MilchePatern 两个位置都相对于外部容器,而不是文本的位置相对于内部 div

标签: css positioning


【解决方案1】:

只需将 .container div position: relative; 然后 position: absolute; 给子 div 以同时定位它们,使用 lefttop 属性:

JsFiddle:http://jsfiddle.net/E5zGw/14

你只需要去掉display: table-cell,因为如果你走这条路就不需要它了。

【讨论】:

  • 谢谢,jsFiddle 中的第三个 div 没有水平居中的标签
  • 是的,/10 小提琴几乎就在那里。只是标签的左上角与 div 的中心对齐。我希望标签的中心与容器的中心对齐。如果我没有得到任何其他东西,我可能会继续这样做。谢谢!!
  • 哈哈谢谢你这么努力,不幸的是字符串的长度可能会有所不同,所以较长的文本看起来有点不合适。我想我可以用 jQuery 来计算出确切的左/右偏移量。
【解决方案2】:

您的单元格的行为类似于&lt;TR&gt; 中的&lt;TD&gt;

只需将您的 DIVS 封装在 TableRow 之类的东西中

http://jsfiddle.net/E5zGw/6/

jsFiddle with background-colors

添加了 CSS:

.table-row {
    display:table-row;
    clear:both;
}

添加了 HTML:

<div class="container">
    <div class="table-row">
        <div class="topLeft">value</div>
    </div>
    <div class="table-row">
        <div class="center">label</div>
    </div>
</div>

女巫一模一样:

<table style="width:100%">
    <tr>
        <td valign="top" align="left">value</td>
    </tr>
    <tr>
        <td valign="middle" align="center">label</td>
    </tr>
</table>

现在,让我试着按照你想要的方式调整它:

jsfiddle.net/E5zGw/15/

<div class="container">
    <div class="topLeft">value</div>
    <div class="center">label</div>
</div>

.topLeft {
    background-color:blue;
    text-align:left;
    display:table-cell;
    vertical-align:top;
    z-index:999;
    position:absolute;
    width:200px;
}

【讨论】:

  • 是的,它是垂直居中的;)
  • 谢谢,jsFiddle 中的第三个 div 没有垂直居中的标签
  • Jugal,它居中并居中 .. 这是 DIV 女巫占总高度的 50% .. 这就是为什么它看起来像在底部.. 为 DIV 添加边框,你会见。
  • 是的,我希望文本居中 w.r.t 到外部容器。对不起,如果问题不清楚,我会更新它
  • 我的问题始终是它是什么。抱歉,如果您没有像其他人那样清楚。