html - Flex 项目不在 IE 中居中
问题描述
我试图在两个轴上的页面中心放置一个小框。我让它在 Chrome、Firefox 和 Edge 中运行,但 IE 仍然无法对齐。与我的内容相比,该框似乎卡在了一个虚拟框的右下角,该虚拟框的比例为 200%。
我尝试更改 flex 属性.content
并将其包装到另一个<div />
中,但无济于事。
如何使框在 IE 中居中?
html, body {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.content {
position: absolute;
width: 400px;
height: 200px;
background-color: #333333;
}
<div class="content">
解决方案
问题
flex 容器的绝对定位子元素被从文档的正常流程中取出。
事实上,它们甚至不是弹性项目,因为它们不接受弹性属性。
从规范:
由于它是外流的,因此 flex 容器的绝对定位子级不参与 flex 布局。
这就是为什么您的布局在 Chrome、Firefox 和 Edge 中仍然有效的原因:
继续规范:
弹性容器的绝对定位子项的静态位置是这样确定的,即子项被定位为好像它是弹性容器中唯一的弹性项目,假设子项和弹性容器都是它们使用的固定大小的盒子尺寸。为此,
auto
边距被视为零。
但是,IE11 仅对当前的 flexbox 规范提供了部分支持,这或许可以解释渲染差异。
解决方案
由于您的内容项没有做任何与 flex 相关的事情,因此只需使用标准的非 flex 方法进行水平和垂直居中。
body {
height: 100vh;
position: relative;
}
.content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 400px;
height: 200px;
background-color: #333333;
}
<div class="content">
上面的居中方法在这里解释:
推荐阅读
- ios - 如何在 Apple Pay 中集成订阅支付模式?
- python - 我怎样才能按键中断ctrl+c?
- rest - java.lang.ClassNotFoundException:soap web 服务中的 org.apache.cxf.wsdl.WSDLServiceFactory
- linux - 如何将包含逗号分隔的空格的两个字符串存储到 Bash 中的两个单独文件中
- rubygems - 删除用户时,rails-settings 无法与 rails_admin 一起使用
- node.js - 如果我想通过 server.get("/[url]/:params") 获取 server.get("/[url]/"),我该怎么办?还是有可能..?
- wpf - WPF。如何在文本块字段附近设置复选框?
- javascript - 打印对话框关闭chrome后自动关闭窗口
- php - 将当前日期与 mysql 日期进行比较以更新 mysql 事件状态,并且所有日期都相同,尽管它们不是
- java - 如何在 Spring Boot 应用程序中正确使用 log4j2