如何在绝对定位的父div内部垂直居中div

2024-03-09

我试图将蓝色容器放在粉色容器中间,但是似乎vertical-align: middle;在这种情况下不起作用。

<div style="display: block; position: absolute; left: 50px; top: 50px;">
    <div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
        <div style="background-color: lightblue;">test</div>
    </div>
</div>

Result:

期待:

请建议我如何才能实现这一目标。

Jsfiddle http://jsfiddle.net/kqmp1z9m/


首先请注意vertical-align仅适用于表格单元格和内联级元素。

有几种方法可以实现垂直对齐,这些方法可能满足也可能不满足您的需求。不过我会告诉你two https://stackoverflow.com/questions/8508275/how-to-center-a-position-absolute-element/25776315#25776315 methods https://stackoverflow.com/questions/18516317/vertically-align-an-image-inside-a-div-with-responsive-height/18516474#18516474从我的最爱:

1. 使用transform and top

.valign {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
    /* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
    <div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
        <div class="valign" style="background-color: lightblue;">test</div>
    </div>
</div>

关键点是百分比值top是相对于height包含块的;虽然百分比值transforms 相对于盒子本身(边界框)的大小。

如果你经历过字体渲染问题 http://www.useragentman.com/blog/2014/05/04/fixing-typography-inside-of-2-d-css-transforms/(字体模糊),修复方法是添加perspective(1px) to the transform声明所以它变成:

transform: perspective(1px) translateY(-50%);

值得注意的是CSStransform IE9+支持 https://developer.mozilla.org/en-US/docs/Web/CSS/transform#Browser_compatibility.

2. 使用inline-block(伪)元素

在这个方法中,我们有两个兄弟姐妹inline-block元素在中间垂直对齐vertical-align: middle宣言。

其中一个有一个height of 100%其父元素的一个,另一个是我们想要的元素,我们希望将其对齐在中间。

.parent {
    text-align: left;
    position: absolute;
    height: 56px;
    background-color: pink;
    white-space: nowrap;
    font-size: 0; /* remove the gap between inline level elements */
}

.dummy-child { height: 100%; }

.valign {
    font-size: 16px; /* re-set the font-size */
}

