【问题标题】:Align inside div to bottom center without creating wrapper div or using margin/left in px将内部 div 与底部中心对齐,而不创建包装 div 或在 px 中使用边距/左侧
【发布时间】:2014-05-09 20:29:12
【问题描述】:

请参阅 JSfiddle: http://jsfiddle.net/76yKL/

有没有办法将 "ruler-mark-short" 和 "ruler-mark-high" div 对齐到它们父母的底部 中心(“ruler-mark-container”)?

由于“ruler-mark-short”和“ruler-mark-high”的宽度可以通过 JavaScript 动态更改,我不能使用 'margin' 或 'left' 以像素为单位。 所以,我必须使用“margin: 0 auto”或“text-align: center”之类的东西,但这些都不起作用。

我在不使用额外的包装容器的情况下将标尺标记与底部和中心对齐。

感谢您的帮助。

来自上述 JSfiddle 的代码:

HTML:

<div class="container">
    <div class="ruler">
        <div class="ruler-mark-container">
            <div class="ruler-mark-high"></div>
        </div>
        <div class="ruler-mark-container">
            <div class="ruler-mark-short"></div>
        </div>
        <div class="ruler-mark-container">
            <div class="ruler-mark-short"></div>
        </div>
        <div class="ruler-mark-container">
            <div class="ruler-mark-short"></div>
        </div>
        <div class="ruler-mark-container">
            <div class="ruler-mark-short"></div>
        </div>
        <div class="ruler-mark-container">
            <div class="ruler-mark-high"></div>
        </div>
    </div>
</div>

CSS:

.container {
    border: 1px solid grey;
    position: absolute;
    width: 700px;
    height: 200px;
}

.ruler {
    border: 1px solid orange;
    position: absolute;
    width: 100%;
    height: 100px;
    bottom: 0px;
}

.ruler-mark-container {
    border: 1px solid blue;
    position: relative;
    width: 30px;
    height: 100%;
    /*display: inline-block;*/
    float: left;
    bottom: 0px;
}

.ruler-mark-high {
    position: absolute;
    border: 1px solid black;
    background-color: grey;
    bottom: 0px;
    width: 3px;
    height: 50px;
}

.ruler-mark-short {
    position: absolute;
    border: 1px solid black;
    background-color: grey;
    bottom: 0px;
    width: 3px;
    height: 25px;
}

【问题讨论】:

  • 喜欢这个? jsfiddle.net/76yKL/1
  • 不完全是,如果您更改“ruler-mark-high”或“ruler-mark-short”的宽度,它将不再居中。看到这个:jsfiddle.net/76yKL/3 但是谢谢。不错的尝试:)
  • 好的,页面加载后宽度可以改变,对吧?
  • 是的,没错。页面加载后可以通过 JavaScript 更改宽度。

标签: html css


【解决方案1】:

text-align:center 不适用于绝对定位的元素。所以删除绝对位置,并使用display:inline-block 格式化它们。

如果没有绝对定位,它们当然不会再处于底部。要解决此问题,请停止浮动容器元素,并将它们显示为 table-cell,并将 vertical-align:bottom 添加到容器和标记中。

http://jsfiddle.net/76yKL/7/

【讨论】:

  • 哇,太好了,谢谢。似乎这是正确的答案,它也适用于 IE8+ 和 Safari 吗?
  • 它应该,至少在理论上:developer.mozilla.org/en-US/docs/Web/CSS/…, caniuse.com/#feat=css-table 是否需要额外的修复,由你测试:-)
  • 它在 IE9、IE10 中确实有效,我将在其他所有内容中进行测试。非常感谢,你帮了很多忙。
【解决方案2】:

你只需要添加以下css:

.ruler-mark-short, .ruler-mark-high{
    left: 50%;
    margin-left: -1.5px;
}

Working Fiddle

更新:(IE9+)

.ruler-mark-short, .ruler-mark-high{
    left: 50%;
    transform: translateX(-50%);
    -webkit-transform: translateX(-50%);
    /* Add other vendor prefixes here */
}

Working Fiddle

【讨论】:

  • 我在问题中已经说过,我不能使用 margin 或 left(或 margin-left),因为我不能保证 div 的宽度是 3px。但是,谢谢,对于左边距没有严格的“px”还有更多的想法吗?
  • @JoeSmith 检查我更新的帖子.. 但在 IE8 中不起作用。
  • 啊,我确实需要 IE8+、Chrome 和 Safari,但那是很棒的尝试。肯定赞成。谢谢,还有更多处理 IE8 的想法吗? :)
  • @JoeSmith 你知道那些条的高度吗?
  • 我知道你在尝试什么,你想以像素为单位使用 top 吗? :) 不,我也不知道身高,抱歉。因此,没有以像素为单位的尺寸,但我确实需要在不知道高度或宽度的情况下将其与底部中心对齐。
猜你喜欢
  • 2011-01-02
  • 2018-04-03
  • 2016-07-27
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2021-05-20
  • 2012-02-13
  • 2014-08-04
相关资源
最近更新 更多