当前位置: 首页 > 面试题库 >

将div垂直居中放置在另一个div中

太叔超英
2023-03-14
问题内容

我想将添加到另一个div内的div居中。

<div id="outerDiv">
    <div id="innerDiv">
    </div>
</div>

这是我当前正在使用的CSS。

    #outerDiv{
        width: 500px;
        height: 500px;
        position:relative;
    }

    #innerDiv{
        width: 284px;
        height: 290px;
        position:absolute;
        top: 50%;
        left:50%;
        margin-top: -147px;
        margin-left: -144px;
    }

如您所见,我现在使用的方法取决于width和height的值innerDiv。如果width / height发生变化,我将不得不修改margin- topand值。margin-left是否有任何通用解决方案可用于innerDiv始终将居中对齐它的大小?

我发现使用margin:auto可以将innerDiv水平分配到中间,但是垂直分配中间呢?


问题答案:

tl; dr

垂直对齐中间作品,但是您将不得不table-cell在父元素和inline-block子元素上使用。

此解决方案无法在IE6和7中使用。
您的解决方案是更安全的方法。
但是由于您使用CSS3和HTML5标记了问题,所以我一直认为您不介意使用现代解决方案。

经典解决方案(表布局)

这是我最初的答案。它仍然可以正常工作,并且是获得最广泛支持的解决方案。表布局将影响您的渲染性能,因此我建议您使用一种更现代的解决方案。

经过测试:

  • FF3.5 +
  • FF4 +
  • Safari 5+
  • Chrome 11+
  • IE9 +

HTML

<div class="cn"><div class="inner">your content</div></div>

CSS

.cn {
  display: table-cell;
  width: 500px;
  height: 500px;
  vertical-align: middle;
  text-align: center;
}

.inner {
  display: inline-block;
  width: 200px; height: 200px;
}

现代解决方案(转换)

由于现在已经很好地支持转换,因此有一种更简单的方法。

CSS

.cn {
  position: relative;
  width: 500px;
  height: 500px;
}

.inner {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%,-50%);
  width: 200px;
  height: 200px;
}

♥我最喜欢的现代解决方案(flexbox)

我现在开始越来越多地使用flexbox,它也得到了很好的支持,这是迄今为止最简单的方法。

CSS

.cn {
  display: flex;
  justify-content: center;
  align-items: center; 
}


 类似资料:
  • 问题内容: 是否可以将div垂直居中放置在%高度div中? 问题答案: 在这里以及在整个Internet上,已经被要求足够多次了。快速搜索将为您带来大量结果。无论如何,我这样做的首选方式是使用和。有关示例,请参见此页面。(请注意,这不适用于IE6。)

  • 问题内容: 我想将居中。但是,事实并非如此。我只想找出原因以及如何使其居中。 问题答案: 您需要设置容器的宽度。(不起作用) MDN的CSS参考说明了这一切。

  • 问题内容: 是否可以将 div 垂直居中于%height div中 ? 问题答案: 在这里以及整个Internet上,已经被要求足够多次了。 快速搜索将为您带来大量结果。无论如何,我这样做的首选方式是使用和。

  • 问题内容: 我正在尝试制作一个小的用户名和密码输入框。 我想问一下,如何垂直对齐div? 我所拥有的是: 如何使ID为Username和Form的div垂直对齐中心?我试着把: 在CSS中用于ID为Login的div,但似乎不起作用。任何帮助,将不胜感激。 问题答案: 现代浏览器中最好的方法是使用flexbox: 某些浏览器将需要供应商前缀。对于不支持Flexbox的较旧的浏览器(例如IE9及更低

  • 问题内容: 我有这样的标记: div高于img: 我需要将图像放置在div的中间(在其上下具有相同的空白)。 我试过了,它不起作用: 问题答案: 如果您的图像纯粹是装饰性的,那么将其用作背景图像可能是一种更语义化的解决方案。然后您可以指定背景的位置 如果它不是装饰性的并且构成有价值的信息,则img标签是合理的。在这种情况下,您需要使用以下属性设置包含div的样式:

  • 问题内容: 有没有办法在 垂直和水平方向上输入一个DIV, 但这很重要, 当窗口小于内容时,内容将不会被剪切 。div必须具有背景色,宽度和高度。 我总是将div的中心定位为绝对位置和负边距,如提供的示例所示。但是它有一个问题,那就是削减内容的顶部。有没有一种方法可以将div.content居中而不会出现此问题? CSS: HTML: 我的问题不是重复的“如何在水平和垂直方向上居中放置元素?”1-