.dummy-child, .valign {
    display: inline-block;
    vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
    <div class="parent">
        <div class="dummy-child"></div>
        <div class="valign" style="background-color: lightblue;">test</div>
    </div>
</div>

最后,我们应该使用其中之一消除行内元素之间间隙的可用方法 https://stackoverflow.com/questions/5078239/how-to-remove-the-space-between-inline-block-elements.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在绝对定位的父div内部垂直居中div 的相关文章

随机推荐

  • Mercurial 樱桃采摘更改提交

    比如说 我对代码做了很多更改 并且只需要提交其中的一些更改 Mercurial 有没有办法做到这一点 我知道darcs有这样一个功能 I know hg transplant可以在分支之间执行此操作 但我需要类似的东西来在当前分支中提交代码
  • jQuery Ajax 调用 - 成功时设置变量值[重复]

    这个问题在这里已经有答案了 我正在编写一个应用程序 用于修改服务器中缓存对象的数据 这些修改是通过 ajax 调用执行的 该调用基本上更新该对象的属性 当用户完成工作时 我有一个基本的 保存更改 按钮 允许他们保存数据并刷新缓存的对象 为了
  • Indy HTTP:读取 403 响应内容

    我在使用 Indy HTTP 在 Delphi 中 和 Google Contacts API 时遇到问题 请参阅下页 客户端登录响应 部分 http code google com apis accounts docs AuthForIn
  • 尝试运行 Selenium Webdriver (WebdriverJS) 的示例测试时出现错误

    我正在尝试在文件中运行示例测试google search test js位于 node modules selenium webdriver example 我正在使用 WebdriverJS 并且只安装了selenium webdrive
  • 使用 java 解析器删除 XML 节点

    在下面的示例 XML 中 如果 E 13 如何使用 java 解析器删除整个 B 节点
  • 在 NSLayoutManager 中使用boundingRectForGlyphRange计算字边界时如何消除前导空格

    我正在 iOS 上将多行字符串分解为单词边界 我的解决方案以 NSLayoutManager 的boundingRectForGlyphRange 方法为中心 它几乎可以工作 只是每个单词的矩形向右偏移了几个像素 换句话说 NSLayout
  • 单用户的 Git 工作流程

    我是一家开发少量桌面应用程序和网站的单身商店 几个月前我开始使用 GIT 进行版本控制 我对它相当满意 但我的使用非常笨拙 我想知道单个用户的工作流程应该是什么 现在 我的每个项目文件夹中都有一个 git 文件夹 我每隔一段时间就提交一次更
  • React 中没有构造函数的初始化状态

    import React Component from react class Counter extends Component state value 0 increment gt this setState prevState gt
  • 将网页抓取的结果存储到数据库中

    我已经使用 python 编写了一段用于网页抓取的代码 该代码使用 selenium 从亚马逊提取 Macbook 的数据 现在我想将这些值存储在 Excel 或 MySql 中 特定产品行中有各种 html css 类和一个包含产品所有参
  • 用户'User'@'%'和'User'@'localhost'不一样吗?

    我根据第一个命令创建了一个用户 但无法通过本地主机 linux 登录 这个链接mysqldoc http forums mysql com read php 101 304823 305463 msg 305463指示我需要创建第二个同名用
  • Ubuntu 10 Ruby 1.9 Rails 3:没有这样的文件或目录

    我已经为此苦苦挣扎有一段时间了 我在装有 ruby 的开发机器上运行 Ubuntu 101 8在它上面 我removed I 安装了红宝石1 9 3和rails3使用RVM和这个教程http ryanbigg com 2010 12 ubu
  • Eclipse Luna 快速搜索命令

    The Quick Search Command seems to have disappeared in Luna In Keplar this was bound by default to Ctrl Shift L In Luna C
  • 如何增加在 Windows 7 下运行的 Apache 的堆栈大小?

    我认为在 Windows 7 下的 Apache 服务器上运行 cakePHP 应用程序时出现堆栈溢出 此问题在 Windows 平台上更常见 因为 Apache 的默认堆栈大小较小 Windows 上的默认堆栈大小为 1 MB 而 Uni
  • 检查标记是否在圆半径内

    我想知道给定的标记是否在圆半径内 在 javascript 中 我可以做类似的事情 google maps geometry spherical computeDistanceBetween latLngCircleCenter latLn
  • Mercurial 克隆问题

    我正在使用 Mercurial 并且在本地克隆了一个存储库hg push 我得到这个 abort cannot lock static http repository 这是什么意思 为什么它不能锁定 static http 存储库 文件夹权
  • 从 pandas 数据框的列或行获取列表?

    我有一个数据框df从 Excel 文档导入 如下所示 cluster load date budget actual fixed price A 1 1 2014 1000 4000 Y A 2 1 2014 12000 10000 Y A
  • 为什么编译器这么蠢?

    我总是想知道为什么编译器无法弄清楚人眼显而易见的简单事物 他们做了很多简单的优化 但从来没有做过哪怕一点点复杂的优化 例如 此代码在我的计算机上大约需要 6 秒才能打印值零 使用 java 1 6 int x 0 for int i 0 i
  • mysql中如何将varbinary转换为char/varchar

    我有一个 varbinary 字段 它已经被填充了 现在我如何将 varbinary 转换为 varchar 以便我可以将字段中的数据用于其他目的 我使用MySQL版本5 10 迟到的答复 您可以使用 CAST 或 CONVERT 因此 C
  • 如何创建一个字母滚动条显示android中的所有字母?

    My purpose is to obtain something like that 但我能找到的唯一例子是这样的列表 android 列表视图快速滚动与字母表就像 iPhone 联系人活动 https stackoverflow com
  • 如何在绝对定位的父div内部垂直居中div

    我试图将蓝色容器放在粉色容器中间 但是似乎vertical align middle 在这种情况下不起作用 div style display block div style text align left height 56px back